01-agents/2_tools.py (70 lines of code) (raw):

from openai import OpenAI from demo_util import color import json # OpenAI クライアントの初期化 client = OpenAI() # === デモループ === # 使用するモデルを定義 model = "gpt-4o-mini" # アシスタントの動作を設定するためのシステムメッセージを定義 system_message = ( "あなたはACME Inc.のカスタマーサポート担当者です。" "常に1文以内で回答してください。" "以下の手順に従ってユーザーと対話してください:" "1. 最初に質問をして、ユーザーの問題を深く理解してください。\n" " - ただし、ユーザーが既に理由を提供している場合を除きます。\n" "2. 修正案を提案してください(適当なものを考え出してください)。\n" "3. ユーザーが満足しない場合のみ、返金を提案してください。\n" "4. ユーザーが受け入れた場合、IDを検索して返金を実行してください。" "" ) # アシスタントが利用できるツールを定義 # これらのツールは、商品検索や返金処理などの外部操作を模擬します tools = [ { "type": "function", "function": { "name": "execute_refund", "description": "", "parameters": { "type": "object", "properties": { "item_id": {"type": "string"}, "reason": {"type": "string"}, }, "required": ["item_id"], }, }, }, { "type": "function", "function": { "name": "look_up_item", "description": "商品IDを見つけるために使用します。\n 検索クエリには説明やキーワードを使用できます。", "parameters": { "type": "object", "properties": {"search_query": {"type": "string"}}, "required": ["search_query"], }, }, }, ] # アシスタントとの完全なやり取りを処理する関数 def run_full_turn(system_message, tools, messages): # OpenAI API を呼び出してレスポンスを生成 response = client.chat.completions.create( model=model, messages=[{"role": "system", "content": system_message}] + messages, tools=tools, ) # レスポンスからアシスタントのメッセージを抽出 message = response.choices[0].message messages.append(message) # ユーザーへのアシスタントの応答を表示 if message.content: print(color("Assistant:", "yellow"), message.content) # ツール呼び出しがない場合はメッセージを返す if not message.tool_calls: return message # ツール呼び出しがある場合、その詳細を表示 for tool_call in message.tool_calls: name = tool_call.function.name args = json.loads(tool_call.function.arguments) print( color("Assistant:", "yellow"), color(f"ツール呼び出しを実行中: {tool_call.function.name}({args})", "magenta"), ) return message # 会話メッセージの初期化 messages = [] # ユーザーと継続的に対話するループを開始 while True: # ユーザー入力を取得 user = input(color("User: ", "blue") + "\033[90m") messages.append({"role": "user", "content": user}) # 1回のやり取りを実行 run_full_turn(system_message, tools, messages)