chore(i18n): refresh ko translations
This commit is contained in:
parent
82191b156a
commit
02dd5e55f5
File diff suppressed because it is too large
Load Diff
@ -1,53 +1,53 @@
|
||||
---
|
||||
read_when:
|
||||
- 임베디드 에이전트 런타임 또는 하니스 레지스트리를 변경하고 있습니다
|
||||
- 번들되었거나 신뢰할 수 있는 플러그인에서 에이전트 하니스를 등록하고 있습니다
|
||||
- Codex 플러그인이 모델 제공자와 어떻게 연결되는지 이해해야 합니다
|
||||
- 내장 에이전트 런타임 또는 하네스 레지스트리를 변경하고 있습니다
|
||||
- 번들되었거나 신뢰할 수 있는 플러그인에서 에이전트 하네스를 등록하고 있습니다
|
||||
- Codex 플러그인이 모델 제공자와 어떤 관련이 있는지 이해해야 합니다
|
||||
sidebarTitle: Agent Harness
|
||||
summary: 저수준 임베디드 에이전트 실행기를 대체하는 플러그인을 위한 실험적 SDK 표면
|
||||
title: 에이전트 하니스 플러그인
|
||||
summary: 낮은 수준의 내장 에이전트 실행기를 대체하는 플러그인을 위한 실험적 SDK 표면
|
||||
title: 에이전트 하네스 플러그인
|
||||
x-i18n:
|
||||
generated_at: "2026-04-11T02:46:14Z"
|
||||
generated_at: "2026-04-12T00:18:56Z"
|
||||
model: gpt-5.4
|
||||
provider: openai
|
||||
source_hash: 43c1f2c087230398b0162ed98449f239c8db1e822e51c7dcd40c54fa6c3374e1
|
||||
source_hash: 62b88fd24ce8b600179db27e16e8d764a2cd7a14e5c5df76374c33121aa5e365
|
||||
source_path: plugins/sdk-agent-harness.md
|
||||
workflow: 15
|
||||
---
|
||||
|
||||
# 에이전트 하니스 플러그인
|
||||
# 에이전트 하네스 플러그인
|
||||
|
||||
**에이전트 하니스**는 준비된 OpenClaw 에이전트 턴 하나를 실행하는 저수준 실행기입니다. 이것은 모델 제공자도, 채널도, 도구 레지스트리도 아닙니다.
|
||||
**에이전트 하네스**는 준비된 OpenClaw 에이전트 턴 하나를 위한 낮은 수준의 실행기입니다. 이는 모델 제공자도, 채널도, 도구 레지스트리도 아닙니다.
|
||||
|
||||
이 표면은 번들되었거나 신뢰할 수 있는 네이티브 플러그인에만 사용하세요. 매개변수 타입이 의도적으로 현재 임베디드 러너를 반영하기 때문에, 이 계약은 아직 실험적입니다.
|
||||
이 표면은 번들되었거나 신뢰할 수 있는 네이티브 플러그인에만 사용하세요. 이 계약은 매개변수 타입이 의도적으로 현재 내장 러너를 그대로 반영하므로 아직 실험적입니다.
|
||||
|
||||
## 하니스를 사용해야 하는 경우
|
||||
## 하네스를 사용하는 경우
|
||||
|
||||
모델 계열이 자체 네이티브 세션 런타임을 갖고 있고, 일반적인 OpenClaw 제공자 전송이 잘못된 추상화일 때 에이전트 하니스를 등록하세요.
|
||||
모델 계열이 자체 네이티브 세션 런타임을 가지고 있고 일반적인 OpenClaw 제공자 전송이 잘못된 추상화일 때 에이전트 하네스를 등록하세요.
|
||||
|
||||
예시:
|
||||
|
||||
- 스레드와 compaction을 자체적으로 관리하는 네이티브 코딩 에이전트 서버
|
||||
- 스레드와 compaction을 직접 관리하는 네이티브 코딩 에이전트 서버
|
||||
- 네이티브 plan/reasoning/tool 이벤트를 스트리밍해야 하는 로컬 CLI 또는 데몬
|
||||
- OpenClaw 세션 transcript 외에 자체 resume id가 필요한 모델 런타임
|
||||
- OpenClaw 세션 transcript에 더해 자체 resume id가 필요한 모델 런타임
|
||||
|
||||
새 LLM API를 추가하기 위해 하니스를 등록해서는 **안 됩니다**. 일반적인 HTTP 또는 WebSocket 모델 API의 경우 [provider plugin](/ko/plugins/sdk-provider-plugins)을 만드세요.
|
||||
새 LLM API를 추가하기 위해 하네스를 등록해서는 **안 됩니다**. 일반적인 HTTP 또는 WebSocket 모델 API의 경우 [provider plugin](/ko/plugins/sdk-provider-plugins)을 빌드하세요.
|
||||
|
||||
## 여전히 core가 담당하는 것
|
||||
## 코어가 계속 소유하는 것
|
||||
|
||||
하니스가 선택되기 전에 OpenClaw는 이미 다음을 결정했습니다.
|
||||
하네스가 선택되기 전에 OpenClaw는 이미 다음을 해석합니다:
|
||||
|
||||
- provider와 model
|
||||
- 제공자와 모델
|
||||
- 런타임 인증 상태
|
||||
- thinking level과 컨텍스트 예산
|
||||
- thinking level과 context budget
|
||||
- OpenClaw transcript/session 파일
|
||||
- workspace, sandbox, 도구 정책
|
||||
- 채널 응답 콜백과 스트리밍 콜백
|
||||
- 모델 폴백 및 live model switching 정책
|
||||
- 모델 폴백과 라이브 모델 전환 정책
|
||||
|
||||
이 분리는 의도된 것입니다. 하니스는 준비된 시도를 실행할 뿐이며, 제공자를 선택하거나, 채널 전달을 대체하거나, 모델을 몰래 전환하지 않습니다.
|
||||
이 분리는 의도된 것입니다. 하네스는 준비된 시도를 실행할 뿐이며, 제공자를 선택하거나, 채널 전달을 대체하거나, 모델을 조용히 전환하지 않습니다.
|
||||
|
||||
## 하니스 등록
|
||||
## 하네스 등록
|
||||
|
||||
**가져오기:** `openclaw/plugin-sdk/agent-harness`
|
||||
|
||||
@ -57,7 +57,7 @@ import { definePluginEntry } from "openclaw/plugin-sdk/plugin-entry";
|
||||
|
||||
const myHarness: AgentHarness = {
|
||||
id: "my-harness",
|
||||
label: "내 네이티브 에이전트 하니스",
|
||||
label: "My native agent harness",
|
||||
|
||||
supports(ctx) {
|
||||
return ctx.provider === "my-provider"
|
||||
@ -66,9 +66,9 @@ const myHarness: AgentHarness = {
|
||||
},
|
||||
|
||||
async runAttempt(params) {
|
||||
// 네이티브 스레드를 시작하거나 재개합니다.
|
||||
// params.prompt, params.tools, params.images, params.onPartialReply,
|
||||
// params.onAgentEvent 및 기타 준비된 시도 필드를 사용하세요.
|
||||
// Start or resume your native thread.
|
||||
// Use params.prompt, params.tools, params.images, params.onPartialReply,
|
||||
// params.onAgentEvent, and the other prepared attempt fields.
|
||||
return await runMyNativeTurn(params);
|
||||
},
|
||||
};
|
||||
@ -76,7 +76,7 @@ const myHarness: AgentHarness = {
|
||||
export default definePluginEntry({
|
||||
id: "my-native-agent",
|
||||
name: "My Native Agent",
|
||||
description: "선택한 모델을 네이티브 에이전트 데몬을 통해 실행합니다.",
|
||||
description: "Runs selected models through a native agent daemon.",
|
||||
register(api) {
|
||||
api.registerAgentHarness(myHarness);
|
||||
},
|
||||
@ -85,43 +85,51 @@ export default definePluginEntry({
|
||||
|
||||
## 선택 정책
|
||||
|
||||
OpenClaw는 provider/model을 결정한 뒤 하니스를 선택합니다.
|
||||
OpenClaw는 제공자/모델 해석 후 하네스를 선택합니다:
|
||||
|
||||
1. `OPENCLAW_AGENT_RUNTIME=<id>`는 해당 id의 등록된 하니스를 강제합니다.
|
||||
2. `OPENCLAW_AGENT_RUNTIME=pi`는 내장 PI 하니스를 강제합니다.
|
||||
3. `OPENCLAW_AGENT_RUNTIME=auto`는 등록된 하니스에, 결정된 provider/model을 지원하는지 묻습니다.
|
||||
4. 일치하는 등록된 하니스가 없으면, PI 폴백이 비활성화되지 않은 한 OpenClaw는 PI를 사용합니다.
|
||||
1. `OPENCLAW_AGENT_RUNTIME=<id>`는 해당 id를 가진 등록된 하네스를 강제합니다.
|
||||
2. `OPENCLAW_AGENT_RUNTIME=pi`는 내장 PI 하네스를 강제합니다.
|
||||
3. `OPENCLAW_AGENT_RUNTIME=auto`는 등록된 하네스에 해석된 제공자/모델을 지원하는지 묻습니다.
|
||||
4. 등록된 하네스가 일치하지 않으면, PI 폴백이 비활성화되지 않은 한 OpenClaw는 PI를 사용합니다.
|
||||
|
||||
강제된 플러그인 하니스 실패는 실행 실패로 드러납니다. `auto` 모드에서는 선택된 플러그인 하니스가 턴의 부작용을 만들기 전에 실패하면 OpenClaw가 PI로 폴백할 수 있습니다. 대신 그 폴백을 즉시 실패로 처리하려면 `OPENCLAW_AGENT_HARNESS_FALLBACK=none` 또는 `embeddedHarness.fallback: "none"`을 설정하세요.
|
||||
강제된 플러그인 하네스 실패는 실행 실패로 표시됩니다. `auto` 모드에서는 선택된 플러그인 하네스가 턴이 부작용을 만들기 전에 실패하면 OpenClaw가 PI로 폴백할 수 있습니다. 대신 그 폴백을 하드 실패로 만들려면 `OPENCLAW_AGENT_HARNESS_FALLBACK=none` 또는 `embeddedHarness.fallback: "none"`을 설정하세요.
|
||||
|
||||
번들된 Codex 플러그인은 `codex`를 하니스 id로 등록합니다. Core는 이를 일반적인 플러그인 하니스 id로 취급합니다. Codex 전용 별칭은 공유 런타임 선택기가 아니라 플러그인 또는 운영자 config에 속해야 합니다.
|
||||
번들된 Codex 플러그인은 `codex`를 하네스 id로 등록합니다. 코어는 이를 일반적인 플러그인 하네스 id로 취급합니다. Codex 전용 별칭은 공유 런타임 선택기가 아니라 플러그인 또는 운영자 설정에 속해야 합니다.
|
||||
|
||||
## provider와 harness의 페어링
|
||||
## 제공자와 하네스 페어링
|
||||
|
||||
대부분의 하니스는 provider도 함께 등록해야 합니다. provider는 모델 ref, 인증 상태, 모델 메타데이터, `/model` 선택을 OpenClaw의 나머지 부분에 노출합니다. 그런 다음 하니스는 `supports(...)`에서 해당 provider를 주장합니다.
|
||||
대부분의 하네스는 제공자도 함께 등록해야 합니다. 제공자는 모델 ref, 인증 상태, 모델 메타데이터, `/model` 선택을 OpenClaw의 나머지 부분에서 볼 수 있게 합니다. 그런 다음 하네스는 `supports(...)`에서 해당 제공자를 claim합니다.
|
||||
|
||||
번들된 Codex 플러그인은 이 패턴을 따릅니다.
|
||||
번들된 Codex 플러그인은 이 패턴을 따릅니다:
|
||||
|
||||
- provider id: `codex`
|
||||
- 사용자 모델 ref: `codex/gpt-5.4`, `codex/gpt-5.2` 또는 Codex app server가 반환하는 다른 모델
|
||||
- 사용자 모델 ref: `codex/gpt-5.4`, `codex/gpt-5.2`, 또는 Codex app server가 반환하는 다른 모델
|
||||
- harness id: `codex`
|
||||
- auth: 합성 provider 가용성, Codex 하니스가 네이티브 Codex 로그인/세션을 관리하기 때문
|
||||
- app-server 요청: OpenClaw는 Codex에 순수 모델 id를 보내고, 하니스가 네이티브 app-server 프로토콜과 통신하게 합니다.
|
||||
- auth: 합성 제공자 가용성. Codex 하네스가 네이티브 Codex 로그인/세션을 소유하기 때문입니다
|
||||
- app-server request: OpenClaw는 bare model id를 Codex에 보내고 하네스가 네이티브 app-server 프로토콜과 통신하도록 둡니다
|
||||
|
||||
Codex 플러그인은 추가적인 것입니다. 일반 `openai/gpt-*` ref는 여전히 OpenAI provider ref이며 계속해서 일반 OpenClaw provider 경로를 사용합니다. Codex가 관리하는 인증, Codex 모델 탐색, 네이티브 스레드, Codex app-server 실행을 원할 때 `codex/gpt-*`를 선택하세요. `/model`은 OpenAI provider 자격 증명 없이도 Codex app server가 반환한 Codex 모델들 사이를 전환할 수 있습니다.
|
||||
Codex 플러그인은 추가적입니다. 일반 `openai/gpt-*` ref는 계속 OpenAI provider ref로 남으며 일반 OpenClaw provider 경로를 계속 사용합니다. Codex 관리 인증, Codex 모델 검색, 네이티브 스레드, Codex app-server 실행을 원할 때는 `codex/gpt-*`를 선택하세요. `/model`은 OpenAI provider 자격 증명이 없어도 Codex app server가 반환한 Codex 모델들 사이를 전환할 수 있습니다.
|
||||
|
||||
운영자 설정, 모델 접두사 예시, Codex 전용 config는
|
||||
[Codex Harness](/ko/plugins/codex-harness)를 참조하세요.
|
||||
운영자 설정, 모델 접두사 예시, Codex 전용 구성은 [Codex Harness](/ko/plugins/codex-harness)를 참조하세요.
|
||||
|
||||
OpenClaw는 Codex app-server `0.118.0` 이상을 요구합니다. Codex 플러그인은 app-server initialize 핸드셰이크를 검사하고 더 오래되었거나 버전이 없는 서버를 차단하여, OpenClaw가 테스트된 프로토콜 표면에서만 실행되도록 합니다.
|
||||
OpenClaw는 Codex app-server `0.118.0` 이상을 요구합니다. Codex 플러그인은 app-server initialize 핸드셰이크를 검사하고 더 오래되었거나 버전이 없는 서버를 차단하여 OpenClaw가 테스트된 프로토콜 표면에 대해서만 실행되도록 합니다.
|
||||
|
||||
### 네이티브 Codex 하네스 모드
|
||||
|
||||
번들된 `codex` 하네스는 내장 OpenClaw 에이전트 턴을 위한 네이티브 Codex 모드입니다. 먼저 번들된 `codex` 플러그인을 활성화하고, 구성이 제한적인 allowlist를 사용한다면 `plugins.allow`에 `codex`를 포함하세요. 이것은 `openai-codex/*`와 다릅니다:
|
||||
|
||||
- `openai-codex/*`는 일반 OpenClaw provider 경로를 통해 ChatGPT/Codex OAuth를 사용합니다.
|
||||
- `codex/*`는 번들된 Codex provider를 사용하고 턴을 Codex app-server를 통해 라우팅합니다.
|
||||
|
||||
이 모드가 실행되면 Codex는 네이티브 thread id, resume 동작, compaction, app-server 실행을 소유합니다. OpenClaw는 여전히 채팅 채널, 표시되는 transcript mirror, 도구 정책, 승인, 미디어 전달, 세션 선택을 소유합니다. Codex app-server 경로가 사용되고 있고 PI 폴백이 고장 난 네이티브 하네스를 숨기지 않음을 증명해야 한다면 `embeddedHarness.runtime: "codex"`와 `embeddedHarness.fallback: "none"`을 사용하세요.
|
||||
|
||||
## PI 폴백 비활성화
|
||||
|
||||
기본적으로 OpenClaw는 임베디드 에이전트를 `agents.defaults.embeddedHarness`가 `{ runtime: "auto", fallback: "pi" }`로 설정된 상태로 실행합니다. `auto` 모드에서 등록된 플러그인 하니스는 provider/model 쌍을 주장할 수 있습니다. 일치하는 것이 없거나, 자동 선택된 플러그인 하니스가 출력을 만들기 전에 실패하면 OpenClaw는 PI로 폴백합니다.
|
||||
기본적으로 OpenClaw는 `agents.defaults.embeddedHarness`를 `{ runtime: "auto", fallback: "pi" }`로 설정하여 내장 에이전트를 실행합니다. `auto` 모드에서 등록된 플러그인 하네스는 제공자/모델 쌍을 claim할 수 있습니다. 일치하는 것이 없거나 자동 선택된 플러그인 하네스가 출력을 만들기 전에 실패하면 OpenClaw는 PI로 폴백합니다.
|
||||
|
||||
플러그인 하니스만 실행되고 있음을 증명해야 할 때는 `fallback: "none"`을 설정하세요. 이렇게 하면 자동 PI 폴백이 비활성화되지만, 명시적인 `runtime: "pi"` 또는 `OPENCLAW_AGENT_RUNTIME=pi`까지 막지는 않습니다.
|
||||
플러그인 하네스가 유일하게 실행되는 런타임임을 증명해야 할 때는 `fallback: "none"`을 설정하세요. 이렇게 하면 자동 PI 폴백이 비활성화됩니다. 명시적인 `runtime: "pi"` 또는 `OPENCLAW_AGENT_RUNTIME=pi`는 차단하지 않습니다.
|
||||
|
||||
Codex 전용 임베디드 실행의 경우:
|
||||
Codex 전용 내장 실행의 경우:
|
||||
|
||||
```json
|
||||
{
|
||||
@ -137,7 +145,7 @@ Codex 전용 임베디드 실행의 경우:
|
||||
}
|
||||
```
|
||||
|
||||
등록된 어떤 플러그인 하니스든 일치하는 모델을 주장할 수 있게 하되, OpenClaw가 절대로 조용히 PI로 폴백하지 않게 하려면 `runtime: "auto"`를 유지하고 폴백을 비활성화하세요.
|
||||
등록된 어떤 플러그인 하네스라도 일치하는 모델을 claim하게 하되 OpenClaw가 절대로 조용히 PI로 폴백하지 않게 하려면 `runtime: "auto"`를 유지하고 폴백을 비활성화하세요:
|
||||
|
||||
```json
|
||||
{
|
||||
@ -152,7 +160,7 @@ Codex 전용 임베디드 실행의 경우:
|
||||
}
|
||||
```
|
||||
|
||||
에이전트별 재정의도 같은 형태를 사용합니다.
|
||||
에이전트별 재정의도 같은 형태를 사용합니다:
|
||||
|
||||
```json
|
||||
{
|
||||
@ -177,7 +185,7 @@ Codex 전용 임베디드 실행의 경우:
|
||||
}
|
||||
```
|
||||
|
||||
`OPENCLAW_AGENT_RUNTIME`는 여전히 구성된 런타임을 재정의합니다. 환경에서 PI 폴백을 비활성화하려면 `OPENCLAW_AGENT_HARNESS_FALLBACK=none`을 사용하세요.
|
||||
`OPENCLAW_AGENT_RUNTIME`는 여전히 구성된 runtime보다 우선합니다. 환경에서 PI 폴백을 비활성화하려면 `OPENCLAW_AGENT_HARNESS_FALLBACK=none`을 사용하세요.
|
||||
|
||||
```bash
|
||||
OPENCLAW_AGENT_RUNTIME=codex \
|
||||
@ -185,39 +193,39 @@ OPENCLAW_AGENT_HARNESS_FALLBACK=none \
|
||||
openclaw gateway run
|
||||
```
|
||||
|
||||
폴백이 비활성화되면, 요청된 하니스가 등록되지 않았거나, 결정된 provider/model을 지원하지 않거나, 턴의 부작용을 만들기 전에 실패할 경우 세션이 초기에 실패합니다. 이는 Codex 전용 배포와 Codex app-server 경로가 실제로 사용 중임을 증명해야 하는 live test를 위한 의도된 동작입니다.
|
||||
폴백이 비활성화되면 요청된 하네스가 등록되지 않았거나, 해석된 제공자/모델을 지원하지 않거나, 턴 부작용을 만들기 전에 실패할 때 세션은 초기에 실패합니다. 이는 Codex 전용 배포와 Codex app-server 경로가 실제로 사용 중임을 증명해야 하는 라이브 테스트를 위한 의도된 동작입니다.
|
||||
|
||||
이 설정은 임베디드 에이전트 하니스만 제어합니다. image, video, music, TTS, PDF 또는 기타 provider별 모델 라우팅은 비활성화하지 않습니다.
|
||||
이 설정은 내장 에이전트 하네스만 제어합니다. 이미지, 비디오, 음악, TTS, PDF 또는 다른 제공자별 모델 라우팅은 비활성화하지 않습니다.
|
||||
|
||||
## 네이티브 세션과 transcript 미러링
|
||||
## 네이티브 세션과 transcript mirror
|
||||
|
||||
하니스는 네이티브 session id, thread id 또는 데몬 측 resume token을 유지할 수 있습니다. 이 바인딩을 OpenClaw 세션과 명시적으로 연결된 상태로 유지하고, 사용자에게 보이는 assistant/tool 출력을 OpenClaw transcript에도 계속 미러링하세요.
|
||||
하네스는 네이티브 session id, thread id 또는 데몬 측 resume token을 유지할 수 있습니다. 그 바인딩을 OpenClaw 세션과 명시적으로 연결해 두고, 사용자에게 보이는 assistant/tool 출력을 OpenClaw transcript에 계속 미러링하세요.
|
||||
|
||||
OpenClaw transcript는 다음을 위한 호환성 계층으로 남아 있습니다.
|
||||
OpenClaw transcript는 다음을 위한 호환성 계층으로 남아 있습니다:
|
||||
|
||||
- 채널에 보이는 세션 기록
|
||||
- 채널에 표시되는 세션 기록
|
||||
- transcript 검색 및 인덱싱
|
||||
- 이후 턴에서 내장 PI 하니스로 다시 전환
|
||||
- 일반적인 `/new`, `/reset`, 세션 삭제 동작
|
||||
- 이후 턴에서 내장 PI 하네스로 다시 전환
|
||||
- 일반 `/new`, `/reset`, 세션 삭제 동작
|
||||
|
||||
하니스가 사이드카 바인딩을 저장한다면, 소유한 OpenClaw 세션이 재설정될 때 이를 지울 수 있도록 `reset(...)`을 구현하세요.
|
||||
하네스가 사이드카 바인딩을 저장한다면 소유한 OpenClaw 세션이 재설정될 때 OpenClaw가 이를 지울 수 있도록 `reset(...)`을 구현하세요.
|
||||
|
||||
## 도구 및 미디어 결과
|
||||
|
||||
Core는 OpenClaw 도구 목록을 구성하고 이를 준비된 시도에 전달합니다. 하니스가 동적 도구 호출을 실행할 때는, 채널 미디어를 직접 보내는 대신 하니스 결과 형태를 통해 도구 결과를 반환하세요.
|
||||
코어는 OpenClaw 도구 목록을 구성하고 이를 준비된 시도에 전달합니다. 하네스가 동적 도구 호출을 실행할 때는 채널 미디어를 직접 보내는 대신 하네스 결과 형태를 통해 도구 결과를 반환하세요.
|
||||
|
||||
이렇게 하면 텍스트, image, video, music, TTS, 승인, 메시징 도구 출력이 PI 기반 실행과 동일한 전달 경로를 유지합니다.
|
||||
이렇게 하면 텍스트, 이미지, 비디오, 음악, TTS, 승인, 메시징 도구 출력이 PI 기반 실행과 동일한 전달 경로를 유지합니다.
|
||||
|
||||
## 현재 제한 사항
|
||||
|
||||
- 공개 import 경로는 일반적이지만, 일부 시도/결과 타입 별칭은 호환성을 위해 여전히 `Pi` 이름을 사용합니다.
|
||||
- 서드파티 하니스 설치는 실험적입니다. 네이티브 세션 런타임이 꼭 필요해질 때까지는 provider plugin을 우선 사용하세요.
|
||||
- 턴 간 하니스 전환은 지원됩니다. 네이티브 도구, 승인, assistant 텍스트 또는 메시지 전송이 시작된 뒤 턴 중간에 하니스를 전환하지 마세요.
|
||||
- 공개 import 경로는 일반적이지만, 일부 attempt/result 타입 별칭은 호환성을 위해 여전히 `Pi` 이름을 사용합니다.
|
||||
- 서드파티 하네스 설치는 실험적입니다. 네이티브 세션 런타임이 필요해질 때까지는 provider plugin을 우선 사용하세요.
|
||||
- 턴 간 하네스 전환은 지원됩니다. 네이티브 도구, 승인, assistant 텍스트 또는 메시지 전송이 시작된 뒤에는 턴 중간에 하네스를 전환하지 마세요.
|
||||
|
||||
## 관련 문서
|
||||
## 관련 항목
|
||||
|
||||
- [SDK 개요](/ko/plugins/sdk-overview)
|
||||
- [런타임 헬퍼](/ko/plugins/sdk-runtime)
|
||||
- [Provider Plugins](/ko/plugins/sdk-provider-plugins)
|
||||
- [제공자 플러그인](/ko/plugins/sdk-provider-plugins)
|
||||
- [Codex Harness](/ko/plugins/codex-harness)
|
||||
- [모델 제공자](/ko/concepts/model-providers)
|
||||
|
||||
@ -1,39 +1,37 @@
|
||||
---
|
||||
read_when:
|
||||
- OpenClaw에서 OpenAI 모델을 사용하려는 경우
|
||||
- API 키 대신 Codex 구독 인증을 사용하려는 경우
|
||||
summary: OpenClaw에서 API 키 또는 Codex 구독으로 OpenAI 사용
|
||||
- OpenClaw에서 OpenAI 모델을 사용하려고 합니다
|
||||
- API 키 대신 Codex 구독 인증을 사용하려고 합니다
|
||||
- 더 엄격한 GPT-5 에이전트 실행 동작이 필요합니다
|
||||
summary: OpenClaw에서 API 키 또는 Codex 구독을 사용해 OpenAI를 이용하세요
|
||||
title: OpenAI
|
||||
x-i18n:
|
||||
generated_at: "2026-04-07T06:01:33Z"
|
||||
generated_at: "2026-04-12T00:19:00Z"
|
||||
model: gpt-5.4
|
||||
provider: openai
|
||||
source_hash: 6a2ce1ce5f085fe55ec50b8d20359180b9002c9730820cd5b0e011c3bf807b64
|
||||
source_hash: 7aa06fba9ac901e663685a6b26443a2f6aeb6ec3589d939522dc87cbb43497b4
|
||||
source_path: providers/openai.md
|
||||
workflow: 15
|
||||
---
|
||||
|
||||
# OpenAI
|
||||
|
||||
OpenAI는 GPT 모델용 개발자 API를 제공합니다. Codex는 구독 기반 액세스를 위한 **ChatGPT 로그인** 또는 사용량 기반 액세스를 위한 **API 키** 로그인을 지원합니다. Codex cloud에는 ChatGPT 로그인이 필요합니다.
|
||||
OpenAI는 OpenClaw와 같은 외부 도구/워크플로에서의 구독 OAuth 사용을 명시적으로 지원합니다.
|
||||
OpenAI는 GPT 모델용 개발자 API를 제공합니다. Codex는 구독 기반 액세스를 위한 **ChatGPT sign-in** 또는 사용량 기반 액세스를 위한 **API key** sign-in을 지원합니다. Codex cloud는 ChatGPT sign-in이 필요합니다.
|
||||
OpenAI는 OpenClaw 같은 외부 도구/워크플로에서 구독 OAuth 사용을 명시적으로 지원합니다.
|
||||
|
||||
## 기본 상호작용 스타일
|
||||
|
||||
OpenClaw는 `openai/*` 및
|
||||
`openai-codex/*` 실행 모두에 대해 OpenAI 전용 프롬프트 오버레이를 소량 추가할 수 있습니다. 기본적으로 이 오버레이는 기본 OpenClaw 시스템 프롬프트를 대체하지 않으면서,
|
||||
어시스턴트가 따뜻하고,
|
||||
협업적이며, 간결하고, 직접적이고, 약간 더 감정 표현이 풍부하도록
|
||||
유지합니다. 이 친화적 오버레이는 전체
|
||||
출력을 간결하게 유지하면서, 자연스럽게 어울릴 때 가끔 이모지도 허용합니다.
|
||||
OpenClaw는 `openai/*` 및 `openai-codex/*` 실행 모두에 대해 작은 OpenAI 전용 프롬프트 오버레이를 추가할 수 있습니다. 기본적으로 이 오버레이는 기본 OpenClaw 시스템 프롬프트를 대체하지 않으면서도 어시스턴트를 따뜻하고,
|
||||
협력적이며, 간결하고, 직접적이고, 감정 표현이 약간 더 풍부하게 유지합니다. 이 친화적 오버레이는
|
||||
전체 출력은 간결하게 유지하면서 자연스럽게 어울릴 때 가끔 이모지도 허용합니다.
|
||||
|
||||
구성 키:
|
||||
|
||||
`plugins.entries.openai.config.personality`
|
||||
|
||||
허용 값:
|
||||
허용되는 값:
|
||||
|
||||
- `"friendly"`: 기본값, OpenAI 전용 오버레이를 활성화합니다.
|
||||
- `"friendly"`: 기본값; OpenAI 전용 오버레이를 활성화합니다.
|
||||
- `"on"`: `"friendly"`의 별칭입니다.
|
||||
- `"off"`: 오버레이를 비활성화하고 기본 OpenClaw 프롬프트만 사용합니다.
|
||||
|
||||
@ -43,8 +41,8 @@ OpenClaw는 `openai/*` 및
|
||||
- `openai-codex/*` 모델에 적용됩니다.
|
||||
- 다른 provider에는 영향을 주지 않습니다.
|
||||
|
||||
이 동작은 기본적으로 활성화되어 있습니다. 향후 로컬 구성 변경이 있더라도
|
||||
이 설정을 유지하려면 `"friendly"`를 명시적으로 유지하세요.
|
||||
이 동작은 기본적으로 활성화되어 있습니다. 향후 로컬 구성 변경에도 유지되도록 하려면
|
||||
`"friendly"`를 명시적으로 유지하세요:
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -62,7 +60,7 @@ OpenClaw는 `openai/*` 및
|
||||
|
||||
### OpenAI 프롬프트 오버레이 비활성화
|
||||
|
||||
수정되지 않은 기본 OpenClaw 프롬프트를 원하면 오버레이를 `"off"`로 설정하세요.
|
||||
수정되지 않은 기본 OpenClaw 프롬프트를 원한다면 오버레이를 `"off"`로 설정하세요:
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -78,25 +76,25 @@ OpenClaw는 `openai/*` 및
|
||||
}
|
||||
```
|
||||
|
||||
config CLI로 직접 설정할 수도 있습니다.
|
||||
구성 CLI로 직접 설정할 수도 있습니다:
|
||||
|
||||
```bash
|
||||
openclaw config set plugins.entries.openai.config.personality off
|
||||
```
|
||||
|
||||
OpenClaw는 런타임에 이 설정을 대소문자를 구분하지 않고 정규화하므로,
|
||||
OpenClaw는 런타임에 이 설정을 대소문자를 구분하지 않고 정규화하므로
|
||||
`"Off"` 같은 값도 친화적 오버레이를 비활성화합니다.
|
||||
|
||||
## 옵션 A: OpenAI API 키 (OpenAI Platform)
|
||||
## 옵션 A: OpenAI API key (OpenAI Platform)
|
||||
|
||||
**가장 적합한 경우:** 직접 API 액세스 및 사용량 기반 과금.
|
||||
OpenAI 대시보드에서 API 키를 가져오세요.
|
||||
OpenAI 대시보드에서 API key를 받으세요.
|
||||
|
||||
라우트 요약:
|
||||
경로 요약:
|
||||
|
||||
- `openai/gpt-5.4` = 직접 OpenAI Platform API 라우트
|
||||
- `openai/gpt-5.4` = 직접 OpenAI Platform API 경로
|
||||
- `OPENAI_API_KEY`(또는 동등한 OpenAI provider 구성)가 필요합니다
|
||||
- OpenClaw에서 ChatGPT/Codex 로그인은 `openai/*`가 아니라 `openai-codex/*`를 통해 라우팅됩니다
|
||||
- OpenClaw에서 ChatGPT/Codex sign-in은 `openai/*`가 아니라 `openai-codex/*`를 통해 라우팅됩니다
|
||||
|
||||
### CLI 설정
|
||||
|
||||
@ -106,7 +104,7 @@ openclaw onboard --auth-choice openai-api-key
|
||||
openclaw onboard --openai-api-key "$OPENAI_API_KEY"
|
||||
```
|
||||
|
||||
### 구성 스니펫
|
||||
### 구성 예시
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -115,25 +113,24 @@ openclaw onboard --openai-api-key "$OPENAI_API_KEY"
|
||||
}
|
||||
```
|
||||
|
||||
OpenAI의 현재 API 모델 문서는 직접
|
||||
OpenAI API 사용을 위해 `gpt-5.4` 및 `gpt-5.4-pro`를 나열합니다. OpenClaw는 둘 다 `openai/*` Responses 경로를 통해 전달합니다.
|
||||
OpenClaw는 오래된 `openai/gpt-5.3-codex-spark` 항목을 의도적으로 숨깁니다.
|
||||
직접 OpenAI API 호출이 실제 트래픽에서 이를 거부하기 때문입니다.
|
||||
OpenAI의 현재 API 모델 문서는 직접 OpenAI API 사용을 위해 `gpt-5.4` 및 `gpt-5.4-pro`를 나열합니다.
|
||||
OpenClaw는 둘 다 `openai/*` Responses 경로를 통해 전달합니다.
|
||||
OpenClaw는 오래된 `openai/gpt-5.3-codex-spark` 항목을 의도적으로 숨기는데,
|
||||
이는 직접 OpenAI API 호출에서 실제 트래픽 기준으로 거부되기 때문입니다.
|
||||
|
||||
OpenClaw는 직접 OpenAI
|
||||
API 경로에서 `openai/gpt-5.3-codex-spark`를 노출하지 않습니다. `pi-ai`는 여전히 해당 모델에 대한 기본 제공 항목을 포함하지만, 실제 OpenAI API
|
||||
요청은 현재 이를 거부합니다. OpenClaw에서는 Spark를 Codex 전용으로 취급합니다.
|
||||
OpenClaw는 직접 OpenAI API 경로에서 `openai/gpt-5.3-codex-spark`를 **노출하지 않습니다**.
|
||||
`pi-ai`는 여전히 해당 모델에 대한 기본 제공 항목을 포함하지만, 실제 OpenAI API
|
||||
요청은 현재 이를 거부합니다. Spark는 OpenClaw에서 Codex 전용으로 처리됩니다.
|
||||
|
||||
## 이미지 생성
|
||||
|
||||
번들된 `openai` plugin은 공유
|
||||
`image_generate` 도구를 통해 이미지 생성도 등록합니다.
|
||||
번들된 `openai` plugin은 공유 `image_generate` 도구를 통해 이미지 생성도 등록합니다.
|
||||
|
||||
- 기본 이미지 모델: `openai/gpt-image-1`
|
||||
- 생성: 요청당 최대 4개 이미지
|
||||
- 편집 모드: 활성화됨, 최대 5개의 참조 이미지
|
||||
- `size` 지원
|
||||
- 현재 OpenAI 전용 주의사항: OpenClaw는 현재 `aspectRatio` 또는
|
||||
- 현재 OpenAI 전용 주의 사항: OpenClaw는 현재 `aspectRatio` 또는
|
||||
`resolution` 재정의를 OpenAI Images API로 전달하지 않습니다
|
||||
|
||||
OpenAI를 기본 이미지 provider로 사용하려면:
|
||||
@ -150,20 +147,19 @@ OpenAI를 기본 이미지 provider로 사용하려면:
|
||||
}
|
||||
```
|
||||
|
||||
공유 도구
|
||||
매개변수, provider 선택, 장애 조치 동작은 [이미지 생성](/ko/tools/image-generation)을 참고하세요.
|
||||
공유 도구 매개변수,
|
||||
provider 선택, failover 동작은 [Image Generation](/ko/tools/image-generation)을 참조하세요.
|
||||
|
||||
## 비디오 생성
|
||||
|
||||
번들된 `openai` plugin은 공유
|
||||
`video_generate` 도구를 통해 비디오 생성도 등록합니다.
|
||||
번들된 `openai` plugin은 공유 `video_generate` 도구를 통해 비디오 생성도 등록합니다.
|
||||
|
||||
- 기본 비디오 모델: `openai/sora-2`
|
||||
- 모드: 텍스트-투-비디오, 이미지-투-비디오, 단일 비디오 참조/편집 흐름
|
||||
- 현재 제한: 이미지 1개 또는 비디오 참조 입력 1개
|
||||
- 현재 OpenAI 전용 주의사항: OpenClaw는 현재 네이티브 OpenAI 비디오 생성을 위해 `size`
|
||||
재정의만 전달합니다. `aspectRatio`, `resolution`, `audio`, `watermark`와 같은 지원되지 않는 선택적 재정의는 무시되며
|
||||
도구 경고로 다시 보고됩니다.
|
||||
- 모드: 텍스트-비디오, 이미지-비디오, 단일 비디오 참조/편집 흐름
|
||||
- 현재 제한: 참조 입력으로 이미지 1개 또는 비디오 1개
|
||||
- 현재 OpenAI 전용 주의 사항: OpenClaw는 현재 기본 OpenAI 비디오 생성에 대해 `size`
|
||||
재정의만 전달합니다. `aspectRatio`, `resolution`, `audio`, `watermark` 같은
|
||||
지원되지 않는 선택적 재정의는 무시되며 도구 경고로 다시 보고됩니다.
|
||||
|
||||
OpenAI를 기본 비디오 provider로 사용하려면:
|
||||
|
||||
@ -179,18 +175,18 @@ OpenAI를 기본 비디오 provider로 사용하려면:
|
||||
}
|
||||
```
|
||||
|
||||
공유 도구
|
||||
매개변수, provider 선택, 장애 조치 동작은 [비디오 생성](/ko/tools/video-generation)을 참고하세요.
|
||||
공유 도구 매개변수,
|
||||
provider 선택, failover 동작은 [Video Generation](/ko/tools/video-generation)을 참조하세요.
|
||||
|
||||
## 옵션 B: OpenAI Code (Codex) 구독
|
||||
|
||||
**가장 적합한 경우:** API 키 대신 ChatGPT/Codex 구독 액세스를 사용하는 경우.
|
||||
Codex cloud에는 ChatGPT 로그인이 필요하며, Codex CLI는 ChatGPT 또는 API 키 로그인을 지원합니다.
|
||||
**가장 적합한 경우:** API key 대신 ChatGPT/Codex 구독 액세스를 사용하는 경우.
|
||||
Codex cloud는 ChatGPT sign-in이 필요하고, Codex CLI는 ChatGPT 또는 API key sign-in을 지원합니다.
|
||||
|
||||
라우트 요약:
|
||||
경로 요약:
|
||||
|
||||
- `openai-codex/gpt-5.4` = ChatGPT/Codex OAuth 라우트
|
||||
- 직접 OpenAI Platform API 키가 아니라 ChatGPT/Codex 로그인을 사용합니다
|
||||
- `openai-codex/gpt-5.4` = ChatGPT/Codex OAuth 경로
|
||||
- 직접 OpenAI Platform API key가 아니라 ChatGPT/Codex sign-in을 사용합니다
|
||||
- `openai-codex/*`의 provider 측 제한은 ChatGPT 웹/앱 경험과 다를 수 있습니다
|
||||
|
||||
### CLI 설정 (Codex OAuth)
|
||||
@ -199,11 +195,11 @@ Codex cloud에는 ChatGPT 로그인이 필요하며, Codex CLI는 ChatGPT 또는
|
||||
# 마법사에서 Codex OAuth 실행
|
||||
openclaw onboard --auth-choice openai-codex
|
||||
|
||||
# 또는 OAuth를 직접 실행
|
||||
# 또는 OAuth 직접 실행
|
||||
openclaw models auth login --provider openai-codex
|
||||
```
|
||||
|
||||
### 구성 스니펫 (Codex 구독)
|
||||
### 구성 예시 (Codex 구독)
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -212,43 +208,41 @@ openclaw models auth login --provider openai-codex
|
||||
```
|
||||
|
||||
OpenAI의 현재 Codex 문서는 현재 Codex 모델로 `gpt-5.4`를 나열합니다. OpenClaw는
|
||||
ChatGPT/Codex OAuth 사용을 위해 이를 `openai-codex/gpt-5.4`에 매핑합니다.
|
||||
이를 ChatGPT/Codex OAuth 사용을 위한 `openai-codex/gpt-5.4`에 매핑합니다.
|
||||
|
||||
이 경로는 `openai/gpt-5.4`와 의도적으로 분리되어 있습니다. 직접
|
||||
OpenAI Platform API 경로를 원하면 API 키와 함께 `openai/*`를 사용하세요. ChatGPT/Codex 로그인
|
||||
을 원하면 `openai-codex/*`를 사용하세요.
|
||||
이 경로는 `openai/gpt-5.4`와 의도적으로 분리되어 있습니다. 직접 OpenAI Platform API 경로를 원하면
|
||||
API key와 함께 `openai/*`를 사용하세요. ChatGPT/Codex sign-in을 원하면
|
||||
`openai-codex/*`를 사용하세요.
|
||||
|
||||
온보딩이 기존 Codex CLI 로그인을 재사용하는 경우, 해당 자격 증명은 계속
|
||||
Codex CLI에서 관리됩니다. 만료되면 OpenClaw는 먼저 외부 Codex 소스를 다시 읽고,
|
||||
provider가 이를 새로 고칠 수 있는 경우 별도의 OpenClaw 전용
|
||||
복사본에서 소유권을 가져오는 대신 새로 고친 자격 증명을 다시 Codex 저장소에 기록합니다.
|
||||
온보딩이 기존 Codex CLI 로그인을 재사용하는 경우 해당 자격 증명은
|
||||
Codex CLI에서 계속 관리됩니다. 만료 시 OpenClaw는 먼저 외부 Codex 소스를 다시 읽고,
|
||||
provider가 이를 갱신할 수 있으면 별도의 OpenClaw 전용 사본을 소유하는 대신
|
||||
갱신된 자격 증명을 다시 Codex 저장소에 기록합니다.
|
||||
|
||||
Codex Spark에 대한 권한이 있는 Codex 계정이라면 OpenClaw는 다음도 지원합니다.
|
||||
Codex 계정에 Codex Spark 사용 권한이 있다면 OpenClaw는 다음도 지원합니다:
|
||||
|
||||
- `openai-codex/gpt-5.3-codex-spark`
|
||||
|
||||
OpenClaw는 Codex Spark를 Codex 전용으로 취급합니다. 직접
|
||||
`openai/gpt-5.3-codex-spark` API 키 경로는 노출하지 않습니다.
|
||||
`openai/gpt-5.3-codex-spark` API-key 경로는 노출하지 않습니다.
|
||||
|
||||
OpenClaw는 `pi-ai`가
|
||||
`openai-codex/gpt-5.3-codex-spark`를 발견했을 때도 이를 유지합니다. 이를 권한 의존적이고 실험적인 것으로 취급하세요. Codex Spark는
|
||||
GPT-5.4 `/fast`와 별개이며, 사용 가능 여부는 로그인한 Codex /
|
||||
ChatGPT 계정에 따라 달라집니다.
|
||||
OpenClaw는 또한 `pi-ai`가 이를 발견할 때 `openai-codex/gpt-5.3-codex-spark`를 유지합니다.
|
||||
이는 사용 권한 의존적이고 실험적인 것으로 취급하세요. Codex Spark는 GPT-5.4 `/fast`와는
|
||||
별개이며, 사용 가능 여부는 sign-in된 Codex / ChatGPT 계정에 따라 달라집니다.
|
||||
|
||||
### Codex 컨텍스트 창 상한
|
||||
|
||||
OpenClaw는 Codex 모델 메타데이터와 런타임 컨텍스트 상한을 별도의
|
||||
값으로 취급합니다.
|
||||
OpenClaw는 Codex 모델 메타데이터와 런타임 컨텍스트 상한을 별도의 값으로 취급합니다.
|
||||
|
||||
`openai-codex/gpt-5.4`의 경우:
|
||||
|
||||
- 네이티브 `contextWindow`: `1050000`
|
||||
- 기본 `contextWindow`: `1050000`
|
||||
- 기본 런타임 `contextTokens` 상한: `272000`
|
||||
|
||||
이렇게 하면 모델 메타데이터는 사실대로 유지하면서 실제로 더 나은 지연 시간과 품질 특성을 보이는 더 작은 기본 런타임
|
||||
창을 유지할 수 있습니다.
|
||||
이렇게 하면 모델 메타데이터는 사실대로 유지하면서도 실제로 더 나은 지연 시간과 품질 특성을 가진
|
||||
더 작은 기본 런타임 창을 유지할 수 있습니다.
|
||||
|
||||
다른 유효 상한을 원하면 `models.providers.<provider>.models[].contextTokens`를 설정하세요.
|
||||
다른 유효 상한을 원하면 `models.providers.<provider>.models[].contextTokens`를 설정하세요:
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -267,49 +261,50 @@ OpenClaw는 Codex 모델 메타데이터와 런타임 컨텍스트 상한을 별
|
||||
}
|
||||
```
|
||||
|
||||
네이티브 모델
|
||||
메타데이터를 선언하거나 재정의할 때만 `contextWindow`를 사용하세요. 런타임 컨텍스트 예산을 제한하려면 `contextTokens`를 사용하세요.
|
||||
기본 모델 메타데이터를 선언하거나 재정의할 때만 `contextWindow`를 사용하세요.
|
||||
런타임 컨텍스트 예산을 제한하려면 `contextTokens`를 사용하세요.
|
||||
|
||||
### 기본 전송 방식
|
||||
### 전송 기본값
|
||||
|
||||
OpenClaw는 모델 스트리밍에 `pi-ai`를 사용합니다. `openai/*`와
|
||||
`openai-codex/*` 모두에서 기본 전송 방식은 `"auto"`입니다(먼저 WebSocket, 이후 SSE
|
||||
대체).
|
||||
`openai-codex/*` 모두에서 기본 전송은 `"auto"`입니다(우선 WebSocket, 이후 SSE
|
||||
fallback).
|
||||
|
||||
`"auto"` 모드에서 OpenClaw는 SSE로 대체하기 전에
|
||||
초기 단계의 재시도 가능한 WebSocket 실패도 한 번 재시도합니다. 강제 `"websocket"` 모드는 여전히 대체 뒤에 숨기지 않고 전송 오류를 직접 표시합니다.
|
||||
`"auto"` 모드에서 OpenClaw는 SSE로 fallback하기 전에 초기의 재시도 가능한
|
||||
WebSocket 실패 1회를 추가로 재시도합니다. 강제 `"websocket"` 모드는 여전히
|
||||
fallback 뒤로 숨기지 않고 전송 오류를 직접 노출합니다.
|
||||
|
||||
`"auto"` 모드에서 연결 또는 초기 턴 WebSocket 실패가 발생한 후 OpenClaw는
|
||||
`"auto"` 모드에서 연결 실패 또는 초기 턴 WebSocket 실패 후 OpenClaw는
|
||||
약 60초 동안 해당 세션의 WebSocket 경로를 성능 저하 상태로 표시하고,
|
||||
전송 방식 사이를 반복 전환하는 대신 냉각 시간 동안 이후 턴을 SSE로 전송합니다.
|
||||
전송 방식 사이를 반복적으로 오가는 대신 쿨다운 동안 후속 턴을 SSE로 보냅니다.
|
||||
|
||||
네이티브 OpenAI 계열 엔드포인트(`openai/*`, `openai-codex/*`, 그리고 Azure
|
||||
기본 OpenAI 계열 엔드포인트(`openai/*`, `openai-codex/*`, 및 Azure
|
||||
OpenAI Responses)의 경우 OpenClaw는 요청에 안정적인 세션 및 턴 식별 상태도 첨부하여
|
||||
재시도, 재연결, SSE 대체가 동일한
|
||||
대화 식별성에 맞춰 유지되도록 합니다. 네이티브 OpenAI 계열 라우트에서는 여기에 안정적인
|
||||
세션/턴 요청 식별 헤더와 일치하는 전송 메타데이터가 포함됩니다.
|
||||
재시도, 재연결, SSE fallback이 동일한 대화 식별자에 맞춰 유지되도록 합니다. 기본 OpenAI 계열 경로에서는
|
||||
여기에 안정적인 세션/턴 요청 식별 헤더와 일치하는 전송 메타데이터가 포함됩니다.
|
||||
|
||||
OpenClaw는 또한 전송 방식 변형 전반에서 OpenAI 사용량 카운터를
|
||||
세션/상태 표시 영역에 도달하기 전에 정규화합니다. 네이티브 OpenAI/Codex Responses 트래픽은
|
||||
OpenClaw는 또한 OpenAI 사용량 카운터가 세션/상태 표면에 도달하기 전에
|
||||
전송 변형 전반에서 이를 정규화합니다. 기본 OpenAI/Codex Responses 트래픽은
|
||||
사용량을 `input_tokens` / `output_tokens` 또는
|
||||
`prompt_tokens` / `completion_tokens`로 보고할 수 있습니다. OpenClaw는 이를 `/status`, `/usage`, 세션 로그에 대해 동일한 입력
|
||||
및 출력 카운터로 취급합니다. 네이티브
|
||||
WebSocket 트래픽에서 `total_tokens`가 누락되거나(`0`으로 보고되거나) 하면, OpenClaw는
|
||||
정규화된 입력 + 출력 합계로 대체하여 세션/상태 표시가 계속 채워지도록 합니다.
|
||||
`prompt_tokens` / `completion_tokens`로 보고할 수 있으며,
|
||||
OpenClaw는 이를 `/status`, `/usage`, 및 세션 로그에서 동일한 입력 및
|
||||
출력 카운터로 취급합니다. 기본 WebSocket 트래픽이 `total_tokens`를 생략하거나
|
||||
(`0`으로 보고하거나) 하는 경우 OpenClaw는 정규화된 입력 + 출력 합계를 사용해
|
||||
세션/상태 표시가 채워진 상태로 유지되도록 합니다.
|
||||
|
||||
`agents.defaults.models.<provider/model>.params.transport`를 설정할 수 있습니다.
|
||||
`agents.defaults.models.<provider/model>.params.transport`를 설정할 수 있습니다:
|
||||
|
||||
- `"sse"`: SSE 강제 사용
|
||||
- `"websocket"`: WebSocket 강제 사용
|
||||
- `"auto"`: WebSocket을 시도한 뒤 SSE로 대체
|
||||
- `"auto"`: WebSocket을 시도한 다음 SSE로 fallback
|
||||
|
||||
`openai/*`(Responses API)의 경우 WebSocket 전송이 사용되면 OpenClaw는
|
||||
기본적으로 WebSocket 워밍업도 활성화합니다(`openaiWsWarmup: true`).
|
||||
`openai/*`(Responses API)의 경우 OpenClaw는 WebSocket 전송 사용 시
|
||||
기본적으로 WebSocket warm-up도 활성화합니다(`openaiWsWarmup: true`).
|
||||
|
||||
관련 OpenAI 문서:
|
||||
|
||||
- [WebSocket을 사용한 Realtime API](https://platform.openai.com/docs/guides/realtime-websocket)
|
||||
- [스트리밍 API 응답(SSE)](https://platform.openai.com/docs/guides/streaming-responses)
|
||||
- [Realtime API with WebSocket](https://platform.openai.com/docs/guides/realtime-websocket)
|
||||
- [Streaming API responses (SSE)](https://platform.openai.com/docs/guides/streaming-responses)
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -328,12 +323,12 @@ WebSocket 트래픽에서 `total_tokens`가 누락되거나(`0`으로 보고되
|
||||
}
|
||||
```
|
||||
|
||||
### OpenAI WebSocket 워밍업
|
||||
### OpenAI WebSocket warm-up
|
||||
|
||||
OpenAI 문서는 워밍업을 선택 사항으로 설명합니다. OpenClaw는
|
||||
OpenAI 문서는 warm-up을 선택 사항으로 설명합니다. OpenClaw는
|
||||
WebSocket 전송 사용 시 첫 턴 지연 시간을 줄이기 위해 `openai/*`에 대해 기본적으로 이를 활성화합니다.
|
||||
|
||||
### 워밍업 비활성화
|
||||
### warm-up 비활성화
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -351,7 +346,7 @@ WebSocket 전송 사용 시 첫 턴 지연 시간을 줄이기 위해 `openai/*`
|
||||
}
|
||||
```
|
||||
|
||||
### 워밍업 명시적 활성화
|
||||
### warm-up 명시적으로 활성화
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -371,9 +366,9 @@ WebSocket 전송 사용 시 첫 턴 지연 시간을 줄이기 위해 `openai/*`
|
||||
|
||||
### OpenAI 및 Codex 우선 처리
|
||||
|
||||
OpenAI의 API는 `service_tier=priority`를 통해 우선 처리를 노출합니다. OpenClaw에서는
|
||||
네이티브 OpenAI/Codex Responses 엔드포인트에서 이 필드를 전달하려면 `agents.defaults.models["<provider>/<model>"].params.serviceTier`
|
||||
를 설정하세요.
|
||||
OpenAI의 API는 `service_tier=priority`를 통해 우선 처리를 노출합니다.
|
||||
OpenClaw에서는 `agents.defaults.models["<provider>/<model>"].params.serviceTier`
|
||||
를 설정하여 기본 OpenAI/Codex Responses 엔드포인트에서 해당 필드를 전달합니다.
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -399,35 +394,35 @@ OpenAI의 API는 `service_tier=priority`를 통해 우선 처리를 노출합니
|
||||
지원되는 값은 `auto`, `default`, `flex`, `priority`입니다.
|
||||
|
||||
OpenClaw는 `params.serviceTier`를 직접 `openai/*` Responses
|
||||
요청과 `openai-codex/*` Codex Responses 요청 모두에 전달합니다. 해당 모델이
|
||||
네이티브 OpenAI/Codex 엔드포인트를 가리킬 때 적용됩니다.
|
||||
요청과 `openai-codex/*` Codex Responses 요청 모두에 전달합니다. 단, 해당 모델이
|
||||
기본 OpenAI/Codex 엔드포인트를 가리키는 경우에만 해당합니다.
|
||||
|
||||
중요한 동작:
|
||||
|
||||
- 직접 `openai/*`는 `api.openai.com`을 대상으로 해야 합니다
|
||||
- `openai-codex/*`는 `chatgpt.com/backend-api`를 대상으로 해야 합니다
|
||||
- 다른 기본 URL 또는 프록시를 통해 두 provider 중 하나를 라우팅하면, OpenClaw는 `service_tier`를 그대로 둡니다
|
||||
- 직접 `openai/*`는 `api.openai.com`을 대상이어야 합니다
|
||||
- `openai-codex/*`는 `chatgpt.com/backend-api`를 대상이어야 합니다
|
||||
- 둘 중 어느 provider든 다른 base URL 또는 프록시를 통해 라우팅하면 OpenClaw는 `service_tier`를 그대로 둡니다
|
||||
|
||||
### OpenAI fast 모드
|
||||
### OpenAI fast mode
|
||||
|
||||
OpenClaw는 `openai/*`와
|
||||
`openai-codex/*` 세션 모두에 대해 공유 fast-mode 토글을 노출합니다.
|
||||
OpenClaw는 `openai/*` 및
|
||||
`openai-codex/*` 세션 모두에 대해 공유 fast-mode 토글을 제공합니다:
|
||||
|
||||
- Chat/UI: `/fast status|on|off`
|
||||
- 구성: `agents.defaults.models["<provider>/<model>"].params.fastMode`
|
||||
|
||||
fast 모드가 활성화되면 OpenClaw는 이를 OpenAI 우선 처리로 매핑합니다.
|
||||
fast mode가 활성화되면 OpenClaw는 이를 OpenAI 우선 처리로 매핑합니다:
|
||||
|
||||
- `api.openai.com`으로 가는 직접 `openai/*` Responses 호출은 `service_tier = "priority"`를 전송합니다
|
||||
- `chatgpt.com/backend-api`로 가는 `openai-codex/*` Responses 호출도 `service_tier = "priority"`를 전송합니다
|
||||
- 기존 페이로드 `service_tier` 값은 유지됩니다
|
||||
- fast 모드는 `reasoning` 또는 `text.verbosity`를 재작성하지 않습니다
|
||||
- fast mode는 `reasoning` 또는 `text.verbosity`를 다시 쓰지 않습니다
|
||||
|
||||
특히 GPT 5.4의 경우 가장 일반적인 설정은 다음과 같습니다.
|
||||
GPT 5.4에 한정하면, 가장 일반적인 설정은 다음과 같습니다:
|
||||
|
||||
- `openai/gpt-5.4` 또는 `openai-codex/gpt-5.4`를 사용하는 세션에서 `/fast on` 전송
|
||||
- 또는 `agents.defaults.models["openai/gpt-5.4"].params.fastMode = true` 설정
|
||||
- Codex OAuth도 사용하는 경우 `agents.defaults.models["openai-codex/gpt-5.4"].params.fastMode = true`도 함께 설정
|
||||
- `openai/gpt-5.4` 또는 `openai-codex/gpt-5.4`를 사용하는 세션에서 `/fast on`을 전송합니다
|
||||
- 또는 `agents.defaults.models["openai/gpt-5.4"].params.fastMode = true`를 설정합니다
|
||||
- Codex OAuth도 함께 사용하는 경우 `agents.defaults.models["openai-codex/gpt-5.4"].params.fastMode = true`도 설정합니다
|
||||
|
||||
예시:
|
||||
|
||||
@ -453,45 +448,70 @@ fast 모드가 활성화되면 OpenClaw는 이를 OpenAI 우선 처리로 매핑
|
||||
```
|
||||
|
||||
세션 재정의가 구성보다 우선합니다. Sessions UI에서 세션 재정의를 지우면
|
||||
세션은 구성된 기본값으로 돌아갑니다.
|
||||
해당 세션은 구성된 기본값으로 돌아갑니다.
|
||||
|
||||
### 네이티브 OpenAI와 OpenAI 호환 라우트 비교
|
||||
### 기본 OpenAI 경로와 OpenAI-compatible 경로 비교
|
||||
|
||||
OpenClaw는 직접 OpenAI, Codex, Azure OpenAI 엔드포인트를
|
||||
일반적인 OpenAI 호환 `/v1` 프록시와 다르게 취급합니다.
|
||||
일반적인 OpenAI-compatible `/v1` 프록시와 다르게 처리합니다:
|
||||
|
||||
- 네이티브 `openai/*`, `openai-codex/*`, Azure OpenAI 라우트는
|
||||
사용자가 명시적으로 reasoning을 비활성화할 때 `reasoning: { effort: "none" }`를 그대로 유지합니다
|
||||
- 네이티브 OpenAI 계열 라우트는 도구 스키마를 기본적으로 strict 모드로 설정합니다
|
||||
- 숨겨진 OpenClaw attribution 헤더(`originator`, `version`, `User-Agent`)는 검증된 네이티브 OpenAI 호스트
|
||||
(`api.openai.com`) 및 네이티브 Codex 호스트(`chatgpt.com/backend-api`)에만 첨부됩니다
|
||||
- 네이티브 OpenAI/Codex 라우트는
|
||||
`service_tier`, Responses `store`, OpenAI reasoning 호환 페이로드,
|
||||
프롬프트 캐시 힌트와 같은 OpenAI 전용 요청 형성을 유지합니다
|
||||
- 프록시 스타일 OpenAI 호환 라우트는 더 느슨한 호환 동작을 유지하며
|
||||
strict 도구 스키마, 네이티브 전용 요청 형성, 숨겨진
|
||||
OpenAI/Codex attribution 헤더를 강제하지 않습니다
|
||||
- 기본 `openai/*`, `openai-codex/*`, Azure OpenAI 경로는
|
||||
reasoning을 명시적으로 비활성화했을 때 `reasoning: { effort: "none" }`를 그대로 유지합니다
|
||||
- 기본 OpenAI 계열 경로는 tool schema를 기본적으로 strict 모드로 설정합니다
|
||||
- 숨겨진 OpenClaw attribution header(`originator`, `version`, 및
|
||||
`User-Agent`)는 검증된 기본 OpenAI 호스트
|
||||
(`api.openai.com`) 및 기본 Codex 호스트 (`chatgpt.com/backend-api`)에만 첨부됩니다
|
||||
- 기본 OpenAI/Codex 경로는 `service_tier`, Responses `store`, OpenAI reasoning-compat payload, 및
|
||||
prompt-cache 힌트 같은 OpenAI 전용 요청 shaping을 유지합니다
|
||||
- 프록시 스타일 OpenAI-compatible 경로는 더 느슨한 compat 동작을 유지하며
|
||||
strict tool schema, 기본 전용 요청 shaping, 또는 숨겨진
|
||||
OpenAI/Codex attribution header를 강제하지 않습니다
|
||||
|
||||
Azure OpenAI는 전송 및 호환
|
||||
동작 측면에서는 네이티브 라우팅 범주에 남아 있지만, 숨겨진 OpenAI/Codex attribution 헤더는 받지 않습니다.
|
||||
Azure OpenAI는 전송 및 compat
|
||||
동작 측면에서는 기본 라우팅 범주에 남아 있지만, 숨겨진 OpenAI/Codex attribution header는 받지 않습니다.
|
||||
|
||||
이렇게 하면 현재 네이티브 OpenAI Responses 동작을 유지하면서도,
|
||||
오래된 OpenAI 호환 shim을 서드파티 `/v1` 백엔드에 강제하지 않습니다.
|
||||
이렇게 하면 현재의 기본 OpenAI Responses 동작은 유지하면서
|
||||
오래된 OpenAI-compatible shim을 서드파티 `/v1` 백엔드에 강제하지 않습니다.
|
||||
|
||||
### OpenAI Responses 서버 측 압축
|
||||
### Strict-agentic GPT 모드
|
||||
|
||||
직접 OpenAI Responses 모델(`api.openai.com`의 `api: "openai-responses"`를 사용하는 `openai/*`)의 경우 OpenClaw는 이제 OpenAI 서버 측
|
||||
압축 페이로드 힌트를 자동 활성화합니다.
|
||||
`openai/*` 및 `openai-codex/*` GPT-5 계열 실행의 경우, OpenClaw는
|
||||
더 엄격한 내장 Pi 실행 계약을 사용할 수 있습니다:
|
||||
|
||||
- `store: true`를 강제합니다(`model compat`가 `supportsStore: false`를 설정하지 않는 한)
|
||||
```json5
|
||||
{
|
||||
agents: {
|
||||
defaults: {
|
||||
embeddedPi: {
|
||||
executionContract: "strict-agentic",
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
```
|
||||
|
||||
`strict-agentic`에서는 구체적인 tool 작업이 가능한 경우 OpenClaw가
|
||||
더 이상 계획만 있는 어시스턴트 턴을 성공적인 진행으로 간주하지 않습니다. 대신
|
||||
즉시 행동하라는 steer와 함께 턴을 재시도하고, 상당한 작업에 대해서는 구조화된 `update_plan` tool을 자동 활성화하며,
|
||||
모델이 계속 행동 없이 계획만 세우면 명시적인 차단 상태를 표시합니다.
|
||||
|
||||
이 모드는 OpenAI 및 OpenAI Codex GPT-5 계열 실행에만 적용됩니다. 다른 provider와
|
||||
이전 모델 계열은 별도의 런타임 설정으로 명시적으로 opt-in하지 않는 한 기본 내장 Pi 동작을 유지합니다.
|
||||
|
||||
### OpenAI Responses 서버 측 compaction
|
||||
|
||||
직접 OpenAI Responses 모델(`api.openai.com`의 `baseUrl`과 함께 `api: "openai-responses"`를 사용하는 `openai/*`)의 경우,
|
||||
OpenClaw는 이제 OpenAI 서버 측 compaction payload 힌트를 자동으로 활성화합니다:
|
||||
|
||||
- `store: true`를 강제합니다(`model compat`이 `supportsStore: false`로 설정한 경우 제외)
|
||||
- `context_management: [{ type: "compaction", compact_threshold: ... }]`를 주입합니다
|
||||
|
||||
기본적으로 `compact_threshold`는 모델 `contextWindow`의 `70%`입니다(없을 경우 `80000`).
|
||||
기본적으로 `compact_threshold`는 모델 `contextWindow`의 `70%`이며(없으면 `80000` 사용),
|
||||
|
||||
### 서버 측 압축 명시적 활성화
|
||||
### 서버 측 compaction 명시적 활성화
|
||||
|
||||
호환되는
|
||||
Responses 모델(예: Azure OpenAI Responses)에 `context_management` 주입을 강제하려는 경우 사용하세요.
|
||||
호환 가능한
|
||||
Responses 모델(예: Azure OpenAI Responses)에 대해 `context_management` 주입을 강제로 사용하려면 다음을 사용하세요:
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -528,7 +548,7 @@ Responses 모델(예: Azure OpenAI Responses)에 `context_management` 주입을
|
||||
}
|
||||
```
|
||||
|
||||
### 서버 측 압축 비활성화
|
||||
### 서버 측 compaction 비활성화
|
||||
|
||||
```json5
|
||||
{
|
||||
@ -547,10 +567,10 @@ Responses 모델(예: Azure OpenAI Responses)에 `context_management` 주입을
|
||||
```
|
||||
|
||||
`responsesServerCompaction`은 `context_management` 주입만 제어합니다.
|
||||
직접 OpenAI Responses 모델은 `compat`가
|
||||
직접 OpenAI Responses 모델은 compat에서
|
||||
`supportsStore: false`를 설정하지 않는 한 여전히 `store: true`를 강제합니다.
|
||||
|
||||
## 참고
|
||||
|
||||
- 모델 ref는 항상 `provider/model`을 사용합니다([/concepts/models](/ko/concepts/models) 참고).
|
||||
- 모델 ref는 항상 `provider/model`을 사용합니다([/concepts/models](/ko/concepts/models) 참조).
|
||||
- 인증 세부 정보 및 재사용 규칙은 [/concepts/oauth](/ko/concepts/oauth)에 있습니다.
|
||||
|
||||
Loading…
Reference in New Issue
Block a user