AI 做科研的能力到底到了什么程度,这两年讨论得越来越多。一边是各种基准测试里模型分数不断刷新,另一边是真正写过论文、跑过实验的人普遍保持谨慎。把这个问题拆开看,其实不是"AI 能不能做科研"这么简单,而是"AI 在科研流程的哪些环节已经可用、哪些环节还只能当辅助、哪些环节碰了就要出事"。这篇文章不讨论抽象的智能水平,而是从工程落地角度,把 AI 科研 Agent 当成一个可以部署、可以调用、可以验证的系统来看:它的技术栈是什么、能力边界在哪、怎么本地跑起来、怎么测、怎么控成本、怎么防幻觉。
对 CSDN 读者来说,更有价值的问题是:这类系统能不能接进我自己的科研工作流。答案是可以,但前提是你清楚它是一个"高产出、高方差、强依赖校验"的工具。它能在几分钟内生成一份像模像样的文献综述框架、一段数据处理脚本、一个实验设计草案,也能在没有任何提示的情况下编造一篇不存在的参考文献。用得好是加速器,用不好是学术事故的源头。
本文会围绕几个具体问题展开:AI 科研 Agent 的典型技术组成、能力速览、适用与不适用场景、环境准备、本地部署与 API 服务启动、五类核心功能的验证流程、批量任务与接口调用示例、token 与显存层面的资源观察方法,以及一套可复用的排查清单和合规边界。文中所有涉及具体参数的地方都会说明"需按实际工具和模型版本测试",不会给出没有依据的数字。
如果你正在考虑把大模型接进文献调研、数据分析、代码复现、论文写作这些环节,或者只是想知道"AI 超过博士生"这个说法该怎么理解,下面这些内容可以直接拿去对照。
1. AI 科研 Agent 能力速览与系统构成
先把概念对齐。所谓"AI 做科研",在工程上通常指一套由大语言模型驱动的 Agent 系统,具备工具调用、多轮规划、上下文记忆和结果整合能力。它不是一个单独的模型,而是"模型 + 工具 + 编排 + 校验"的组合。模型负责理解和生成,工具负责检索、计算、执行代码,编排负责把任务拆成可执行的步骤,校验负责在关键节点拦住错误。少了校验这一层,系统就会变成一个自信的胡说机器。
从技术构成看,一个典型的科研 Agent 至少包含下面几块:基础模型(本地或 API 调用)、检索模块(文献库、向量数据库)、代码执行沙箱(跑数据分析脚本)、文档解析模块(PDF、表格、公式)、任务编排层(规划与反思)、以及输出层(Markdown、LaTeX、图表)。这六块里任何一块缺失,都会明显限制可用性。比如没有沙箱,模型生成的代码就只能看不能跑;没有检索,综述部分基本靠记忆,引用可靠性无从谈起。
1.1 核心能力速览
| 能力项 | 说明 |
|---|---|
| 系统类型 | 大模型驱动的科研辅助 Agent,非单一模型 |
| 底层依赖 | 通用大语言模型(API 或本地部署)+ 工具调用框架 |
| 主要功能 | 文献检索与综述、数据分析、代码生成与调试、实验方案草拟、论文润色、图表整理 |
| 推荐硬件 | 纯 API 方案无本地 GPU 要求;本地模型方案需按模型规模评估显存 |
| 显存占用 | 不确定,需按实际模型版本、量化方式和上下文长度测试 |
| 支持平台 | 以 Python 生态为主,可跨 Linux / Windows / macOS |
| 启动方式 | 脚本调用、WebUI、HTTP API 服务、容器化部署 |
| 是否支持 API | 取决于所选框架,主流方案均提供 HTTP 接口 |
| 是否支持批量任务 | 可通过脚本循环或任务队列实现 |
| 适合场景 | 文献初筛、脚本生成、方案草稿、代码复现辅助、写作润色 |
| 不适合场景 | 替代真实实验、替代同行评审、未经核验直接引用生成内容 |
这张表的核心意思是:它的价值集中在"降低重复劳动成本",而不是"替代科研判断"。任何把它当成结论生产器的用法,都会在某个环节翻车。
1.2 能力边界的客观判断
关于"能力是否超过博士生"这类比较,需要先明确评价维度。如果只看知识覆盖面、写作速度、代码模板生成、跨领域信息整合,大模型确实在很多单项任务上表现很快,甚至超过一般人的平均水平。但如果看实验设计的新颖性、对失败信号的判断、对领域惯例的理解、对数据质量的敏感度,这些依赖长期训练和真实反馈的能力,模型目前还很难稳定复现。
更准确的说法是:模型在"信息密集、模式清晰、可被文本描述"的任务上优势明显;在"需要动手验证、需要判断异常、需要承担后果"的任务上短板明显。科研恰恰是后一类任务占比很高的工作。所以合理的定位不是"替代",而是"前置助手"——把文献初筛、脚本骨架、方案枚举这些耗时环节压缩掉,把人的时间留给判断和验证。
这个定位决定了后面所有的工程选择:必须有引用溯源、必须有代码沙箱、必须有人工复核节点、必须有失败重试和日志。没有这些,系统只能演示,不能投产。
2. 适用场景与使用边界
2.1 哪些环节已经可以直接用
第一类是文献处理。给定一批 PDF 或检索结果,Agent 可以完成摘要提取、主题聚类、方法对比表生成、研究空白初步梳理。这一步的产出不能直接进论文,但可以把"读 50 篇摘要"的时间从一天压到一小时,人只需要复核关键结论。
第二类是数据分析脚本。你描述数据结构和分析目标,模型生成 pandas / numpy / statsmodels 的代码骨架,配合沙箱执行并返回结果。对熟悉编程的人来说这是提速,对不熟悉编程的实验人员来说这是降低门槛。风险点在于模型容易忽略数据类型、缺失值、异常值这些细节,所以脚本必须逐段核验。
第三类是代码复现辅助。读别人的开源仓库、理解某个函数的输入输出、把 MATLAB 逻辑翻译成 Python,这些任务模型完成度较高。但涉及数值精度、随机种子、并行逻辑时,必须自己跑对照实验确认。
第四类是写作环节。结构化润色、图表说明、审稿意见回复草稿,这些属于语言层面工作,模型表现稳定。前提是所有事实性内容由人提供,模型只负责组织表达,不允许它"补充"数据或引用。
第五类是方案枚举。让模型给出三到五种实验设计思路并列出各自的假设、变量、潜在混杂因素,这个用法很实用,因为它提供的是"发散",而筛选权在人手里。
2.2 哪些场景必须止步
第一,不能用它生成参考文献。模型编造文献是已知的系统性问题,格式越像真的越危险。所有引用必须回到原始数据库逐条核对,包括作者、年份、期刊、DOI。
第二,不能用它替代真实实验数据。任何"根据文献推测实验结果"的产出都不能进入论文,这属于学术不端。
第三,不能用它做最终审稿判断。模型可以辅助检查格式、语法、逻辑连贯性,但不能给出录用与否的结论性意见。
第四,不能把未脱敏的数据直接送进第三方 API。涉及患者信息、受试者数据、未公开的实验结果、合作方保密材料,一律走本地部署或脱敏流程,并且要有明确的数据使用授权。
第五,不能用它规避版权。上传受版权保护的全文、批量下载文献、生成与他人作品实质性相似的段落,这些都有法律风险。
2.3 合规与学术诚信红线
这一块必须写清楚,因为它决定系统能不能长期用。第一,使用 AI 辅助写作时,要遵守目标期刊和所在机构关于 AI 使用的披露要求,很多期刊要求在手稿中说明使用了哪些工具、用在哪些环节。第二,AI 生成内容不得作为作者署名依据。第三,涉及人类受试者、动物实验、隐私数据的研究,AI 处理环节必须纳入伦理审查范围。第四,使用开源模型和工具时,遵守对应许可证,商用前确认授权范围。第五,保留完整的操作日志,包括输入、输出、模型版本、时间戳,以便在需要时复现和说明。
把这些边界写进流程,比事后补救成本低得多。
3. 环境准备与前置条件
这一节给一套通用准备清单。因为具体项目差异很大,版本号一律不写死,只给检查项和常见组合。
3.1 软件栈与依赖
基础环境通常是 Python 3.10 及以上,配合虚拟环境管理工具(venv、conda 或 uv)。核心依赖包括:HTTP 客户端(requests / httpx)、文档解析(PyPDF2、pdfplumber、python-docx)、数据处理(pandas、numpy)、向量检索(faiss、chromadb 或轻量方案)、任务编排(自写脚本或轻量框架)、以及代码执行沙箱(subprocess 隔离或容器)。
如果走 API 方案,还需要准备模型服务的访问凭证,并确认调用配额、并发限制、计费方式。如果走本地模型方案,需要确认显卡驱动、CUDA 版本与推理框架匹配,并预留足够的磁盘空间存放模型权重。
下面是一份通用检查清单,可以逐项打勾:
- 操作系统与 Python 版本确认
- 虚拟环境创建并激活
- 依赖清单固定版本并生成锁文件
- 模型访问凭证通过环境变量注入,不写进代码
- 文档目录、输出目录、日志目录分离
- 沙箱执行环境与主环境隔离
- 端口规划,避免与已有服务冲突
- 磁盘剩余空间满足模型与数据存放
3.2 凭证与配置管理
凭证管理是最容易被忽视的环节。硬编码 API Key 的脚本一旦进入版本库,就等于泄露。推荐做法是把配置放在环境变量或独立的配置文件里,代码只读不写,并且把配置文件加入忽略列表。
# 通用环境变量示例,实际变量名按所用框架调整 export RESEARCH_AGENT_API_KEY="your_key_here" export RESEARCH_AGENT_BASE_URL="https://your-endpoint.example.com/v1" export RESEARCH_AGENT_MODEL="your-model-name" export RESEARCH_AGENT_TIMEOUT="120"# 依赖安装通用模板,版本需按实际项目锁定 python -m venv .venv source .venv/bin/activate pip install --upgrade pip pip install requests httpx pandas numpy pdfplumber pip freeze > requirements.lock这两段脚本不涉及具体项目细节,但要说明:上面的变量名、包名都是占位,接入真实项目时按文档替换。锁文件的作用是保证换机器、换时间点还能装出同样的环境,这在科研复现场景里是硬要求。
4. 部署方式与服务启动
科研 Agent 的部署方式大致分三档:单脚本、本地服务、容器化。选择依据是使用人数、任务量和是否需要对外提供接口。
4.1 最小可运行脚本
最轻量的方式是写一个入口脚本,读入任务描述,调用模型,输出结果文件。适合个人验证和小批量任务。
# 通用入口脚本模板,接口路径和参数需按实际框架替换 import os import json import requests BASE_URL = os.environ["RESEARCH_AGENT_BASE_URL"] API_KEY = os.environ["RESEARCH_AGENT_API_KEY"] MODEL = os.environ["RESEARCH_AGENT_MODEL"] def run_task(prompt: str, system_prompt: str = "") -> str: headers = { "Authorization": f"Bearer {API_KEY}", "Content-Type": "application/json", } payload = { "model": MODEL, "messages": [ {"role": "system", "content": system_prompt}, {"role": "user", "content": prompt}, ], "temperature": 0.2, } resp = requests.post( f"{BASE_URL}/chat/completions", headers=headers, json=payload, timeout=120, ) resp.raise_for_status() data = resp.json() return data["choices"][0]["message"]["content"] if __name__ == "__main__": result = run_task("给出一段数据分析脚本的框架,说明输入输出") print(result)这段代码的关键点有三个:一是凭证从环境变量读,二是超时时间显式设置,三是raise_for_status保证错误能被及时捕获。很多脚本卡住不返回,就是因为没设超时或者吞掉了异常。
4.2 本地 API 服务
如果需要多人共用或与前端对接,就要把能力包成 HTTP 服务。常见做法是用轻量 Web 框架暴露接口,内部调用模型和工具。启动时要注意端口、跨域、访问控制三件事。
# 通用服务启动模板,脚本名和参数按实际项目替换 python server.py --host 127.0.0.1 --port 7860 --workers 2这里默认绑 127.0.0.1 而不是 0.0.0.0,是为了避免在没做鉴权的情况下把服务暴露到局域网。如果确实需要外部访问,必须加认证、限流和访问日志。
4.3 容器化部署
容器化的好处是环境一致、迁移方便、可以限制资源。对科研场景来说,还能把代码执行沙箱单独拆一个容器,避免生成的脚本影响主环境。
# 通用容器编排示例,镜像名、挂载路径、端口需按实际项目调整 services: research-agent: image: your-agent-image:latest ports: - "7860:7860" environment: - RESEARCH_AGENT_API_KEY=${RESEARCH_AGENT_API_KEY} - RESEARCH_AGENT_BASE_URL=${RESEARCH_AGENT_BASE_URL} volumes: - ./inputs:/app/inputs - ./outputs:/app/outputs - ./logs:/app/logs deploy: resources: limits: memory: 8G sandbox: image: your-sandbox-image:latest volumes: - ./workspace:/workspace network_mode: none沙箱容器禁用网络是一个值得推荐的默认设置:模型生成的代码如果包含未预期的网络请求,直接就会被挡住。目录挂载分离则保证输入、输出、日志互不污染,便于事后追溯。
5. 功能测试与效果验证
部署完成不等于能用,必须按功能逐项验证。这一节给出五类核心测试的设计思路,每类都包含目的、输入、步骤、预期和失败判断。
5.1 文献检索与综述生成
测试目的是确认检索链路和引用可靠性。输入准备三到五篇已知内容的论文,让 Agent 生成主题对比表,要求每条结论标注来源段落。操作步骤是:上传文档、输入任务描述、等待输出、逐条核对来源。
预期结果是结论与原文一致、来源可定位、没有凭空出现的文献。判断成功的标准不是"写得好",而是"每条可追溯"。常见失败原因是解析失败导致内容缺失、检索召回不足导致结论片面、模型在无依据时补全内容。遇到第三种情况,说明提示词里缺少"无依据必须声明"的约束,需要补上。
5.2 数据分析脚本生成与执行
测试目的是确认代码生成与沙箱执行的闭环。输入一份结构清晰的小数据集(列名、类型、缺失情况明确),描述分析目标,让 Agent 生成脚本并在沙箱执行。
预期结果是脚本能跑通、输出结果可复现、关键步骤有注释。判断成功的标准是换一份同结构数据仍能运行,说明代码不是硬编码。常见失败原因是模型忽略数据类型、缺失值处理不当、随机性未固定。建议在提示词中强制要求设置随机种子、输出中间检查点。
5.3 实验方案设计与变量梳理
测试目的是确认发散能力和逻辑完整性。输入一个研究问题,要求给出三种方案,每种列出假设、自变量、因变量、控制变量、潜在混杂因素、所需样本量估算思路。
预期结果是方案之间有实质差异、变量定义清楚、混杂因素有说明。判断标准是能否被人直接拿去讨论,而不是"看起来专业"。常见失败原因是方案同质化、变量定义模糊、忽略伦理审查环节。这类输出必须人工筛选,不能直接采用。
5.4 代码复现与调试辅助
测试目的是确认模型对代码上下文的理解。输入一段有已知 bug 的代码和报错信息,让 Agent 定位问题并给出修复建议。
预期结果是定位准确、修复方案可执行、说明修改理由。判断标准是修完之后测试通过。常见失败原因是模型只看报错不看上下文、给出"看起来对但跑不通"的补丁、引入新的依赖问题。建议要求它同时输出最小复现用例。
5.5 长文档与批量任务
测试目的是确认上下文长度和批量稳定性。输入一份长 PDF 或多份文档,要求分段处理并汇总。
预期结果是分段结果一致、汇总不丢信息、长文档不截断。判断标准是抽取若干段人工比对。常见失败原因是上下文超限、分段边界切断了关键信息、批量任务中途失败没有续跑机制。这一项必须配合日志和断点续传设计。
6. 接口调用与批量任务设计
科研场景的批量需求很常见:几十篇文献摘要、上百条数据清洗、多个实验方案枚举。接口层要支持这些用法,同时要防止把配额打爆。
6.1 请求结构示例
# 通用接口调用示例,路径与字段需按实际服务调整 curl -X POST "http://127.0.0.1:7860/v1/tasks" \ -H "Content-Type: application/json" \ -H "Authorization: Bearer ${RESEARCH_AGENT_API_KEY}" \ -d '{ "task_type": "summarize", "inputs": ["./inputs/paper_001.pdf"], "options": { "max_tokens": 1024, "temperature": 0.2, "return_citations": true } }'这里task_type、inputs、options都是通用字段,真实项目里字段名几乎一定不同,接入时以实际文档为准。return_citations这类开关如果服务支持,建议默认打开,它能在输出层直接暴露"有没有依据"。
6.2 Python 批量处理与重试
批量任务的核心不是循环,而是失败处理。下面的模板包含并发控制、超时、重试和结果落盘,可以直接改造成自己的批处理脚本。
# 通用批量任务模板,接口与参数需按实际服务调整 import json import time import requests from concurrent.futures import ThreadPoolExecutor, as_completed ENDPOINT = "http://127.0.0.1:7860/v1/tasks" HEADERS = {"Content-Type": "application/json"} def call_once(payload, retries=3, backoff=2.0): for attempt in range(1, retries + 1): try: resp = requests.post(ENDPOINT, headers=HEADERS, json=payload, timeout=180) resp.raise_for_status() return resp.json() except Exception as exc: if attempt == retries: return {"error": str(exc), "payload": payload} time.sleep(backoff ** attempt) def process(item): payload = { "task_type": "summarize", "inputs": [item], "options": {"temperature": 0.2, "return_citations": True}, } return item, call_once(payload) if __name__ == "__main__": items = [f"./inputs/paper_{i:03d}.pdf" for i in range(1, 21)] results = [] with ThreadPoolExecutor(max_workers=3) as pool: futures = [pool.submit(process, it) for it in items] for fut in as_completed(futures): item, res = fut.result() results.append({"input": item, "result": res}) print(item, "done") with open("./outputs/batch_results.json", "w", encoding="utf-8") as f: json.dump(results, f, ensure_ascii=False, indent=2)三个设计点值得注意:并发数不要开太大,模型服务通常有并发上限,开大只会换来大量超时;退避重试要设置上限,避免无限等待;结果必须落盘,因为批量任务跑一半失败是常态,没有中间结果就得从头再来。
6.3 任务队列与断点续跑
当批量规模上升到几百条,脚本循环就不够了,需要队列。最简单的实现是用一个 JSON 或 SQLite 记录每条任务的状态(待处理、进行中、完成、失败),启动时先读状态,跳过已完成的。这个设计成本很低,但能把"跑三小时失败重来"变成"只补跑失败条目"。如果团队多人使用,还需要给任务加创建人、创建时间、优先级字段,便于排查。
7. 资源占用与性能观察
科研 Agent 的资源消耗分两个层面:走 API 的方案主要看 token 消耗和请求延迟;走本地模型的方案还要看显存和推理速度。这两类不能混为一谈。
token 层面,观察方法是记录每条任务的输入 token、输出 token 和总耗时,按任务类型分组统计。文献摘要这类任务输入长、输出短,实验方案这类任务输入短、输出长,两类成本结构完全不同。把统计做出来,才能判断哪些环节值得优化,比如是不是可以把长文档先做分段摘要再汇总,而不是整篇塞进上下文。
延迟层面,要区分首 token 时间和总生成时间。交互式使用看首 token,批处理看总时间。如果发现总时间异常,先排查是不是并发过高导致排队,再排查是不是输出被截断导致反复重试。
本地模型方案还要观察显存。观察方式通常是通过推理框架自带的监控接口或系统级工具查看占用峰值,重点看三个变量:模型规模、上下文长度、并发数。上下文越长、并发越高,显存占用越大。降低占用的常用手段是量化、缩短上下文、降低并发、开启分页或卸载策略,但这些都会影响输出质量或速度,需要权衡。
需要强调一点:具体显存数字必须按模型版本、量化方式、推理框架和硬件组合实测,任何脱离环境的数字都没有参考价值。本文不给具体数值,就是因为给出来反而误导。
还有一个常被忽视的指标是稳定性。连续跑一百条任务,成功率是多少、失败集中在哪些输入类型、错误码分布如何,这些比单次跑通更重要。建议在正式使用前做一次小规模压测,比如 20 条混合任务,记录成功率。
8. 常见问题与排查方法
| 问题现象 | 可能原因 | 排查方式 | 解决方案 |
|---|---|---|---|
| 服务启动后访问不了 | 端口被占用或绑定地址错误 | 查看启动日志、检查端口监听 | 换端口、确认绑定地址 |
| 依赖安装失败 | Python 版本不匹配、网络源问题 | 查看报错栈、检查版本 | 换虚拟环境、换镜像源 |
| 调用返回鉴权错误 | 凭证未注入或已过期 | 检查环境变量与请求头 | 重新注入、轮换密钥 |
| 长文档处理结果缺失 | 上下文超限被截断 | 统计输入 token | 分段处理、先摘要再汇总 |
| 输出引用不存在 | 模型幻觉 | 逐条核对来源 | 强制要求标注来源、人工复核 |
| 生成的代码跑不通 | 数据类型、依赖、随机性未处理 | 逐段执行、看报错 | 要求输出检查点、固定种子 |
| 批量任务卡住 | 并发过高、无超时、服务排队 | 看请求日志与响应时间 | 降并发、加超时、加退避 |
| 显存不足 | 模型过大、上下文过长、并发过高 | 观察占用峰值 | 量化、缩上下文、降并发 |
| 结果不可复现 | 未固定随机性、模型版本变化 | 对比两次运行的输入与版本 | 固定种子、锁定模型版本 |
| 输出质量波动大 | 提示词不稳定、温度过高 | 对比不同温度下的输出 | 降温度、固定提示词模板 |
这张表覆盖了部署期和运行期最常见的问题。补充几条经验:第一,任何"偶发失败"都要先看日志再看代码,八成问题在日志里已经写明。第二,批量任务失败先看是不是限流,不要一上来就改业务逻辑。第三,输出质量下降先排查模型版本有没有变,服务端升级是静默发生的。第四,涉及文件路径的错误,优先怀疑挂载和权限。
排查顺序建议固定为:服务是否存活、凭证是否有效、输入是否合规、输出是否被截断、结果是否可复现。按这个顺序走,能避免在错误的方向上浪费时间。
9. 最佳实践与使用建议
第一条,先小后大。第一次接入某类任务,先拿三条样本跑通,确认输入输出结构、确认错误处理、确认成本,再扩大到批量。直接上全量是翻车的常见起点。
第二条,人在回路。所有进入论文、报告、对外材料的内容,必须经过人工复核。复核重点是事实、引用、数据三类,语言层面可以放心交给模型。建议在流程里设置明确的复核节点,而不是"最后再看一眼"。
第三条,引用必须溯源。要求输出每条结论附带来源,来源必须能定位到原文段落。做不到溯源的输出,只能当草稿。
第四条,目录分离。输入、输出、日志、模型文件、缓存各放一个目录,命名带日期和任务标识。这个习惯在复现和排查时价值极高。
第五条,版本锁定。模型版本、依赖版本、提示词版本都要记录。提示词建议单独管理,改动留记录,因为提示词的一点变化就可能让输出风格完全不同。
第六条,成本监控。按任务类型统计 token 消耗,设置日限额或单任务上限,防止一个死循环把配额烧光。
第七条,权限最小化。API 服务只对内网开放,需要外网访问时加认证和限流;沙箱容器断网;密钥定期轮换。
第八条,合规先行。涉及隐私数据、受版权保护的文献、合作方材料,先确认授权范围再决定走本地还是走 API。使用 AI 辅助写作时,按目标期刊要求披露。
第九条,保留失败样本。失败案例比成功案例更有价值,建一个小的回归测试集,每次换模型或改提示词都跑一遍,防止改一处坏一片。
第十条,别把它当权威。它的定位是助手,输出是候选方案,不是结论。这个心态决定了你会在哪些环节设置校验,也决定了最终产出的可靠性。
10. 结论:把 AI 科研 Agent 放回它该在的位置
回到最初那个问题。AI 在科研上的能力是不是已经超过博士生,这个问法本身就容易带偏。更可操作的判断是:在信息整合、代码骨架、文本组织这些环节,它确实能显著提速;在实验设计的新颖性、异常判断、责任承担这些环节,它还不能独立完成。把这两类任务分开对待,系统就有用;混在一起,系统就危险。
如果准备动手,建议的验证顺序是:先跑通文献摘要与来源溯源,这是最容易见效也最容易验证的一环;再跑数据分析脚本生成与沙箱执行,确认代码闭环;然后跑实验方案枚举,观察发散质量;最后再考虑批量化和服务化。每一步都保留人工复核节点,每一步都记录日志和版本。
最容易踩的坑有三个:一是把生成内容直接当事实用,尤其是引用;二是忽略上下文长度导致长文档处理结果残缺;三是批量任务没有断点续跑,失败一次全部重来。这三个坑都有低成本解法,关键是提前设计,而不是出事再补。
后续可以继续扩展的方向包括:接入本地向量库提升检索质量、给代码执行加更严格的资源限制、把提示词模板化和版本化、建立小规模回归测试集、以及针对具体学科补充领域校验规则。这些工作不炫技,但决定了这套系统能不能长期稳定地用下去。