gpt-oss 모델이 대화 구조, 추론 출력, 함수 호출을 구성하기 위해 학습한 Harmony 응답 형식의 개념과 프롬프트/메시지 포맷, 도구 호출 및 렌더러 사용법을 설명합니다.
테마 전환
Dominik Kundel(OpenAI)
gpt-oss 모델은 대화 구조를 정의하고, 추론 출력(reasoning output)을 생성하며, 함수 호출을 구조화하기 위해 Harmony 응답 형식(harmony response format)으로 학습되었습니다. gpt-oss를 직접 사용하지 않고 API 또는 Ollama 같은 제공자를 통해 사용한다면, 추론 솔루션이 포매팅을 처리해 주므로 이 형식에 대해 걱정할 필요가 없습니다. 하지만 자체 추론 솔루션을 구축하고 있다면, 이 가이드는 프롬프트 형식을 단계별로 안내합니다. 이 형식은 OpenAI Responses API를 모방하도록 설계되었으므로, 해당 API를 사용해 본 적이 있다면 익숙하게 느껴질 것입니다. gpt-oss는 Harmony 형식을 사용하지 않으면 올바르게 동작하지 않으므로, 반드시 Harmony 형식과 함께 사용해야 합니다.
모델이 처리하는 모든 메시지에는 역할(role)이 연결되어 있습니다. 모델은 다섯 가지 역할을 알고 있습니다:
| 역할 | 목적 |
|---|---|
system | 시스템 메시지는 추론 노력(reasoning effort), 지식 컷오프 같은 메타 정보, 내장 도구를 지정하는 데 사용됩니다 |
developer | 개발자 메시지는 모델에 대한 지시사항(일반적으로 “시스템 프롬프트”로 간주되는 것)과 사용 가능한 함수 도구(function tools)에 대한 정보를 제공하는 데 사용됩니다 |
user | 일반적으로 모델에 대한 입력을 나타냅니다 |
assistant | 모델이 출력하는 메시지로, 도구 호출(tool call) 또는 메시지 출력이 될 수 있습니다. 출력은 또한 메시지의 의도를 식별하는 특정 “채널(channel)”과 연결될 수 있습니다. |
tool | 도구 호출 결과를 나타내는 메시지입니다. 특정 도구 이름이 메시지 내부에서 role로 사용됩니다. |
이 역할들은 또한 지시 충돌이 발생했을 때 모델이 적용하는 정보 계층을 나타냅니다: system>developer>user>assistant>tool
어시스턴트 메시지는 세 가지 서로 다른 “채널”로 출력될 수 있습니다. 이는 사용자에게 보여주는 응답과 내부용 메시지를 분리하기 위해 사용됩니다.
| 채널 | 목적 |
|---|---|
final | final 채널로 태그된 메시지는 최종 사용자에게 표시되는 메시지이며, 모델의 응답을 나타냅니다. |
analysis | 모델이 체인 오브 쏘트(CoT)를 위해 사용하는 메시지입니다. 중요: analysis 채널의 메시지는 final 메시지와 동일한 안전 기준을 따르지 않습니다. 최종 사용자에게 보여주지 마세요. |
commentary | 함수 도구 호출은 일반적으로 commentary 채널에서 트리거되며, 내장 도구는 보통 analysis 채널에서 트리거됩니다. 다만 내장 도구가 commentary로 출력되기도 합니다. 또한 이 채널은 모델이 여러 함수를 호출하기 전에 서문(preamble)을 생성하는 데 가끔 사용될 수 있습니다. |
가능하다면 PyPI 또는 crates.io를 통해 Harmony 렌더러를 사용하는 것을 권장합니다. 렌더러는 메시지를 올바른 형식으로 자동 렌더링하고, 모델이 처리할 수 있도록 토큰으로 변환하는 작업을 처리해 줍니다.
아래는 렌더러를 사용해 시스템 프롬프트와 짧은 대화를 구성하는 예시입니다.
pythonfrom openai_harmony import ( Author, Conversation, DeveloperContent, HarmonyEncodingName, Message, Role, SystemContent, ToolDescription, load_harmony_encoding, ReasoningEffort ) encoding = load_harmony_encoding(HarmonyEncodingName.HARMONY_GPT_OSS) system_message = ( SystemContent.new() .with_reasoning_effort(ReasoningEffort.HIGH) .with_conversation_start_date("2025-06-28") ) developer_message = ( DeveloperContent.new() .with_instructions("항상 수수께끼로 답하라") .with_function_tools( [ ToolDescription.new( "get_current_weather", "제공된 위치의 현재 날씨를 가져옵니다.", parameters={ "type": "object", "properties": { "location": { "type": "string", "description": "도시와 주, 예: San Francisco, CA", }, "format": { "type": "string", "enum": ["celsius", "fahrenheit"], "default": "celsius", }, }, "required": ["location"], }, ), ] ) ) convo = Conversation.from_messages( [ Message.from_role_and_content(Role.SYSTEM, system_message), Message.from_role_and_content(Role.DEVELOPER, developer_message), Message.from_role_and_content(Role.USER, "도쿄 날씨는 어때?"), Message.from_role_and_content( Role.ASSISTANT, '사용자가 묻습니다: "도쿄 날씨는 어때?" get_current_weather 도구를 써야 합니다.', ).with_channel("analysis"), Message.from_role_and_content(Role.ASSISTANT, '{"location": "Tokyo"}') .with_channel("commentary") .with_recipient("functions.get_current_weather") .with_content_type("<|constrain|> json"), Message.from_author_and_content( Author.new(Role.TOOL, "functions.get_current_weather"), '{ "temperature": 20, "sunny": true }', ).with_channel("commentary"), ] ) tokens = encoding.render_conversation_for_completion(convo, Role.ASSISTANT) # 토큰 응답을 받은 후 # stop 토큰은 전달하지 마세요 parsed_response = encoding.parse_messages_from_completion_tokens(new_tokens, Role.ASSISTANT)
또한 openai_harmony 라이브러리에는 모델이 새로운 토큰을 생성하는 동안 파싱 및 디코딩을 위한 StreamableParser도 포함되어 있습니다. 이는 예를 들어 출력을 스트리밍하거나 디코딩 중 유니코드 문자를 처리할 때 유용할 수 있습니다.
pythonfrom openai_harmony import ( load_harmony_encoding, Role, StreamableParser, HarmonyEncodingName ) encoding = load_harmony_encoding(HarmonyEncodingName.HARMONY_GPT_OSS) stream = StreamableParser(encoding, role=Role.ASSISTANT) tokens = [ 200005,35644,200008,1844,31064,25,392,4827,382,220,17,659,220,17,16842,12295,81645, 13,51441,6052,13,200007,200006,173781,200005,17196,200008,17,659,220,17,314,220,19, 13,200002 ] for token in tokens: stream.process(token) print("--------------------------------") print("current_role", stream.current_role) print("current_channel", stream.current_channel) print("last_content_delta", stream.last_content_delta) print("current_content_type", stream.current_content_type) print("current_recipient", stream.current_recipient) print("current_content", stream.current_content)
자체 렌더러를 구축하기로 선택했다면, 아래 형식을 준수해야 합니다.
모델은 입력 구조를 식별하기 위해 특수 토큰 집합을 사용합니다. tiktoken을 사용한다면, 이 토큰들은 o200k_harmony 인코딩에 포함되어 있습니다. 모든 특수 토큰은 <|type|> 형식을 따릅니다.
| 특수 토큰 | 목적 | 토큰 ID |
|---|---|---|
| < | start | > |
| < | end | > |
| < | message | > |
| < | channel | > |
| < | constrain | > |
| < | return | > |
| < | call | > |
Harmony 응답 형식은 모델이 한 번에 여러 메시지를 생성할 수 있는 “메시지”로 구성됩니다. 메시지의 일반 구조는 다음과 같습니다:
<|start|>{header}<|message|>{content}<|end|>
{header}에는 역할을 포함한 일련의 메타 정보가 들어 있습니다. <|end|>는 완전히 완료된 메시지의 끝을 의미하지만, 모델은 도구 호출을 위한 <|call|>이나 완료를 나타내는 <|return|> 같은 다른 stop 토큰을 사용할 수도 있습니다.
위의 메시지 형식을 따르면, 가장 기본적인 채팅 형식은 user 메시지와 assistant 메시지의 시작으로 구성됩니다.
text<|start|>user<|message|>2 + 2는 뭐야?<|end|> <|start|>assistant
출력은 channel을 지정하는 것으로 시작합니다. 예를 들어 체인 오브 쏘트를 출력하기 위해 analysis를 사용할 수 있습니다. 모델은 여러 메시지(주로 체인 오브 쏘트 메시지)를 출력할 수 있으며, 이를 구분하기 위해 <|end|> 토큰을 사용합니다.
생성이 끝나면 모델은 최종 답변 생성을 완료했음을 나타내는 <|return|> 토큰 또는 도구 호출이 필요함을 나타내는 <|call|> 토큰으로 멈춥니다. 어느 경우든 이는 추론을 중단해야 함을 의미합니다.
text<|channel|>analysis<|message|>사용자가 묻습니다: "2 + 2는 뭐야?" 간단한 산수입니다. 답을 제공하세요.<|end|> <|start|>assistant<|channel|>final<|message|>2 + 2 = 4.<|return|>
final 채널에는 사용자의 요청에 대한 답이 들어 있습니다. 체인 오브 쏘트에 대한 더 자세한 내용은 추론 섹션을 참고하세요.
구현 참고: <|return|>은 디코드 시점(stop) 토큰으로만 사용됩니다. 다음 턴을 위해 어시스턴트의 생성된 답을 대화 히스토리에 추가할 때는, 저장되는 메시지가 <|start|>{header}<|message|>{content}<|end|> 형태로 완전해지도록 뒤에 붙은 <|return|>을 <|end|>로 바꾸세요. 따라서 프롬프트에서 이전 메시지는 <|end|>로 끝나야 합니다. 지도 학습 타깃/훈련 예시에는 <|return|>으로 끝내는 것이 적절하지만, 영구 저장되는 히스토리에서는 <|end|>로 정규화하세요.
시스템 메시지는 시스템에 대한 일반 정보를 제공하는 데 사용됩니다. 이는 다른 프롬프트 형식에서 흔히 “시스템 프롬프트”로 여기는 것과는 다릅니다. 그 용도는 개발자 메시지 형식을 참고하세요.
시스템 메시지는 다음을 정의하는 데 사용합니다:
You are ChatGPT, a large language model trained by OpenAI.로 유지되어야 합니다. 모델의 정체성을 바꾸고 싶다면 개발자 메시지의 지시사항을 사용하세요.Knowledge cutoff:와 Current date:high, medium, low 레벨로 지정analysis, commentary, final에 매핑하는 것이 좋습니다.python과 browser 도구로 학습되었습니다. 자세한 내용은 내장 도구 섹션을 참고하세요.함수를 정의하는 경우, 모든 함수 도구 호출은 commentary 채널로 가야 한다는 주의 문구도 포함해야 합니다.
최적 성능을 위해 가능한 한 이 형식을 그대로 따르세요.
가장 기본적으로 사용해야 하는 시스템 메시지는 다음과 같습니다:
text<|start|>system<|message|>You are ChatGPT, a large language model trained by OpenAI. Knowledge cutoff: 2024-06 Current date: 2025-06-28 Reasoning: high # Valid channels: analysis, commentary, final. Channel must be included for every message.<|end|>
개발자 메시지 섹션에 함수 호출이 있다면 다음을 사용하세요:
text<|start|>system<|message|>You are ChatGPT, a large language model trained by OpenAI. Knowledge cutoff: 2024-06 Current date: 2025-06-28 Reasoning: high # Valid channels: analysis, commentary, final. Channel must be included for every message. Calls to these tools must go to the commentary channel: 'functions'.<|end|>
개발자 메시지는 일반적으로 “시스템 프롬프트”로 간주되는 것을 나타냅니다. 여기에는 모델에 제공되는 지시사항과, 선택적으로 사용 가능한 함수 도구(function tools) 목록 또는 구조화된 출력(structured outputs)을 위해 모델이 따라야 할 출력 형식이 포함됩니다.
함수 도구 호출을 사용하지 않는다면 개발자 메시지는 다음과 같이 보일 것입니다:
text<|start|>developer<|message|># Instructions {instructions}<|end|>
여기서 {instructions}는 “시스템 프롬프트”로 대체됩니다.
함수 호출 도구를 정의하려면 전용 섹션을 확인하세요.
구조화된 출력에서 사용할 출력 형식을 정의하려면 가이드의 이 섹션을 확인하세요.
gpt-oss 모델은 추론 모델입니다. 기본적으로 모델은 중간(medium) 수준의 추론을 수행합니다. 추론을 제어하려면 시스템 메시지에서 low, medium, high 중 하나로 추론 레벨을 지정할 수 있습니다. 권장 형식은 다음과 같습니다:
Reasoning: high
모델은 raw 체인 오브 쏘트(CoT)를 analysis 채널의 어시스턴트 메시지로 출력하고, 최종 응답은 final로 출력합니다.
예를 들어 질문이 2 + 2는 뭐야?라면 모델 출력은 다음과 같이 보일 수 있습니다:
text<|channel|>analysis<|message|>사용자가 묻습니다: "2 + 2는 뭐야?" 간단한 산수입니다. 답을 제공하세요.<|end|> <|start|>assistant<|channel|>final<|message|>2 + 2 = 4.<|return|>
이 경우 CoT는 다음입니다:
사용자가 묻습니다: “2 + 2는 뭐야?” 간단한 산수입니다. 답을 제공하세요.
그리고 실제 답변은 다음입니다:
2 + 2 = 4
중요:
모델은 final 출력만큼 체인 오브 쏘트에서 동일한 안전 기준으로 학습되지 않았습니다. 체인 오브 쏘트를 사용자에게 보여주면 해로운 콘텐츠가 포함될 수 있으므로 보여주지 않아야 합니다. 모델 카드에서 자세히 알아보기.
일반적으로, 어시스턴트의 응답이 final 채널 메시지로 끝났다면 이후 샘플링에서는 이전 CoT 콘텐츠를 제거(drop)해야 합니다. 즉, 첫 입력이 다음과 같고:
text<|start|>user<|message|>2 + 2는 뭐야?<|end|> <|start|>assistant
출력이 다음과 같았다면:
text<|channel|>analysis<|message|>사용자가 묻습니다: "2 + 2는 뭐야?" 간단한 산수입니다. 답을 제공하세요.<|end|> <|start|>assistant<|channel|>final<|message|>2 + 2 = 4.<|return|>
모델이 올바르게 동작하도록 다음 샘플링의 입력은 다음이어야 합니다:
text<|start|>user<|message|>2 + 2는 뭐야?<|end|> <|start|>assistant<|channel|>final<|message|>2 + 2 = 4.<|end|> <|start|>user<|message|>9 / 2는?<|end|> <|start|>assistant
이 규칙의 예외는 도구/함수 호출입니다. 모델은 체인 오브 쏘트의 일부로 도구를 호출할 수 있으며, 따라서 이후 샘플링을 위한 입력으로 이전 체인 오브 쏘트를 다시 전달해야 합니다. 전체 예시는 함수 호출 섹션을 참고하세요.
모델이 사용할 수 있는 모든 함수는 개발자 메시지의 전용 Tools 섹션에 정의해야 합니다.
함수를 정의하기 위해 TypeScript와 유사한 타입 문법을 사용하며, 함수를 전용 functions 네임스페이스로 감쌉니다. 함수 호출 정확도를 높이기 위해 이 형식을 최대한 그대로 따르는 것이 중요합니다. 인자에 대한 JSON Schema 정의를 어떻게 이 형식으로 변환하는지는 harmony 렌더러 코드베이스에서 확인할 수 있으며, 일반적인 포매팅 관행은 다음과 같습니다:
type {function_name} = () => any로 정의_로 하고 타입 정의를 인라인으로 작성any 사용functions 네임스페이스 사용아래는 두 개의 함수를 정의하는 완전한 입력 예시입니다:
text<|start|>system<|message|>You are ChatGPT, a large language model trained by OpenAI. Knowledge cutoff: 2024-06 Current date: 2025-06-28 Reasoning: high # Valid channels: analysis, commentary, final. Channel must be included for every message. Calls to these tools must go to the commentary channel: 'functions'.<|end|><|start|>developer<|message|># Instructions 친근한 톤을 사용하세요. # Tools ## functions namespace functions { // 사용자의 위치를 가져옵니다. type get_location = () => any; // 제공된 위치의 현재 날씨를 가져옵니다. type get_current_weather = (_: { // 도시와 주, 예: San Francisco, CA location: string, format?: "celsius" | "fahrenheit", // default: celsius }) => any; // 제공된 위치 목록의 현재 날씨를 가져옵니다. type get_multiple_weathers = (_: { // 도시와 주 목록, 예: ["San Francisco, CA", "New York, NY"] locations: string[], format?: "celsius" | "fahrenheit", // default: celsius }) => any; } // namespace functions<|end|><|start|>user<|message|>SF 날씨는 어때?<|end|><|start|>assistant
모델이 도구를 호출하기로 결정하면, 메시지 헤더에서 recipient를 to={name} 형식으로 정의합니다. 예를 들어 위의 get_current_weather 함수를 트리거하기로 했다면, 헤더에 to=functions.get_current_weather를 지정하고, 시스템 메시지에 명시된 대로 채널은 commentary가 됩니다. recipient는 헤더의 role 또는 channel 섹션에서 정의될 수 있습니다.
모델은 도구 호출 입력의 타입을 나타내기 위해 <|constrain|> 토큰을 지정할 수도 있습니다. 이 경우 JSON으로 전달되므로 <|constrain|>은 json으로 설정됩니다.
text<|channel|>analysis<|message|>get_current_weather 함수를 사용해야 합니다.<|end|><|start|>assistant<|channel|>commentary to=functions.get_current_weather <|constrain|>json<|message|>{"location":"San Francisco"}<|call|>
함수 호출을 처리한 뒤에는, 호출 메시지 다음에 도구 출력이 담긴 새로운 tool 메시지를 지정하여 그 결과를 모델에 다시 제공해야 합니다.
tool 메시지 형식은 다음과 같습니다:
<|start|>{toolname} to=assistant<|channel|>commentary<|message|>{output}<|end|>
따라서 위 예시에서는:
<|start|>functions.get_current_weather to=assistant<|channel|>commentary<|message|>{"sunny": true, "temperature": 20}<|end|>
도구 호출 출력을 수집한 다음, 전체 콘텐츠로 추론을 실행할 수 있습니다:
text<|start|>system<|message|>You are ChatGPT, a large language model trained by OpenAI. Knowledge cutoff: 2024-06 Current date: 2025-06-28 Reasoning: high # Valid channels: analysis, commentary, final. Channel must be included for every message. Calls to these tools must go to the commentary channel: 'functions'.<|end|><|start|>developer<|message|># Instructions 친근한 톤을 사용하세요. # Tools ## functions namespace functions { // 사용자의 위치를 가져옵니다. type get_location = () => any; // 제공된 위치의 현재 날씨를 가져옵니다. type get_current_weather = (_: { // 도시와 주, 예: San Francisco, CA location: string, format?: "celsius" | "fahrenheit", // default: celsius }) => any; // 제공된 위치 목록의 현재 날씨를 가져옵니다. type get_multiple_weathers = (_: { // 도시와 주 목록, 예: ["San Francisco, CA", "New York, NY"] locations: string[], format?: "celsius" | "fahrenheit", // default: celsius }) => any; } // namespace functions<|end|><|start|>user<|message|>SF 날씨는 어때?<|end|><|start|>assistant<|channel|>analysis<|message|>get_current_weather 함수를 사용해야 합니다.<|end|><|start|>assistant<|channel|>commentary to=functions.get_current_weather <|constrain|>json<|message|>{"location":"San Francisco"}<|call|> <|start|>functions.get_current_weather to=assistant<|channel|>commentary<|message|>{"sunny": true, "temperature": 20}<|end|><|start|>assistant
위에서 볼 수 있듯, 추가 샘플링을 위해 함수 출력뿐 아니라 이전 체인 오브 쏘트(“get_current_weather 함수를 사용해야 합니다.”)도 다시 모델에 전달하여, 모델이 체인 오브 쏘트를 계속 이어가거나 최종 답변을 제공하는 데 필요한 정보를 확보하게 합니다.
때때로 모델은 호출하려는 도구에 대해 사용자에게 알리기 위해 “서문”을 생성할 수 있습니다. 예를 들어 여러 도구를 호출할 계획일 때 그렇습니다. 이런 경우, 체인 오브 쏘트와 달리 최종 사용자에게 보여주기 위한 commentary 채널의 어시스턴트 메시지를 생성합니다.
text<|channel|>analysis<|message|>{긴 체인 오브 쏘트}<|end|><|start|>assistant<|channel|>commentary<|message|>**액션 플랜**: 1. HTML 파일 생성 2. Node.js 서버용 JavaScript 생성 3. 서버 시작 --- 단계별로 계획을 실행하겠습니다<|end|><|start|>assistant<|channel|>commentary to=functions.generate_file<|constrain|>json<|message|>{"template": "basic_html", "path": "index.html"}<|call|>
이 경우 모델은 앞으로 실행할 여러 단계를 사용자에게 알리기 위해 액션 플랜을 생성했습니다.
모델의 출력 동작을 제어하려면, 개발자 메시지 끝에 다음 구조로 응답 형식(response format)을 정의할 수 있습니다:
text# Response Formats ## {format name} // {description or context} {schema}<|end|>
형식 이름은 Responses API에서 스키마에 지정할 수 있는 이름과 유사하게 작동하며, 스키마는 JSON Schema입니다.
예를 들어 다음은 쇼핑 리스트에 대한 스키마를 정의하는 개발자 메시지입니다:
text<|start|>developer<|message|># Instructions 당신은 도움이 되는 쇼핑 도우미입니다 # Response Formats ## shopping_list {"properties":{"items":{"type":"array","description":"쇼핑 리스트의 항목들","items":{"type":"string"}}},"type":"object"}<|end|><|start|>user<|message|>커피, 탄산음료, 달걀을 사야 해<|end|><|start|>assistant
다만 이 프롬프트만으로는 모델의 행동에 영향을 줄 뿐, 스키마를 완전히 준수한다고 보장하지는 않습니다. 이를 위해서는 자체 문법(grammar)을 구성하고 샘플링 중 스키마를 강제해야 합니다.
gpt-oss 모델의 학습 과정에서, 정보 탐색과 Python 코드 실행을 통해 결과를 개선할 수 있도록 두 가지 일반적인 도구로 학습되었습니다.
이 기능을 구축하려면, 신뢰성과 정확도를 높이기 위해 아래 형식을 사용하는 것이 좋습니다.
이 도구들은 개발자 메시지가 아니라 시스템 메시지에서 # Tools 섹션을 추가하여 정의해야 합니다.
브라우저 도구를 정의하려면 시스템 프롬프트 섹션에 추가하세요:
text<|start|>system<|message|>You are ChatGPT, a large language model trained by OpenAI. Knowledge cutoff: 2024-06 Current date: 2025-06-28 Reasoning: high # Tools ## browser // 브라우징을 위한 도구. // `cursor`는 각 브라우징 표시 앞에서 대괄호로 나타납니다: `[{cursor}]`. // 도구에서 나온 정보를 다음 형식으로 인용하세요: // `【{cursor}†L{line_start}(-L{line_end})?】`, 예: `【6†L9-L11】` 또는 `【8†L3】`. // 도구 출력에서 10단어를 초과하여 직접 인용하지 마세요. // sources=web (default: web) namespace browser { // `query`와 관련된 정보를 검색하고 `topn`개 결과를 표시합니다. type search = (_: { query: string, topn?: number, // default: 10 source?: string, }) => any; // `cursor`가 가리키는 페이지에서 `loc` 라인부터 `num_lines`줄을 보여주며 링크 `id`를 엽니다. // 유효한 링크 id는 `【{id}†.*】` 형식으로 표시됩니다. // `cursor`가 제공되지 않으면 가장 최근 페이지가 암묵적으로 사용됩니다. // `id`가 문자열이면 `source`와 연결된 완전한 URL로 취급됩니다. // `loc`가 제공되지 않으면 뷰포트는 문서 시작 또는 (가능하면) 가장 관련 있는 구절을 중심으로 위치합니다. // 열린 페이지의 새로운 위치로 스크롤하려면 `id` 없이 이 함수를 사용하세요. type open = (_: { id?: number | string, // default: -1 cursor?: number, // default: -1 loc?: number, // default: -1 num_lines?: number, // default: -1 view_source?: boolean, // default: false source?: string, }) => any; // 현재 페이지 또는 `cursor`가 지정한 페이지에서 `pattern`의 정확한 일치를 찾습니다. type find = (_: { pattern: string, cursor?: number, // default: -1 }) => any; } // namespace browser # Valid channels: analysis, commentary, final. Channel must be included for every message.<|end|>
모델이 브라우저에서 액션을 호출하기로 결정하면, 함수 호출과 같은 형식을 사용하되 두 가지 중요한 예외가 있습니다:
analysis 채널로 전송됩니다.browser.search, browser.open, browser.find가 됩니다.text<|start|>system<|message|>You are ChatGPT, a large language model trained by OpenAI. Knowledge cutoff: 2024-06 Current date: 2025-06-28 Reasoning: high # Tools ## python 이 도구는 체인 오브 쏘트에서 Python 코드를 실행하는 데 사용하세요. 코드는 사용자에게 표시되지 않습니다. 이 도구는 내부 추론을 위해 사용해야 하며, 사용자에게 보이도록 의도된 코드(예: 플롯, 표, 파일 생성)는 포함하지 않아야 합니다. Python 코드가 포함된 메시지를 python에 보내면, 상태를 유지하는 Jupyter 노트북 환경에서 실행됩니다. python은 실행 결과를 응답하거나 120.0초 후 타임아웃됩니다. '/mnt/data' 드라이브는 사용자 파일을 저장 및 지속(persist)하는 데 사용할 수 있습니다. 이 세션의 인터넷 접근 가능 여부는 UNKNOWN입니다. 클러스터에 따라 달라집니다. # Valid channels: analysis, commentary, final. Channel must be included for every message.<|end|>
모델이 Python 코드를 실행하기로 결정하면, 함수 호출과 같은 형식을 사용하되 두 가지 중요한 예외가 있습니다:
analysis 채널로 전송됩니다.python입니다.