はじめに
Command R+はCohere社が開発したLLMです。
特徴についてはあちこちで記事にされていますので省略しますが、
- Web検索コネクタ(RAG)が標準提供されておりCopilot(Bing Chat)的にWebを基にした回答をAPIから生成できる
- 無料プランでもAPIが使える
- Coral(チャットUI)でPDFやテキストファイルを参照して回答できる(WebもOK)
- ドキュメントが非常に充実している
- Web UIがセンス良い
等が個人的に気に入っているポイントです。
今回はそんなCommand R+をPower Autoamteから利用してみました。
※プレミアムコネクタを利用します。Power Automate Premium等のライセンスが必要になります。
0.準備
公式でアカウント作成
Command R+はCohere公式だけでなくAzure、AWSでも利用可能です。今回は無料で試すことができるCohere公式を利用しています。
公式サイトにアクセスし「TRY NOW」をクリックし登録を行います。
登録完了するとダッシュボードが表示されます。
APIキーの取得
Web UIの使い方を書き始めると長くなりますので、さくっとAPIキーを取得します。
充実していますので一通り触ってみることをお勧めします。
今回は個人的検証なので初めから生成されているTrial Keyを利用します。運用する場合は有償プランを契約しましょう。
👁️をクリックするとキーが表示されコピーアイコンも表示されるのでキーをコピーしておきます。
コピーしたAPIキーは安全な場所に保管しておきます。
1.シンプルに使ってみる
Power Automate クラウドフローからCommand R+を呼び出し回答を生成します。
トリガーのパラメータでプロンプトを入力し、プロンプトに対する回答を生成します。
フロー全体図
フロー解説
1.[Flow button for mobile]フローを手動でトリガーする
- テキスト
- prompt
2.[Data Control]作成-APIKey
APIキーを格納しています。本来はAzure Key Vaultなどを利用して安全に保管すべきですが、簡易的に作成アクション内に格納しています。
- 入力
- 「0.準備」で取得したAPIキー
3.[HTTP]HTTP-cohere api
APIを呼びます
- URI
- Method
- POST
- Headers
- Authorization
- Bearer @{outputs('作成-APIKey')}
- Content-Type
- application/json
- Authorization
- Body
-
{ "model": "command-r-plus", "message": "@{triggerBody()?['text']}" }
- ※最小限のパラメータです。
- リファレンスページに指定可能なパラメータが解説されています
-
フロー実行イメージ
こんなプロンプトで実行してみます。
応答はこのようなJSONで返されます。
cohere の APIの素敵な点として、chat_historyとして会話の履歴がすべて返されることです。この為チャットボットを作る場合には何も準備しなくても会話履歴を扱うことができます。
{ "response_id": "305880b5-23dc-4e01-9beb-c053cc206183", "text": "日本で一番売れている和菓子の正確なランキングを特定することは困難ですが、人気の高い和菓子のひとつに「羊羹(ようかん)」があります。羊羹は、小豆あんをベースにした和菓子の定番で、さまざまな種類やブランドがあります。\n\n日本の市場調査会社であるインテージ株式会社の調査(2022年)によると、日本で最も売れている羊羹のブランドは「本町駿河屋」の「特選 煉羊羹」です。この羊羹は、伝統的な製法で作られ、しっとりとした食感と上品な甘みが特徴です。\n\n他にも、以下のような人気の和菓子が挙げられます。\n\n- 大福:柔らかい餅で餡子を包んだ和菓子。さまざまなフレーバーの大福があり、特にイチゴ大福やクリーム大福が人気です。\n- 饅頭(まんじゅう):小麦粉や米粉の生地で餡子を包んで蒸したり焼いたりした和菓子。地域によってさまざまな種類があります。\n- 団子(だんご):餅粉で作った小さな球状の和菓子。串に刺して食べることが多いです。みたらし団子やあんこ団子が人気です。\n- 煎餅(せんべい):米を原料に焼き上げた薄い焼き菓子。さまざまな味付けやトッピングがあります。\n\nこれらの和菓子は、日本全国で広く愛されており、お土産や贈答品としても人気があります。", "generation_id": "8773f562-ad61-4428-9066-28e7d73025b0", "chat_history": [ { "role": "USER", "message": "日本で一番売れている和菓子は?" }, { "role": "CHATBOT", "message": "日本で一番売れている和菓子の正確なランキングを特定することは困難ですが、人気の高い和菓子のひとつに「羊羹(ようかん)」があります。羊羹は、小豆あんをベースにした和菓子の定番で、さまざまな種類やブランドがあります。\n\n日本の市場調査会社であるインテージ株式会社の調査(2022年)によると、日本で最も売れている羊羹のブランドは「本町駿河屋」の「特選 煉羊羹」です。この羊羹は、伝統的な製法で作られ、しっとりとした食感と上品な甘みが特徴です。\n\n他にも、以下のような人気の和菓子が挙げられます。\n\n- 大福:柔らかい餅で餡子を包んだ和菓子。さまざまなフレーバーの大福があり、特にイチゴ大福やクリーム大福が人気です。\n- 饅頭(まんじゅう):小麦粉や米粉の生地で餡子を包んで蒸したり焼いたりした和菓子。地域によってさまざまな種類があります。\n- 団子(だんご):餅粉で作った小さな球状の和菓子。串に刺して食べることが多いです。みたらし団子やあんこ団子が人気です。\n- 煎餅(せんべい):米を原料に焼き上げた薄い焼き菓子。さまざまな味付けやトッピングがあります。\n\nこれらの和菓子は、日本全国で広く愛されており、お土産や贈答品としても人気があります。" } ], "finish_reason": "COMPLETE", "meta": { "api_version": { "version": "1" }, "billed_units": { "input_tokens": 8, "output_tokens": 334 }, "tokens": { "input_tokens": 74, "output_tokens": 334 } } }
2.Webを検索して回答を生成する
続いてマネージドなWeb検索コネクタをつかってみます。
入力したキーワードをWeb検索して、結果を箇条書きにまとめて返してくれるフローです。
フロー全体図
フロー解説
1.[Flow button for mobile]フローを手動でトリガーする
- テキスト
- prompt
2.[Data Control]作成-APIKey
APIキーを格納しています。本来はAzure Key Vaultなどを利用して安全に保管すべきですが、簡易的に作成アクション内に格納しています。
- 入力
- 「0.準備」で取得したAPIキー
3.[HTTP]HTTP-cohere api
APIを呼びます
- URI
- Method
- POST
- Headers
- Authorization
- Bearer @{outputs('作成-APIKey')}
- Content-Type
- application/json
- Authorization
- Body
-
"model": "command-r-plus", "message": "@{triggerBody()?['text']}", "connectors": [ { "id": "web-search" } ] }
- 1つめのjsonに connectors=[{"id": "web-search"}]を追加しただけです。
- web-search がWeb検索コネクタを指定しています
- コネクタを作成して追加することができるようです
- ※最小限のパラメータです。
- リファレンスページに指定可能なパラメータが解説されています
-
フロー実行イメージ
LLMは学習していないであろうこんなプロンプトで実行してみます。
このような回答がされました(正解)
6つのWebページの情報を基に回答を生成していることがわかります。
(長いのでスクリーンショット)
ちなみに、Webコネクタ未使用の場合は間違った日付が返されました。
LLMが回答を持っている訳ではなく、Webの情報から回答を生成していることが確認できました。
3.指定ドメインをWeb検索して回答を生成する
2.はWeb全体から検索する形でしたが、指定したドメイン内のページから回答を生成することも可能です。
フローは2と全く同じです。Bodyに指定するjsonに ,"options": {"site": "<検索するサイトのドメイン>"} を加えることで検索対象を指定することができます。
{ "model": "command-r-plus", "message": "@{triggerBody()?['text']}", "connectors": [ { "id": "web-search", "options": { "site": "ja.wikipedia.org" } } ] }
解決できなかったこと
JSON出力させるとMarkdown的な出力に…
cohere APIには出力形式をjsonに指定するようなオプションは提供されていないようです。そこでプロンプトでjsonで返すよう指示をするとこのようにMarkdownのコードブロックとして出力してしまいます。プロンプトでこれを抑制しようと試行錯誤したのですが解決できませんでした。必ずMarkdown的にに出力される前提で出力結果を加工してしまえば対処は可能ですが、できればプレーンなjsonとして出力させたいところでした。
参考にしたページ
さいごに
やっぱり公式ドキュメントが充実しているサービスは使いやすい!
Power Automate クラウドフローからcohere API経由で Command R+を使ってみました。ごくごく基本的な使い方のみですが、Power Automate や Power Apps から CopilotのようにWebを基にした回答を生成できるのは、いろいろな使い方が思いついて夢が膨らみます。