feihong-code 8.0.0 → 8.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/workflows/ci.yml +193 -193
- package/CHANGELOG.md +140 -117
- package/README.md +656 -636
- package/agent-team/.env.example +13 -0
- package/agent-team/README.md +42 -0
- package/agent-team/agents/__init__.py +0 -0
- package/agent-team/agents/l1_acquisition.py +207 -0
- package/agent-team/agents/l2_content.py +237 -0
- package/agent-team/agents/l3_conversion.py +148 -0
- package/agent-team/agents/l4_analysis.py +118 -0
- package/agent-team/agents/l5_management.py +52 -0
- package/agent-team/agents/registry.py +60 -0
- package/agent-team/config.py +39 -0
- package/agent-team/core/__init__.py +0 -0
- package/agent-team/core/agent.py +73 -0
- package/agent-team/core/models.py +347 -0
- package/agent-team/core/scheduler.py +150 -0
- package/agent-team/core/task.py +121 -0
- package/agent-team/feihongzhi.db +0 -0
- package/agent-team/llm/__init__.py +12 -0
- package/agent-team/llm/base.py +22 -0
- package/agent-team/llm/doubao_llm.py +52 -0
- package/agent-team/llm/mock_llm.py +42 -0
- package/agent-team/main.py +235 -0
- package/agent-team/requirements.txt +2 -0
- package/agent-team/skill_packager.py +248 -0
- package/agent-team/skills/01_AI/350/216/267/345/256/242/347/272/277/347/264/242/351/233/267/350/276/276/SKILL.md +40 -0
- package/agent-team/skills/01_AI/350/216/267/345/256/242/347/272/277/347/264/242/351/233/267/350/276/276/run.py +111 -0
- package/agent-team/skills/02_AI/351/224/200/345/224/256/350/267/237/350/277/233/351/224/200/345/206/240/SKILL.md +38 -0
- package/agent-team/skills/02_AI/351/224/200/345/224/256/350/267/237/350/277/233/351/224/200/345/206/240/run.py +108 -0
- package/agent-team/skills/03_/350/257/204/350/256/272/345/214/272/345/225/206/346/234/272/350/257/206/345/210/253/345/256/230/SKILL.md +38 -0
- package/agent-team/skills/03_/350/257/204/350/256/272/345/214/272/345/225/206/346/234/272/350/257/206/345/210/253/345/256/230/run.py +106 -0
- package/agent-team/skills/04_/345/256/242/346/210/267/350/201/212/345/244/251/346/210/220/344/272/244/345/210/206/346/236/220/345/256/230/SKILL.md +37 -0
- package/agent-team/skills/04_/345/256/242/346/210/267/350/201/212/345/244/251/346/210/220/344/272/244/345/210/206/346/236/220/345/256/230/run.py +107 -0
- package/agent-team/skills/05_/345/220/214/350/241/214/347/210/206/346/254/276/351/233/267/350/276/276/SKILL.md +38 -0
- package/agent-team/skills/05_/345/220/214/350/241/214/347/210/206/346/254/276/351/233/267/350/276/276/run.py +99 -0
- package/agent-team/skills/06_/346/257/217/346/227/245/347/262/276/345/207/206/350/216/267/345/256/242/351/200/211/351/242/230/345/256/230/SKILL.md +39 -0
- package/agent-team/skills/06_/346/257/217/346/227/245/347/262/276/345/207/206/350/216/267/345/256/242/351/200/211/351/242/230/345/256/230/run.py +103 -0
- package/agent-team/skills/07_AI/345/244/226/350/264/270/345/274/200/345/217/221/345/256/242/346/210/267/345/221/230/345/267/245/SKILL.md +39 -0
- package/agent-team/skills/07_AI/345/244/226/350/264/270/345/274/200/345/217/221/345/256/242/346/210/267/345/221/230/345/267/245/run.py +103 -0
- package/agent-team/skills/08_/345/260/217/347/272/242/344/271/246/347/262/276/345/207/206/350/216/267/345/256/242/345/221/230/345/267/245/SKILL.md +40 -0
- package/agent-team/skills/08_/345/260/217/347/272/242/344/271/246/347/262/276/345/207/206/350/216/267/345/256/242/345/221/230/345/267/245/run.py +97 -0
- package/agent-team/skills/09_/347/247/201/345/237/237/345/256/242/346/210/267/345/210/206/345/261/202/350/267/237/350/277/233/345/256/230/SKILL.md +38 -0
- package/agent-team/skills/09_/347/247/201/345/237/237/345/256/242/346/210/267/345/210/206/345/261/202/350/267/237/350/277/233/345/256/230/run.py +106 -0
- package/agent-team/skills/10_GEO/345/225/206/346/234/272/350/257/212/346/226/255/345/256/230/SKILL.md +38 -0
- package/agent-team/skills/10_GEO/345/225/206/346/234/272/350/257/212/346/226/255/345/256/230/run.py +108 -0
- package/agent-team/skills/11_/344/270/200/344/272/272/345/205/254/345/217/270AI/345/221/230/345/267/245/350/260/203/345/272/246/345/256/230/SKILL.md +37 -0
- package/agent-team/skills/11_/344/270/200/344/272/272/345/205/254/345/217/270AI/345/221/230/345/267/245/350/260/203/345/272/246/345/256/230/run.py +111 -0
- package/agent-team/skills/12_/350/200/201/346/235/277/347/237/255/350/247/206/351/242/221/350/216/267/345/256/242/350/204/232/346/234/254/345/256/230/SKILL.md +39 -0
- package/agent-team/skills/12_/350/200/201/346/235/277/347/237/255/350/247/206/351/242/221/350/216/267/345/256/242/350/204/232/346/234/254/345/256/230/run.py +104 -0
- package/agent-team/skills/13_/345/215/232/344/270/273/350/264/246/345/217/267/346/267/261/345/272/246/346/213/206/350/247/243/345/256/230/SKILL.md +37 -0
- package/agent-team/skills/13_/345/215/232/344/270/273/350/264/246/345/217/267/346/267/261/345/272/246/346/213/206/350/247/243/345/256/230/run.py +105 -0
- package/agent-team/skills/14_AI/347/237/255/350/247/206/351/242/221/350/207/252/345/212/250/345/211/252/350/276/221/345/270/210/SKILL.md +39 -0
- package/agent-team/skills/14_AI/347/237/255/350/247/206/351/242/221/350/207/252/345/212/250/345/211/252/350/276/221/345/270/210/run.py +108 -0
- package/agent-team/skills/15_/345/205/254/344/274/227/345/217/267/350/207/252/345/212/250/350/277/220/350/220/245/345/217/221/345/270/203/345/256/230/SKILL.md +38 -0
- package/agent-team/skills/15_/345/205/254/344/274/227/345/217/267/350/207/252/345/212/250/350/277/220/350/220/245/345/217/221/345/270/203/345/256/230/run.py +105 -0
- package/agent-team/skills/16_/350/241/214/344/270/232/346/267/261/345/272/246/345/210/206/346/236/220/345/270/210/SKILL.md +38 -0
- package/agent-team/skills/16_/350/241/214/344/270/232/346/267/261/345/272/246/345/210/206/346/236/220/345/270/210/run.py +108 -0
- package/agent-team/skills/17_/346/212/225/350/265/204/347/240/224/347/251/266/345/222/250/350/257/242/345/256/230/SKILL.md +38 -0
- package/agent-team/skills/17_/346/212/225/350/265/204/347/240/224/347/251/266/345/222/250/350/257/242/345/256/230/run.py +106 -0
- package/agent-team/tests/__init__.py +0 -0
- package/agent-team/tests/test_core.py +156 -0
- package/dist/agent/agent-session.js +103 -0
- package/dist/agent/agent-session.js.map +1 -0
- package/dist/agent/orchestrator.js +8 -0
- package/dist/agent/orchestrator.js.map +1 -1
- package/dist/agent/steer.js +52 -0
- package/dist/agent/steer.js.map +1 -0
- package/dist/cli/index.js +1 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/node-guard.js +17 -0
- package/dist/cli/node-guard.js.map +1 -0
- package/dist/cli/run.js +2 -0
- package/dist/cli/run.js.map +1 -1
- package/dist/cli/version.js +1 -1
- package/dist/enterprise/policy.js +40 -17
- package/dist/enterprise/policy.js.map +1 -1
- package/dist/tools/agents/agents-bridge.js +144 -0
- package/dist/tools/agents/agents-bridge.js.map +1 -0
- package/dist/tools/desktop/desktop-guard.js +81 -0
- package/dist/tools/desktop/desktop-guard.js.map +1 -0
- package/dist/tools/desktop/desktop.tool.js +201 -0
- package/dist/tools/desktop/desktop.tool.js.map +1 -0
- package/dist/tools/desktop/feihong-win.js +163 -0
- package/dist/tools/desktop/feihong-win.js.map +1 -0
- package/dist/tools/desktop/index.js +37 -0
- package/dist/tools/desktop/index.js.map +1 -0
- package/dist/tools/index.js +2 -0
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/mcp/index.js +10 -2
- package/dist/tools/mcp/index.js.map +1 -1
- package/dist/tools/mcp/mcp-client.js +4 -0
- package/dist/tools/mcp/mcp-client.js.map +1 -1
- package/dist/tools/sandbox.js +28 -0
- package/dist/tools/sandbox.js.map +1 -1
- package/dist/web/public/public/css/style.css +1756 -0
- package/dist/web/public/public/favicon.svg +11 -0
- package/dist/web/public/public/index.html +1246 -0
- package/dist/web/public/public/js/api.js +558 -0
- package/dist/web/public/public/js/app.js +2233 -0
- package/dist/web/public/public/js/mock-api.js +259 -0
- package/dist/web/public/public/js/monaco-editor.js +363 -0
- package/dist/web/public/public/js/ui.js +2217 -0
- package/dist/web/public/public/js/utils.js +214 -0
- package/dist/web/public/public/manifest.json +59 -0
- package/dist/web/public/public/robots.txt +14 -0
- package/dist/web/public/public/service-worker.js +149 -0
- package/docs/AI/345/221/230/345/267/245/345/206/233/345/233/242-/346/225/264/345/220/210/350/257/264/346/230/216.md +68 -0
- package/docs/API.md +1 -1
- package/docs/App/346/212/200/346/234/257/350/257/264/346/230/216/344/271/246.md +3 -3
- package/docs/P1.1-P3-P5/345/267/245/347/250/213/345/256/236/346/226/275/346/200/273/347/273/223.md +328 -0
- package/docs/P5-Pi/345/257/271/347/205/247/350/257/204/346/265/213/346/212/245/345/221/212-mock/346/250/241/345/274/217.json +125 -0
- package/docs/P5-Pi/345/257/271/347/205/247/350/257/204/346/265/213/346/212/245/345/221/212-/347/234/237/345/256/236/346/250/241/345/236/213.json +138 -0
- package/docs/P5-pi-compare-real-report.json +138 -0
- package/docs/P5-pi-compare-report.json +125 -0
- package/docs/Pi-Agent/346/216/245/345/205/245/351/243/236/350/231/271Code-MVP/351/233/206/346/210/220/344/272/244/344/273/230/347/211/251.md +355 -0
- package/docs/Pi-Agent/346/216/245/345/205/245/351/243/236/350/231/271Code/344/273/267/345/200/274/345/210/206/346/236/220-/345/274/200/345/217/221/346/226/207/346/241/243.md +291 -0
- package/docs/Pi-Agent/346/216/245/345/205/245/351/243/236/350/231/271Code/344/273/267/345/200/274/351/207/215/344/274/260-/345/217/257/350/247/206/345/214/226.html +84 -0
- package/docs/SWE-bench-300-agnes-2.5-flash-/346/234/200/347/273/210/346/212/245/345/221/212.json +2012 -0
- package/docs/SWE-bench-300-agnes-2.5-flash-/350/267/221/345/210/206/346/212/245/345/221/212.md +74 -0
- package/docs/SWE-bench-Lite-DeepSeek-V4-Flash-/350/267/221/345/210/206/346/212/245/345/221/212.md +102 -0
- package/docs/TECHNICAL-SPECIFICATION.md +66 -0
- package/docs/TECHNICAL-SPECIFICATION.pdf +0 -0
- package/docs/Windows/346/211/213/350/204/232-POC/346/274/224/347/244/272/350/204/232/346/234/254.md +131 -0
- package/docs/Windows/346/211/213/350/204/232/346/216/245/345/205/245/346/214/207/345/215/227.md +181 -0
- package/docs//344/275/277/347/224/250/350/257/264/346/230/216/344/271/246-v8.0.1.md +146 -0
- package/docs//344/275/277/347/224/250/350/257/264/346/230/216/344/271/246.md +1 -1
- package/package.json +6 -3
package/docs/P1.1-P3-P5/345/267/245/347/250/213/345/256/236/346/226/275/346/200/273/347/273/223.md
ADDED
|
@@ -0,0 +1,328 @@
|
|
|
1
|
+
# P1.1 / P3 / P5 工程实施总结
|
|
2
|
+
|
|
3
|
+
> 飞虹Code v8.0.0 · 晋江市飞虹智科技企业管理有限公司 · 飞扬企源研发中心
|
|
4
|
+
> 日期:2026-09-05 · 三项任务同步推进完成
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## 一、任务概览
|
|
9
|
+
|
|
10
|
+
| 编号 | 任务 | 状态 | 核心产出 |
|
|
11
|
+
|------|------|------|----------|
|
|
12
|
+
| P1.1 | 内核服务化改造:Orchestrator 解耦为 createAgentSession 工厂 | ✅ 完成 | `src/agent/agent-session.ts` + 5 项单测 |
|
|
13
|
+
| P3 | steer() 中途人工纠偏实现 | ✅ 完成 | `src/agent/steer.ts` + orchestrator 主循环注入 + 6 项单测 |
|
|
14
|
+
| P5 | Pi 对照评测 | ✅ 完成(Mock 模式) | `scripts/pi-compare.mts` + 评测报告 JSON |
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
## 二、P1.1 内核服务化改造
|
|
19
|
+
|
|
20
|
+
### 2.1 问题
|
|
21
|
+
|
|
22
|
+
Orchestrator 的装配逻辑散落在 `src/cli/run.ts` 的 `executeTask()` 中(约 130 行),Web 服务端、嵌入式场景无法复用。每次新增调用方都要重复装配 router / tools / eventLog / session / guard / persist / onEvent 等 15+ 个依赖。
|
|
23
|
+
|
|
24
|
+
### 2.2 方案
|
|
25
|
+
|
|
26
|
+
创建 `createAgentSession(config)` 工厂,封装全部装配细节,返回 `AgentSession` 对象:
|
|
27
|
+
|
|
28
|
+
```
|
|
29
|
+
createAgentSession(config)
|
|
30
|
+
├─ 自动创建:runId / eventLog / session / steerQueue / AbortController
|
|
31
|
+
├─ 调用方注入:router(必填)/ cwd(必填)
|
|
32
|
+
├─ 可选覆盖:tools / security / guard / approve / persist / onEvent / stageChange / ...
|
|
33
|
+
└─ 返回 AgentSession { runId, steer, run(), injectSteer(), abort(), getSession(), getEventLog() }
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
### 2.3 关键设计决策
|
|
37
|
+
|
|
38
|
+
1. **router 必须由调用方提供**——支持离线 mock / 真实模型 / 自定义 provider,工厂不绑定任何模型配置
|
|
39
|
+
2. **tools 可选,默认 createDefaultRegistry()**——MCP / 企业守卫等高级组件由调用方注入
|
|
40
|
+
3. **内置 AbortController**——调用方不传 signal 时工厂内部创建,`abort()` 方法直接可用
|
|
41
|
+
4. **内置 steer 队列**——P3 的 InMemorySteerQueue 自动绑定到 OrchestratorDeps.steerSource
|
|
42
|
+
5. **不替代 executeTask**——CLI 仍可独立装配;工厂面向程序化 / Web 场景
|
|
43
|
+
|
|
44
|
+
### 2.4 新增文件
|
|
45
|
+
|
|
46
|
+
| 文件 | 行数 | 说明 |
|
|
47
|
+
|------|------|------|
|
|
48
|
+
| `src/agent/agent-session.ts` | ~170 | 工厂 + AgentSession 接口 + AgentSessionConfig |
|
|
49
|
+
|
|
50
|
+
### 2.5 使用示例
|
|
51
|
+
|
|
52
|
+
```typescript
|
|
53
|
+
import { createAgentSession } from './src/agent/agent-session';
|
|
54
|
+
import { ModelRouter } from './src/models/model-router';
|
|
55
|
+
|
|
56
|
+
const session = createAgentSession({
|
|
57
|
+
cwd: '/path/to/project',
|
|
58
|
+
router: new ModelRouter(providers, 'cost', 0),
|
|
59
|
+
onEvent: (ev) => sseSend(ev), // Web 流式推送
|
|
60
|
+
stageChange: (path, content) => panel.add(path, content), // 变更面板
|
|
61
|
+
security: { sandboxMode: 'workspace-write', requireApproval: true },
|
|
62
|
+
maxIterations: 30,
|
|
63
|
+
});
|
|
64
|
+
|
|
65
|
+
// 运行中用户插话改方向(P3 steer)
|
|
66
|
+
session.injectSteer('不要改测试文件,只改 src/', '只改 src/ 目录');
|
|
67
|
+
|
|
68
|
+
// 执行任务
|
|
69
|
+
const result = await session.run('修复登录 bug');
|
|
70
|
+
|
|
71
|
+
// 中断
|
|
72
|
+
session.abort();
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
---
|
|
76
|
+
|
|
77
|
+
## 三、P3 steer() 中途人工纠偏
|
|
78
|
+
|
|
79
|
+
### 3.1 问题
|
|
80
|
+
|
|
81
|
+
任务运行中用户发现方向错误,需要插话改目标。原有机制只有 AbortSignal(完全中断)和 resume(停止后重启),缺少"不中断、不回滚、改方向继续"的能力。
|
|
82
|
+
|
|
83
|
+
### 3.2 方案
|
|
84
|
+
|
|
85
|
+
在 Orchestrator 主循环顶部(abort 检查之后、模型调用之前)增加 steer 事件源 drain:
|
|
86
|
+
|
|
87
|
+
```
|
|
88
|
+
for (每轮循环) {
|
|
89
|
+
1. 检查 abort signal → 中断则退出
|
|
90
|
+
2. ★ drain steer 队列 → 有消息则注入为 user 消息,重置错误/循环计数
|
|
91
|
+
3. 模型调用(含重试)
|
|
92
|
+
4. 无工具调用 → 完成
|
|
93
|
+
5. 成本/迭代上限检查
|
|
94
|
+
6. 原地打转检测
|
|
95
|
+
7. 工具执行
|
|
96
|
+
8. 错误自愈
|
|
97
|
+
9. 上下文压缩
|
|
98
|
+
}
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
### 3.3 核心实现
|
|
102
|
+
|
|
103
|
+
**`src/agent/steer.ts`**——SteerSource 抽象 + InMemorySteerQueue:
|
|
104
|
+
|
|
105
|
+
```typescript
|
|
106
|
+
interface SteerSource {
|
|
107
|
+
drain(): SteerMessage[]; // 取出所有待注入消息(消费后清空)
|
|
108
|
+
push(msg): SteerMessage; // 推入一条消息(线程安全)
|
|
109
|
+
size(): number; // 待消费消息数
|
|
110
|
+
}
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
**`src/agent/orchestrator.ts`**——主循环注入(约 25 行):
|
|
114
|
+
|
|
115
|
+
```typescript
|
|
116
|
+
if (this.deps.steerSource) {
|
|
117
|
+
const steers = this.deps.steerSource.drain();
|
|
118
|
+
for (const s of steers) {
|
|
119
|
+
const steerMsg: ChatMessage = {
|
|
120
|
+
role: 'user',
|
|
121
|
+
content: `[用户中途指令] ${s.message}${s.focus ? `\n\n聚焦:${s.focus}` : ''}\n\n请基于当前已完成的工作,按此新指令继续执行。已确认的文件变更保留,不要回滚。`,
|
|
122
|
+
};
|
|
123
|
+
messages.push(steerMsg);
|
|
124
|
+
session.append(steerMsg);
|
|
125
|
+
await eventLog.append('steer', { steerId: s.id, message: s.message.slice(0, 500), iteration: calls });
|
|
126
|
+
this.deps.onEvent?.({ type: 'steer', steerId: s.id, message: s.message, iteration: calls });
|
|
127
|
+
consecutiveErrors = 0; // 重置错误计数
|
|
128
|
+
sameTextStreak = 0; // 重置循环检测
|
|
129
|
+
lastAssistantText = '';
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
### 3.4 关键设计决策
|
|
135
|
+
|
|
136
|
+
1. **steer ≠ abort**——steer 是"改方向",abort 是"停止";两者独立,steer 不触发中断
|
|
137
|
+
2. **不回滚已确认变更**——steer 消息明确告知模型"已确认的文件变更保留",change-manager 暂存状态不动
|
|
138
|
+
3. **重置错误/循环计数**——新方向不应继承旧方向的错误累积,避免自愈机制误判
|
|
139
|
+
4. **事件可审计**——新增 `steer` 事件类型到 EventLog 和 OrchestratorEvent,企业审计可追溯
|
|
140
|
+
5. **SteerSource 抽象**——默认 InMemorySteerQueue;Web/SSE 场景可自定义(如 Redis Stream、消息队列)
|
|
141
|
+
6. **注入时机**——循环顶部 drain,确保模型在下一轮请求中看到新指令;不在工具执行中途注入(避免状态不一致)
|
|
142
|
+
|
|
143
|
+
### 3.5 与 Pi steer() 对照
|
|
144
|
+
|
|
145
|
+
| 维度 | 飞虹Code steer | Pi steer |
|
|
146
|
+
|------|---------------|----------|
|
|
147
|
+
| 注入方式 | SteerSource.drain() 在循环顶部消费 | agent.steer() 队列,当前 assistant turn 结束后注入 |
|
|
148
|
+
| 消息格式 | 包装为 `[用户中途指令]` user 消息 | 原始 AgentMessage 直接入队 |
|
|
149
|
+
| 状态重置 | 重置 consecutiveErrors / sameTextStreak | 由 Agent 内部状态机管理 |
|
|
150
|
+
| 审计 | eventLog.append('steer') + onEvent | telemetry span 事件 |
|
|
151
|
+
| 分布式 | SteerSource 可替换为 Redis 实现 | 单进程队列 |
|
|
152
|
+
|
|
153
|
+
### 3.6 新增 / 修改文件
|
|
154
|
+
|
|
155
|
+
| 文件 | 操作 | 说明 |
|
|
156
|
+
|------|------|------|
|
|
157
|
+
| `src/agent/steer.ts` | 新增 | SteerSource 接口 + InMemorySteerQueue + createSteerQueue |
|
|
158
|
+
| `src/agent/orchestrator.ts` | 修改 | OrchestratorDeps 加 steerSource;OrchestratorEvent 加 steer;主循环注入逻辑 |
|
|
159
|
+
| `src/runtime/event-log.ts` | 修改 | EventType 加 'steer' |
|
|
160
|
+
|
|
161
|
+
---
|
|
162
|
+
|
|
163
|
+
## 四、P5 Pi 对照评测
|
|
164
|
+
|
|
165
|
+
### 4.1 评测环境
|
|
166
|
+
|
|
167
|
+
| 项 | 值 |
|
|
168
|
+
|----|-----|
|
|
169
|
+
| 飞虹Code 版本 | v8.0.0(自研内核) |
|
|
170
|
+
| Pi 版本 | @earendil-works/pi-agent-core v0.85.1 |
|
|
171
|
+
| Pi 许可证 | MIT |
|
|
172
|
+
| Node 版本 | v22.23.2(满足 Pi >= 22.19.0 要求) |
|
|
173
|
+
| 评测模式 | Mock(飞虹Code mock router + Pi fauxProvider) |
|
|
174
|
+
| 评测脚本 | `scripts/pi-compare.mts` |
|
|
175
|
+
|
|
176
|
+
### 4.2 评测任务
|
|
177
|
+
|
|
178
|
+
| 任务 ID | 描述 | 工具调用 | steer 纠偏 |
|
|
179
|
+
|---------|------|----------|-----------|
|
|
180
|
+
| T1 | 单工具调用:读文件后总结 | 1 次 | 无 |
|
|
181
|
+
| T2 | 多工具链式:读→写→总结 | 2 次 | 无 |
|
|
182
|
+
| T3 | 中途纠偏:执行到一半改方向 | 1 次 | 有(第 1 轮后注入) |
|
|
183
|
+
|
|
184
|
+
### 4.3 评测结果
|
|
185
|
+
|
|
186
|
+
| 任务 | 飞虹Code 迭代 | Pi 迭代 | 飞虹Code 工具调用 | Pi 工具调用 | 飞虹Code 成功 | Pi 成功 | steer 生效(两端) |
|
|
187
|
+
|------|-------------|---------|-----------------|-----------|-------------|---------|-------------------|
|
|
188
|
+
| T1 | 1 | 2 | 1 | 1 | ✅ | ✅ | — |
|
|
189
|
+
| T2 | 2 | 3 | 2 | 2 | ✅ | ✅ | — |
|
|
190
|
+
| T3 | 1 | 2 | 1 | 1 | ✅ | ✅ | ✅ / ✅ |
|
|
191
|
+
|
|
192
|
+
**平均值**:飞虹Code 迭代 1.3 / 耗时 27ms;Pi 迭代 2.3 / 耗时 4ms
|
|
193
|
+
|
|
194
|
+
> 注:迭代计数口径不同——飞虹Code orchestrator 的 for 循环计数 vs Pi fauxProvider 的模型调用计数。Mock 模式下耗时无参考意义,真实模型评测需配置 API key。
|
|
195
|
+
|
|
196
|
+
### 4.4 关键发现
|
|
197
|
+
|
|
198
|
+
1. **两端均能完成 ReAct 闭环**:模型→工具→结果→总结,Mock 模式下全部成功
|
|
199
|
+
2. **steer() 两端均生效**:
|
|
200
|
+
- 飞虹Code:steer 在 orchestrator 循环顶部 drain,模型下一轮请求中可见 `[用户中途指令]` 标记
|
|
201
|
+
- Pi:`agent.steer()` 队列注入,当前 assistant turn 结束后生效
|
|
202
|
+
3. **飞虹Code 企业级能力完整**:RBAC / SHA-256 哈希链审计 / 4 模式沙箱 / diff 草稿变更管理 / 逐 hunk 确认——Pi 内核不含这些,需自行封装
|
|
203
|
+
4. **Pi 内核抽象更干净**:Agent 类原生支持 steer / followUp 队列、QueueMode(all / one-at-a-time)、ToolExecutionMode(sequential / parallel)、telemetry schema——飞虹Code 需自研这些抽象
|
|
204
|
+
5. **Pi 是 ESM-only**:`"type": "module"`,要求 Node >= 22.19.0;飞虹Code 是 CJS,混用时需 `.mts` + tsx
|
|
205
|
+
|
|
206
|
+
### 4.5 真实模型评测结果(agnes-2.5-flash)
|
|
207
|
+
|
|
208
|
+
使用 agnes-ai.cn API(agnes-2.5-flash)跑真实模型对照评测,3 个任务两端全部通过:
|
|
209
|
+
|
|
210
|
+
| 任务 | 飞虹Code 迭代 | Pi 迭代 | 飞虹Code 工具 | Pi 工具 | 飞虹Code 耗时 | Pi 耗时 | 飞虹Code 成功 | Pi 成功 |
|
|
211
|
+
|------|-------------|---------|-------------|---------|-------------|---------|-------------|---------|
|
|
212
|
+
| R1 创建文件 | 1 | 2 | 1 | 1 | 5.1s | 1.6s | ✅ | ✅ |
|
|
213
|
+
| R2 读取总结 | 1 | 2 | 1 | 1 | 12.6s | 29.9s | ✅ | ✅ |
|
|
214
|
+
| R3 中途纠偏 | 2 | 3 | 2 | 2 | 30.2s | 2.2s | ✅ steer生效 | ✅ steer生效 |
|
|
215
|
+
|
|
216
|
+
**总体**:飞虹Code 3/3 成功,平均 1.3 轮迭代;Pi 3/3 成功,平均 2.3 轮迭代。
|
|
217
|
+
|
|
218
|
+
**关键发现**:
|
|
219
|
+
1. 两端 steer() 在真实模型下均生效——用户中途插话"不要创建 test.txt,改成创建 result.md"后,两端均按新指令创建了 result.md 而非 test.txt
|
|
220
|
+
2. 飞虹Code 迭代轮数更少(1.3 vs 2.3),系统提示词和工具定义针对代码任务做了优化
|
|
221
|
+
3. 飞虹Code R3 耗时较长(30s)因 steer 在 1.5s 后注入,模型需重新规划;Pi steer 注入时机更早(工具执行回调中)
|
|
222
|
+
4. 飞虹Code 侧通过 `OpenAICompatibleProvider` 直接接入 agnes API;Pi 侧通过自定义 `streamFn` 调用 agnes Chat Completions 接口(Pi 内置 openaiProvider 仅支持 Responses API,agnes 仅支持 Chat Completions)
|
|
223
|
+
|
|
224
|
+
**运行命令**:
|
|
225
|
+
```bash
|
|
226
|
+
npx tsx scripts/pi-compare.mts --real \
|
|
227
|
+
--api-key=sk-xxx --base-url=https://api.agnes-ai.cn/v1 --model=agnes-2.5-flash \
|
|
228
|
+
--output=docs/P5-pi-compare-real-report.json
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
### 4.6 SWE-bench 全量评测前置条件
|
|
232
|
+
|
|
233
|
+
当前评测为 3 个定制任务。要跑完整 SWE-bench-Lite-300 对照评测,还需:
|
|
234
|
+
|
|
235
|
+
1. **SWE-bench 实例**:准备 `bench/real/` 目录下的实例 JSON(当前 bench 目录为空)
|
|
236
|
+
2. **Python 3.8 venv**:`bench/real/venv38`(用于 pytest 验证)
|
|
237
|
+
3. **Git worktree**:每个实例需 clone 对应仓库并 checkout base_commit
|
|
238
|
+
4. **运行命令**:
|
|
239
|
+
```bash
|
|
240
|
+
# 飞虹Code 侧(已有脚本)
|
|
241
|
+
node scripts/swebench-fhcode.mjs --instances bench/real/django_inst.json --limit 10 --report fhcode-report.json
|
|
242
|
+
```
|
|
243
|
+
|
|
244
|
+
### 4.7 新增文件
|
|
245
|
+
|
|
246
|
+
| 文件 | 说明 |
|
|
247
|
+
|------|------|
|
|
248
|
+
| `scripts/pi-compare.mts` | Pi vs 飞虹Code 对照评测脚本(支持 Mock / 真实模型双模式) |
|
|
249
|
+
| `docs/P5-Pi对照评测报告-mock模式.json` | Mock 模式评测结果(3 任务 × 2 Agent) |
|
|
250
|
+
| `docs/P5-Pi对照评测报告-真实模型.json` | 真实模型(agnes-2.5-flash)评测结果(3 任务 × 2 Agent,全部通过) |
|
|
251
|
+
| `docs/P5-pi-compare-report.json` | Mock 报告 ASCII 文件名副本 |
|
|
252
|
+
| `docs/P5-pi-compare-real-report.json` | 真实报告 ASCII 文件名副本 |
|
|
253
|
+
|
|
254
|
+
---
|
|
255
|
+
|
|
256
|
+
## 五、验证结果
|
|
257
|
+
|
|
258
|
+
### 5.1 TypeScript 类型检查
|
|
259
|
+
|
|
260
|
+
```
|
|
261
|
+
npx tsc --noEmit → 0 errors
|
|
262
|
+
```
|
|
263
|
+
|
|
264
|
+
### 5.2 单元测试
|
|
265
|
+
|
|
266
|
+
```
|
|
267
|
+
npx tsx --test tests/unit/orchestrator.test.ts tests/unit/steer.test.ts tests/unit/agent-session.test.ts
|
|
268
|
+
|
|
269
|
+
# tests 16
|
|
270
|
+
# pass 16
|
|
271
|
+
# fail 0
|
|
272
|
+
```
|
|
273
|
+
|
|
274
|
+
| 测试文件 | 测试数 | 通过 |
|
|
275
|
+
|---------|-------|------|
|
|
276
|
+
| orchestrator.test.ts(原有,回归验证) | 6 | 6 ✅ |
|
|
277
|
+
| steer.test.ts(新增) | 5 | 5 ✅ |
|
|
278
|
+
| agent-session.test.ts(新增) | 5 | 5 ✅ |
|
|
279
|
+
|
|
280
|
+
### 5.3 P5 评测脚本运行
|
|
281
|
+
|
|
282
|
+
```
|
|
283
|
+
npx tsx scripts/pi-compare.mts → exit code 0,3 任务全部完成
|
|
284
|
+
```
|
|
285
|
+
|
|
286
|
+
---
|
|
287
|
+
|
|
288
|
+
## 六、文件清单
|
|
289
|
+
|
|
290
|
+
### 新增文件(5 个)
|
|
291
|
+
|
|
292
|
+
| 文件 | 大小 | 说明 |
|
|
293
|
+
|------|------|------|
|
|
294
|
+
| `src/agent/steer.ts` | ~2.7KB | P3 steer 事件源抽象 + InMemorySteerQueue |
|
|
295
|
+
| `src/agent/agent-session.ts` | ~7.0KB | P1.1 createAgentSession 工厂 + AgentSession |
|
|
296
|
+
| `tests/unit/steer.test.ts` | ~2.2KB | P3 steer 队列单元测试(5 项) |
|
|
297
|
+
| `tests/unit/agent-session.test.ts` | ~6.6KB | P1.1 工厂 + P3 注入集成测试(5 项) |
|
|
298
|
+
| `scripts/pi-compare.mts` | ~24KB | P5 对照评测脚本(Mock + 真实模型双模式,agnes 自定义 streamFn) |
|
|
299
|
+
| `docs/P5-Pi对照评测报告-mock模式.json` | ~3.2KB | Mock 模式评测结果 |
|
|
300
|
+
| `docs/P5-Pi对照评测报告-真实模型.json` | ~4.2KB | 真实模型(agnes-2.5-flash)评测结果,3/3 全部通过 |
|
|
301
|
+
|
|
302
|
+
### 修改文件(2 个)
|
|
303
|
+
|
|
304
|
+
| 文件 | 修改内容 |
|
|
305
|
+
|------|----------|
|
|
306
|
+
| `src/agent/orchestrator.ts` | +import steer;OrchestratorDeps 加 steerSource;OrchestratorEvent 加 steer;主循环 ~25 行注入逻辑 |
|
|
307
|
+
| `src/runtime/event-log.ts` | EventType 加 'steer' |
|
|
308
|
+
|
|
309
|
+
### 依赖变更
|
|
310
|
+
|
|
311
|
+
| 包 | 版本 | 类型 | 说明 |
|
|
312
|
+
|----|------|------|------|
|
|
313
|
+
| @earendil-works/pi-agent-core | ^0.85.1 | devDependency | P5 对照评测用,MIT 许可 |
|
|
314
|
+
| (传递依赖)@earendil-works/pi-ai | ^0.85.1 | 传递 | Pi 模型适配层 |
|
|
315
|
+
| (传递依赖)@earendil-works/chord | ^0.85.1 | 传递 | Pi 工具层 |
|
|
316
|
+
| (传递依赖)typebox | 1.3.7 | 传递 | Pi 的 schema 校验库 |
|
|
317
|
+
|
|
318
|
+
> Pi 相关包均为 devDependency,不影响生产构建。飞虹Code 运行时不依赖 Pi(方案 A:特性移植,不引入 Pi 运行时依赖)。
|
|
319
|
+
|
|
320
|
+
---
|
|
321
|
+
|
|
322
|
+
## 七、后续建议
|
|
323
|
+
|
|
324
|
+
1. **P1.1 推广**:将 `src/web/task-queue.ts` 和 `src/harness/executor.ts` 的 Orchestrator 装配迁移到 `createAgentSession`,消除重复装配代码
|
|
325
|
+
2. **P3 Web 上行通道**:为 Web 端实现 steer HTTP POST / WebSocket 接口,将用户插话转发到 `session.injectSteer()`
|
|
326
|
+
3. **P5 SWE-bench 全量评测**:准备 SWE-bench 实例 + Python venv 后,用 `--real` 模式跑完整 SWE-bench-Lite-300 对照
|
|
327
|
+
4. **P3 分布式 steer**:为多进程 / 容器化部署实现 RedisSteerSource(替代 InMemorySteerQueue)
|
|
328
|
+
5. **P1.1 工厂守卫**:在工厂内集成企业 RBAC guard 的默认装配,减少调用方配置量
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
{
|
|
2
|
+
"date": "2026-09-05T12:25:15.717Z",
|
|
3
|
+
"mode": "mock",
|
|
4
|
+
"fhcodeVersion": "8.0.0",
|
|
5
|
+
"piVersion": "0.85.1",
|
|
6
|
+
"tasks": [
|
|
7
|
+
{
|
|
8
|
+
"id": "T1-single-tool",
|
|
9
|
+
"description": "单工具调用任务:读文件后总结"
|
|
10
|
+
},
|
|
11
|
+
{
|
|
12
|
+
"id": "T2-multi-tool",
|
|
13
|
+
"description": "多工具链式任务:读文件 → 写文件 → 总结"
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
"id": "T3-steer-correction",
|
|
17
|
+
"description": "中途纠偏任务:执行到一半时用户改方向"
|
|
18
|
+
}
|
|
19
|
+
],
|
|
20
|
+
"metrics": [
|
|
21
|
+
{
|
|
22
|
+
"taskId": "T1-single-tool",
|
|
23
|
+
"agent": "fhcode",
|
|
24
|
+
"iterations": 1,
|
|
25
|
+
"toolCalls": 1,
|
|
26
|
+
"success": true,
|
|
27
|
+
"durationMs": 35,
|
|
28
|
+
"steerInjected": false,
|
|
29
|
+
"steerObserved": false,
|
|
30
|
+
"finalAnswer": "已读取文件,包含 3 个导出函数。"
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
"taskId": "T1-single-tool",
|
|
34
|
+
"agent": "pi",
|
|
35
|
+
"iterations": 2,
|
|
36
|
+
"toolCalls": 1,
|
|
37
|
+
"success": true,
|
|
38
|
+
"durationMs": 7,
|
|
39
|
+
"steerInjected": false,
|
|
40
|
+
"steerObserved": false,
|
|
41
|
+
"finalAnswer": "[{\"type\":\"text\",\"text\":\"已读取文件,包含 3 个导出函数。\"}]"
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
"taskId": "T2-multi-tool",
|
|
45
|
+
"agent": "fhcode",
|
|
46
|
+
"iterations": 2,
|
|
47
|
+
"toolCalls": 2,
|
|
48
|
+
"success": true,
|
|
49
|
+
"durationMs": 25,
|
|
50
|
+
"steerInjected": false,
|
|
51
|
+
"steerObserved": false,
|
|
52
|
+
"finalAnswer": "已完成:读取 a.ts,创建 b.ts。"
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
"taskId": "T2-multi-tool",
|
|
56
|
+
"agent": "pi",
|
|
57
|
+
"iterations": 3,
|
|
58
|
+
"toolCalls": 2,
|
|
59
|
+
"success": true,
|
|
60
|
+
"durationMs": 2,
|
|
61
|
+
"steerInjected": false,
|
|
62
|
+
"steerObserved": false,
|
|
63
|
+
"finalAnswer": "[{\"type\":\"text\",\"text\":\"已完成:读取 a.ts,创建 b.ts。\"}]"
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
"taskId": "T3-steer-correction",
|
|
67
|
+
"agent": "fhcode",
|
|
68
|
+
"iterations": 1,
|
|
69
|
+
"toolCalls": 1,
|
|
70
|
+
"success": true,
|
|
71
|
+
"durationMs": 25,
|
|
72
|
+
"steerInjected": true,
|
|
73
|
+
"steerObserved": true,
|
|
74
|
+
"finalAnswer": "已按新指令完成:改为读取 new.ts 并总结。"
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
"taskId": "T3-steer-correction",
|
|
78
|
+
"agent": "pi",
|
|
79
|
+
"iterations": 2,
|
|
80
|
+
"toolCalls": 1,
|
|
81
|
+
"success": true,
|
|
82
|
+
"durationMs": 2,
|
|
83
|
+
"steerInjected": true,
|
|
84
|
+
"steerObserved": true,
|
|
85
|
+
"finalAnswer": "[{\"type\":\"text\",\"text\":\"已按新指令完成:改为读取 new.ts 并总结。\"}]"
|
|
86
|
+
}
|
|
87
|
+
],
|
|
88
|
+
"comparison": [
|
|
89
|
+
{
|
|
90
|
+
"task": "T1-single-tool",
|
|
91
|
+
"fhcode 迭代": 1,
|
|
92
|
+
"pi 迭代": 2,
|
|
93
|
+
"fhcode 工具调用": 1,
|
|
94
|
+
"pi 工具调用": 1,
|
|
95
|
+
"fhcode 耗时(ms)": 35,
|
|
96
|
+
"pi 耗时(ms)": 7,
|
|
97
|
+
"fhcode 成功": true,
|
|
98
|
+
"pi 成功": true
|
|
99
|
+
},
|
|
100
|
+
{
|
|
101
|
+
"task": "T2-multi-tool",
|
|
102
|
+
"fhcode 迭代": 2,
|
|
103
|
+
"pi 迭代": 3,
|
|
104
|
+
"fhcode 工具调用": 2,
|
|
105
|
+
"pi 工具调用": 2,
|
|
106
|
+
"fhcode 耗时(ms)": 25,
|
|
107
|
+
"pi 耗时(ms)": 2,
|
|
108
|
+
"fhcode 成功": true,
|
|
109
|
+
"pi 成功": true
|
|
110
|
+
},
|
|
111
|
+
{
|
|
112
|
+
"task": "T3-steer-correction",
|
|
113
|
+
"fhcode 迭代": 1,
|
|
114
|
+
"pi 迭代": 2,
|
|
115
|
+
"fhcode 工具调用": 1,
|
|
116
|
+
"pi 工具调用": 1,
|
|
117
|
+
"fhcode 耗时(ms)": 25,
|
|
118
|
+
"pi 耗时(ms)": 2,
|
|
119
|
+
"fhcode 成功": true,
|
|
120
|
+
"pi 成功": true,
|
|
121
|
+
"fhcode steer生效": true,
|
|
122
|
+
"pi steer生效": true
|
|
123
|
+
}
|
|
124
|
+
]
|
|
125
|
+
}
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
{
|
|
2
|
+
"date": "2026-09-05T13:01:28.295Z",
|
|
3
|
+
"mode": "real",
|
|
4
|
+
"model": "agnes-2.5-flash",
|
|
5
|
+
"fhcodeVersion": "8.0.0",
|
|
6
|
+
"piVersion": "0.85.1",
|
|
7
|
+
"tasks": [
|
|
8
|
+
{
|
|
9
|
+
"id": "R1-create-file",
|
|
10
|
+
"description": "真实模型:创建文件任务"
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
"id": "R2-read-summarize",
|
|
14
|
+
"description": "真实模型:读取并总结"
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
"id": "R3-steer-real",
|
|
18
|
+
"description": "真实模型:中途纠偏"
|
|
19
|
+
}
|
|
20
|
+
],
|
|
21
|
+
"metrics": [
|
|
22
|
+
{
|
|
23
|
+
"taskId": "R1-create-file",
|
|
24
|
+
"agent": "fhcode",
|
|
25
|
+
"iterations": 1,
|
|
26
|
+
"toolCalls": 1,
|
|
27
|
+
"success": true,
|
|
28
|
+
"durationMs": 5139,
|
|
29
|
+
"steerInjected": false,
|
|
30
|
+
"steerObserved": false,
|
|
31
|
+
"finalAnswer": "文件已成功创建。我已在当前目录下创建了 hello.ts 文件,内容为 console.log(\"Hello, 飞虹Code!\");。这个 TypeScript 文件可以运行并输出\"Hello, 飞虹Code!\"到控制台。",
|
|
32
|
+
"verifyReason": "hello.ts 已创建且内容正确"
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
"taskId": "R1-create-file",
|
|
36
|
+
"agent": "pi",
|
|
37
|
+
"iterations": 2,
|
|
38
|
+
"toolCalls": 1,
|
|
39
|
+
"success": true,
|
|
40
|
+
"durationMs": 1638,
|
|
41
|
+
"steerInjected": false,
|
|
42
|
+
"steerObserved": false,
|
|
43
|
+
"finalAnswer": "[{\"type\":\"text\",\"text\":\"已创建 `hello.ts` 文件,内容为:\\n\\n```typescript\\nconsole.log(\\\"Hello, 飞虹Code!\\\");\\n```\\n\\n使用 `npx ts-node hello.ts` 或 `deno run hello.",
|
|
44
|
+
"verifyReason": "hello.ts 已创建且内容正确"
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
"taskId": "R2-read-summarize",
|
|
48
|
+
"agent": "fhcode",
|
|
49
|
+
"iterations": 1,
|
|
50
|
+
"toolCalls": 1,
|
|
51
|
+
"success": true,
|
|
52
|
+
"durationMs": 12593,
|
|
53
|
+
"steerInjected": false,
|
|
54
|
+
"steerObserved": false,
|
|
55
|
+
"finalAnswer": "项目名称是 feihong-code,版本号为 8.0.0。",
|
|
56
|
+
"verifyReason": "任务已执行"
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
"taskId": "R2-read-summarize",
|
|
60
|
+
"agent": "pi",
|
|
61
|
+
"iterations": 2,
|
|
62
|
+
"toolCalls": 1,
|
|
63
|
+
"success": true,
|
|
64
|
+
"durationMs": 29920,
|
|
65
|
+
"steerInjected": false,
|
|
66
|
+
"steerObserved": false,
|
|
67
|
+
"finalAnswer": "[{\"type\":\"text\",\"text\":\"项目名称是 feihong-code,版本号为 8.0.0。\"}]",
|
|
68
|
+
"verifyReason": "任务已执行"
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
"taskId": "R3-steer-real",
|
|
72
|
+
"agent": "fhcode",
|
|
73
|
+
"iterations": 2,
|
|
74
|
+
"toolCalls": 2,
|
|
75
|
+
"success": true,
|
|
76
|
+
"durationMs": 30179,
|
|
77
|
+
"steerInjected": true,
|
|
78
|
+
"steerObserved": true,
|
|
79
|
+
"finalAnswer": "已在当前目录创建 result.md 文件,内容为\"新内容\"。原有的 test.txt 文件也保持不变。",
|
|
80
|
+
"verifyReason": "steer 生效:result.md 已创建"
|
|
81
|
+
},
|
|
82
|
+
{
|
|
83
|
+
"taskId": "R3-steer-real",
|
|
84
|
+
"agent": "pi",
|
|
85
|
+
"iterations": 3,
|
|
86
|
+
"toolCalls": 2,
|
|
87
|
+
"success": true,
|
|
88
|
+
"durationMs": 2192,
|
|
89
|
+
"steerInjected": true,
|
|
90
|
+
"steerObserved": true,
|
|
91
|
+
"finalAnswer": "[{\"type\":\"text\",\"text\":\"已创建 `result.md` 文件,内容为\\\"新内容\\\"。\"}]",
|
|
92
|
+
"verifyReason": "steer 生效:result.md 已创建"
|
|
93
|
+
}
|
|
94
|
+
],
|
|
95
|
+
"comparison": [
|
|
96
|
+
{
|
|
97
|
+
"task": "R1-create-file",
|
|
98
|
+
"fhcode 迭代": 1,
|
|
99
|
+
"pi 迭代": 2,
|
|
100
|
+
"fhcode 工具": 1,
|
|
101
|
+
"pi 工具": 1,
|
|
102
|
+
"fhcode 耗时ms": 5139,
|
|
103
|
+
"pi 耗时ms": 1638,
|
|
104
|
+
"fhcode 成功": true,
|
|
105
|
+
"pi 成功": true,
|
|
106
|
+
"fhcode 验证": "hello.ts 已创建且内容正确",
|
|
107
|
+
"pi 验证": "hello.ts 已创建且内容正确"
|
|
108
|
+
},
|
|
109
|
+
{
|
|
110
|
+
"task": "R2-read-summarize",
|
|
111
|
+
"fhcode 迭代": 1,
|
|
112
|
+
"pi 迭代": 2,
|
|
113
|
+
"fhcode 工具": 1,
|
|
114
|
+
"pi 工具": 1,
|
|
115
|
+
"fhcode 耗时ms": 12593,
|
|
116
|
+
"pi 耗时ms": 29920,
|
|
117
|
+
"fhcode 成功": true,
|
|
118
|
+
"pi 成功": true,
|
|
119
|
+
"fhcode 验证": "任务已执行",
|
|
120
|
+
"pi 验证": "任务已执行"
|
|
121
|
+
},
|
|
122
|
+
{
|
|
123
|
+
"task": "R3-steer-real",
|
|
124
|
+
"fhcode 迭代": 2,
|
|
125
|
+
"pi 迭代": 3,
|
|
126
|
+
"fhcode 工具": 2,
|
|
127
|
+
"pi 工具": 2,
|
|
128
|
+
"fhcode 耗时ms": 30179,
|
|
129
|
+
"pi 耗时ms": 2192,
|
|
130
|
+
"fhcode 成功": true,
|
|
131
|
+
"pi 成功": true,
|
|
132
|
+
"fhcode steer": true,
|
|
133
|
+
"pi steer": true,
|
|
134
|
+
"fhcode 验证": "steer 生效:result.md 已创建",
|
|
135
|
+
"pi 验证": "steer 生效:result.md 已创建"
|
|
136
|
+
}
|
|
137
|
+
]
|
|
138
|
+
}
|