Appearance
多Agent系统中,素材库从150篇增长到500篇、1000篇时,不是"搜不搜得到"的问题,而是搜到了也喂不进去的问题。这不是性能问题,是架构问题。
上下文不是无限大的
LLM有上下文窗口,128K、200K,数字越来越大。但两件事不会变:
| 问题 | 说明 |
|---|---|
| 注意力分散 | Lost in the Middle效应——放在中间的信息,模型更容易忽略 |
| Token是钱 | 输入token按量计费,素材无脑全灌是成本失控 |
Token Transformation Pipeline
五步流程:
采集(Collection) → 排序(Ranking) → 压缩(Compression) → 预算(Budgeting) → 拼装(Assembly)第一步:采集——什么东西有资格进上下文
不是素材库里所有文件都往里灌。先用文件名筛一轮。
关键:采集阶段不做任何截断。相关就是相关,全文保留。截断是后面的事。
python
# 伪代码:不是这样
results = [read_full(path) for path in all_files[:10]]
# 而是这样
candidates = [path for path in all_files if matches_topic(path, topic)]第二步:排序——谁排前面
相关不等于同等重要。排序依据 = 相关度 × 信息密度。
| 指标 | 说明 |
|---|---|
| 相关度 | 靠关键词匹配算出来 |
| 信息密度 | 去停用词后的独特词汇数除以总字数 |
python
def score(path, topic):
content = read(path)
relevance = keyword_match_score(content, topic)
density = unique_content_words(content) / len(content)
return relevance * density排完序之后,前五篇是"必须喂进去的",剩下的按预算决定。
第三步:压缩——不是删内容,是换形式
压缩不是把长文截成短文——那是砍内容。压缩是把内容换一种表达:从正文变成摘要。
| 位置 | 处理方式 |
|---|---|
| 前五名 | 保留全文 |
| 后面的 | 只保留标题 + 一句话摘要 |
python
def compress(path, rank):
if rank <= 5:
return read(path) # 保留全文
else:
content = read(path)
return f"## {extract_title(content)}\n{summarize(content)}" # 摘要关键选择:用哪个模型做摘要?不能用Writer用的那个,用便宜的快模型(DeepSeek或GPT-4o-mini)。
第四步:预算——每一站分多少Token
Pipeline不是只有Writer需要上下文。每一站的token分配不一样:
| Agent | Token预算 | 理由 |
|---|---|---|
| Researcher | 6000 | 需要浏览多篇素材找关联 |
| Planner | 4000 | 需要素材摘要和主题,不需要全文 |
| Writer | 8000 | 需要最详细的上下文 |
| Reviewer | 4000 | 只需文章成品+规则 |
超出预算的,从排名最低的文件开始砍——先砍摘要,再砍正文。
python
def budget(candidates, limit):
used = 0
result = []
for c in candidates:
tokens = estimate_tokens(c.content)
if used + tokens <= limit:
result.append(c)
used += tokens
return result第五步:拼装——不是拼接,是排版
素材和素材之间要有显式的分隔符和来源标注:
markdown
【素材 1/5】来源:Knowledge Repository/素材库_ClaudeCode_Harness架构.md | 相关度:94%
(正文)
【素材 2/5】来源:Knowledge Repository/素材库_GarryTan_HarnessEngineering_完整版.md | 相关度:87%
(正文)两个好处:
- 模型知道每一段来自哪里,能追溯
- 分隔符帮模型区分"这是素材"和"这是我该干的事"
加进Pipeline
Context Budgeting是一个预处理层,插在Researcher和Planner之间:
Researcher(搜素材)
↓
Context Budgeting(采集→排序→压缩→预算→拼装) ← 新加的
↓
Planner(策划)
↓
Writer(写作)
↓
Reviewer(审核)改动很轻:
python
state = researcher_agent(state)
state = context_budget(state, budget=4000) # Planner只分4000 token
state = planner_agent(state)
state = writer_agent(state)
state = reviewer_agent(state)Context Budgeting做五件事:读Researcher的输出 → 按相关度排序 → 排后面的压缩成摘要 → 按预算截断 → 拼装成带来源标注的格式化文本。
完整Harness系列索引
| 文章 | 主题 |
|---|---|
| 1 | 加结构,AI裸跑不可靠 |
| 2 | 加上下文继承,多Agent互相不知道对方做了什么 |
| 3 | 加质量规则,AI会自欺 |
| 4 | 加Instructions,规则怎么组织、怎么传递 |
| 5 | 加State,Agent之间信息怎么流动 |
| 6 | 加Verification,产出怎么检查、不合格怎么退回去 |
| 7 | 多Agent系统怎么省Token |
代码开源:github.com/yuyingzhi828/multi-agent-writer
