精选案例 · Agent / 实践案例
使用 Claude Code 与大模型辅助自动化科研 Agent 开发实践
这个案例围绕「使用 Claude Code 与大模型辅助自动化科研 Agent 开发实践」记录了一条真实 AI 实践线索,正文重点集中在「架构设计要点」「多模型混合策略」,适合先按任务意图阅读再判断复用。
案例速读
README 标题「使用 Claude Code 与大模型辅助自动化科研 Agent 开发实践」下已经出现运行/配置路径、脚本或接口线索、结果证据,正文重点集中在「架构设计要点」「多模型混合策略」,比纯概念介绍更适合进入精选阅读流。 这篇案例的阅读价值在于,它把真实任务、模型辅助过程和可迁移做法放在同一个上下文里,读者可以从 「使用 Claude Code 与大模型辅助自动化科研 Agent 开发实践」、「背景:为什么"自动科研 Agent"是一个真问题」、「项目目标:构建真正可执行的科研 Agent」、「我们最终把它做成了什么样」 进入正文。
- 建议重点看 可参考其中的运行与配置路径、包含可迁移的命令、脚本或接口线索、已有结果或观测证据可用于判断复用价值。结合 Agent / 实践案例 和「任务驱动用户、AI 实践者」这一受众定位,它更适合作为任务检索后的精读材料,而不是只看一句短摘要后快速跳过。
- 正文目录和原始材料仍然是判断依据;导读只帮助你更快定位阅读重点。
- 看点
- 使用 Claude Code 与大模型辅助自动化科研 Agent 开发实践
- 读者
- 任务驱动用户、AI 实践者
- 复用
- 可参考其中的运行与配置路径
- 结构
- 12 个目录入口
原文内容
使用 Claude Code 与大模型辅助自动化科研 Agent 开发实践
作者:白有辉、游兴业、王宇航
最近我们参加了第四届世界科学智能大赛(AI for Science 方向),我们的目标是设计一套能够辅助科研工作的自动化 Agent 系统,希望让大模型不仅能"聊天",还能真正参与复杂科研任务的执行。当前,我们在某子类任务上已取得前三名的好成绩。
在整个开发过程中,我大量使用了 Claude Code 以及 DeepSeek v4 pro 等大模型能力来辅助开发、调试和优化 Agent 系统。这次经历让我越来越清楚地感受到一件事:AI 已经不仅仅是一个问答工具,而正在逐渐成为科研与工程开发中的重要生产力工具。
相比单次对话,我更关注的是另一件事:
大模型能不能围绕一个目标,连续完成搜索、判断、执行、修正和交付
这也是我做这套自动化科研 Agent 的出发点。
背景:为什么"自动科研 Agent"是一个真问题
科研工作者日常面对的大量任务,其实具有很强的结构性和重复性:
- 进入一个新方向时,需要快速检索和整理相关文献
- 设计实验方案时,需要对比已有方法、找出研究空白
- 撰写论文时,需要确认引用的准确性、检查论证链的完整性
- 跟踪前沿进展时,需要持续监控新论文并进行筛选
这些工作如果完全靠人工完成,非常耗时且容易遗漏。反过来说,它们也很适合交给具备语言理解、信息检索和推理能力的 Agent 系统来处理。
但在实际落地中,我们很快发现了一个现实问题:
"文献综述型"Agent 和"科研辅助型"Agent 之间,存在巨大差距
前者本质上就是 search + summarize,很多开源项目都能做;后者则需要真正的任务规划、多步执行和基于中间结果的自我修正能力。我们的目标就是后者。
项目目标:构建真正可执行的科研 Agent
我们希望实现的系统,不只是简单调用一个 LLM,而是一套具备:
- 任务拆解
- 工具调用
- 文献搜索
- 全文理解
- 多步推理
- 自动执行
- 结果整理
- 自我修正
能力的科研 Agent。
例如,对于一个科研任务:
“帮我调研某个方向近年的方法,并自动总结实验路线”
理想情况下,系统不是只返回一段综述,而是需要能够:
- 自动分析研究主题
- 生成检索策略
- 搜索相关论文
- 扩展引用关系
- 判断论文是否相关
- 下载并处理全文
- 提取核心方法和证据
- 形成对比与总结
- 生成实验计划或研究建议
- 输出结构化结果
这已经不是传统 chatbot 能完成的工作,而更接近真正的"科研助手"。
我们最终把它做成了什么样
在系统设计上,我们逐渐把它从"一个会回答问题的模型"做成了"一个可追踪、可验证、可反思的 Agent loop"。
上图展示了系统的整体执行流程。从顶部的用户输入开始,系统依次经历研究问题分析、检索词规划、文献搜索与引用扩展,经过相关性筛选后进入全文处理与证据抽取阶段。右侧的紫色区域是整个系统的核心——证据矩阵整理后进入反思与补充搜索的闭环:如果发现信息缺口或方向偏差,系统会回溯到检索或搜索阶段进行补充,直到信息充分后才进入综合总结、引用校验和最终报告输出。图中不同颜色区分了不同的处理阶段:蓝色为规划阶段、绿色为检索阶段、橙色为筛选与抽取阶段、紫色为反思闭环、粉色为最终输出阶段。
整个流程大致是:
- 研究问题分析 — 解析用户输入的研究主题,识别关键概念、子问题和约束条件
- 检索词规划 — 生成多组检索词组合(包括同义词、上下位词、缩写扩展等),并为每组检索词预估召回面
- 文献搜索 — 调用学术 API(如 Semantic Scholar、arXiv、PubMed 等)进行批量检索
- 引用扩展 — 以高相关度论文为种子,向前追溯引用、向后追踪施引文献,扩展候选池
- 相关性筛选 — 基于标题+摘要,由 LLM 逐篇判断是否与研究主题相关,输出 screening decisions
- 全文下载与预处理 — 通过开放获取渠道下载 PDF,进行文本提取和分块(chunking)
- 证据抽取 — 从每篇论文的全文或摘要中,按维度(方法、数据集、指标、结论等)抽取关键信息
- 证据矩阵整理 — 将所有论文的抽取结果合并为结构化对比表,便于横向比较
- 反思与补充搜索 — 检查证据矩阵中是否存在信息缺口或方向偏差,决定是否需要补充检索
- 综合总结 — 基于证据矩阵生成综述性分析,包含方法分类、趋势总结和研究空白识别
- 引用校验 — 验证关键引用是否准确,确保每条引用对应正确的论文,避免幻觉引用
- 更新监控建议 — 生成后续需要持续跟踪的关键词和作者列表,便于建立监控策略
- 生成最终报告 — 输出结构化 Markdown 报告,包含综述、证据矩阵、引用列表和研究建议
这件事很重要,因为很多看起来像 Agent 的系统,本质上只是:
prompt + workflow + 几个工具调用
它们能"跑流程",但不一定真的具备围绕目标持续修正的能力。
而我们在开发过程中越来越明确:
自动化 Agent 的关键,不是让它多说几步,而是让它在每一步都有明确目标、可检查结果,并且能基于中间结果继续调整后续行为。
架构设计要点
在实际实现中,我们没有采用"一个大 prompt 管全程"的方式,而是把系统拆成了几个核心模块:
Planner(规划器)
负责任务拆解和执行计划生成。输入是用户的研究问题,输出是结构化的执行计划(包含步骤、依赖关系和预期产出)。我们在 Planner 这里引入了"显式中间目标"的概念——每一步执行前,Planner 都会明确这一步的预期产出格式,执行后由 Evaluator 检查是否达标。
Executor(执行器)
负责按计划调用工具并收集结果。Executor 本身不做判断,只负责"执行指令"和"收集返回"。它需要处理工具调用的技术细节:重试机制、超时控制、并发限制、结果格式化等。
Evaluator(评估器)
负责检查中间结果的质量。Evaluator 是一个轻量级的评估节点,它会对照 Planner 设定的预期产出,判断当前步骤的结果是否满足继续向下的条件。如果不满足,会触发反思回路。
Memory Manager(记忆管理器)
负责管理三类信息:
- 短期记忆:当前任务窗口内的对话和中间结果
- 长期记忆:跨任务的持久化知识(如已知的方法分类、常用检索词等)
- 外置状态:写入磁盘的结构化文件,作为"事实中心"(source of truth)
这种架构的核心思想是:
不要让任何一个模块同时承担"理解意图"“执行操作”"判断质量"三个职责
职责分离之后,每个模块出错的范围是可控的,调试也更容易定位。
DeepSeek v4 pro 在复杂任务中的表现
在实际测试中,我们发现,对于简单问答,大部分模型差距并不明显;但在真正复杂的 Agent 场景下,大模型的任务规划能力、上下文管理能力和长链路推理能力会直接影响系统效果。
我们后端接入了 DeepSeek v4 pro 等模型,在以下任务中表现较好:
- 多轮任务规划
- 长链路推理
- 工具调用链组织
- 自动纠错
- 多步骤科研分析
- 基于中间结果继续补搜和修正
例如,Agent 在完成文献分析时,需要连续完成:
- 阅读摘要
- 判断是否相关
- 提取方法
- 比较多个方案
- 决定还要不要继续搜索
- 最终生成总结
如果模型上下文能力不足,很容易出现:
- 中途丢失目标
- 重复调用工具
- 推理链断裂
- 输出结构混乱
- 前后结论不一致
而 DeepSeek v4 pro 在复杂任务上的稳定性更好,这也是我们后续重点使用它的重要原因。
多模型混合策略
在实际系统中,我们并没有只用一个模型处理所有任务。不同的环节对模型能力的要求不同,成本也不同:
| 环节 | 模型要求 | 策略 |
|---|---|---|
| 任务规划 | 需要强推理和结构化输出 | 使用能力最强的模型(DeepSeek v4 pro) |
| 文献筛选 | 大量重复判断任务,需要速度快 | 使用性价比更高的模型,批量处理 |
| 证据抽取 | 需要精确提取,对幻觉容忍度低 | 使用强模型 + 严格的结构化输出约束 |
| 反思评估 | 需要对比分析,识别信息缺口 | 使用强推理模型 |
| 引用校验 | 简单的匹配验证 | 规则引擎为主,LLM 辅助纠错 |
这样一来,既能保证关键环节的质量,又能控制整体成本。如果所有环节都使用最强的模型,单次完整任务的 API 费用会非常高;但如果减少关键环节的预算,输出质量就会明显下降。
一个典型失败案例
这里分享一个实际调试中遇到的具体案例:
某次执行文献调研任务时,Agent 在第三步(文献搜索)返回了 50 篇论文,但在第五步(相关性筛选)时,LLM 把其中 30 篇都判定为"相关"。这本身不算异常——检索时适当扩大范围是合理的。
但问题出在后面:这 30 篇论文进入证据抽取阶段时,其中有 12 篇实际上只有摘要可用,没有获取到全文。当时的系统设计没有严格区分"全文级别的证据"和"摘要级别的证据",导致证据矩阵中混入了大量不精确的信息,最终总结的质量受到了严重影响。
这让我们意识到一个架构上的缺失:
证据的质量层级必须显式标注
后来我们引入了"证据质量标签":
- Level A:从全文中直接提取的数据和方法描述
- Level B:从摘要中推断的信息
- Level C:从引用关系中推断的间接证据
只有 Level A 证据才参与核心结论的生成,Level B 和 C 仅作为辅助参考。这个改动对输出质量的提升非常明显。
做自动化 Agent 过程中的几个关键经验
这部分是我觉得最值得分享的地方。真正开始做之后,我发现自动化 Agent 和普通应用开发的难点并不一样,很多坑不是"模型不够强",而是系统设计方式不对。
1. 不要一上来就堆模型,先定义"可交付结果"
一开始很容易陷入一种误区:只要模型更强、prompt 更长,Agent 就会更聪明。
但实际开发中,更重要的是先定义每一步到底要产出什么。
比如我们后面逐渐把中间结果都做成了可检查的产物:
- query plan:检索策略的显式 JSON,包含检索词、数据库选择、预期召回量
- screening decisions:每篇论文的相关性判断 + 判断依据(1-2 句话理由)
- evidence matrix:结构化表格,每行一篇论文,每列一个证据维度
- reflection notes:反思阶段的自由文本,记录发现的信息缺口和补充策略
- citation verification:引用校验结果,标注每条引用的状态(已确认 / 存疑 / 无法验证)
- final report:最终的 Markdown 报告
这样做有两个好处:
第一,系统是否真的完成任务是可验证的;
第二,一旦出错,可以迅速定位到底是搜索阶段、筛选阶段还是提取阶段出了问题。
也就是说,Agent 不是"最后给一个答案"就算完成,而是要把中间推理过程沉淀成可以复查的结果。
一个反例:
我们早期有一个版本,中间状态全部存在一个 dict 里,一步步往里追加字段。表面上系统跑通了,但一旦某一步的输出格式稍有变化,后续步骤就会静默失败——不是报错,而是拿到了错误的输入继续往下跑,最终输出的报告看起来"还行"但经不起细看。拆分中间产物并落盘之后,这个问题才真正被解决。
2. Agent 不是简单 workflow,必须保留"反思 - 修正"回路
很多系统看起来步骤很多,但本质上只是一次性串联执行。
真正复杂的科研任务里,前面的搜索结果会影响后面的判断,后面的总结也会反过来暴露前面搜索不充分的问题。
所以我们后面越来越强调一个闭环:
执行 -> 评估 -> 反思 -> 修正 -> 再执行
例如:
- 如果筛选到的论文方向太散,需要回到 query planning 重新收缩检索范围
- 如果证据矩阵信息不足,需要继续补充搜索
- 如果引用不可靠,需要增加引用校验
这类"会回头修正自己"的能力,才更接近我们理解中的 Agent。
反思循环的实现方式:
我们在 Evaluator 阶段设计了一个具体的检查清单:
- 证据矩阵中是否存在信息空白?(例如某篇高相关论文的关键方法未提取)
- 覆盖的论文是否方向过于集中于某个子领域?
- 时间分布是否合理?(是否遗漏了近两年的重要工作?)
- 证据间是否存在明显矛盾?(如果有矛盾且未解决,说明需要更多信息)
- 引用是否完整且准确?
只要以上任何一项不通过,系统就会明确标注"需要补充"并回到对应的执行阶段。
一个重要的设计决策:
反思不是"让模型自己决定要不要继续"。我们发现,如果不加约束,模型倾向于"满意"——即使信息不完整,它也会生成一个看起来像样的结论。所以我们最终采用了结构化的检查清单(checklist)配合规则触发的机制,而不是完全由 LLM 自由判断是否需要反思。
3. 长上下文不是万能的,状态必须外置
这是我在开发过程中感受非常深的一点。
做文献 Agent 时,如果把所有论文内容、摘要、提取结果、历史对话都堆到一个长 prompt 里,短期看起来很方便,但一旦任务变长,很快就会出现:
- 上下文过长,中间信息被"挤压"
- 历史信息污染当前判断(模型更关注"最近看到的内容")
- 不同论文内容互相干扰(尤其是方法相似的论文)
- 成本快速上升(长上下文意味着每次调用的 token 消耗翻倍)
- 调试困难(你根本不知道模型在哪个环节读了什么信息)
所以后面我们把很多状态显式外置到磁盘和结构化文件中,比如:
- 每篇论文单独的全文上下文(
papers/{paper_id}/full_text.txt) - 分块后的文本(
papers/{paper_id}/chunks/chunk_*.txt) - reader context(
papers/{paper_id}/reader_context.json) - chunk-level extract(
papers/{paper_id}/chunk_extracts.json) - 最终 extract(
papers/{paper_id}/final_extract.json) - evidence matrix(
workspace/evidence_matrix.csv)
这样做的好处是,主控制器只需要读取"必要摘要",而不是永远背着全部原始材料前进。
简单说就是:
不要让大模型记住一切,而要让系统知道去哪里取回需要的信息
一个具体的实践:
在进行证据抽取时,我们不会把一篇 30 页的论文全文塞给 LLM,而是先做分块,每个 chunk 独立抽取关键信息,再由一个汇总步骤把 chunk-level 的抽取结果合并成论文级别的提取。这样既避免了上下文过载,又让抽取过程变得可追踪——如果最终提取结果有问题,你可以回溯到是哪个 chunk 的抽取出了问题。
4. 让 LLM 负责判断,让程序负责确定性执行
我们后来逐渐明确了一个分工原则:
- 需要语义理解和判断的,交给 LLM
- 需要稳定执行和可重复运行的,交给程序
比如:
LLM 更适合做:
- 检索策略规划
- 论文相关性判断
- 方法总结
- 证据归纳
- 反思补搜
程序更适合做:
- 搜索结果收集(API 调用、去重、排序)
- 文件下载(带重试、断点续传)
- PDF 预处理(文本提取、分块、格式清洗)
- 状态持久化(读写结构化文件、维护任务进度)
- 结果导出(格式化报告、生成对比表)
- 异常重试与日志记录
如果把这两部分混在一起,系统就会变得很不稳定。很多时候不是模型回答错了,而是工具调用、状态管理或数据边界出了问题。
一个典型的错误设计:
早期我们让 LLM 直接生成文件路径来读取中间结果。结果发现模型有时会"发明"一个不存在的路径,或者在路径里出现奇怪的前缀。后来我们把所有文件操作的逻辑交给程序侧,LLM 只负责告诉程序"我需要读取 paper_id=xxx 的全文",程序负责查找对应的文件路径并返回内容摘要。这个改动虽然简单,但直接消除了一个非常令人头疼的错误来源。
5. 真正的难点,常常不在"推理",而在工程边界
很多人以为做 Agent 最难的是 prompt 设计,但真正做下来我发现,很多最耗时间的问题其实是工程问题:
- 文献下载不到全文(很多论文没有开放获取,或者 PDF 链接已失效)
- 看起来像 PDF 的链接实际不是 PDF(重定向到了 HTML 登录页或摘要页)
- 某一步返回为空,后面全部被带偏(空结果不等于"没有信息",但系统不知道)
- screening 阶段太慢,看起来像卡死(50 篇论文逐篇判断,加上 API 调用延迟)
- 配置、日志和中间状态难以追踪
- PDF 解析失败(扫描版 PDF、双栏排版、数学公式被破坏)
这些问题如果不解决,模型再强也很难稳定交付结果。
所以一个可用的 Agent,不只是"会思考",还必须:
- 可观察(每一步的状态和中间结果都能看到)
- 可调试(出错后能快速定位到具体环节)
- 可回放(给定相同的输入和配置,能复现相同的结果)
- 可定位错误(错误信息清楚地指向具体环节,而不是笼统的"系统出错")
这一点和普通 demo 的区别非常大。
一个实用的实践:
我们在每个步骤之间都写入了 checkpoint 文件,记录这一步的输入、输出、耗时和状态。这样如果系统在第 8 步失败了,你可以直接从第 7 步的 checkpoint 恢复,而不需要重跑整个流程。在开发调试阶段,这个设计节省了大量时间。
6. 严格失败,往往比"兜底成功"更重要
在 Agent 开发里,有一种很常见的诱惑:
某一步失败了,要不要先随便给个兜底结果,让流程继续跑下去?
短期看,这样系统"更顺滑";但长期看,这通常会制造假成功。
比如:
- 没拿到全文,却还在继续做全文总结(实际上是在总结摘要)
- LLM 没有真正返回结构化结果,却被默认解析成功(解析器默默吞掉了格式错误)
- 某一步信息不足,却继续向下游传播(垃圾进,垃圾出)
我们后来越来越倾向于:
- 缺全文就明确失败,标记为"无全文"状态,由上层决定是否降级处理
- 关键 JSON 不合法就回退重试(最多 3 次),3 次失败后抛出明确错误
- 返回空结果就直接暴露问题,而不是静默地用一个空列表继续执行
因为只有这样,系统才会逼着我们真正修复问题,而不是用表面上的"流程跑通"掩盖质量问题。
一个反例:
我们第一版的 JSON 解析器做了"最大努力解析"——即使 LLM 返回的 JSON 不完整,也会尝试截取其中的部分字段。这导致了很多"看起来成功"但数据不完整的中间结果,后续步骤基于残缺数据继续执行,最终报告里出现了大量"信息不足"的标记。当后来加上严格模式之后,第一次运行就有 30% 的步骤因为格式问题触发了重试——这才是真实的系统质量。
7. 先跑通小闭环,再追求全自动
自动化 Agent 很容易一开始就做得特别大:多工具、多阶段、多角色、多轮反思、长记忆、自动报告。
但实际开发里,更有效的方式通常是:
- 先缩小任务范围
- 先跑通最小闭环
- 再一点点增加复杂度
比如先验证:
- 能不能正确规划 query(输入主题 → 输出检索策略,人工检查是否合理)
- 能不能筛出相关论文(给定 20 篇论文的标题+摘要,LLM 筛选的准确率能否达到 85%+)
- 能不能拿到可用全文(给定 DOI,系统能成功获取全文的比例)
- 能不能稳定抽取证据(给定一篇论文全文,能否以 90%+ 的准确率提取方法、数据集、指标)
这些基本能力都确认没问题之后,再去做多轮反思和自动报告,成功率会高很多。
我们的迭代过程:
- 第一周:只做"给定一个研究主题 → 输出 10 篇相关论文的总结",人工验证质量
- 第二周:加入自动搜索和多轮筛选
- 第三周:加入全文处理和证据矩阵
- 第四周:加入反思回路和自动报告生成
每一周都在前一周已验证的基础上增加复杂度,而不是一步到位。
8. Prompt 工程在 Agent 系统中的特殊性
Agent 系统中的 prompt 设计和单次对话场景完全不同。在单次对话中,prompt 只需要引导一次输出;但在 Agent 系统中,prompt 需要引导模型在多轮交互中保持一致性。
我们总结了几条实用原则:
输出格式要"过度约束"
对于中间步骤的输出,我们不只是说"输出 JSON",而是给出完整的 JSON Schema 和反例。例如:
- 正面示例:
{"relevance": "high", "reason": "该方法直接解决了...", "key_contribution": "..."} - 反面示例:
{"relevant": true, "note": "interesting paper about..."}(字段名不对,缺少理由)
只给正面示例,模型还是容易偏离格式;加上反面示例后,格式遵从率显著提升。
使用"角色 + 约束 + 输出格式"三段式 prompt 结构
我们发现一个有效的 prompt 模板:
你是一个[角色],任务背景是[上下文]。
你需要完成以下工作:
1. [具体步骤]
2. ...
约束条件:
- [约束1]
- [约束2]
输出格式(严格遵守):
{...JSON Schema...}
这个结构简单但有效,避免了在 prompt 中混入过多"建议"和"提示"导致模型分心。
不要让 LLM 做计算
如果需要在证据矩阵中比较数值(如准确率、F1 分数),不要依赖 LLM 做大小比较。我们遇到过模型在比较"89.2%"和"91.5%"时判断错误的情况。数值比较应该交给程序,LLM 只负责提取和描述。
9. 幻觉问题在 Agent 场景下更加危险
单次对话中的幻觉是"给出错误信息",但 Agent 场景下的幻觉是"基于错误信息继续执行后续步骤"——错误的放大效应更严重。
我们遇到过的典型幻觉场景:
- 模型"编造"了一篇看似合理的论文(标题、作者、方法都有,但不存在)
- 模型在证据矩阵中"补充"了论文中没有的方法细节
- 模型在反思阶段"发现"了一个信息缺口,但这个缺口实际上不存在,导致不必要的补充搜索
应对策略:
- 引用校验作为独立环节:每一条引用在进入最终报告前,必须与原始检索结果进行比对
- 证据必须可溯源:evidence matrix 中每条证据都附带来源标记(论文 ID + 页码/段落号)
- 不信任模型的"自信":模型越自信地给出某个具体数值或细节,越需要验证
10. AI 编程真正提升的,不只是"写代码速度"
整个项目里,AI 对开发效率提升非常明显,但我后来觉得,它最大的价值不只是"生成代码",而是帮助我们:
- 快速搭框架
- 快速理解报错
- 快速重构模块边界
- 快速联调 prompt 和 workflow
- 快速把问题从"感觉不对"缩小成"这里出了问题"
例如以前开发 Agent 时,经常会遇到:
- workflow 逻辑复杂
- prompt 难调
- 状态管理混乱
- 工具调用容易出错
- debug 成本高
现在很多问题都可以直接和 Claude Code 协作完成。
比如:
自动生成 Agent 框架
Claude Code 可以快速生成:
tools/— 工具定义和调用封装memory/— 短期/长期记忆管理planner/— 任务规划和拆解executor/— 执行引擎workflows/— 具体业务流程定义
等模块结构。
自动分析报错
以前调试一个异步调用错误,可能需要查半天。
现在我会直接:
- 把 traceback 给 Claude Code
- 让它分析调用链
- 自动修改代码
很多问题几分钟就能定位到。
Prompt 与 Workflow 联合优化
Agent 系统里,prompt 和代码往往是耦合的。
Claude Code 可以:
- 根据 workflow 改写 prompt
- 根据 prompt 调整状态结构
- 自动补充异常处理
- 帮助重新划分模块职责
这种"边写代码边讨论系统设计"的体验,在 Agent 开发里尤其有价值。
一个具体的协作案例
在开发反思回路时,我们最初的设计是让 Evaluator 直接给 Executor 发送"重新执行某一步"的指令。但实现后发现了问题:Executor 收到重新执行的指令时,它不知道该用哪些参数、保留哪些中间状态。
我把这个问题描述给 Claude Code,它建议引入一个"修正上下文"(correction context)的概念——Evaluator 触发的重新执行不是"从头再跑",而是携带一个记录了哪些参数需要调整、哪些中间结果需要保留的上下文对象。这个方案我们花了一个下午就实现并验证了,如果没有 AI 辅助,从设计到实现可能需要一整天甚至更多。
比赛中的一些真实感受
目前我们已经基于免费 API 和已有算力资源完成了系统初步版本,并在部分赛道测试中取得了较好的效果。
在最近的阶段性评测中,我们已经获得:
单赛道排名第四
这个结果当然和模型能力有关,但更重要的是,Agent 系统一旦进入复杂任务场景,真正拉开差距的往往不是某个单点能力,而是整体系统有没有做到:
- 目标清晰
- 状态可控
- 环节可验证
- 问题可定位
- 结果可交付
这也是这次比赛给我最深的一个认识:
自动化 Agent 不是"更会聊天的大模型",而是"围绕目标持续执行、持续修正、持续交付的系统"。
比赛中观察到的几个现象
现象一:很多队伍在模型能力上并不差,但系统设计拖了后腿
我们和其他参赛队伍的交流中发现,不少人花了大量精力选模型、调参数,但系统架构上存在明显短板——比如没有中间状态持久化,一次运行失败就要从头再来;或者没有反思回路,第一次输出的质量就是最终质量。这些工程问题反而是更容易拉开差距的地方。
现象二:任务越复杂,"编排"比"生成"更重要
简单任务靠 LLM 一次生成就能得到不错的结果。但在我们的赛道中,任务链路长、中间决策多,单纯依赖 LLM 的生成能力远远不够。真正有价值的是"如何编排多个 LLM 调用、如何管理它们之间的信息流、如何在每个节点上做质量检查"。
现象三:比赛环境的不确定性让鲁棒性成为关键
比赛评测时的网络环境、API 可用性和本地开发环境完全不同。我们花了不少精力处理各种边界情况:API 超时、PDF 无法下载、返回结果格式异常等。这些处理在本地看起来是"过度设计",但在比赛环境中恰恰是决定系统能不能跑完的关键。
我的感受
这次开发过程中,我最大的感受是:
AI 已经开始改变"写代码"和"做系统"的方式。
以前:
人需要自己完成所有细节
现在更像是:
人负责目标、边界和设计,AI 负责协助实现、调试和优化
尤其是在 Agent 开发这种复杂系统中,Claude Code + 大模型的协同开发体验已经非常接近:
“一个真正参与项目的开发搭档”
未来我希望继续探索:
- 多 Agent 协作(多个专业化 Agent 分工合作,由一个协调器统一调度)
- 自动化科研工作流(从选题、调研、实验到写作的完整闭环)
- 长期记忆系统(跨项目的知识积累和复用,让 Agent 随着使用越来越"懂行")
- 自主任务规划(Agent 自主拆解复杂任务,不需要人工定义每一步)
- AI for Science(将 Agent 能力扩展到更多科研领域,如生物信息学、材料科学等)
等方向。
我也越来越相信,未来的大模型系统不会只是"回答问题",而会越来越多地参与:
- 科研辅助
- 工程开发
- 信息整理
- 工具调用
- 长流程任务执行
AI Agent 很可能会逐渐成为未来科研与工程开发的重要基础设施。
附录:给同样在做 Agent 开发的朋友几点建议
如果你也在开发类似的 Agent 系统,以下是我踩过坑之后的一些建议:
- 不要从复杂的全自动系统开始。从最简单的"能做好一件事"开始,验证核心能力后再扩展。
- 把中间产物落盘。无论是 JSON、CSV 还是 Markdown,每一步的输出都要能独立查看和验证。
- 显式管理引用和来源。Agent 系统中丢失来源追踪是致命的,每一条信息都要能回溯到原始出处。
- 测试不要只用 happy path。故意制造异常情况(断网、空结果、格式错误)来验证系统的鲁棒性。
- 用 AI 辅助开发 AI 系统。Claude Code 这类工具在 Agent 开发的场景中尤其有价值,不要只把它当代码补全工具。
- 成本意识要贯穿始终。一个能跑但成本不可控的 Agent 系统是没有实际价值的,设计时就要考虑每一步的 token 消耗和 API 调用次数。