はじめに
この記事は JSL (日本システム技研) Advent Calendar 2024 - Qiita 5日目の記事です。
当社はDjango等を使用したWebアプリケーション開発を主体としていますが、LLM案件の問い合わせも多くなってきたので、「LangChainとLangGraphによるRAG・AIエージェント[実践]入門 」という書籍を購入しました。
今回は、その中にあったハンズオンをしつつ気付いたことをメモ的に記事にしました。
環境:
- macOS 12.6 Apple M1 Pro
- Google Colab
前準備
OpenAIのAPIキーを取得します。
こちらの説明は割愛します。
Chat Completions APIの呼び出し
APIとのやり取り時は、role(役割)
とそれに付随するcontent(本文)
を
セットで渡します。
role
は、system(エージェントの事前設定?)
、user(利用者)
、agent(エージェント)
があるようです。
import os
from openai import OpenAI
from google.colab import userdata
os.environ["OPENAI_API_KEY"] = userdata.get("OPENAI_API_KEY")
client = OpenAI()
response = client.chat.completions.create(
model="gpt-4o-mini",
messages = [
{ "role": "system", "content": "You are a helpful assistant."},
{ "role": "user", "content": "こんにちは!私はジョンと言います!"},
]
)
print(response)
レスポンスが分かり難かったので、ChatGPTからのメッセージのみを抽出してみました。
#print(response)↓
print(response.choices[0].message.content)
こんにちは、ジョンさん!お会いできてうれしいです。今日はどんなことをお話ししましょうか?
会話履歴を踏まえた応答を得る
APIでは会話履歴を保存する機能は無いため、自前で履歴を渡してあげる必要があります。
import os,json
from openai import OpenAI
from google.colab import userdata
os.environ["OPENAI_API_KEY"] = userdata.get("OPENAI_API_KEY")
client = OpenAI()
response = client.chat.completions.create(
model="gpt-4o-mini",
messages = [
{ "role": "system", "content": "You are a helpful assistant."},
{ "role": "user", "content": "こんにちは!私はジョンと言います!"},
{ "role": "assistant", "content": "こんにちは、ジョンさん!お会いできてうれしいです。今日はどんなことをお話ししましょうか?"},
{ "role": "user", "content": "私の名前が分かりますか?"},
]
)
print(response.choices[0].message.content)
はい、あなたの名前はジョンさんです。何か他にお話ししたいことや質問がありますか?
JSON形式でレスポンスを得る
事前に返して欲しいJSONフォーマットを指定してあげるとJSON形式でレスポンスを得ることが出来ます。ハンズオンのものより少し入力値を変えてみました。
import os,json
from openai import OpenAI
from google.colab import userdata
os.environ["OPENAI_API_KEY"] = userdata.get("OPENAI_API_KEY")
client = OpenAI()
response = client.chat.completions.create(
model="gpt-4o-mini",
messages = [
{
"role": "system",
"content": '人物一覧を日本語で次のJSON形式で出力してください。\n{"people":["aaa","bbb"]}'
},
{
"role": "user",
"content": "昔々あるところにおじいさんとおばあさん、grandchildがいました。"
},
],
response_format={"type":"json_object"},
)
print(response.choices[0].message.content)
{"people":["おじいさん","おばあさん","孫"]}
感想
-
Chat Completions API仕様は意外とシンプルで分かりやすかったです。
-
会話履歴は自前で管理しないと駄目ということを知りました。今後の開発時に考慮しておきたいと思います。
-
Google Colabの補完機能に助けられたため、コーディングが捗りました。
-
今後は、
Function calling
を試したいです。