GPT 6.1(terra/sol)이 도구 호출 파라미터를 전부 채우려고 하나요?
GPT 6.1(terra/sol) tends to fill in tool call parameters?
핵심 요약
GPT 6.1 모델이 웹 검색 도구 호출 시 불필요한 파라미터까지 모두 채워 넣어 오류를 유발하는 현상에 대한 경험 공유 및 해결책 논의.
- 도구 호출 문제 — GPT 6.1이 웹 검색 도구의 모든 파라미터를 채워 넣어 오류 발생
- 모델 동작 특성 — 필수 필드가 없음에도 불구하고 모델이 임의로 값을 채우는 현상
- 도구 설계 조언 — 모든 기능을 하나의 도구에 몰아넣기보다 에이전트별로 도구를 분리할 것
- 스키마 설정 확인 — OpenAI의 strict 모드와 필수 필드 정의가 모델의 동작에 미치는 영향 분석
난 주로 Pi에서 Grok이나 DeepSeek 같은 모델을 쓰고, GPT는 Codex를 통해서 써왔거든. 최근에 싹 다 Pi로 옮겨서 GPT 6.1 시리즈를 써볼까 고민 중이었단 말이지. 근데 웹 액세스 플러그인을 쓰기 시작하니까 GPT가 진짜 이상하게 구는 거야. web_search 툴을 호출할 때 파라미터를 죄다 채워 넣으려고 하더라고.
{"type":"toolCall","id":"","name":"web_search","arguments":{"category":"news","domainFilter":[],"includeContent":false,"numResults":5,"provider":"auto","proxy":"","queries":["OpenAI latest news January 2026 Reuters","OpenAI recent announcements news 2026 OpenAI"],"query":"","recencyFilter":"month","workflow":"none"}
JSONL 로그를 비교해 봤거든. 예를 들어 Grok은 호출할 때 queries랑 numResults 딱 두 개만 채우는데, GPT 6.1 Terra/Sol 이 새끼는 파라미터를 전부 다 적어버려. 툴 정의를 확인해 봐도 필수 필드는 하나도 없는데 말이야.
tool def:
{
"name": "web_search",
"description": "Search the web for sources or answers. Full results are stored for retrieval with get_search_content by responseId. Prefer 2-4 varied queries.",
"parameters": {
"type": "object",
"properties": {
"query": { "type": "string" },
"queries": {
"type": "array",
"items": { "type": "string" },
"description": "Run concurrently (up to three at a time); vary the angle"
},
"numResults": {
"type": "integer",
"minimum": 1,
"maximum": 20,
"description": "Default 5"
},
"includeContent": {
"type": "boolean",
"description": "Also fetch full page content"
},
"recencyFilter": {
"type": "string",
"enum": ["day", "week", "month", "year"]
},
"domainFilter": {
"type": "array",
"items": { "type": "string" },
"description": "Prefix - to exclude"
},
"category": { "type": "string", "description": "Exa only, e.g. news" },
"model": {
"type": "string",
"description": "Model ID; needs provider openai, gemini, xai, mistral"
},
"provider": {
"type": "string",
"description": "auto, all, a name, or comma-separated names; omit for the configured default."
},
"workflow": {
"type": "string",
"enum": ["none", "summary-review", "auto-summary"],
"description": "Default none; summary-review opens the curator; auto-summary summarizes"
},
"proxy": {
"type": "string",
"description": "http(s) or socks proxy URL (env proxy vars ignored); \"\" forces direct"
}
}
}
}
