Ai相关
上下文限制
此处主要讨论coding情境下的上下文。
首先最粗暴的就是换一个大上下文的模型。
分块处理,将超长输入分割成多个chunk,每次调用模型时只输入一个块及必要上下文前后文,有时还会对前后块生成内容进行合并或摘要。在代码场景则为采用 AST(抽象语法树)感知分块。
摘要,就是用llm对上下文进行总结,这种只适合文档这一类的。具体的code如果摘要应该会失真。可以用来作为索引,生成一个md指示哪些文件是干什么的。
RAG。通过向量数据库,进行检索。当然代码向量检索肯定是不准确的,所以可以:
- 代码符号必须走精确匹配(BM25),只有自然语言注释走向量检索。
- 把代码的 AST 和调用关系存进图数据库,直接在图上遍历边。
- 使用IDE的LSP(Language Server Protocol),类似于传统的方法。
- 认为llm很聪明,可以通过grep自己来搜索关键词并反思。
增量编译/差分补丁。使用git diff,仅分析变更部分。当然这个肯定需要知道整个函数长啥样
最佳实践(Diff + Context):
- 拿到当前文件的 Diff。
- 自动向上追溯:找到 Diff 所在的函数签名、所在的类定义。
- 自动向外追溯:如果 Diff 里调用了外部接口,把接口的类型定义也捞进来。
- 将【小范围原始代码 + Diff + 追溯的必要上下文】打包发给模型。
Harness
Harness其实就是限制agent的实现路径,不过工程实践百花齐放,所以众说纷坛,根本看不懂。
这里我们跟随万恶的Claude博客分析一波。
Effective harnesses for long-running agents
这个是最早的一篇文章,甚至是2025年的。文章主要讨论了,agent面对长期大任务的问题。总结如下
| 问题 | 初始化代理行为 | 编码代理行为 |
|---|---|---|
| 过早宣布胜利 | 建立结构化的 JSON 功能列表文件。 | 会话开始时读取列表,仅选择一个未完成的功能点。 |
| 环境混乱/进度不明 | 初始化 Git 仓库和进度记录文件。 | 读取 Git 日志和进度文件;结束后提交 Git 记录并更新进度。 |
| 功能标记草率 | 设定明确的功能验收标准。 | 必须通过自动化工具进行自验证,通过测试后方可标记“完成”。 |
| 启动应用困难 | 编写 init.sh 脚本用于启动开发服务器。 |
会话开始首先运行脚本。 |
简而言之就是给agent一个todo list,然后用git控制版本,明确通过测试验收,还要保证能够轻松跑起来(类似人类配置环境的痛苦)。(注意此时的需求拆解是人写的,下一篇文章提出用ai写,即planner)
拆解可以像传统软件工程一样拆解成feature story task,随着模型能力增强,拆解的颗粒度可以越来越粗。
Harness design for long-running application development
本文虽然也是Harness但是解决的问题不同,主要是上下文焦虑(临近限制时降低质量),自我评价偏差(自恋写生成的内容)。但是自恋这一块主要是前端的问题,也就是现在的ai前端同质化的情况。
上下文部分:
自动压缩 (Compaction): 像是在同一个大脑里不断梳理记忆,减掉细枝末节,但身份和连续性不变。它更简单、延迟低,但在旧模型上可能无法彻底消除“接近上限时的焦虑感”。
上下文重置 (Context Resets): 像是“换班”。旧 Agent 把工作写成**交接文档(Handoff Artifact)**交给新 Agent,然后旧窗口彻底清空。这能提供最干净的逻辑起点,但增加了编排的复杂性和 Token 开销。
自我评价部分:
- 模拟 GAN 的“生成者-评估者”循环
借鉴生成对抗网络 (GAN) 的思路,作者设计了一个双智能体结构:
- 生成者 (Generator): 负责编写代码。
- 评估者 (Evaluator): 使用 Playwright MCP 实际运行页面、进行交互和截图,并根据预设的客观标准(如:设计质量、原创性、工艺、功能性)进行无情的批判。
- 效果: 这种循环迫使模型跳出“AI 样板风”的舒适区。在实验中,模型甚至能从普通的网页设计飞跃到极具创意的 3D 空间交互体验。
- 全栈开发的“三剑客”模式
针对更复杂的全栈任务(如开发一个复古游戏制作工具或数字音频工作站 DAW),系统演进为三个角色:
- 规划者 (Planner): 将简短的需求扩展为详细的产品规格书,并主动加入 AI 功能建议。
- 执行者 (Generator): 按功能模块进行“冲刺阶段 (Sprints)”开发,并使用版本控制。
- 质量保证 (Evaluator/QA): 模拟用户操作,查找 API 匹配错误、UI 逻辑漏洞等细节。