モデルへの結果の返却
ツールの出力をtoolロールのメッセージとして整形し、モデルが読み取って会話を続けられるようにします。
「モデルへの結果の返却」はCoddyKit上の無料AI Agentsレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはAI Agents学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 AI Agentsコースには全4レッスンが含まれています。
ツール結果メッセージ
ツールを実行した後、ツールメッセージで結果をモデルに伝えます。
messages.append({
'role': 'tool',
'tool_call_id': tool_call.id, # MUST match the assistant's tool_call.id
'content': json.dumps(result)
})contentは文字列にする
OpenAIはcontentが文字列であることを想定しています。オブジェクトはjson.dumpsでシリアライズします。
# Bad — will error
messages.append({'role': 'tool', 'tool_call_id': id, 'content': {'temp': 18}})
# Good
messages.append({'role': 'tool', 'tool_call_id': id, 'content': '{"temp": 18}'})Anthropicの形式
Anthropicでは、ユーザーメッセージ内にコンテンツブロックを配置します。
messages.append({
'role': 'user',
'content': [{
'type': 'tool_result',
'tool_use_id': 'toolu_abc',
'content': json.dumps(result)
}]
})エラーを返す
ツールが失敗した場合は、成功したふりをせずエラーを返します。モデルはそこから回復できます。
try:
result = run_tool(...)
content = json.dumps({'ok': True, 'data': result})
except Exception as e:
content = json.dumps({'ok': False, 'error': str(e)})
messages.append({'role': 'tool', 'tool_call_id': id, 'content': content})複数結果のパターン
並列ツール呼び出しでは、それぞれ対応するIDを付けて結果を追加します。
for tc in message.tool_calls:
result = dispatch(tc)
messages.append({
'role': 'tool',
'tool_call_id': tc.id,
'content': json.dumps(result)
})大きな出力は要約する
ツールが100KBのHTMLを返した場合、それをすべてモデルに送るとトークンを浪費し、注意が分散します。先に要約または切り詰めを行ってください。
def truncate(text, max_chars=4000):
if len(text) <= max_chars:
return text
return text[:max_chars] + f'\n...[truncated, {len(text)-max_chars} more chars]'
sample = "x" * 4500
result = truncate(sample, max_chars=50)
print(result)
常に同じスキーマにする
結果が成功、エラー、未検出のいずれであっても、出力スキーマは安定させます。形式が一貫している方が、モデルの信頼性は高くなります。
from typing import TypedDict, Literal, Optional, Any
class ToolResult(TypedDict):
status: Literal['ok', 'not_found', 'error']
data: Optional[Any]
error: Optional[str]
def make_result(status, data=None, error=None) -> ToolResult:
return {'status': status, 'data': data, 'error': error}
print(make_result('ok', data={'temp': 72}))
print(make_result('not_found', error='city not found'))メタデータのヒントを含める
コンテンツにヒントを含めることで、モデルが結果を解釈しやすくなります。
content = json.dumps({
'data': rows,
'note': 'Returned 50 rows (most recent first). There may be more matches.'
})バイナリデータ
大きなデータをツールメッセージにBase64エンコードして埋め込まないでください。代わりにストレージへ保存し、URLまたはIDを返します。
result = {
'image_path': '/tmp/chart-abc.png',
'thumbnail_url': 'https://...',
'caption': 'Sales by quarter, 2024'
}
for k, v in result.items():
print(f"{k}: {v}")
モデルをもう一度ループさせる
すべてのツール結果を追加した後、もう一度モデルを呼び出します。モデルは最終回答を生成するか、さらにツールを呼び出します。
class Msg:
def __init__(self, tool_calls=None, content=None):
self.tool_calls = tool_calls or []
self.content = content
class ToolCall:
def __init__(self, name, args):
self.name = name
self.args = args
def call_model(messages, tools):
if len(messages) < 4:
return Msg(tool_calls=[ToolCall('get_weather', {'city': 'Paris'})])
return Msg(content='It is sunny in Paris.')
messages = [{'role': 'user', 'content': 'Weather in Paris?'}]
tools = ['get_weather']
message = call_model(messages, tools)
while message.tool_calls:
for tc in message.tool_calls:
result = f'Result of {tc.name}({tc.args})'
messages.append({'role': 'tool', 'name': tc.name, 'content': result})
print('Tool call:', tc.name, '->', result)
message = call_model(messages, tools)
print('Final answer:', message.content)
ツール出力を監査する
デバッグ用に、すべての(tool_call_id、引数、結果)をログに記録します。エージェントが奇妙な動作をしたときは、まずツール結果のログを確認してください。
ツール結果の形式
ツールメッセージ内のtool_call_idは何を指しているのでしょうか。
まとめ
これで、ツール呼び出しのラウンドトリップ全体を扱えるようになりました。次のコースは、エージェントの3本目の柱であるメモリです。
よくある質問
「モデルへの結果の返却」レッスンは無料ですか?
はい。「モデルへの結果の返却」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、AI Agentsコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 AI Agentsコースには全4レッスンが含まれています。
「モデルへの結果の返却」で何を学びますか?
ツールの出力をtoolロールのメッセージとして整形し、モデルが読み取って会話を続けられるようにします。 ブラウザで直接実行するハンズオンコードでAI Agentsを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
AI Agentsを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのAI Agentsは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。
「モデルへの結果の返却」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このAI Agentsレッスンでコードを書いて実行できますか?
はい。すべてのAI Agentsレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。