1番手早く自社サービスAPIとGPTを接続する方法 (OpenAI.functions + SlashGPT)
自社サービスとしてAPIを公開しているが、ユーザーにAPIを使って何が実現できるのかというのが伝えきれていない、使ってもらうハードルが高いということはよくあると思います。また色々なユースケースごとにAPIを呼び出すプラグラムをつくっていくのも工数がかかります。
ユーザーがこんなことしてほしいと自然言語で入力すると対応する自社サービスのAPIが呼び出される。そんな夢のような仕組みがOpenAIから2023年6月に提供されたfunctionという仕組みとSlashGPTを組み合わせることで驚くほど簡単にできますので紹介します。
準備
- SlashGPT repo のclone
- OpenAI API KEY
- open ai でアカウントを作成後下記でAPI-Keyを発行します
- https://platform.openai.com/account/api-keys
- 無料枠は5$までです https://openai.com/pricing
- Python実行環境
- miniconda 等で準備しておく
概要フロー
OpenAI GPTは2021年9月時点のインターネット、SNSの情報をもとに学習した内容で回答を作成します。その時点ですでによく使われていたPublicなAPIであれば(例:YahooFinanceの株価問い合わせなど)追加情報を送らなくても対象PublicAPIを呼び出すコードを生成してくれます。しかし、自社サービスの新しいAPIなどは自社サービスのAPI仕様をまずGPTに教える必要があります。その後GPTに自然言語でといあわせて、もし自社サービスAPIを呼ぶべきとGPTが判断したときはGPTの応答にfunction_callが指定されてきます。その応答を受け取ったSlashGPTはfunctionを実行して、APIの応答を再度GPTになげることでユーザーへの最終回答を得ます。
このあと、一つずつ解説していきます
SlashGPTとは?
SlashGPTは中島聡が開発したChatGPTなどのLLMエージェントを手軽に開発するためのツールです。SlashGPTを使えば、jsonファイルを記述するだけでChatGPTを使ったLLMエージェントやチャットアプリを手軽に、簡単につくることができます。
OpenAI.Functions
Open AIでchatに対する応答を要求するAPIChatCompletion.create
のfunctions
パラメタに任意のAPI仕様をわたすと、GPTがそのAPIを呼ぶべきと判断した時に、応答のなかなにfunction_call
というが追加され、関数名、パラメータをGPTが指定してくれるというものです。
Request param例
functions = [
{
"name": "get_current_weather",
"description": "Get the current weather",
"parameters": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "The city and state, e.g. San Francisco, CA",
},
"format": {
"type": "string",
"enum": ["celsius", "fahrenheit"],
"description": "The temperature unit to use. Infer this from the users location.",
},
},
"required": ["location", "format"],
},
},
Response 例
{'role': 'assistant',
'content': None,
'function_call': {'name': 'get_current_weather',
'arguments': '{\n "location": "Glasgow, Scotland",\n "format": "celsius"\n}'}}
- guide: https://platform.openai.com/docs/guides/gpt/function-calling
- sample code: https://github.com/openai/openai-cookbook/blob/main/examples/How_to_call_functions_with_chat_models.ipynb
- API spec: https://platform.openai.com/docs/api-reference/chat/create#functions
SlashGPTによる外部APIの実行
連携させたい自社サービスのAPI仕様ごとに異なります。実際は自分たちの手元にすでにあることを想定しています。この記事ではGithubのGraphQL APIを例に使用します。
function 定義の作成
通常のAPIの場合はOpenAPIの形式で準備しますが、GraphQLの場合は共通で下記のものが利用できます。
追加resourceとして、Github GraphQLが対応しているSchemaも準備します
https://docs.github.com/ja/graphql/overview/public-schema からDLしたスキーマをよく使うもの2000行程度にカットしたものを準備します。
- カットしたスキーマ例: https://github.com/snakajima/SlashGPT/blob/main/resources/functions/github_basic.graphql
manifest の作成
GPTと通信するChatApp:SlashGPTのAgentの動作を決定するmanifestファイルを作成します。
- 下記のように
functions
,resource
の定義を行い、上記ファイルパスを設定します。 - 外部APIを呼び出す時に必要なendpoint等を
actions
の中に指定しています。 - API Key (secret)等は.envファイルに下記の
appkey
の項目のprefixに 'SLASH_GPT_ENV_'を追加した環境変数として定義しておきます。(この例ではSLASH_GPT_ENV_GITHUB_TOKEN) - Userの質問とともに、GPTに渡される文章を
prompt
として定義します。さらにこのなかに上記APIに関する補足情報resource
も含めます。
重要: ここで定義したprompt
の質がChatAppサービスの質、ユーザー体験を決定します。チューニングポイントです。
{
"title": "GitHubMetrics",
"description": "Metrics about GitHub repo",
"about": "kozayupapa",
"temperature": "0.0",
"functions": "./resources/functions/graphql.json",
"resource": "./resources/functions/github_basic.graphql",
"actions": {
"call_graphQL": {
"type": "graphQL",
"url": "https://api.github.com/graphql",
"appkey": "GITHUB_TOKEN",
"headers": {
"Authorization": "bearer {appkey}"
}
}
},
"prompt": [
"You are an expert in GraphQL and use call_graphQL function to retrieve necessary information.",
"Ask for clarification if a user request is ambiguous.",
"When you see errors in your code, fix it and rerun it up to `Two times`",
"Here is the schema of GraphQL query:",
"{resource}"
]
動作確認方法
この記事の例で使用しているmanifestは slashGPTに取り込んでもらっているので、RepositoryをCloneすればすぐに試せます。
- Secret等の準備
- https://docs.github.com/ja/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens を参考にGithub Tokenを取得
- .envファイルに
SLASH_GPT_ENV_GITHUB_TOKEN=
と追記しておく - 他に
OPENAI_API_KEY=
も準備セクションを参考に準備
- 起動
% python ./SlashGPT.py
- manifestを選択
You(GPT): /gitm
- あとは実際の質問プロンプトを入力するだけです。以下のように外部サービスのAPIの応答を利用しないと答えられない質問にも答えてくれます!
例1:
You(gitm): Github snakajima/SlashGPTのmain branchへのauthor user ごとに 2023-9-1からのコミット数を取得して多い順にuser名、commit数のリストソートして出力して
1. snakajima: 32
2. isamu: 26
3. kozayupapa: 5
4. ystknsh: 4
注意: どんな回答にも正確に答えてくれるわけではないです。たとえば上記の質問を直近1ヶ月のとかえると正しく解釈してくれません。このあたりは与えるAPI仕様を関係ある部分はフルセットで入力することと、promptを工夫するといったことが考えられます。
また答えの内容が正しくないこともありますので、最初は自分たちが正解をしっている質問でためしてみてください。slash GPT上で/verbose
と入力すると詳細のログも出力されるので製品レベルにするには、 APIの応答、GPTへのリクエスト、応答等 地道に追っていくことも必要になると思います。
まとめ
functionsを利用することで、任意のAPIを呼び出してその結果をつかってGPTに回答してもらうことがスムーズに実現できます。そしてAPI定義さえあれば、その拡張はコードを書く必要もなくmanifestに記述するだけで 対応可能です。NoCodeで自分たちのサービスとGPTをつないでみてください!
参考:NLUIの時代の幕開け
NLUI (Natural Language User Interface)の時代の幕開けが、この「function call」のリリースによって、本格的に始まった、という事実です。
LLM(Large Language Model:大規模言語モデル)の応用は、さまざまなものが試みられていますが、LLMには「得意なこと」と「不得意なこと」があります。LLMは、基本的には「辻褄があうように次の単語を見つけ出す」ことが得意な言語モデルなので、文章の要約、文脈の理解、翻訳などは得意ですが、数学は苦手だし、知らないことを聞かれた時には答えをでっちあげてしまうことすらあります。
上のホーム・オートメーションの例のように、ユーザーからのリクエストに応じて、適切な関数を呼び出す作業は、「文脈の理解(ユーザーが望んでいることの理解)」と「翻訳(自然言語から、function callへの翻訳)」であり、LLMが得意とすることなのです。
現在、企業が使うシステムの多くはデータベース化されており、そこでは莫大な数の人が、人間からのリクエストに応じて、そのデータベースに変更を加えたり、データベースからデータを取り出す作業をしています。ざっと思いつく例を挙げれば、ホテル・美容室・マッサージなどのサービス業の予約受付業務
飲食業の注文受付業務
カスタマー・サポート
アンケート・世論調査
必要経費・仮払金・立替金などの入力業務
企業間の注文受付業務
小売・卸売業の在庫管理、売上予想、仕入れ管理
工事現場の進捗管理・報告
などです。企業によっては、雇われている人の大半がそんな作業をしていると言っても過言ではありません。LLMは、まだまだ「汎用人工知能」と呼んで良いほど賢くはありませんが、適切な使い方をすれば、「十分に使えるレベル」であり、ものによっては「人間よりも役に立つ」レベルにすらなっています。
今後多くの仕事が、LLMを活用したNLUIによって、効率化・自動化されるだろうと思いますが、単に効率化・自動化だけを目指すと、「安かろう悪かろう」になってしまうので、同時に、そのサービスを受ける人にとって「より良い体験」が得られるようになるように作り込むことが何よりも大切です。
これまでの「音声認識」「音声合成」だけを活用した効率化・自動化は(例:巷で広く使われている、自動音声応答システム)、まさに「安かろう悪かろう」と言えるユーザー体験しか提供出来てきませんでしたが、それが一気に「人間のオペレータと話すよりも便利」なユーザー体験を提供することが可能になったのです。
上に列挙したような仕事が効率化・自動化されることにより、人間の職が奪われる、失業者が増えるなどの心配をする人がいますが、時代の流れを止めることが出来ません。少子高齢化が加速する先進国では、労働者不足が深刻であり、労働者が不足している分野での人工知能の活用は、特に積極的に進めるべきだと私は考えています。
さらに言えば、アプリやウェブサイトが提供するGUIを使いこなせない人も大勢いるし、私のように、この業界で働いている人間でも、なかなか目指す部分に到達できないことがしばしばです。GUIと比べると、NLUIを活用すれば、よりユーザーに寄り添った「痒い所に手が届く」ユーザー体験を提供することが可能であり、ここは私のような、ソフトウェア・エンジニアの力の発揮しどころだ、とつくづく思います。
人工知能を活用したアプリケーションやサービスを活用し、内発的動機付けで行動するエンジニア、起業家、社会起業家をサポートするコミュニティーです。 singularitysociety.org
Discussion