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: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,7 @@ python -m src.gateway.server

[TencentDB-Agent-Memory](https://github.com/TencentCloud/TencentDB-Agent-Memory) 的核心机制是「proxy 不改协议、每轮向上下文注入 L2/L3 记忆」——**本仓库的 34 组实验量化的正是这套机制的成本语义**:同一份记忆,锁死注入 vs 动态注入成本差 7.3×;低于模型阈值静默不缓存;断点布局直接决定前缀稳定性。

可拆出提上游的方向:AgentMemory proxy 目前**没有 `cache_control` 断点布局与缓存命中率埋点**——本仓库的断点布局(3 固定 + 1 滚动)与 5 项埋点(E29 已与真实端点对账)可作为参考实现。
可拆出提上游的方向(已核对上游源码,表述以其现状为准):上游 MemoryProxy 对缓存断点是**被动保留**的——透传客户端已有的 `cache_control`(`injection/adapters/anthropic.ts`),注入记忆时**特意不加**断点(`session/context-injector.ts` 注释申明理由),usage 管道也已采集 `cache_read_input_tokens`(`credit-reporter.ts`,用于计费上报)。**上游缺的不是埋点字段,而是「注入方式 × 命中率」的量化依据与主动策略**:本仓库的 34 组实验数据(锁死 vs 动态 7.3×、确定性序列化 74.8% vs 24.9%、逐模型阈值表)+ 主动断点布局(3 固定 + 1 滚动)+ 确定性序列化流程,可作为上游注入策略的参考实现与决策依据。

## 目录

Expand Down
13 changes: 9 additions & 4 deletions docs/REVIEW.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# 代码评审材料(Code Review Pack)

> 版本 v1.2(2026-09-02)| src 1493 行 + tools/experiments/tests 1065 行(纯标准库,零第三方依赖,Python 3.11+)
> 测试:**40 项单测全过 + 11 项端到端冒烟全过**(2026-09-09,含第三轮自查回归)+ Groq 真实链路验证通过(2026-09-01)
> 测试:**44 项单测全过 + 11 项端到端冒烟全过**(2026-09-09,含第三轮自查回归 + property-based 性质测试)+ Groq 真实链路验证通过(2026-09-01)
> 本版差异:**两轮代码自查发现 9 个真实 bug,全部修复并各配回归测试**(见第六节)

## 一、整体架构(IR 星型)
Expand Down Expand Up @@ -112,7 +112,7 @@ do_POST(路由 /v1/{source}/to/{target},未知协议 → 400)
| `verify_cache.py` | 152 | **验站脚本**:唯一随机 run_id 前缀两步验证(预热看 creation → 复发看 read);PASS/PARTIAL/FAIL;`max_tokens:0` 被拒自动降级 1 |
| `smoke_e2e.py` | 164 | **v1.2 新增**:端到端冒烟——真起 mock + 网关两个子进程,跑 5 组 11 项断言(直通/跨协议/多轮链/预热/非法路由),退出码 0/1 |

### tests/ —— 测试(25 项全过)
### tests/ —— 测试(44 项全过)

| 测试类 | 覆盖 |
| ------ | ---- |
Expand All @@ -123,12 +123,17 @@ do_POST(路由 /v1/{source}/to/{target},未知协议 → 400)
| `TestGatewayPolicies` | 预热四类拒绝、记忆注入去重+cap+cap 三级生效 |
| `TestAuditFindings` | **v1.2 新增**:9 条自查回归测试(见第六节),每条对应一个修过的 bug |
| `TestStatefulChainE2E` | **v1.2 新增**:真起网关+mock 的多轮 prev_id 链路(0→2→4 条重放累积)、预热轮不进响应链 |
| `TestCrossProtocolToolArgs` | **v1.4 新增**:跨协议工具参数守恒(bug #10 回归) |
| `TestThinkingSignature` | **v1.4 新增**:thinking signature / redacted 往返(bug #11 回归) |
| `TestToolIdMap` | **v1.4 新增**:工具 ID 双向映射(含 Anthropic→Chat→Anthropic 还原、并发分叉不串号) |
| `TestAssistantFromUpstream` | **v1.4 新增**:状态层重放保留 thinking / tool_use 结构化块 |
| `TestPropertyRoundTrip` | **v1.4 新增**:property-based 往返(440 随机用例、固定种子可复现):断点恒在 [3,4] / 未知字段必降级 / 工具参数守恒 / signature 守恒 |

## 四、已验证记录

| 验证 | 结果 | 日期 |
| ---- | ---- | ---- |
| 25 项单测(`-W error::ResourceWarning` 下零警告) | ✅ 全过 | 2026-09-02 |
| 44 项单测(`-W error::ResourceWarning` 下零警告,含第三轮自查回归 + property-based) | ✅ 全过 | 2026-09-09 |
| 11 项端到端冒烟(子进程级,`tools/smoke_e2e.py`) | ✅ 全过 | 2026-09-02 |
| 多轮 previous_response_id 链路(0→2→4 条重放) | ✅ 修复后通过 | 2026-09-02 |
| Groq 真实链路(Chat 直通 + Responses→Chat + usage 归一 + 埋点) | ✅ | 2026-09-01 |
Expand Down Expand Up @@ -186,7 +191,7 @@ do_POST(路由 /v1/{source}/to/{target},未知协议 → 400)
- **工具调用 ID 双向持久映射**(问题清单组4#3):`src/state/idmap.py`——会话级 canonical ↔ 各协议外部形式,SQLite 持久、铸造稳定、会话间隔离;网关 to_ir 后归一、from_ir 前翻译、落库前翻回 canonical。`TestToolIdMap` 5 项(含 Anthropic→Chat→Anthropic 还原、并发分叉不串号)
- **状态层重放保留结构化块**:`base.assistant_from_upstream()` 保留 thinking(signature/redacted)与 tool_use(含解析后 tool_input)入历史,取代只取文本的 `_assistant_message`。`TestAssistantFromUpstream` 4 项

测试 25 → **40 项全过** + 11 项端到端冒烟全过。
测试 25 → **40 项全过** + 11 项端到端冒烟全过。(其后的 property-based 提交再增至 **44 项**,见 CHANGELOG 2026-09-09 末节。)

## 六、已知缺口(修复后剩余)

Expand Down
Loading