自分用知識置き場

気まぐれで更新します。間違ってたらご指摘お願いします。

miibo(旧mebo)をPythonで使ってみた

最近GPT-3などが出てきて、AIと簡単に会話できるようになりました。

そこで、私もAIと会話したいと思ったので、いろいろ調べてみました。

調べていく中で、meboと言った会話型AI構築サービスが面白そうだったので、触ってみました。
(キャラ設定ができるので、他のAIと差別化できそう)

ここでは、Pythonで作成したエージェントとAPI経由で会話する方法を書いています。


・meboの公式サイト

mebo.work

・使い方は、開発者さんのZennに詳しく書いています。

zenn.dev


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