0Pricing
AI Agents · 강의

모델에 결과 반환

도구 출력을 도구 역할 메시지로 형식화하여 모델이 읽고 대화를 계속할 수 있게 해보세요.

모델에 결과 반환은(는) CoddyKit의 무료 AI Agents 강의입니다. 이것은 4개 중 4번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 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)
})

콘텐츠는 문자열이어야 합니다

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와 함께 append합니다:

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}")

모델을 다시 루프에 넣기

모든 도구 결과를 append한 후 모델을 다시 호출합니다. 모델은 최종 답변을 생성하거나 더 많은 도구를 호출합니다:

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, args, result)를 기록하세요. 에이전트가 이상한 동작을 할 때 가장 먼저 확인할 곳은 도구 결과 기록입니다.

도구 결과 형식

도구 메시지의 tool_call_id는 무엇을 가리키나요?

복습

이제 도구 호출 왕복 과정 전체를 다룰 수 있습니다. 다음 과정에서는 에이전트의 세 번째 기둥인 메모리를 배웁니다.

자주 묻는 질문

“모델에 결과 반환” 강의는 무료인가요?

네 — “모델에 결과 반환” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 AI Agents 강의 전체를 잠금 해제할 수 있습니다. AI Agents 강의에는 총 4개의 강의가 포함되어 있습니다.

“모델에 결과 반환”에서 뭘 배우나요?

도구 출력을 도구 역할 메시지로 형식화하여 모델이 읽고 대화를 계속할 수 있게 해보세요. 브라우저에서 직접 실행하는 실습 코드로 AI Agents을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

AI Agents을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 AI Agents은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 4번째 강의입니다.

“모델에 결과 반환” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 AI Agents 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 AI Agents 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. 함수 호출 작동 방식
  2. 도구 스키마 정의(JSON Schema)
  3. 실행 중 도구 선택
  4. 모델에 결과 반환
← AI Agents(으)로 돌아가기