🧠

GPTにAPIの仕様を教えて勝手に叩いてもらう方法(LangChain🦜🔗)

2023/04/08に公開

APIChain とは

APIChain とは、LangChain のモジュールのひとつで、API と対話し関連情報を取得することができます。
API ドキュメントをプロンプトとして渡すだけで、与えられた質問を元に適切なクエリパラメータやエンドポイントを選んでくれるという利点があります。

リポジトリ

本記事で使用するサンプルコードは全て以下のリポジトリに含まれます。ご自由にご利用ください。

https://github.com/akmhmgc/api-chain-sample

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"}

このコードでは、/ というエンドポイントに対して、timecountryというクエリパラメータを受け取り、対応する挨拶を返すようになっています。

アプリケーションを実行することで 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 を試してみてください!

GitHubで編集を提案

Discussion