Closed13

ChatGPT Plugins開発

laisolaiso

Chat Plugins

  • https://platform.openai.com/docs/plugins/introduction
  • OpenAPI仕様書を公開しておくとGPTがそれを解釈してユーザーの入力からWebリクエストを作って処理してくれるすごいやつ
  • プラグイン開発者は自分の作った各APIのdescriptionをちゃんと書いておけばあとはChatGPT側でよしなにやってくれる
  • LangChainのOpenAPI Agentに仕組みは似ている
laisolaiso

Retrieval Plugin

https://github.com/openai/chatgpt-retrieval-plugin

  • そのままフォークして使える検索用の知識を与えるプラグイン(APIサーバー)の雛形
    • こんな感じでAPI作れば動くよというリファレンス実装で、別にPython必須というわけではない
  • 開発者は好きなベクトルDBを選んで自分で構築したインデックスを突っ込んでおけばOK
  • ベクトルDBが必要な理由はテキストを入力してテキストを牽いてくるため
  • 極端な話、クエリ文字列に何かレスポンスを返せれば実装は曖昧検索でも分解してLIKE検索でも何でもよい
  • リッチな表示用にURLや画像を返したりもできる

descriptionにはこう書いてある
https://github.com/openai/chatgpt-retrieval-plugin/blob/96add7cd3d50071f903bccdaafcddc9e38394162/.well-known/openapi.yaml#L12

laisolaiso

chatgpt-retrieval-plugin以外

TODO Plugin

  • ToDo APIを公開しておくとユーザーの入力内容によって自動でアイテムが登録されたりする
  • 認証の仕組みはないのでこのままだと全ユーザーのToDoが一箇所に保存される

TODO Plugin (service level auth)

  • 上記にhttp_serviceの認証を付けたバージョン(OAuthではない)
  • username がどうやって決まっているのかいまいち理解できてない

Sport Stats

  • ベクトル検索などを用いないシンプルなREST APIも連携できるよというサンプル
  • 外部APIをラップして呼び出しているのはサンプルコードとして理解しやすくするためだと思う
  • GET /players?q=textplayer_ids を取得して GET /stats にパラメーターとして送ってくるという人間が実装するクライアントみたいな操作をGPTがやってくる

通信方式

あと

  • CORSを定義してる
  • localhostで実行可能

なのでブラウザから直接APIを叩いてくるというのが分かった。なんとなくserver-to-serverでリクエストが来るのかと思い込んでいた。

だからレスポンスをダンプしてデバッグしたりBearerトークンをユーザーが入力できたりするのね
これは勘違いでserver-to-serverでリクエストしていました。

laisolaiso

Memory

  • Memory=プロンプトに会話履歴(や要約)を埋め込むデザインの総称
  • Retrieval Pluginsの結果を元にできた会話はAPIサーバーが知ることはできないので別途送信してもらう必要がある
  • これもAPIのdescriptionに「やれ」って書いておくとユーザーの確認付きで送信してくるらしい(ちょっと動かしてみないと想像できない)

https://github.com/openai/chatgpt-retrieval-plugin/blob/96add7cd3d50071f903bccdaafcddc9e38394162/examples/memory/openapi.yaml#L9-L12

  • 履歴を保存したり参照する部分は普通に自分でDBに出し入れして実装する
laisolaiso

llama-index

  • Retrieval PluginにDATASTORE=llamaが追加された

https://github.com/openai/chatgpt-retrieval-plugin/blob/main/docs/providers/llama/setup.md

llama-indexはデータベースより一個上のレイヤーで、インデックスをファイルで管理する機能もあってよりお手軽

バックエンドをDB製品に切り替えもできる
https://gpt-index.readthedocs.io/en/latest/reference/indices/vector_store.html

lama-index経由でChromaDBやOpenSearchに繋げたりできる

laisolaiso

Managed Vector DB

ユーザー多そうな順に並べたつもり

以下はchatgpt-retrieval-pluginにproviderがないけど組込めるのではないか

試算したら料金で泣いちゃったのであんまり深掘りしていない製品たち

Zennの全本を全文検索したいのGoogle Drive検索方式でも強引に実装できるはず

laisolaiso

ローカルデータストアの選択肢

  • 静的なデータセット + メタデータのフィルタリングを活用しないならDBサーバーは立てなくても運用できそう
  • リポジトリでサポートされているDATASTORE=llamaを軸に構成するのがよいのではないか
  • A: Embedding APIをかけてからクソデカJSONに保存しておく(SimpleVectorIndexやFaissIndex)
  • B: ChromaIndex経由でDuckDBに保存しておく(Aよりスケールするはずだが、それならDBサーバー立てればいい気もする)
  • あとはAPIのデプロイ時にDBファイル群をディスクにコピーしておく

ChromaDBを直接providersでサポートするPRが進行してる
https://github.com/openai/chatgpt-retrieval-plugin/pull/59

laisolaiso

エコシステム系

  • PluginsはマニフェストとAPI仕様書が公開されているので外部のシステムがそれらを参照して活用できる
  • なので自分のプログラムから既存のChatGPT Plugins(の裏のAPI)を利用する機能を付けることが可能(アクセスを許可されていれば)
  • API仕様書からリクエストを生成する部分を代替LLMにできる
  • ただChatGPTのユーザー認証は使えない

LangChainのAgentから呼び出すツール
https://python.langchain.com/en/harrison-docs-refactor-3-24/modules/agents/tools/examples/chatgpt_plugins.html

LlamaIndexのバックエンドで使うツール
https://gpt-index.readthedocs.io/en/latest/how_to/integrations/chatgpt_plugins.html

laisolaiso

cloudflare/chatgpt-plugin

Cloudflare WorkersでChatGPTプラグインを作るサンプル。

https://github.com/cloudflare/chatgpt-plugin/

  • itty-routerベース
  • cloudflare/itty-router-openapiという専用モジュールがマニフェストファイルやOpenAPI仕様の生成を補助
  • セマンティック検索はドキュメントtext-embedding-ada-002でKVにキャシュしておきリクエストと演算で比較
このスクラップは2023/06/17にクローズされました