🧠
GPTにAPIの仕様を教えて勝手に叩いてもらう方法(LangChain🦜🔗)
APIChain とは
APIChain とは、LangChain のモジュールのひとつで、API と対話し関連情報を取得することができます。
API ドキュメントをプロンプトとして渡すだけで、与えられた質問を元に適切なクエリパラメータやエンドポイントを選んでくれるという利点があります。
リポジトリ
本記事で使用するサンプルコードは全て以下のリポジトリに含まれます。ご自由にご利用ください。
API の作成
まず、適当なエンドポイントを作成します。
from fastapi import FastAPI
app = FastAPI()
greetings = {
# 省略: 各言語の挨拶が定義された辞書
}
@app.get("/")
def read_root(time: str = 'morning', country: str = "ja"):
if country in greetings and time in greetings[country]:
return {"greeting": greetings[country][time]}
else:
return {"error": "Invalid time or country"}
このコードでは、/
というエンドポイントに対して、time
とcountry
というクエリパラメータを受け取り、対応する挨拶を返すようになっています。
アプリケーションを実行することで API にアクセスすることができます。
uvicorn main:app --reload
curl "http://127.0.0.1:8000/?time=noon&country=ja"
{"greeting":"こんにちは"}%
LangChain で API エンドポイントを叩いてもらう
ここからが本記事のメインです。
from langchain.chains import APIChain
from langchain.chat_models import ChatOpenAI
llm = ChatOpenAI(temperature=0)
GREETING_API_DOCS = """API documentation
Endpoint: http://127.0.0.1:8000/
GET /
This API is for greeting message by time and country.
Query parameters table:
time | string | time for greeting, available: morning, noon, night | required
country | string | Limit search results to a specific country, available: ja,en,fr,de,es,it,pt,ru,zh,ar,ko | required
Response schema (JSON object):
greeting | string | greeting message
"""
chain_new = APIChain.from_llm_and_api_docs(llm, GREETING_API_DOCS, verbose=True)
question = "ドイツの朝の挨拶は?"
print("Question:", question)
chain_new.run(question)
GREETING_DOCS の中で、API のエンドポイントやクエリパラメータをテキスト形式で説明しています。
API documentation
Endpoint: http://127.0.0.1:8000/
GET /
This API is for greeting message by time and country.
Query parameters table:
time | string | time for greeting, available: morning, noon, night | required
country | string | Limit search results to a specific country, available: ja,en,fr,de,es,it,pt,ru,zh,ar,ko | required
Response schema (JSON object):
greeting | string | greeting message
APIChain にこのドキュメントを渡すことでよしなにドキュメントから叩くべきエンドポイント・渡すべきクエリパラメータを決めてくれるわけですね。
試しに上記のコードを実行してみましょう。
Question: ドイツの朝の挨拶は?
> Entering new APIChain chain...
http://127.0.0.1:8000/?time=morning&country=de
{"greeting":"Guten Morgen"}
> Finished chain.
APIChain を使って与えられた質問(question)に基づいて、適切なクエリパラメータとエンドポイントを選択しています。
この例では、「ドイツの朝の挨拶は?」という質問に対して、http://127.0.0.1:8000/?time=morning&country=de
という URL が生成され、正しい挨拶が返されます。
まとめ
API ドキュメントを与えるだけで、適切なクエリパラメータやエンドポイントを選択し、質問に対する回答を自動的に取得できます。
ぜひ、APIChain を試してみてください!
Discussion