in 01-agents/7_orchestration.py [0:0]
def run_full_turn(agent, messages):
"""エージェントとの1ターンの対話を処理します。
Args:
agent (Agent): エージェントの設定を含むオブジェクト。
messages (list): ユーザーとエージェントの間のメッセージリスト。
Returns:
list: 新しく追加されたメッセージ。"""
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:]