watsonxユースケース！ 簡単 超長スレッドメール要約  ソースコード付き

# 組み込みAI セルフサービス型デジタル共創体験(DSCE)とは

[組み込みAI セルフサービス型デジタル共創体験](https://qiita.com/trtrbohz/items/356a5a4b66624b2c94a2)に記載しております。
現在は STT(speech-to-text)、TTS(test-to-speech)、NLU(natural-language-understanding)等のAIをサーバーに接続しなくても組み込んで利用することが可能となりました。
その情報がこちらの[サイト](https://dsce.ibm.com/)、DSCE([Digital Self-Serve Co-Create Experience](https://dsce.ibm.com/);"組み込みAI セルフサービス型デジタル共創体験"？)にて紹介されております。さらに IBM の新たなAIエンジンである watsonx もユースケースを交えて紹介しております。
ここではそのDSCEの中からwatsonxを使ったアプリの構築方法を説明します。
※個人的な利用は無償ですが、商用利用は有償となります。

# 今回は 「簡単 超長スレッドメール要約」
https://github.com/IBM/dsce-sample-apps/tree/main/email-thread-summarization
企業内のeメールでは時として1つのトピックに関してチーム内のメンバーも参加して長いスレッドになる場合があります。全部を読もうとしても埋もれてしまい見落としのある可能性があります。
そんな時、本アプリでは「Get summary」をクリックするとwatsonx.aiが事前構成されたプロンプトに従ってメールの要約を得ることが可能です。
しかも、この watsonx では、モデルのトレーニングやチューニングするための追加学習は不要です。

# アプリ構築
## 1. 前提
* ターミナル環境
mac : ターミナルを使います。[ココ](https://support.apple.com/ja-jp/guide/terminal/apd5265185d-f365-44cb-8b09-71a064a42125/mac) を見てターミナルを起動できるようにしてください。
windows : powershellを使います。[ココ](https://learn.microsoft.com/ja-jp/powershell/scripting/install/installing-powershell-on-windows?view=powershell-7.3) を見てpowershellを起動できるようにしてください。
* リソース取得
下のURLにアクセスしリソースを取得します。
https://github.com/IBM/dsce-sample-apps/tree/main
※コード改変＆プルリクをするのであれば「git clone」コマンドを使うのですが、今回はソースコードの入手が目的ですので以下の様に Zip 形式でリソースを入手します。
![スクリーンショット 2023-08-12 22.28.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/682574/e97bd8bc-0767-b52e-9914-d11c0af69259.png)
リソース取得後、zipファイルを展開すると以下のようなフォルダ構成になっていると思います。今回はその中で[email-thread-summarization]配下にあるリソースを使用します。

## 2. 手順
### 2.1. [email-thread-summarization]フォルダに移動
zipファイルを解凍した場所を起点として[email-thread-summarization]フォルダに以下のようにして移動します。

      cd dsce-sample-apps-main/email-thread-summarization

### 2.2. 必須ライブラリのインストール

      pip3 install -r requirements.txt

### 2.3. APIキー生成or取得と設定
#### 2.3.1. APIキー生成or取得
以下の図を参照してAPIキーを生成or取得してください。※一度生成していれば再作成は不要です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/682574/c7bd56ce-21ea-4073-e72f-7087ac6d493d.png)

①IBM Cloudにログイン
②上メニューにある「管理」ー「アクセス(IAM)」をクリック。左バーにある「APIキー」をクリックし、右側にある「作成＋」をクリック
③APIキーに適当な名前を付与
④生成されたAPIキーをメモ帳等で大切に保管 
<font color="MediumVioletRed">※このAPIキーを他人と共有しないようにしてください。</font>

#### 2.3.2. APIキー設定

brief-builderフォルダの中で<font color="MediumVioletRed">".env"ファイルを作成します。</font>
.envファイルの中で以下のパラメータを作成し、APIキーを紐つけてください。

    WATSONX_API_KEY=<your IBM Cloud API key>


### 2.4. プロジェクトID生成or取得と設定
#### 2.4.1. プロジェクトID生成or取得
以下の図を参照してプロジェクトIDを生成or取得してください。※一度生成していれば再作成は不要です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/682574/03d3b434-5eb4-38cf-d65d-90f652ed00d6.png)

①watsonx.ai にログイン。プロジェクトがない、または新しくプロジェクトを作成する場合には「新規プロジェクトの作成」として「＋」ボタンをクリック。既存のプロジェクトがある場合は、そのプロジェクトをクリック。→③へ
②プロジェクト名を記載したのち「作成」ボタンをクリック
③画面上部のメニューから「管理」タブを選択
④作成したプロジェクトのプロジェクトIDをメモ帳等で大切に保管

#### 2.4.2. プロジェクトID設定
brief-builder/payload フォルダの中に存在する全jsonファイルにプロジェクトIDを記載していきます。

    "project_id": "<your watsonx instance project_id>"

### 2.5. アプリ実行

      pip3 template.py

その後、http://localhost:8050 にアクセス。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/682574/d58f5925-b77f-7228-3948-b2b40d8e3d2d.png)

左下の[Sample text]ボタンをクリックして左枠の「Email thread」に例文を入力した後、[Get summary]ボタンをクリックすると画面右側にLLMの回答結果が表示されます。
ここでは、会話の内容要約やネクストアクション、関心事項、キーワード等が表示されています。

## appendix.&nbsp;&nbsp;watsonx.ai の実行パラメータ

[2.4.2. プロジェクトID設定]のところで触れた <font color="MediumVioletRed">brief-builder/payload フォルダの中に存在するjsonファイルそのものがwatsonx.aiに送信するプロンプトになります。</font>
このファイルに以下のパラメータを設定することで watsonx.ai の大規模言語モデル(LLM)のパラメータを調整することができます。 

| # | パラメータ名 | 説明 |
|---|---|---|
| #1 |model_id| 大規模言語モデルのモデル|
| #2 |decoding_method| 出力テキストの生成時にトークンを選出する方法を表します。選択肢はgreedyとsample。greedyの場合、連続する各トークンは既に生成されているテキストの中で最も確率の高いトークンに対応します。一方sampleの場合、既に生成されているテキスト、または次のトークンの確率分布に基づいて後続のトークンを選出し、テキストを生成します。|
| #3 |max_new_tokens| 生成されるトークン数の最大値 (デフォルト 20)|
| #4 |min_new_tokens| 停止シーケンスが指定された場合、最小トークンは生成されるまで無視されます。 (デフォルト 0)|
| #5 |stop_sequences| テキスト生成を停止させるストリング|
| #6 |repetition_penalty| 重複ペナルティ（1以上であれば重複しないようにモデルを調整し、１以下の場合は重複した結果が出てくる。) デフォルトは1.0:ペナルティなし|