Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions docs/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@

- [DS2API 项目价值说明](./project-value.md)
- [API -> 网页对话纯文本兼容主链路说明](./prompt-compatibility.md)
- [Context Engine 策略验收说明](./context-engine-strategies.md)
- [Tool Calling 统一语义](./toolcall-semantics.md)
- [DeepSeek SSE 行为结构说明(逆向观察)](./DeepSeekSSE行为结构说明-2026-04-05.md)

Expand Down Expand Up @@ -64,6 +65,7 @@ Recommended reading order:

- [DS2API project value note](./project-value.md)
- [API -> pure-text web-chat compatibility pipeline](./prompt-compatibility.md)
- [Context Engine strategy acceptance guide](./context-engine-strategies.md)
- [Tool-calling unified semantics](./toolcall-semantics.md)
- [DeepSeek SSE behavior notes (reverse-engineered)](./DeepSeekSSE行为结构说明-2026-04-05.md)

Expand Down
88 changes: 88 additions & 0 deletions docs/context-engine-strategies.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
# Context Engine 策略验收说明

本文定义 `context_engine.strategy` 的可见输出、适用场景、回滚方式和测试口径。它补充 `docs/prompt-compatibility.md`,用于后续开发和发布验收。

## 目标

Context Engine 的目标不是伪装网页聊天记录,而是把 API 会话编译成模型更容易理解的当前任务上下文:

- 短上下文保持 inline,不上传生成文件。
- 长上下文上传中性的 conversation context / tool reference。
- 模型默认不看到 DS2API 内部文件名或实现术语。
- 最近上下文尽量无损,较早历史做语义压缩。
- 所有策略都必须可解释、可测试、可回滚。

## 策略矩阵

| strategy | 输出形态 | 默认使用 | 适用场景 | 回滚价值 |
|---|---|---:|---|---|
| `raw_transcript` | 旧式 `# DS2API_HISTORY.txt` + `=== N. ROLE ===` transcript | 否 | 调试、回归、兼容旧行为 | 最高,保留旧形态 |
| `natural_context` | `# Conversation Context` + 全量自然化轮次 | 否 | 需要完整历史但不想暴露实现术语 | 从压缩策略回退到全文 |
| `context_capsule` | 当前任务 + 约束 + 早期摘要,不回放最近完整轮次 | 否 | 普通问答、长历史摘要 | 降低上下文体积 |
| `hybrid_recent` | 当前任务 + 约束 + 早期摘要 + 最近精确上下文 | 是 | Agent 长任务、编程、调试 | 默认生产策略 |
| `auto` | 自动选择上述策略 | 暂未实现 | 后续按请求形态选择 | 灰度入口 |

## 默认策略:hybrid_recent

`hybrid_recent` 必须包含:

- `# Conversation Context`
- `## Current Task`:最新 user turn 原文。
- `## Non-Negotiable Instructions`:system / developer 等不可压缩约束的摘要。
- `## Earlier Context Summary`:较早历史的短摘要;内容可以压缩,但不能引入新事实。
- `## Recent Exact Context`:最近上下文无损保留,包含 tool call / tool result / assistant reasoning 的可见结构。

验收要点:

- 最新用户请求必须完整出现。
- system / developer 约束必须出现,允许一行化但不能丢失。
- 早期历史不得以大段原始 transcript 全量回放。
- 最近精确上下文必须保留角色、顺序和工具链关系。
- 默认输出不得包含 `DS2API_HISTORY.txt` 或 `DS2API_TOOLS.txt`。

## 压缩安全边界

以下内容不应被语义摘要改写,只能保留原文、结构化摘录,或在长度过大时做可解释裁剪:

- 最新用户请求。
- system / developer 指令。
- 最近 tool call / tool result 链。
- 失败测试日志中的错误类型、文件路径、行号、actual / expected。
- 当前 diff / patch 的关键片段。
- 用户明确的禁止项、偏好和验收条件。
- 文件路径、函数名、配置键、环境变量名。

## 回滚矩阵

| 风险 | 建议回滚 |
|---|---|
| `hybrid_recent` 摘要遗漏关键背景 | `context_engine.strategy=natural_context` |
| 自然化正文导致模型误判 | `context_engine.strategy=raw_transcript` |
| 生成附件机制异常 | `current_input_file.enabled=false` |
| 客户端或上游依赖旧文件名 | `current_input_file.filename_policy=legacy` |
| 短上下文误触发上传 | 调大 `current_input_file.inline_max_tokens` |
| 长上下文没有触发上传 | 调小 `current_input_file.inline_max_tokens` 或检查 `current_input_file.enabled` |

## 测试口径

每次修改 Context Engine 策略、current input file 渲染、工具引用正文或 token accounting 时,至少运行:

```bash
go test ./internal/config ./internal/promptcompat ./internal/httpapi/openai/history
go test ./internal/httpapi/openai/... ./internal/httpapi/claude ./internal/httpapi/gemini ./internal/completionruntime
./tests/scripts/run-unit-all.sh
```

PR Gate 仍以仓库根目录 `AGENTS.md` 为准。

## 后续扩展

`auto` 策略应在实现时输出可观测的选择原因,例如:

- message count
- tool result count
- latest request length
- code block / file path / test failure signals
- selected strategy

这些字段应进入 completion request 日志和后续 Admin/History 观测页。
2 changes: 1 addition & 1 deletion docs/prompt-compatibility.md
Original file line number Diff line number Diff line change
Expand Up @@ -496,7 +496,7 @@ promptcompat.NormalizeOpenAIMessagesForPrompt()

> `shadow` 仅用于显式诊断和回归观察;默认运行路径使用 `enforce`。

`context_engine.strategy` 用于选择上下文渲染策略,合法值为 `raw_transcript`、`natural_context`、`context_capsule`、`hybrid_recent`、`auto`,默认 `hybrid_recent`;环境变量 `DS2API_CONTEXT_ENGINE_STRATEGY` 可覆盖配置文件。`raw_transcript` 保留旧式按轮次 transcript,`natural_context` 输出更接近日常对话材料的上下文全文,`context_capsule` 输出任务胶囊,`hybrid_recent` 保留最近上下文并压缩较早历史,`auto` 预留给后续按请求形态自动选择策略。
`context_engine.strategy` 用于选择上下文渲染策略,合法值为 `raw_transcript`、`natural_context`、`context_capsule`、`hybrid_recent`、`auto`,默认 `hybrid_recent`;环境变量 `DS2API_CONTEXT_ENGINE_STRATEGY` 可覆盖配置文件。`raw_transcript` 保留旧式按轮次 transcript,`natural_context` 输出更接近日常对话材料的上下文全文,`context_capsule` 输出任务胶囊,`hybrid_recent` 保留最近上下文并压缩较早历史,`auto` 预留给后续按请求形态自动选择策略。策略验收标准见 [Context Engine 策略验收说明](./context-engine-strategies.md)。

### Shadow 模式日志字段

Expand Down
Loading