清水理史の「イニシャルB」
ChatGPTの新機能「GPTs」「Assistants」を試す。特別なツール不要でカスタムChatGPTを開発可能に!
2023年11月27日 06:00
2023年11月6日に開催されたOpenAI最初の開発者向けイベントで、ChatGPTの機能更新や料金改定が発表された。
中でも注目は、検索や実行環境を含むカスタムChatGPTを作れる「GPTs」や「Assistants」だ。今までLangChainやローコードツールなどを使って作っていたカスタムChatGPTが、本家の無料ツールで、簡単にできるようになった。
ローコードを超える
ここ数カ月、LangChain関連のローコードツールをいろいろ試してきたが、結局、本家が一番簡単なソリューションということになりそうだ。
ChatGPTの新機能として公開された「GPTs」や「Assistants」を利用すると、検索情報をもとにした生成(RAG:Retrieval Augmented Generation)やコード実行環境(Advanced Data Analysis)を備えたチャット環境を誰でも簡単に作ることができる。
本コラムではこれまで、カスタムChatGPT的なソリューションを構築する方法として、Text SplitterやEmbedding、ベクトルデータベースの組み合わせや、ノードをつなぐだけでPDF検索などができるLangFlow、さらにワークフロー自動化ツールn8nとの組み合わせなどを紹介してきたが、GPTsならチャット形式で対話するだけで、同じようなツールが作れる。もはや、ノードをつなぐ手間すらなくなってしまった。
もちろん、できるものはシンプルで、上記のツールほど複雑な処理はできないが、多くの人たちが欲しいと考える、社内のドキュメントをもとにQ&Aに回答するシンプルなシステムなどは、これで実現できてしまう。
「ローコード?」、とでも言わんばかりの進化を見せつけられた印象だ。
GPTsで「Wi-Fi 7 Wizard」を作る
それでは、実際に新機能を使ってみよう。まずはGPTsからだ。
ちなみに、GPTsとAssistantsでできることはほぼ同じだ。GPTsはChatGPTから利用でき、AssistantsはOpenAI developer platform」から利用する。また、Assistantsは、Pythonを使ってコード内からアシスタントを生成したり、作成後、API経由で外部から呼び出したりすることができるようになっている。
ChatGPTのUI内で使うのがGPTsで、外部サービスや社内システムとの連携に利用できるのが「Assistants」と考えると、わかりやすいだろう。
事前準備
「GPTs」は、ChatGPTの有料プランで利用できる。筆者は、OpenAIの発表後、11月11日の朝に利用可能になったが、有効化されると、ChatGPTの画面が更新され、左側のメニューに「Explore」というメニューが追加される。ここから、自分のGPTやOpenAIによって作成されたカスタムChatGPTにアクセスできる。
STEP 1:作りたいものを伝える
GPTsの「Create a GPT」をクリックすると、カスタムChatGPTの作成が開始される。まずは、どのようなChatGPTを作りたいかを伝える。
今回は、Wi-Fi 7について回答してほしいので、以下のように知識のベースとなるファイルをアップロードし、「これらのファイルをもとにWi-Fi 7に関して回答するQAチャットを作成してください」と依頼した。
ちなみに与えたファイルは、筆者が執筆した過去のWi-Fi 7対応ルーターのレビュー原稿、そのベンチマークデータのEXCELファイルとなる。
STEP 2:名前とアイコンを決定する
すると、自動的に名前とアイコンが提案される。今回は「Wi-Fi Wizard」という名前になり、Wi-Fiルーターっぽいロボットがアイコンに設定された。
これで問題ないので、確定するが、ついでに会話を日本語化したいので、「気に入りました。以後、日本語で回答してください」と入力する。
STEP 3:気を付けるべき点を伝える
続いて、避けるべき情報や強調すべき情報を聞かれる。今回は特に避けるべき情報はないので、「知らない情報には『わかりません』と答えてください。また、専門用語はなるべく使わずに、わかりやすく回答してください。」と伝えておく。
STEP 5:動作を確認する
これで、カスタムChatGPT「Wi-Fi Wizard」の完成だ。右側に表示されるので、表示されているスタート用の質問から「Wi-Fi 7の利点は?」を選択してみる。回答内容から与えた文書から回答していると考えられる。
STEP 6:設定を確認する
最後に設定を確認しておく。「Configure」を開くと、今までの会話によって自動的に設定された情報を確認できる。
「Instructions」がどのように回答するかという動作を設定した項目となる。ここで回答する内容や会話のスタイルなどが設定される。実際のチャットの際に挿入されるので日本語にしておけば回答も日本語になる。
「Knowledge」が情報のもとになる情報だ。Excelファイルは「Code Interpreter(Advanced Data Analysis)」環境で、Pythonコードを使って分析される(CSVの場合はUTF-8でアップロードしておいた方が変換の手間がかからないのでスムーズ)。ファイルを後から追加することもできる。もちろん、冒頭でも触れたように、テキストを分割する必要もなければ、エンベディングする必要もないし、ベクトルデータベースに格納する必要もない。全自動で処理してくれる。
「Capabilities」は、どの機能を利用するかだ。「Web Browsing」をオンにすると不足する情報などを検索して表示してくれる。ただし、文書をもとに回答するQAの場合、検索によって、時としてデータが意図しない情報に置き換わる可能性がある。あくまでも与えた情報のみで回答してほしいので、今回はオフにしておく。
「Actions」は、今回は利用しなかったが、この設定により外部APIを呼び出すことができる。たとえば、有価証券報告書回答Q&Aの付加機能として株価検索用のAPIを呼び出すとか、売上データを与えた分析用のQ&Aで天気情報を検索するAPIを呼び出すとか、特定の外部機能を呼び出すときに利用する。
いわゆるFunction Callingの機能で、自動的にAPI呼び出しの必要性などはChatGPTが自動的に判断してくれる。このため、APIのベースアドレスやクエリのパラメーター、戻り値の形式などをJSONで記述するだけでいい。
「Additional Settings」は、実は結構重要な設定だ。会話データをGPTモデルの改善に利用する設定なので、扱う情報によってはオフにしておく必要がある。そもそも企業情報を扱うなら、Chat GPT Enterpriseを利用する必要がある。
現状、アップロードしたファイルの情報がどのように扱われるかまでは調査しきれなかったため、不明な部分も多い(特にChat GPT Plusプランでの扱い)。そもそも社内の重要な情報やプライベートな情報などを扱うのは、扱うのは避けた方がいいが、とりあえず情報の扱うに注意したいのであれば、この設定はオフにしておくといいだろう。
APIとして呼び出せる「Assistants」
続けて、Assistantsを試してみよう。GPTsとほぼ同じ設定で作成できるカスタムChatだが、こちらはAPIとして呼び出せるため、自社システムなどに組み込んで利用できる。
例えば、以下は同様に筆者のテキスト原稿をもとに回答するアシスタントだ。これを作成すると、以下のように「asst_」で始まるIDが付与される。
APIでアシスタントを呼び出すには、まず会話用のスレッドを作成し、スレッドのmessageとして質問を設定しておく。curlで呼び出す場合は以下のようにする。
curl https://api.openai.com/v1/threads \
-H "Content-Type: application/json" \
-H "Authorization: Bearer {OpenAI API KEY}" \
-H "OpenAI-Beta: assistants=v1" \
-d '{
"messages": [{
"role": "user",
"content": "23H2の目玉機能は何ですか?"
}]
}'
実行するとスレッドが作成され、そのIDが表示される。このスレッドID(以下の例ではthread_9LDZJffdcUr21nzpJkDbqDtH)を指定して、先に確認したアシスタントのIDを呼び出して実行する。
curl https://api.openai.com/v1/threads/thread_9LDZJffdcUr21nzpJkDbqDtH/runs \
-H "Authorization: Bearer {OpenAI API KEY}" \
-H "Content-Type: application/json" \
-H "OpenAI-Beta: assistants=v1" \
-d '{
"assistant_id": "asst_xxxxxxxxxxxxxxxxxxxxxxxx"
これで、作成したスレッドにアシスタントからのメッセージが格納されるので、それを取り出すという方法になる。
curl https://api.openai.com/v1/threads/thread_9LDZJffdcUr21nzpJkDbqDtH/messages \
-H "Content-Type: application/json" \
-H "Authorization: Bearer {OpenAI API KEY}" \
-H "OpenAI-Beta: assistants=v1"
「knowledge」のデータの扱いがモヤモヤする
以上、GPTsとAssistantsを実際に試してみた。いずれも、非常に手軽にカスタムChatGPTを作れる、優れた機能という印象だ。
しかしながら、懸念点もある。
今回、筆者は自分で執筆した原稿を情報元(Knowledge)として利用したが、ここに外部の情報をどこまで含めることが許されるのだろうか?
日本では著作権法第30条の4(著作物に表現された思想又は感情の享受を目的としない利用)において、「著作物の表現についての人の知覚による認識を伴うことなく当該著作物を電子計算機による情報処理の過程における利用その他の利用に供する場合」(AIにおいては、モデルの開発・学習時)において、著作権者の許諾なしにコンテンツを利用することが許容されている。が、今回のGPTsの手法は、いわゆるIn Context Learning(プロンプトエンジニアリングの手法で、学習には相当しない)にあたり、「思想又は感情の享受を目的としない利用」にあたると言えるかどうか、判断が難しい。
In Context Learningの段階で使用した著作物は、出力に大きく影響を与え得るし、それによって、著作者の権利を侵害してしまうこともありえる。現に、今回のケースでも、場合によっては元の著作物の複製とも言える出力が行われることもあった。これが許容されるとは、ちょっと考えにくい。
特にGPTsは、自分以外にも公開できるうえ、確認した限りではChat GPT Plusでは会話の内容がOpenAIの学習に利用することも標準で許可されている。このあたりを考えると、公開しなかったとしても、Knowledgeに第三者のコンテンツを登録すること自体を避けた方がよさそうに思える。
この場ではっきりとした回答を提示できないのは申し訳ないが、便利な一方で、議論を巻き起こしそうな機能とも言える。