codex-harness-engineering 0.1.4
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/AGENTS.md +73 -0
- package/README.md +136 -0
- package/docs/harness-engineering/implementation-playbook.md +370 -0
- package/docs/harness-engineering/index.md +61 -0
- package/docs/harness-engineering/research-note.md +318 -0
- package/docs/harness-engineering/sources.md +126 -0
- package/package.json +38 -0
- package/scripts/install-skills.mjs +104 -0
- package/scripts/publish.sh +139 -0
- package/scripts/verify-harness.mjs +175 -0
- package/skills/acceptance-contract/SKILL.md +78 -0
- package/skills/acceptance-contract/agents/openai.yaml +4 -0
- package/skills/cleanup-harness/SKILL.md +90 -0
- package/skills/cleanup-harness/agents/openai.yaml +4 -0
- package/skills/creator-harness/SKILL.md +124 -0
- package/skills/creator-harness/agents/openai.yaml +4 -0
- package/skills/creator-harness/references/harness-artifacts.md +302 -0
package/AGENTS.md
ADDED
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
# Ghi chú nghiên cứu về Harness Engineering
|
|
2
|
+
|
|
3
|
+
Kho này lưu các ghi chú Markdown về **harness engineering** cho AI agent làm
|
|
4
|
+
việc dài hạn.
|
|
5
|
+
|
|
6
|
+
## Phạm vi nguồn
|
|
7
|
+
|
|
8
|
+
Chỉ dùng năm bài sau:
|
|
9
|
+
|
|
10
|
+
- `[S1]` OpenAI, "Harness engineering: leveraging Codex in an agent-first world".
|
|
11
|
+
- `[S2]` Anthropic, "Effective harnesses for long-running agents".
|
|
12
|
+
- `[S3]` Anthropic, "Building effective agents".
|
|
13
|
+
- `[S4]` Anthropic, "Harness design for long-running application development".
|
|
14
|
+
- `[S5]` Google DeepMind, "AutoHarness: Improving LLM Agents by Automatically Synthesizing a Code Harness" & Google Cloud agent engineering practices.
|
|
15
|
+
|
|
16
|
+
Không thêm resource, citation, paper, DOI, benchmark, hoặc blog khác nếu người
|
|
17
|
+
dùng chưa yêu cầu mở rộng phạm vi.
|
|
18
|
+
|
|
19
|
+
## Bản đồ tài liệu
|
|
20
|
+
|
|
21
|
+
- Đọc `README.md` trước để nắm mục tiêu và thứ tự đọc.
|
|
22
|
+
- Bản tổng hợp nghiên cứu chính nằm ở
|
|
23
|
+
`docs/harness-engineering/research-note.md`.
|
|
24
|
+
- Hướng dẫn triển khai thực tế nằm ở
|
|
25
|
+
`docs/harness-engineering/implementation-playbook.md`.
|
|
26
|
+
- Danh mục nguồn đã xác minh nằm ở `docs/harness-engineering/sources.md`.
|
|
27
|
+
- Skill thực hành tạo harness nằm ở `skills/creator-harness/SKILL.md`.
|
|
28
|
+
|
|
29
|
+
## Bắt đầu session
|
|
30
|
+
|
|
31
|
+
1. Đọc `README.md`, `progress.md`, và `feature_list.json`.
|
|
32
|
+
2. Xem lịch sử git gần nhất để nhận biết thay đổi đang tiếp tục.
|
|
33
|
+
3. Chạy `./init.sh` để kiểm tra baseline rẻ nhất trước khi sửa.
|
|
34
|
+
4. Khi task thay đổi hành vi, guardrail, package, script, test, skill, hoặc
|
|
35
|
+
quy tắc agent, chỉ đánh dấu feature đã verify sau khi lệnh kiểm tra liên quan
|
|
36
|
+
pass.
|
|
37
|
+
5. Với các thay đổi ở mục 4, luôn cập nhật `feature_list.json` và `progress.md`
|
|
38
|
+
trước khi hoàn tất, kể cả task nhỏ. Chỉ task chỉnh nội dung nghiên cứu thuần
|
|
39
|
+
túy mới có thể chỉ ghi `progress.md` khi kéo dài. Mục `Relevant files` trong
|
|
40
|
+
entry mới nhất của progress phải liệt kê các artifact hành vi đã đổi.
|
|
41
|
+
|
|
42
|
+
## Lệnh chuẩn
|
|
43
|
+
|
|
44
|
+
- Smoke test đầu session: `./init.sh`.
|
|
45
|
+
- Kiểm thử package: `npm test`.
|
|
46
|
+
- Kiểm guardrail harness và test: `npm run verify`.
|
|
47
|
+
- Kiểm nội dung package xuất bản: `npm run pack:dry`.
|
|
48
|
+
- `npm run verify` phải fail nếu working tree có thay đổi hành vi harness mà
|
|
49
|
+
thiếu cập nhật `feature_list.json` hoặc `progress.md`.
|
|
50
|
+
|
|
51
|
+
## Quy tắc viết
|
|
52
|
+
|
|
53
|
+
- Mọi nhận định quan trọng phải truy vết được về `[S1]`, `[S2]`, `[S3]`, `[S4]`, hoặc
|
|
54
|
+
`[S5]`.
|
|
55
|
+
- Không tự bịa citation, paper, tác giả, ngày tháng, DOI, benchmark, hoặc số
|
|
56
|
+
liệu.
|
|
57
|
+
- Nếu chưa xác minh được nguồn, đánh dấu rõ bằng marker tiếng Việt cho nội
|
|
58
|
+
dung cần xác minh.
|
|
59
|
+
- Viết theo phong cách nghiên cứu: luận điểm, bằng chứng, hệ quả.
|
|
60
|
+
- Phân biệt rõ đâu là kết luận từ nguồn và đâu là diễn giải của tài liệu này.
|
|
61
|
+
|
|
62
|
+
## Quy trình cập nhật
|
|
63
|
+
|
|
64
|
+
1. Đọc `docs/harness-engineering/sources.md`.
|
|
65
|
+
2. Cập nhật phần liên quan trong research note hoặc playbook.
|
|
66
|
+
3. Chỉ thêm nguồn mới nếu người dùng yêu cầu mở rộng ngoài năm bài.
|
|
67
|
+
4. Kiểm tra placeholder và citation ngoài phạm vi trước khi hoàn tất.
|
|
68
|
+
|
|
69
|
+
## Ràng buộc local
|
|
70
|
+
|
|
71
|
+
- Không chạy lệnh Xcode hoặc Android.
|
|
72
|
+
- Khi dùng shell trong repo này, prefix lệnh bằng `rtk` theo
|
|
73
|
+
`/Users/${USER}/.codex/RTK.md`.
|
package/README.md
ADDED
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
# Codex Harness Engineering
|
|
2
|
+
|
|
3
|
+
Kho này là ghi chú nghiên cứu và playbook thực hành để thiết kế **harness cho
|
|
4
|
+
Codex** trong các công việc phần mềm dài hạn. Trọng tâm không phải là prompt dài
|
|
5
|
+
hơn, mà là môi trường repository giúp Codex hiểu mục tiêu, giữ trạng thái, quan
|
|
6
|
+
sát runtime, kiểm chứng kết quả, và tiếp tục qua nhiều phiên làm việc.
|
|
7
|
+
|
|
8
|
+
Phạm vi hiện tại được cố ý thu hẹp vào năm bài viết nền tảng của OpenAI,
|
|
9
|
+
Anthropic và Google. Không dùng nguồn mở rộng, danh sách tổng hợp, preprint, blog bên
|
|
10
|
+
thứ ba, hoặc benchmark ngoài năm bài này trong bản hiện tại.
|
|
11
|
+
|
|
12
|
+
## Luận đề một câu
|
|
13
|
+
|
|
14
|
+
Harness engineering cho Codex là việc thiết kế môi trường vận hành quanh agent
|
|
15
|
+
để năng lực của mô hình trở thành tiến triển phần mềm có thể tiếp tục, quan sát,
|
|
16
|
+
kiểm chứng, và duy trì qua nhiều vòng làm việc [S1], [S2], [S3], [S4], [S5].
|
|
17
|
+
|
|
18
|
+
## Đóng góp của kho này
|
|
19
|
+
|
|
20
|
+
Kho này biến năm nguồn thành một harness tối thiểu cho Codex:
|
|
21
|
+
|
|
22
|
+
1. Xác định vai trò mới của kỹ sư: con người đặt mục tiêu, tiêu chí, và feedback
|
|
23
|
+
loop; Codex thực thi trong môi trường có thể đọc và kiểm chứng [S1].
|
|
24
|
+
2. Chuẩn hóa source of truth trong repo để Codex không phụ thuộc vào chat
|
|
25
|
+
history: `AGENTS.md`, docs, skill, progress, test, và git history [S1], [S2].
|
|
26
|
+
3. Đưa ra playbook chọn lớp harness nhỏ nhất theo failure mode thay vì thêm
|
|
27
|
+
planner, evaluator, hoặc orchestration mặc định [S3], [S4].
|
|
28
|
+
4. Cung cấp skill thực hành để tạo, chốt scope, verify, và cleanup harness trong
|
|
29
|
+
công việc dài hạn của Codex [S1], [S2], [S4], [S5].
|
|
30
|
+
|
|
31
|
+
## Năm nguồn duy nhất
|
|
32
|
+
|
|
33
|
+
| Mã | Nguồn | Vai trò trong harness cho Codex |
|
|
34
|
+
| --- | --- | --- |
|
|
35
|
+
| `[S1]` | OpenAI, "Harness engineering: leveraging Codex in an agent-first world" | Nền tảng chính cho repository-local knowledge, `AGENTS.md`, feedback loop, application legibility, invariant cơ học, throughput, và cleanup |
|
|
36
|
+
| `[S2]` | Anthropic, "Effective harnesses for long-running agents" | Mẫu state handoff cho agent dài hạn: feature list, progress file, setup, git history, và kiểm thử đầu-cuối |
|
|
37
|
+
| `[S3]` | Anthropic, "Building effective agents" | Nguyên tắc bắt đầu đơn giản, phân biệt workflow với agent, và chỉ tăng complexity khi tradeoff đáng giá |
|
|
38
|
+
| `[S4]` | Anthropic, "Harness design for long-running application development" | Planner-generator-evaluator, sprint contract, evaluator riêng, và QA runtime cho task ứng dụng dài |
|
|
39
|
+
| `[S5]` | Google DeepMind, "AutoHarness: Improving LLM Agents by Automatically Synthesizing a Code Harness" & Google Cloud | AutoHarness tự động sinh lớp bọc thực thi chặn hành động lỗi, Trajectory Evaluation kiểm chứng vết chạy, LLM-as-a-judge và Meta-Evaluation (VeRO) tối ưu cấu trúc |
|
|
40
|
+
|
|
41
|
+
## Bản đồ tài liệu
|
|
42
|
+
|
|
43
|
+
| File | Mục đích |
|
|
44
|
+
| --- | --- |
|
|
45
|
+
| `docs/harness-engineering/index.md` | Mục lục và thứ tự đọc |
|
|
46
|
+
| `docs/harness-engineering/research-note.md` | Bản tổng hợp nghiên cứu chính |
|
|
47
|
+
| `docs/harness-engineering/implementation-playbook.md` | Playbook triển khai harness cho repository |
|
|
48
|
+
| `docs/harness-engineering/sources.md` | Metadata và bản đồ bằng chứng cho năm nguồn |
|
|
49
|
+
| `skills/creator-harness/SKILL.md` | Skill thực hành tạo harness tối thiểu |
|
|
50
|
+
| `skills/acceptance-contract/SKILL.md` | Skill chốt scope, tiêu chí done, và verification trước khi làm |
|
|
51
|
+
| `skills/cleanup-harness/SKILL.md` | Skill cleanup có trigger, acceptance criteria, và rollback |
|
|
52
|
+
| `progress.md` | Trạng thái bền vững để session sau tiếp tục công việc |
|
|
53
|
+
| `feature_list.json` | Danh sách capability harness và điều kiện verify |
|
|
54
|
+
| `init.sh` | Smoke test đầu session |
|
|
55
|
+
|
|
56
|
+
## Phát hành qua NPM
|
|
57
|
+
|
|
58
|
+
Package NPM này ship nguyên `docs/`, `skills/`, `README.md`, và `AGENTS.md`.
|
|
59
|
+
Chạy lệnh sau ở root của project muốn nhận docs:
|
|
60
|
+
|
|
61
|
+
```bash
|
|
62
|
+
npx codex-harness-engineering init
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
Lệnh này copy 3 skill vào `./.agents/skills` và copy docs vào
|
|
66
|
+
`./docs/harness-engineering` của project hiện tại. Nếu các target đã tồn tại,
|
|
67
|
+
lệnh sẽ dừng để tránh ghi đè. Dùng `--force` khi muốn thay thế bản cũ:
|
|
68
|
+
|
|
69
|
+
```bash
|
|
70
|
+
npx codex-harness-engineering init --force
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
Khi phát triển local:
|
|
74
|
+
|
|
75
|
+
```bash
|
|
76
|
+
npm run verify
|
|
77
|
+
npm test
|
|
78
|
+
npm run pack:dry
|
|
79
|
+
node scripts/install-skills.mjs init
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
Khi publish:
|
|
83
|
+
|
|
84
|
+
```bash
|
|
85
|
+
./scripts/publish.sh
|
|
86
|
+
./scripts/publish.sh minor
|
|
87
|
+
./scripts/publish.sh 0.2.0
|
|
88
|
+
./scripts/publish.sh patch --otp 123456
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
Nếu tài khoản NPM bật 2FA cho publish, truyền OTP bằng `--otp` hoặc
|
|
92
|
+
`NPM_CONFIG_OTP`.
|
|
93
|
+
|
|
94
|
+
Tên package hiện tại là `codex-harness-engineering`. Nếu tên này đã có trên
|
|
95
|
+
NPM, đổi trường `name` trong `package.json` trước khi publish.
|
|
96
|
+
|
|
97
|
+
## Cách dùng cho Codex
|
|
98
|
+
|
|
99
|
+
Khi bắt đầu một task trong repo phần mềm khác, dùng kho này như harness template:
|
|
100
|
+
|
|
101
|
+
1. Đọc `docs/harness-engineering/implementation-playbook.md` để chọn can thiệp
|
|
102
|
+
nhỏ nhất theo failure mode.
|
|
103
|
+
2. Dùng `skills/acceptance-contract/SKILL.md` nếu task nhỏ cần scope và verify
|
|
104
|
+
rõ.
|
|
105
|
+
3. Dùng `skills/creator-harness/SKILL.md` nếu repo chưa có harness tối thiểu cho
|
|
106
|
+
Codex.
|
|
107
|
+
4. Dùng `skills/cleanup-harness/SKILL.md` khi throughput của Codex tạo drift,
|
|
108
|
+
orphan, hoặc entropy cần cleanup định kỳ.
|
|
109
|
+
5. Chỉ thêm evaluator, planner, hoặc sprint contract khi task thật sự có scope
|
|
110
|
+
dài, chất lượng chủ quan, hoặc runtime khó tự đánh giá.
|
|
111
|
+
|
|
112
|
+
## Kết luận cốt lõi
|
|
113
|
+
|
|
114
|
+
Từ năm bài này, harness engineering cho Codex không nên được hiểu là thêm nhiều
|
|
115
|
+
agent mặc định. Nó là một lớp điều khiển gồm state bền vững, tool dễ đọc,
|
|
116
|
+
acceptance criteria, kiểm thử runtime, evaluator khi cần, guardrail cơ học, dọn dẹp
|
|
117
|
+
hệ thống, và các cơ chế tự động hóa hay đánh giá vết chạy.
|
|
118
|
+
|
|
119
|
+
Nguyên tắc thực dụng:
|
|
120
|
+
|
|
121
|
+
1. Bắt đầu bằng cấu trúc đơn giản nhất đủ giải quyết nhiệm vụ [S3].
|
|
122
|
+
2. Khi Codex mất context, ngoại hóa trạng thái vào file và git [S2].
|
|
123
|
+
3. Khi Codex không thấy lỗi, thêm công cụ quan sát như browser, log, metric,
|
|
124
|
+
trace, hoặc test runtime [S1], [S2], [S4].
|
|
125
|
+
4. Khi Codex tự đánh giá quá lạc quan, tách generator khỏi evaluator [S4].
|
|
126
|
+
5. Khi throughput tạo drift, biến judgment lặp lại thành lint, test, rule, và
|
|
127
|
+
cleanup có nhịp [S1].
|
|
128
|
+
6. Khi quy tắc phức tạp, dùng AutoHarness tự sinh code wrapper để lọc hành vi và Trajectory Evaluation để giám sát chuỗi hành động của agent [S5].
|
|
129
|
+
|
|
130
|
+
## Quy tắc cập nhật
|
|
131
|
+
|
|
132
|
+
- Mọi nhận định quan trọng phải truy vết về một trong năm nguồn `[S1]-[S5]`.
|
|
133
|
+
- Không thêm nguồn khác nếu chưa có yêu cầu mở rộng phạm vi.
|
|
134
|
+
- Nếu chưa xác minh được claim, dùng marker tiếng Việt cho nội dung cần xác minh
|
|
135
|
+
thay vì suy đoán.
|
|
136
|
+
- Trước khi hoàn tất, quét placeholder và citation ngoài `[S1]-[S5]`.
|
|
@@ -0,0 +1,370 @@
|
|
|
1
|
+
# Playbook triển khai harness
|
|
2
|
+
|
|
3
|
+
Playbook này chuyển năm bài OpenAI/Anthropic/Google thành quy trình thiết kế harness
|
|
4
|
+
cho repository phần mềm.
|
|
5
|
+
|
|
6
|
+
## Giả định
|
|
7
|
+
|
|
8
|
+
- Repository là nguồn sự thật vận hành.
|
|
9
|
+
- Bắt đầu bằng harness nhỏ nhất làm thay đổi hành vi agent.
|
|
10
|
+
- "Done" nghĩa là có bằng chứng kiểm chứng được.
|
|
11
|
+
- Con người đặt mục tiêu, ràng buộc, và tiêu chí; agent thực thi trong môi
|
|
12
|
+
trường có state, tool, feedback, và guardrail.
|
|
13
|
+
|
|
14
|
+
## Cây quyết định
|
|
15
|
+
|
|
16
|
+
Áp dụng từ ít phức tạp đến nhiều phức tạp.
|
|
17
|
+
|
|
18
|
+
| Tín hiệu | Can thiệp tối thiểu | Nguồn |
|
|
19
|
+
| --- | --- | --- |
|
|
20
|
+
| Task nhỏ, test rõ | Agent đơn lẻ + acceptance criteria + lệnh verify | [S3] |
|
|
21
|
+
| Task vượt một context | Feature list, progress log, git history, `init.sh` | [S2] |
|
|
22
|
+
| Agent không biết chạy app | Setup script idempotent + smoke test đầu session | [S2] |
|
|
23
|
+
| Code pass nhưng hành vi runtime fail | Browser/API/log/metric/trace check | [S1], [S2] |
|
|
24
|
+
| Agent tự đánh giá quá lạc quan | Evaluator riêng + feedback cụ thể | [S4] |
|
|
25
|
+
| Prompt mơ hồ hoặc app nhiều luồng | Planner + sprint contract + generator/evaluator | [S4] |
|
|
26
|
+
| Throughput tạo drift kiến trúc | Lint, structural test, CI rule, cleanup định kỳ | [S1] |
|
|
27
|
+
| Ràng buộc quá phức tạp để code thủ công | AutoHarness (yêu cầu LLM sinh wrapper bọc thực thi tự động) | [S5] |
|
|
28
|
+
| Hành vi agent drift/cần tối ưu hóa vết chạy | Trajectory evaluation + LLM-as-a-judge + Meta-Evaluation (VeRO) | [S5] |
|
|
29
|
+
|
|
30
|
+
Nếu không có failure mode cụ thể, chưa thêm lớp harness đó.
|
|
31
|
+
|
|
32
|
+
## Harness tối thiểu
|
|
33
|
+
|
|
34
|
+
Một repository chưa có harness nên bắt đầu bằng:
|
|
35
|
+
|
|
36
|
+
| Artifact | Mục đích | Nguồn |
|
|
37
|
+
| --- | --- | --- |
|
|
38
|
+
| `AGENTS.md` | Entry point ngắn: đọc gì, chạy gì, tránh gì | [S1] |
|
|
39
|
+
| `README.md` | Mục tiêu dự án và lệnh cơ bản | [S1] |
|
|
40
|
+
| `init.sh` hoặc lệnh setup | Khôi phục môi trường ở session mới | [S2] |
|
|
41
|
+
| `feature_list.json` | Danh sách feature và trạng thái pass/fail | [S2] |
|
|
42
|
+
| `progress.md` | Việc đã làm, verify đã chạy, việc tiếp theo | [S2] |
|
|
43
|
+
| Git commit nhỏ, mô tả rõ | Checkpoint để session sau đọc lại hoặc revert khi cần | [S2] |
|
|
44
|
+
| Task runner | Lệnh chuẩn cho setup/test/lint/build/smoke | [S2], [S3] |
|
|
45
|
+
| Test hoặc smoke test | Bằng chứng tối thiểu trước và sau sửa | [S2], [S3] |
|
|
46
|
+
|
|
47
|
+
Không thêm planner, evaluator, telemetry stack, hoặc cleanup automation nếu
|
|
48
|
+
chưa có failure mode yêu cầu.
|
|
49
|
+
|
|
50
|
+
Nếu phải chọn giữa prose thuần và state có cấu trúc cho tiến độ feature, ưu
|
|
51
|
+
tiên dạng như `feature_list.json`: session mới dễ chọn một feature, giữ trạng
|
|
52
|
+
thái pass/fail nhất quán, và tránh suy diễn lại từ ghi chú tự do [S2].
|
|
53
|
+
|
|
54
|
+
## Quy chuẩn tạo harness cho project khác
|
|
55
|
+
|
|
56
|
+
Áp dụng mục này khi đưa harness vào một repository sản phẩm hoặc nghiên cứu
|
|
57
|
+
khác. Mục tiêu là tạo một baseline có thể tiếp tục qua session và phát hiện
|
|
58
|
+
việc agent tuyên bố hoàn tất khi chưa cập nhật bằng chứng, không phải sao chép
|
|
59
|
+
toàn bộ công cụ của repository mẫu [S1], [S2], [S3].
|
|
60
|
+
|
|
61
|
+
### Chuẩn bắt buộc
|
|
62
|
+
|
|
63
|
+
| Thành phần | Contract tối thiểu | Cách kiểm tra |
|
|
64
|
+
| --- | --- | --- |
|
|
65
|
+
| `AGENTS.md` | Nêu thứ tự đọc, lệnh khởi động, lệnh verify, giới hạn local, và rule cập nhật state | Session mới đọc được đường vào repo trong một lượt ngắn |
|
|
66
|
+
| `README.md` | Mô tả mục tiêu, bản đồ artifact, và lệnh vận hành chính | Các artifact trong harness có link hoặc đường dẫn tìm được |
|
|
67
|
+
| `init.sh` hoặc lệnh tương đương | Chạy baseline rẻ, lặp lại được ở đầu session | Chạy thành công trên checkout sạch hoặc báo lỗi hành động được |
|
|
68
|
+
| `feature_list.json` hoặc trạng thái có cấu trúc tương đương | Mỗi capability có acceptance, verify command, status, evidence | Status chỉ chuyển sang verified sau khi lệnh liên quan pass |
|
|
69
|
+
| `progress.md` | Mỗi vòng làm việc ghi task, artifact liên quan, kết quả verify và bước tiếp theo | Session mới xác định được công việc đang mở mà không cần chat history |
|
|
70
|
+
| Test/verify command | Cưỡng chế invariant quan trọng thay vì chỉ ghi bằng prose | Lệnh verify fail khi invariant bị phá |
|
|
71
|
+
|
|
72
|
+
Đây là diễn giải triển khai từ repository-local knowledge và mechanical
|
|
73
|
+
guardrail của [S1], kết hợp state handoff và quy trình verify-before-status của
|
|
74
|
+
[S2]. Với task nhỏ không thay đổi hành vi hay guardrail, project có thể chỉ
|
|
75
|
+
dùng acceptance criteria và lệnh verify rõ theo nguyên tắc bắt đầu đơn giản
|
|
76
|
+
của [S3].
|
|
77
|
+
|
|
78
|
+
### Contract cập nhật state
|
|
79
|
+
|
|
80
|
+
Một project áp dụng harness nên định nghĩa **behavior artifact** là file làm
|
|
81
|
+
thay đổi cách sản phẩm, package, test, guardrail, skill hoặc agent hoạt động.
|
|
82
|
+
Ví dụ thường gặp: source code, `scripts/`, `tests/`, `skills/`, manifest
|
|
83
|
+
package, workflow verify, và `AGENTS.md`.
|
|
84
|
+
|
|
85
|
+
Khi task chạm behavior artifact:
|
|
86
|
+
|
|
87
|
+
1. Chạy baseline trước sửa và ghi lại trạng thái ban đầu nếu task có rủi ro
|
|
88
|
+
hồi quy.
|
|
89
|
+
2. Nêu acceptance criteria và command kiểm chứng trước khi chuyển trạng thái.
|
|
90
|
+
3. Sau khi verify pass, cập nhật feature state với evidence cụ thể.
|
|
91
|
+
4. Thêm entry mới nhất vào progress, liệt kê behavior artifact đã đổi, command
|
|
92
|
+
đã chạy, kết quả, và bước tiếp theo.
|
|
93
|
+
5. Chỉ tuyên bố hoàn tất hoặc commit checkpoint sau khi gate state và lệnh
|
|
94
|
+
verify đều pass.
|
|
95
|
+
|
|
96
|
+
Contract này ngăn hai failure mode: session sau mất dấu thay đổi đã làm và
|
|
97
|
+
agent kết thúc sớm chỉ vì code/test cục bộ đã xanh trong khi state handoff chưa
|
|
98
|
+
được cập nhật [S2]. Khi omission lặp lại, quy tắc này nên được mã hóa thành
|
|
99
|
+
check chạy được thay vì phụ thuộc vào nhắc nhở prose [S1].
|
|
100
|
+
|
|
101
|
+
### Gate cơ học tối thiểu
|
|
102
|
+
|
|
103
|
+
Project có thay đổi hành vi qua nhiều session nên đưa các invariant sau vào
|
|
104
|
+
`verify` hoặc CI:
|
|
105
|
+
|
|
106
|
+
| Invariant | Gate đề xuất |
|
|
107
|
+
| --- | --- |
|
|
108
|
+
| Artifact bắt buộc không bị mất | Fail khi thiếu `AGENTS.md`, state file, bootstrap hoặc docs map cần thiết |
|
|
109
|
+
| Thay đổi hành vi không thiếu handoff | Nếu diff chạm behavior artifact, fail khi không có cập nhật feature state và progress |
|
|
110
|
+
| Progress không dùng bằng chứng cũ | Entry progress mới nhất phải nêu behavior artifact đang đổi và command verify vừa chạy |
|
|
111
|
+
| Feature không được đánh dấu sớm | Chỉ chấp nhận trạng thái verified khi có evidence gắn với verify command |
|
|
112
|
+
| Quy tắc kiến trúc lặp lại | Dùng lint hoặc structural test thay cho review comment lặp lại |
|
|
113
|
+
|
|
114
|
+
Phạm vi so sánh diff phải khớp workflow của project: nếu agent verify trước
|
|
115
|
+
commit, có thể so với `HEAD`; nếu CI kiểm sau commit, phải so với base branch
|
|
116
|
+
hoặc pull request base. Không chọn baseline diff mơ hồ vì gate sẽ cho qua đúng
|
|
117
|
+
failure mode mà nó cần chặn.
|
|
118
|
+
|
|
119
|
+
### Checklist bootstrap
|
|
120
|
+
|
|
121
|
+
Khi tạo harness cho repository mới:
|
|
122
|
+
|
|
123
|
+
1. Kiểm kê setup, test, CI, tài liệu và failure mode đang xảy ra.
|
|
124
|
+
2. Tạo artifact tối thiểu trong bảng chuẩn bắt buộc; không thêm evaluator hoặc
|
|
125
|
+
automation khi chưa có lỗi tương ứng.
|
|
126
|
+
3. Viết một feature đầu tiên mô tả chính harness và command verify của nó.
|
|
127
|
+
4. Tạo smoke test rẻ nhất cho `init.sh` hoặc lệnh bootstrap tương đương.
|
|
128
|
+
5. Tạo ít nhất một negative test chứng minh gate fail khi bỏ state update hoặc
|
|
129
|
+
phá invariant quan trọng.
|
|
130
|
+
6. Chạy verify, ghi evidence vào feature state và progress, rồi mới dùng
|
|
131
|
+
harness cho task sản phẩm.
|
|
132
|
+
|
|
133
|
+
Negative test là bước quan trọng: một verifier chỉ pass trên baseline hợp lệ
|
|
134
|
+
chưa chứng minh nó chặn được lỗi quy trình cần kiểm soát. Đây là cách thực thi
|
|
135
|
+
nguyên tắc biến feedback lặp lại thành guardrail cơ học [S1], đồng thời giữ
|
|
136
|
+
state handoff kiểm chứng được giữa các session [S2].
|
|
137
|
+
|
|
138
|
+
## Phân tầng nguồn sự thật
|
|
139
|
+
|
|
140
|
+
Giữ artifact ngắn, đúng vai, và dễ quét trong session mới.
|
|
141
|
+
|
|
142
|
+
| Artifact | Nên chứa | Không nên chứa | Nguồn |
|
|
143
|
+
| --- | --- | --- | --- |
|
|
144
|
+
| `AGENTS.md` | Bản đồ vào repo: đọc gì trước, lệnh nào chuẩn, điều gì bị cấm | Toàn bộ lịch sử dự án hoặc manual quá dài | [S1] |
|
|
145
|
+
| `README.md` | Mục tiêu dự án, cấu trúc chính, cách chạy cơ bản | Task state ngắn hạn theo từng session | [S1] |
|
|
146
|
+
| `feature_list.json` hoặc tương đương | Scope công việc và trạng thái pass/fail theo feature | Rule kiến trúc chung của repo | [S2] |
|
|
147
|
+
| `progress.md` | Verify đã chạy, lỗi đang mở, bước kế tiếp | Chính sách bền vững lặp lại cho mọi task | [S2] |
|
|
148
|
+
| Test, lint, structural check | Invariant cần cưỡng chế bằng máy | Giải thích dài dòng thay cho check chạy được | [S1] |
|
|
149
|
+
|
|
150
|
+
Nếu một quyết định cần agent dùng lặp lại, nó nên sống trong repo và ở đúng
|
|
151
|
+
artifact của nó; nếu chỉ nằm trong chat, session mới khó khôi phục đáng tin
|
|
152
|
+
cậy [S1], [S2].
|
|
153
|
+
|
|
154
|
+
## Bảo trì source of truth
|
|
155
|
+
|
|
156
|
+
Không nên dừng ở việc "có tài liệu". Với tri thức vận hành quan trọng, harness
|
|
157
|
+
nên ưu tiên progressive disclosure và thêm check cơ học cho freshness,
|
|
158
|
+
cross-link, hoặc độ khớp giữa map tài liệu và cấu trúc repo thực tế [S1].
|
|
159
|
+
|
|
160
|
+
Trigger nên thêm check kiểu này khi:
|
|
161
|
+
|
|
162
|
+
- `AGENTS.md` bắt đầu trỏ tới tài liệu đã đổi tên hoặc không còn đúng;
|
|
163
|
+
- index trong `docs/` không còn phản ánh nơi source of truth thực sự nằm;
|
|
164
|
+
- agent lặp lại việc đọc nhầm tài liệu cũ hoặc bỏ qua tài liệu mới;
|
|
165
|
+
- review thường xuyên phát hiện policy trong prose nhưng không được cập nhật.
|
|
166
|
+
|
|
167
|
+
Nếu drift này xảy ra nhiều lần, một tác vụ doc-gardening định kỳ hoặc lint nhẹ
|
|
168
|
+
cho docs thường rẻ hơn việc nhắc lại trong prompt mỗi session [S1].
|
|
169
|
+
|
|
170
|
+
## Vòng lặp session
|
|
171
|
+
|
|
172
|
+
Mỗi session agent dài hạn nên làm:
|
|
173
|
+
|
|
174
|
+
1. Đọc `AGENTS.md`.
|
|
175
|
+
2. Đọc `progress.md`.
|
|
176
|
+
3. Đọc `feature_list.json` hoặc artifact trạng thái tương đương.
|
|
177
|
+
4. Xem git history gần đây.
|
|
178
|
+
5. Chạy `init.sh` hoặc setup command.
|
|
179
|
+
6. Chạy smoke test rẻ nhất để biết repo có đang sạch không.
|
|
180
|
+
7. Chọn một feature/fix chưa verify.
|
|
181
|
+
8. Viết acceptance criteria ngắn.
|
|
182
|
+
9. Triển khai thay đổi nhỏ nhất.
|
|
183
|
+
10. Verify bằng lệnh hoặc quan sát đã nêu.
|
|
184
|
+
11. Chỉ đổi trạng thái feature sau khi verify pass.
|
|
185
|
+
12. Ghi progress và commit nếu workflow yêu cầu.
|
|
186
|
+
|
|
187
|
+
Vòng này trực tiếp xử lý lost context, done sớm, môi trường hỏng, và thiếu kiểm
|
|
188
|
+
thử đầu-cuối [S2].
|
|
189
|
+
|
|
190
|
+
Nếu harness thường chạy dài hoặc qua nhiều lần reset, thiết kế nó như thể
|
|
191
|
+
context reset sẽ xảy ra thường xuyên: artifact khởi động phải đủ ngắn để quét
|
|
192
|
+
nhanh, commit phải đủ rõ để đọc lại, và setup phải đủ lặp lại để session mới
|
|
193
|
+
không phụ thuộc ký ức hội thoại cũ [S2], [S4].
|
|
194
|
+
|
|
195
|
+
Checkpoint thực dụng trước khi bắt đầu sửa code:
|
|
196
|
+
|
|
197
|
+
- nếu `AGENTS.md` dài đến mức không quét nhanh được, rút nó về vai trò bản đồ;
|
|
198
|
+
- nếu `progress.md` lặp lại policy chung, chuyển policy đó sang artifact bền
|
|
199
|
+
vững hơn;
|
|
200
|
+
- nếu feature list không nói rõ thế nào là pass, thêm bước verify cụ thể trước
|
|
201
|
+
khi triển khai.
|
|
202
|
+
|
|
203
|
+
## Acceptance contract
|
|
204
|
+
|
|
205
|
+
Dùng cho bug hoặc feature nhỏ.
|
|
206
|
+
|
|
207
|
+
```markdown
|
|
208
|
+
# Acceptance Contract
|
|
209
|
+
|
|
210
|
+
## Scope
|
|
211
|
+
- Feature/fix:
|
|
212
|
+
- User-visible behavior:
|
|
213
|
+
- Likely files:
|
|
214
|
+
|
|
215
|
+
## Acceptance Criteria
|
|
216
|
+
- [ ] ...
|
|
217
|
+
- [ ] ...
|
|
218
|
+
|
|
219
|
+
## Verification
|
|
220
|
+
- Unit:
|
|
221
|
+
- Integration:
|
|
222
|
+
- Browser/API:
|
|
223
|
+
- Log/metric/trace:
|
|
224
|
+
|
|
225
|
+
## Out of Scope
|
|
226
|
+
- ...
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
Contract nên ngắn hơn phần việc. Nếu dài hơn phần việc, chia nhỏ scope.
|
|
230
|
+
|
|
231
|
+
## Sprint contract
|
|
232
|
+
|
|
233
|
+
Dùng khi task trải qua nhiều file, nhiều luồng runtime, hoặc chất lượng chủ quan.
|
|
234
|
+
|
|
235
|
+
```markdown
|
|
236
|
+
# Sprint Contract
|
|
237
|
+
|
|
238
|
+
## Scope
|
|
239
|
+
- Feature:
|
|
240
|
+
- User path:
|
|
241
|
+
- API/data path:
|
|
242
|
+
- Likely files/modules:
|
|
243
|
+
|
|
244
|
+
## Done Means
|
|
245
|
+
- [ ] User can ...
|
|
246
|
+
- [ ] API/data reflects ...
|
|
247
|
+
- [ ] Error state handles ...
|
|
248
|
+
- [ ] No regression in ...
|
|
249
|
+
|
|
250
|
+
## Verification
|
|
251
|
+
- Unit:
|
|
252
|
+
- Integration:
|
|
253
|
+
- Browser/API:
|
|
254
|
+
- Log/metric/trace:
|
|
255
|
+
|
|
256
|
+
## Evaluator Focus
|
|
257
|
+
- Runtime behavior:
|
|
258
|
+
- Negative cases:
|
|
259
|
+
- UX/quality concerns:
|
|
260
|
+
|
|
261
|
+
## Out of Scope
|
|
262
|
+
- ...
|
|
263
|
+
```
|
|
264
|
+
|
|
265
|
+
Sprint contract là chuẩn chung giữa generator và evaluator. Nó giảm scope drift
|
|
266
|
+
và làm feedback của evaluator cụ thể hơn [S4].
|
|
267
|
+
|
|
268
|
+
## Planner, generator, evaluator
|
|
269
|
+
|
|
270
|
+
Chỉ dùng ba vai khi task đủ lớn.
|
|
271
|
+
|
|
272
|
+
| Vai | Trách nhiệm | Không làm |
|
|
273
|
+
| --- | --- | --- |
|
|
274
|
+
| Planner | Chuyển prompt thành spec, scope, sprint contract | Viết toàn bộ code |
|
|
275
|
+
| Generator | Triển khai phần nhỏ nhất theo contract | Mở rộng ngoài scope |
|
|
276
|
+
| Evaluator | Kiểm thử runtime và báo lỗi cụ thể | Chỉ đọc diff rồi khen đạt |
|
|
277
|
+
|
|
278
|
+
Evaluator tốt phải nêu bằng chứng: screenshot, DOM state, API response, database
|
|
279
|
+
state, log, trace, hoặc command output. Feedback nên nói tiêu chí nào fail và
|
|
280
|
+
bước sửa tiếp theo là gì [S4].
|
|
281
|
+
|
|
282
|
+
Bên cạnh đó, áp dụng **đánh giá vết thực thi (Trajectory Evaluation)** để đánh giá cả
|
|
283
|
+
chuỗi hành động và suy luận của agent (tool calling sequence, logic steps) thông qua
|
|
284
|
+
**LLM-as-a-judge** tự động để chấm điểm hiệu năng thực tế. Có thể dùng **VeRO (Meta-Evaluation)**
|
|
285
|
+
để chạy một vòng lặp tối ưu hóa tự động cấu trúc prompt/tool dựa trên các vết chạy lỗi [S5].
|
|
286
|
+
|
|
287
|
+
## Legibility map
|
|
288
|
+
|
|
289
|
+
Khi agent không thấy hành vi thật, bổ sung tín hiệu theo bảng sau.
|
|
290
|
+
|
|
291
|
+
| Khu vực | Tín hiệu | Cách verify |
|
|
292
|
+
| --- | --- | --- |
|
|
293
|
+
| UI | Browser automation, screenshot, DOM snapshot | Chạy user path chính |
|
|
294
|
+
| API | Request/response, contract test | Gọi endpoint và kiểm dữ liệu |
|
|
295
|
+
| Backend | Structured log, metric, trace | Quan sát lỗi, latency, span |
|
|
296
|
+
| Data | Schema, seed, query kiểm tra | Kiểm state trước/sau action |
|
|
297
|
+
| Build | Build log, CI log | Chạy lệnh chuẩn |
|
|
298
|
+
| Architecture | Import boundary, structural test | Chạy lint/test guardrail |
|
|
299
|
+
|
|
300
|
+
Legibility nghĩa là tín hiệu cần thiết nằm trong tầm đọc của agent, không phải
|
|
301
|
+
thêm log tùy tiện [S1].
|
|
302
|
+
|
|
303
|
+
Legibility cũng áp vào lựa chọn stack và abstraction. Nếu hai giải pháp tương
|
|
304
|
+
đương về yêu cầu sản phẩm, ưu tiên giải pháp có API ổn định, hành vi dễ kiểm
|
|
305
|
+
chứng, và phần quan trọng nằm trong repo thay vì ẩn sau upstream khó quan sát.
|
|
306
|
+
Khi agent thường xuyên kẹt ở một thư viện opaque, đó là tín hiệu xem lại
|
|
307
|
+
abstraction chứ không chỉ siết prompt [S1].
|
|
308
|
+
|
|
309
|
+
## Guardrail cơ học
|
|
310
|
+
|
|
311
|
+
Khi một rule quan trọng lặp lại, đưa nó từ prose sang check.
|
|
312
|
+
|
|
313
|
+
Ví dụ:
|
|
314
|
+
|
|
315
|
+
- cấm dependency đi ngược layer;
|
|
316
|
+
- yêu cầu parse dữ liệu ở boundary;
|
|
317
|
+
- yêu cầu structured logging ở luồng quan trọng;
|
|
318
|
+
- giới hạn file size nếu drift kích thước gây hại;
|
|
319
|
+
- chặn update feature status nếu verify chưa pass;
|
|
320
|
+
- chạy smoke test trước merge;
|
|
321
|
+
- dùng AutoHarness để tự động sinh lớp bọc thực thi (code harness) khi môi trường có quá nhiều luật phức tạp hoặc khó kiểm soát bằng linter tĩnh [S5]. Lớp bọc này lọc và chặn các hành vi vi phạm trước khi thực thi [S5];
|
|
322
|
+
- biên dịch chính sách quyết định thành code tĩnh (Harness-as-Policy) để thực thi nhanh và tiết kiệm token ở runtime [S5].
|
|
323
|
+
|
|
324
|
+
Guardrail chỉ nên bảo vệ invariant thật. Rule quá rộng tạo nhiễu và làm agent
|
|
325
|
+
tối ưu quanh check thay vì quanh mục tiêu [S1], [S3].
|
|
326
|
+
|
|
327
|
+
## Cleanup
|
|
328
|
+
|
|
329
|
+
Khi throughput tăng, cleanup phải có trigger và verify.
|
|
330
|
+
|
|
331
|
+
Trigger hợp lý:
|
|
332
|
+
|
|
333
|
+
- cùng một helper xuất hiện nhiều lần;
|
|
334
|
+
- feature bypass architecture boundary;
|
|
335
|
+
- progress log lặp lại cùng lỗi;
|
|
336
|
+
- evaluator liên tục bắt cùng nhóm defect;
|
|
337
|
+
- code mới tạo workaround thay vì sửa nguyên nhân.
|
|
338
|
+
|
|
339
|
+
Cleanup task nên có scope, acceptance criteria, verification, và rollback path.
|
|
340
|
+
Đây là garbage collection cho codebase agent-first [S1].
|
|
341
|
+
|
|
342
|
+
## Ablation harness
|
|
343
|
+
|
|
344
|
+
Sau khi model hoặc tooling thay đổi, xem lại harness:
|
|
345
|
+
|
|
346
|
+
| Lớp | Câu hỏi ablation |
|
|
347
|
+
| --- | --- |
|
|
348
|
+
| Feature list | Nếu bỏ, agent có đánh dấu xong sớm không? |
|
|
349
|
+
| Progress log | Nếu bỏ, session mới có mất context không? |
|
|
350
|
+
| `init.sh` | Nếu bỏ, agent có mất thời gian đoán setup không? |
|
|
351
|
+
| Browser/API check | Nếu bỏ, runtime defect có tăng không? |
|
|
352
|
+
| Evaluator | Nếu gộp vào generator, chất lượng có giảm không? |
|
|
353
|
+
| Planner | Nếu bỏ planner, scope có drift không? |
|
|
354
|
+
| Guardrail | Nếu tắt rule, vi phạm có xuất hiện lại không? |
|
|
355
|
+
| AutoHarness | Nếu dùng code tĩnh thay vì gọi LLM ở runtime, latency và cost có giảm đáng kể mà vẫn giữ được chất lượng không? [S5] |
|
|
356
|
+
| Trajectory Eval | Nếu không chấm vết chạy mà chỉ chấm kết quả tĩnh, ta có bỏ sót các lỗi tiềm ẩn trong suy luận của agent không? [S5] |
|
|
357
|
+
|
|
358
|
+
Giữ phần rẻ và hiệu quả. Loại bỏ orchestration đắt nếu không còn tạo outcome
|
|
359
|
+
tốt hơn [S4].
|
|
360
|
+
|
|
361
|
+
## Definition of done
|
|
362
|
+
|
|
363
|
+
Một thay đổi harness hoàn thành khi:
|
|
364
|
+
|
|
365
|
+
- scope và acceptance criteria rõ;
|
|
366
|
+
- lệnh hoặc quan sát verify đã chạy;
|
|
367
|
+
- state/progress chỉ cập nhật sau verify;
|
|
368
|
+
- guardrail mới gắn với failure mode thật;
|
|
369
|
+
- tài liệu chỉ cite `[S1]-[S5]`;
|
|
370
|
+
- không còn placeholder hoặc nguồn ngoài phạm vi.
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
# Mục lục Harness Engineering
|
|
2
|
+
|
|
3
|
+
## Thứ tự đọc
|
|
4
|
+
|
|
5
|
+
1. `research-note.md` - bản tổng hợp khái niệm chính.
|
|
6
|
+
2. `implementation-playbook.md` - hướng dẫn triển khai harness trong repository.
|
|
7
|
+
3. `sources.md` - metadata nguồn và bản đồ bằng chứng.
|
|
8
|
+
4. `skills/creator-harness/SKILL.md` - skill thực hành để tạo harness tối thiểu.
|
|
9
|
+
5. `skills/acceptance-contract/SKILL.md` - skill chốt scope, tiêu chí done, và verification.
|
|
10
|
+
6. `skills/cleanup-harness/SKILL.md` - skill scope cleanup có trigger và rollback.
|
|
11
|
+
|
|
12
|
+
## Phạm vi
|
|
13
|
+
|
|
14
|
+
Tài liệu này nghiên cứu harness engineering qua năm bài:
|
|
15
|
+
|
|
16
|
+
- `[S1]` OpenAI, "Harness engineering: leveraging Codex in an agent-first world".
|
|
17
|
+
- `[S2]` Anthropic, "Effective harnesses for long-running agents".
|
|
18
|
+
- `[S3]` Anthropic, "Building effective agents".
|
|
19
|
+
- `[S4]` Anthropic, "Harness design for long-running application development".
|
|
20
|
+
- `[S5]` Google DeepMind, "AutoHarness: Improving LLM Agents by Automatically Synthesizing a Code Harness" & Google Cloud agent engineering practices.
|
|
21
|
+
|
|
22
|
+
Mọi nguồn khác đã bị loại khỏi narrative hiện tại để giữ trọng tâm đúng yêu cầu.
|
|
23
|
+
|
|
24
|
+
## Khung đọc nhanh
|
|
25
|
+
|
|
26
|
+
Harness engineering trả lời câu hỏi: môi trường nào giúp một agent tạo tiến
|
|
27
|
+
triển phần mềm dài hạn mà không phụ thuộc hoàn toàn vào trí nhớ hội thoại hoặc
|
|
28
|
+
tự đánh giá chủ quan?
|
|
29
|
+
|
|
30
|
+
Năm bài tạo thành một chuỗi logic:
|
|
31
|
+
|
|
32
|
+
1. `[S3]` đưa nguyên tắc nền: bắt đầu bằng giải pháp đơn giản nhất, phân biệt
|
|
33
|
+
workflow với agent, và chỉ tăng complexity khi tradeoff đáng giá.
|
|
34
|
+
2. `[S2]` chỉ ra failure mode của agent dài hạn: mất context, làm quá rộng,
|
|
35
|
+
đánh dấu xong sớm, và không kiểm thử đầu-cuối.
|
|
36
|
+
3. `[S4]` thêm cấu trúc planner-generator-evaluator để xử lý task ứng dụng dài,
|
|
37
|
+
chất lượng chủ quan, và QA qua runtime.
|
|
38
|
+
4. `[S1]` mở rộng thành kỷ luật repository-level: tri thức trong repo, môi
|
|
39
|
+
trường dễ đọc với agent, invariant cơ học, throughput, và cleanup.
|
|
40
|
+
5. `[S5]` bổ sung khả năng tự động hóa sinh lớp bọc thực thi (AutoHarness) và các phương pháp đánh giá vết chạy (Trajectory Evaluation) cùng LLM-as-a-judge.
|
|
41
|
+
|
|
42
|
+
## Luận điểm chính
|
|
43
|
+
|
|
44
|
+
1. Kỹ sư chuyển từ viết code tay sang thiết kế môi trường và feedback loop [S1].
|
|
45
|
+
2. State phải sống trong artifact bền vững như feature list, progress log,
|
|
46
|
+
setup script, và git history [S2].
|
|
47
|
+
3. Harness chỉ nên phức tạp hơn khi failure mode thật biện minh cho chi phí
|
|
48
|
+
latency, token, và lỗi tích lũy [S3].
|
|
49
|
+
4. Agent cần quan sát hành vi thật của hệ thống bằng browser, test, log, metric,
|
|
50
|
+
trace, API, hoặc database state [S1], [S2], [S4].
|
|
51
|
+
5. Tự đánh giá của generator yếu; evaluator riêng có thể tạo phản hồi cụ thể
|
|
52
|
+
hơn để generator sửa [S4].
|
|
53
|
+
6. Tài liệu không đủ để giữ kiến trúc; invariant nên được mã hóa bằng lint,
|
|
54
|
+
structural test, CI, và cleanup [S1].
|
|
55
|
+
7. Khi quy tắc môi trường quá phức tạp để tự viết, có thể dùng mô hình tự động sinh lớp bọc bằng code (AutoHarness) và đánh giá vết chạy (Trajectory Evaluation) tự động [S5].
|
|
56
|
+
|
|
57
|
+
## Định nghĩa làm việc
|
|
58
|
+
|
|
59
|
+
Trong kho này, **harness** là lớp scaffold ngoài trọng số mô hình: prompt, state
|
|
60
|
+
file, tool, setup command, test, acceptance contract, evaluator, guardrail, log,
|
|
61
|
+
metric, trace, và quy trình cleanup giúp agent làm việc đáng tin hơn.
|