最近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"])