in 01-agents/6_agents.py [0:0]
def run_full_turn(agent, messages):
"""1回のやり取りを処理する関数"""
# 初期メッセージ数を記録
num_init_messages = len(messages)
messages = messages.copy()
while True:
# ツールをスキーマに変換してマッピングを保存
tool_schemas = [function_to_schema(tool) for tool in agent.tools]
tools_map = {tool.__name__: tool for tool in agent.tools}
# === 1. OpenAI の応答を取得 ===
response = client.chat.completions.create(
model=agent.model,
messages=[{"role": "system", "content": agent.instructions}] + messages,
tools=tool_schemas or None,
)
message = response.choices[0].message
messages.append(message)
if message.content: # アシスタントの応答を表示
print(color("Assistant:", "yellow"), message.content)
if not message.tool_calls: # ツール呼び出しがない場合は終了
break
# === 2. ツール呼び出しを処理 ===
for tool_call in message.tool_calls:
result = execute_tool_call(tool_call, tools_map)
result_message = {
"role": "tool",
"tool_call_id": tool_call.id,
"content": result,
}
messages.append(result_message)
# ==== 3. 新しいメッセージを返す =====
return messages[num_init_messages:]