miibo(旧mebo)をPythonで使ってみた
最近GPT-3などが出てきて、AIと簡単に会話できるようになりました。
そこで、私もAIと会話したいと思ったので、いろいろ調べてみました。
調べていく中で、meboと言った会話型AI構築サービスが面白そうだったので、触ってみました。
(キャラ設定ができるので、他のAIと差別化できそう)
ここでは、Pythonで作成したエージェントとAPI経由で会話する方法を書いています。
・meboの公式サイト
・使い方は、開発者さんのZennに詳しく書いています。
meboでAPIを共有する方法は、以下の記事を見てください。
作成したエージェントとAPI経由で会話する|miibo(ミーボ)ではじめる会話AI構築
必要なもの
mebo側
・エンドポイント
・APIキー
・エージェントID
・ユーザの発話
・ユーザ識別子
・エンドポイント(共通)
https://api-mebo.dev/api
APIキー、エージェントIDは、以下の場所から入手できます。
ユーザ識別子(uid)を含めると、ユーザごとにステートを保持することができるので、必要な人は任意のユーザー識別子を設定してください。
Python側
meboとのやり取りは、Pythonで使われるHTTPライブラリであるrequestsを使用しました。
以下のコマンドでインストールしてください。
pip install requests
ソースコード
テストコードは以下の通りです。
import requests url = "https://api-mebo.dev/api" headers = {'content-type': 'application/json'} item_data = { "api_key": "APIキー", "agent_id": "エージェントID", "utterance": "今日の天気は", "uid": "ユーザ識別子" } r = requests.post(url,json=item_data,headers=headers) print(r) print(r.json()["utterance"]) print(r.json()["bestResponse"]["utterance"])
解説
url
にエンドポイント
headers
にリクエストヘッダー
item_data
にリクエストパラメータ
utterance
に会話内容(今回は「今日の天気は」と質問する)
r = requests.post(url,json=item_data,headers=headers)
で、r
にレスポンスデータを格納する。
レスポンスはJson形式です。
print(r)
でステータスコードを表示します。
print(r.json())
で、レスポンス内容を表示できます。
以下は、Zennに記載されているレスポンスの例です。
{ "utterance": "おはようございます!", "bestResponse": { "utterance": "おはようございます!!良い天気ですね。", "options": [ "他の話題", "調子はどう?", "今日は何して過ごそう" ], "topic": "", "imageUrl": "", "url": "", "isAutoResponse": false, "extensions": { "key1": "value1", "key2": "value2" } } }
しかし、欲しいものは、"utterance": "おはようございます!"
と"utterance": "おはようございます!!良い天気ですね。"
なので、以下のようにして欲しいものを取り出す。
自分がした会話は、"utterance"
なので、
print(r.json()["utterance"])
返答は、"bestResponse"
の中にある"utterance"
なので、
print(r.json()["bestResponse"]["utterance"])
とすれば以下のように欲しいものが取り出せます。
連続して会話するコード
テストコードでは1回限りの会話でしたので、最後に連続して会話できるコードを書いておきます。
import requests # meboAPIの使用 def mebo(text): url = "https://api-mebo.dev/api" headers = {'content-type': 'application/json'} item_data = { "api_key": "APIキー", "agent_id": "エージェントID", "utterance": text, "uid": "ユーザ識別子" } r = requests.post(url,json=item_data,headers=headers) return r if __name__ == "__main__": while True: # mebo雑談 text = input("会話内容を入力してください") r = mebo(result["text"]) print(r) print(r.json()["bestResponse"]["utterance"])