很多人第一次开发智能体时,都会有一个很自然的想法:把用户的问题、文档和工具都交给大模型,让它自己判断下一步该做什么,最后直接生成结果。
这个思路做演示很快,做真正要使用的平台却容易出问题。特别是科研场景,结果里经常有文献、数字、引用和判断。如果这些内容都由模型自由生成,报告看起来可能很完整,但不一定经得起复核。
我在开发科技文献智能服务平台时,里面有智能选题智能体和创新性评估智能体。两个智能体都需要理解长材料、整理研究脉络、解释文献之间的关系,但我没有让大模型包办全部工作,而是把模型和程序各自擅长的事情分开。
这篇文章就结合这个平台,讲一下我在开发科研智能体时是怎么做分工的。这里不重点讲某个框架,主要把开发思路说清楚,方便刚开始做 Agent 的开发人员参考。
一、先看一个最容易出错的例子
假设用户上传一份项目申报书,然后问系统:“这个项目有没有创新性?”
如果只调用一次大模型,模型一般可以很快回答:项目提出了什么方法、有什么应用价值、和已有研究相比有什么优势,甚至还会给出一个分数。
但是,这里面至少有几个问题没有解决:模型比较的是哪些文献?项目里的指标是已经完成,还是计划完成?报告中的百分比是算出来的,还是模型自己写的?引用的论文是否真的支持这句话?
所以我在设计时,先把这类问题拆成两部分。一部分是需要理解上下文、处理自然语言的工作,另一部分是有明确规则、应该稳定重复的工作。
二、大模型适合负责什么
大模型最适合的事情,是把人写的内容理解清楚,再用人容易读懂的方式表达出来。
在创新性评估智能体里,模型可以帮助系统从几十页材料中找出项目目标、技术路线、创新点和指标,也可以判断两段文字说的是不是相近的事情。
比如材料里写着“首次将某算法应用到科技文献主题发现中”,模型可以识别出这是一条需要核对的主张。它还可以进一步判断,这句话涉及方法、应用场景和“首次”这个强结论。
在智能选题智能体里,模型则更适合做主题拆解、关键词扩展、文献摘要归纳和研究空白解释。用户输入一个比较宽泛的研究方向,模型可以帮助把它拆成几个更容易检索和比较的问题。
简单说,凡是需要结合上下文来理解意思,或者需要把复杂内容讲清楚的地方,都可以优先考虑交给模型。
三、程序适合负责什么
普通程序的优势是稳定、可重复,而且不会因为换一个说法就改变计算结果。
文献检索、结果去重、时间范围过滤、引用编号、状态管理和报告导出,这些工作都更适合由程序负责。模型可以帮助生成检索词,但真正去调用检索接口、保存返回结果,应该有确定的代码流程。
再比如,系统要判断一个指标是否比基准值高百分之十,这不是语言理解问题,而是计算问题。把两个数字交给模型让它心算,结果有可能出错;交给程序计算,结果就可以稳定复现。
下面这些内容,我一般不会让模型直接生成:
- 文献总数和去重后的数量;
- 统计图表中的数字;
- 文章或项目的引用编号;
- 任务当前处于哪个阶段;
- 文件是否已经解析完成;
- 某个链接是否能够正常打开。
模型可以解释这些结果,但不应该成为这些结果唯一的来源。
四、在平台里是怎么分工的
以创新性评估智能体为例,我把它的工作拆成了几个比较清楚的阶段。
首先是材料解析。程序负责接收文件、保存文件信息、提取文本,并记录页码、段落或表格位置。模型在这个基础上识别项目目标和创新主张,但不会把原文位置丢掉。
然后是证据检索。模型可以根据主张生成更合适的检索表达,程序负责真正执行检索、保存文献结果、去掉重复内容,并记录检索时间、关键词和来源。
接下来是主张和证据的比较。模型负责回答“这两段内容在技术方法上有什么相同和不同”,程序负责把主张、证据、文献编号和原文位置关联起来。
最后生成报告时,模型负责把判断写成自然语言,程序负责把引用插入正确位置、检查链接和生成固定格式的报告。
这样做以后,一条结果就不只是“模型认为有创新”,而是可以整理成下面这个结构:
| 内容 | 记录什么 |
|---|---|
| 项目主张 | 项目材料具体说了什么 |
| 原文位置 | 来自哪份文件、哪一页或哪一段 |
| 外部证据 | 找到了哪些相关文献 |
| 比较结果 | 方法、数据或场景有哪些相同和不同 |
| 当前判断 | 证据支持到什么程度,是否需要人工确认 |
用户看到结论后,还可以继续往回查看依据,这比只给一个总分更有用。
五、为什么引用不能让模型自由发挥
科研智能体最需要控制的地方之一,就是引用。
如果让模型直接生成参考文献,很容易出现标题相近但并不存在的论文,或者论文确实存在,但正文并没有支持报告中的那句话。
我的做法是,文献先由检索程序获得,再给每篇文献分配内部编号,保存标题、作者、年份、来源和详情链接。模型只能在这个证据池里选择和解释,不能凭空增加一篇文献。
报告里的引用也不能只保存一个[1]。系统还要知道[1]对应哪篇文献,文献来自哪次检索,正文中的哪条判断使用了它。这样后面发现引用不合适时,才能定位到具体结果。
还有一点需要特别注意:没有检索到相似文献,不等于证明项目绝对原创。报告应该说明本次使用的数据库、关键词和时间范围,而不是直接写成“全球首创”。“首次”“唯一”“填补空白”这类表述,最好自动标记出来,交给用户或专家确认。
六、模型不可用时,系统也要能继续工作
智能体不是只有“成功”和“失败”两种状态。真实运行时,模型接口可能超时,检索服务可能暂时不可用,上传的文件也可能无法解析。
如果所有阶段都必须等待模型返回完整答案,任何一个环节出问题,整条链路就会中断。更稳妥的方式,是给不同环节准备降级结果。
例如模型暂时不可用时,程序仍然可以保存用户上传的材料、保留已经检索到的文献和任务进度;文档解析失败时,系统可以告诉用户是哪一个文件出了问题,而不是生成一份看似完整的报告;证据不足时,可以输出“当前无法判断”,并列出需要补充的材料。
这里的关键不是让系统无论如何都给出答案,而是让它在不能确定时把原因说清楚。科研场景里,一个有依据的“暂时不能判断”,通常比一个没有依据的肯定结论更可靠。
七、第一版开发时,怎么把这件事做简单
如果刚开始做科研智能体,我不建议一上来就实现特别复杂的自主规划。可以先做一条最小但完整的链路:上传一份材料,提取三到五条主张,为每条主张检索相关文献,最后生成一张“主张—证据—判断”对照表。
这条链路里,模型主要负责提取和解释,程序负责文件、检索、编号和状态。只要每条结果都能回到原文和文献,哪怕功能还不多,也已经具备了基本价值。
等这条链路稳定以后,再逐步增加趋势分析、指标对比、人工复核、网页报告和 Word 导出。每增加一个功能,都要先想清楚:它是需要模型理解,还是可以用程序稳定完成。
我在平台开发中也采用了这个思路。智能选题智能体重点处理方向拆解、趋势归纳和候选题解释;创新性评估智能体重点处理材料解析、主张提取和证据比对。至于检索记录、任务状态、引用关系和报告导出,则尽量交给确定的程序流程。
最后
开发智能体时,模型越强,并不意味着越应该把所有事情都交给模型。真正决定系统能不能长期使用的,往往是边界有没有划清楚。
我的理解是:模型负责理解、比较和表达,程序负责保存、计算、校验和追踪。两者结合起来,既能处理自然语言中的复杂问题,也能让数字、引用和流程状态保持稳定。
对于科研智能体来说,最重要的不是让报告看起来特别聪明,而是让用户知道这句话从哪里来、这个数字怎么算出来、这个结论目前能确定到什么程度。做到这些,智能体才真正像一个可以协助工作的工具,而不是一个只会生成长文本的聊天页面。