{"schema_version":1,"id":"article:ai-for-science-vertical-harness","kind":"article","slug":"ai-for-science-vertical-harness","title":"AI For Science：垂直 Agent 的「垂直」，并不主要来自 Prompt","author":"晨旭","url":"https://chenxu.xin/writing/ai-for-science-vertical-harness","date":"2026-07-13","updated":"2026-07-13","description":"从 Claude Science 和开源项目 OpenScience 出发，拆解科研 Harness 的五层设计：专业数据源、持续 Kernel、结构化 Artifact、研究型 Session、可见的执行过程。","position":null,"group":null,"series":"入门系列文章","tags":["agent","product-teardown"],"publication_status":"public","maturity":"evergreen","body_sha256":"01964ad03e5045bff6dfea09154db178d13261b60a300f2e45a3bc752e371f78","paragraph_rule":"src/lib/paragraphs.mjs@1","paragraphs":[{"id":"p1","kind":"paragraph","text":"6 月 30 日，Anthropic 发布了 Claude Science，并把它定义为 An AI workbench for scientists，一张属于科学家的 AI 工作台。","raw":"6 月 30 日，Anthropic 发布了 Claude Science，并把它定义为 An AI workbench for scientists，一张属于科学家的 AI 工作台。"},{"id":"p2","kind":"paragraph","text":"第一次看到这个定位时，最让我感到困惑的是 Workbench 这个词：为什么 science 不能在现有的 cowork 里实现，而需要单独做一个产品出来呢？","raw":"第一次看到这个定位时，最让我感到困惑的是 Workbench 这个词：为什么 science 不能在现有的 cowork 里实现，而需要单独做一个产品出来呢？"},{"id":"p3","kind":"paragraph","text":"仔细琢磨后发现，Claude Science 并不是在强化聊天，而是把大模型放进一个真正接近真实科研工作的环境里。","raw":"仔细琢磨后发现，Claude Science 并不是在强化聊天，而是把大模型放进一个真正接近真实科研工作的环境里。"},{"id":"p4","kind":"paragraph","text":"这让我想起之前拆解 Agent Harness 时看到的公式：","raw":"这让我想起之前[拆解 Agent Harness](/writing/agent-model-plus-harness) 时看到的公式："},{"id":"p5","kind":"code","text":"Agent = Model + Harness","raw":"```text\nAgent = Model + Harness\n```"},{"id":"p6","kind":"paragraph","text":"模型负责推理；Harness 决定模型能看到什么数据、使用什么工具、保留什么状态、如何执行动作，以及最终交付什么。","raw":"模型负责推理；Harness 决定模型能看到什么数据、使用什么工具、保留什么状态、如何执行动作，以及最终交付什么。"},{"id":"p7","kind":"paragraph","text":"但 Claude Science 又把这个问题向前推进了一步：当大家使用的底层模型越来越相似，一个垂直 Agent 的「垂直」，究竟来自哪里？","raw":"但 Claude Science 又把这个问题向前推进了一步：当大家使用的底层模型越来越相似，一个垂直 Agent 的「垂直」，究竟来自哪里？"},{"id":"p8","kind":"paragraph","text":"为了进一步理解这套产品设计，我阅读了另一个独立开源项目 OpenScience 的代码。沿着这条思路，我逐渐发现：垂直 Agent 的「垂直」，并不主要来自 Prompt，而来自围绕专业工作流设计的 Harness。","raw":"为了进一步理解这套产品设计，我阅读了另一个独立开源项目 OpenScience 的代码。沿着这条思路，我逐渐发现：垂直 Agent 的「垂直」，并不主要来自 Prompt，而来自围绕专业工作流设计的 Harness。"},{"id":"p9","kind":"paragraph","text":"对于科研 Agent 来说，这层 Harness 包含五个关键部分：专业数据源、持续 Kernel、结构化 Artifact、研究型 Session，以及让执行过程可见的前端反馈。","raw":"对于科研 Agent 来说，这层 Harness 包含五个关键部分：专业数据源、持续 Kernel、结构化 Artifact、研究型 Session，以及让执行过程可见的前端反馈。"},{"id":"p10","kind":"paragraph","text":"它们不是五个孤立的功能，而是在共同回答一个产品问题：如何让一个擅长对话和调用工具的通用 Agent，进入真实的科研工作流，逐渐变成一张可以持续探索、计算和查看专业结果的工作台？","raw":"它们不是五个孤立的功能，而是在共同回答一个产品问题：如何让一个擅长对话和调用工具的通用 Agent，进入真实的科研工作流，逐渐变成一张可以持续探索、计算和查看专业结果的工作台？"},{"id":"p11","kind":"heading","text":"通用 Agent Loop，只是科研工作台的地基","raw":"## 通用 Agent Loop，只是科研工作台的地基"},{"id":"p12","kind":"paragraph","text":"首先回顾一下 OpenScience 与普通 Work Agent 共有的部分。用户在前端输入问题后，系统会进入一个新的会话，随后组织 Agent、模型、上下文和可用工具，接收模型输出的结果。模型可能直接输出文字，也可能返回一张工具调用单：","raw":"首先回顾一下 OpenScience 与普通 Work Agent 共有的部分。用户在前端输入问题后，系统会进入一个新的会话，随后组织 Agent、模型、上下文和可用工具，接收模型输出的结果。模型可能直接输出文字，也可能返回一张工具调用单："},{"id":"p13","kind":"code","text":"模型决策 → 返回 Tool Call → 外部程序执行 → 工具结果写回 Message → 模型继续决策","raw":"```text\n模型决策 → 返回 Tool Call → 外部程序执行 → 工具结果写回 Message → 模型继续决策\n```"},{"id":"p14","kind":"paragraph","text":"这套循环很重要，但它并不是 OpenScience 独有的。Claude Code 可以用同样的循环读写代码，通用研究 Agent 也可以用它进行网页搜索。","raw":"这套循环很重要，但它并不是 OpenScience 独有的。Claude Code 可以用同样的循环读写代码，通用研究 Agent 也可以用它进行网页搜索。"},{"id":"p15","kind":"paragraph","text":"换句话说，Agent Loop 决定系统「能不能自主行动」，而领域 Harness 才决定它「在为什么专业工作」。只换一段 System Prompt，只能让普通 Agent 说话像科研人员；只有改造它能访问的数据、能延续的状态、能操作的环境和能交付的结果，它才可能真正像科研人员一样工作。","raw":"换句话说，Agent Loop 决定系统「能不能自主行动」，而领域 Harness 才决定它「在为什么专业工作」。只换一段 System Prompt，只能让普通 Agent 说话像科研人员；只有改造它能访问的数据、能延续的状态、能操作的环境和能交付的结果，它才可能真正像科研人员一样工作。"},{"id":"p16","kind":"heading","text":"科研 Harness 的五层设计","raw":"## 科研 Harness 的五层设计"},{"id":"p17","kind":"heading","text":"1、专业数据源，让 Agent 接触科研世界","raw":"### 1、专业数据源，让 Agent 接触科研世界"},{"id":"p18","kind":"paragraph","text":"科研任务与普通问答的第一个差异，就是数据。","raw":"科研任务与普通问答的第一个差异，就是数据。"},{"id":"p19","kind":"paragraph","text":"普通 Agent 可以搜索网页，但科研信息分散在文献、蛋白质、基因组、化学、通路和组学等不同数据库中。它们的 API、查询字段、返回结构甚至身份认证方式都可能不同。","raw":"普通 Agent 可以搜索网页，但科研信息分散在文献、蛋白质、基因组、化学、通路和组学等不同数据库中。它们的 API、查询字段、返回结构甚至身份认证方式都可能不同。"},{"id":"p20","kind":"paragraph","text":"那如果直接把上述数据库每个都单独包装成一个 tool 暴露给模型，会发生什么呢？随着数据源增加，模型看到的工具说明会越来越多。它不仅要理解用户的问题，还要先判断应该使用 PubMed、UniProt 还是其他数据库，并记住每个 API 完全不同的参数。能力看起来丰富了，选择工具和填写参数的错误率也会一起上升。","raw":"那如果直接把上述数据库每个都单独包装成一个 tool 暴露给模型，会发生什么呢？随着数据源增加，模型看到的工具说明会越来越多。它不仅要理解用户的问题，还要先判断应该使用 PubMed、UniProt 还是其他数据库，并记住每个 API 完全不同的参数。能力看起来丰富了，选择工具和填写参数的错误率也会一起上升。"},{"id":"p21","kind":"paragraph","text":"OpenScience 的做法是在中间增加了 Connector 层。不同领域的数据连接器统一注册到 ConnectorRegistry，并被收敛成 search 与 fetch 两类基本动作。上层再通过 science_search 等少量工具把统一能力交给 Agent：","raw":"OpenScience 的做法是在中间增加了 Connector 层。不同领域的数据连接器统一注册到 ConnectorRegistry，并被收敛成 search 与 fetch 两类基本动作。上层再通过 `science_search` 等少量工具把统一能力交给 Agent："},{"id":"p22","kind":"code","text":"Agent → science_search → Connector Registry → 文献 / 蛋白质 / 基因组 / 化学 / 通路 / 组学数据库","raw":"```text\nAgent → science_search → Connector Registry → 文献 / 蛋白质 / 基因组 / 化学 / 通路 / 组学数据库\n```"},{"id":"p23","kind":"paragraph","text":"Connector 隔离了外部 API 的变化，新增数据库时不需要修改 Agent 主循环。更重要的是，数据库数量可以继续增长，但模型面对的动作空间仍然是相对稳定的。","raw":"Connector 隔离了外部 API 的变化，新增数据库时不需要修改 Agent 主循环。更重要的是，数据库数量可以继续增长，但模型面对的动作空间仍然是相对稳定的。"},{"id":"p24","kind":"paragraph","text":"专业数据源并不是给 Agent 多装几个搜索插件，而是在模型与科研世界之间建立一层稳定的数据平面。","raw":"专业数据源并不是给 Agent 多装几个搜索插件，而是在模型与科研世界之间建立一层稳定的数据平面。"},{"id":"p25","kind":"heading","text":"2、持续 Kernel，把一次调用变成连续实验","raw":"### 2、持续 Kernel，把一次调用变成连续实验"},{"id":"p26","kind":"paragraph","text":"普通工具调用往往是无状态的。Agent 执行一条命令，得到结果，这次调用就结束了。","raw":"普通工具调用往往是无状态的。Agent 执行一条命令，得到结果，这次调用就结束了。"},{"id":"p27","kind":"paragraph","text":"但科研分析很少能在一步内完成：先加载数据，再清洗缺失值；接着计算统计指标、画图；看到异常后，又要修改参数重新运行。","raw":"但科研分析很少能在一步内完成：先加载数据，再清洗缺失值；接着计算统计指标、画图；看到异常后，又要修改参数重新运行。"},{"id":"p28","kind":"paragraph","text":"假如每次执行一次 Python 都启动一个全新的进程，上一轮创建的数据框、变量和依赖状态会全部消失。Agent 虽然能在对话记录里「记得」刚刚做过什么，却无法继续操作刚才的计算现场。","raw":"假如每次执行一次 Python 都启动一个全新的进程，上一轮创建的数据框、变量和依赖状态会全部消失。Agent 虽然能在对话记录里「记得」刚刚做过什么，却无法继续操作刚才的计算现场。"},{"id":"p29","kind":"paragraph","text":"这也是一个很容易被忽略的概念区分：对话记忆不等于计算状态。","raw":"这也是一个很容易被忽略的概念区分：对话记忆不等于计算状态。"},{"id":"p30","kind":"paragraph","text":"真正重要的信息不是代码本身，而是「共享的 Live Kernel」和正在远程运行的实验，把本地 Notebook、远程集群任务和运行状态放在同一个界面里。","raw":"真正重要的信息不是代码本身，而是「共享的 Live Kernel」和正在远程运行的实验，把本地 Notebook、远程集群任务和运行状态放在同一个界面里。"},{"id":"p31","kind":"paragraph","text":"在技术实现上，OpenScience 的做法是，NotebookTool 和 RKernelTool 会按照 sessionID 复用长时间运行的 Python 或 R 进程。工具不只捕获最终文本，还会收集 stdout、stderr、计算结果和生成的图片。","raw":"在技术实现上，OpenScience 的做法是，NotebookTool 和 RKernelTool 会按照 sessionID 复用长时间运行的 Python 或 R 进程。工具不只捕获最终文本，还会收集 stdout、stderr、计算结果和生成的图片。"},{"id":"p32","kind":"paragraph","text":"这样，同一个 Session 中的多次工具调用就不再是彼此孤立的函数执行，而更像在同一个 Notebook 里不断增加 Cell。这让用户获得了实验连续性：Session 不再只关联聊天消息，还成为 Kernel 的运行作用域。","raw":"这样，同一个 Session 中的多次工具调用就不再是彼此孤立的函数执行，而更像在同一个 Notebook 里不断增加 Cell。这让用户获得了实验连续性：Session 不再只关联聊天消息，还成为 Kernel 的运行作用域。"},{"id":"p33","kind":"paragraph","text":"不过这里要注意，运行中的 Kernel 不等于永久保存的实验环境。要实现几个月后仍能一键复现，还需要保存代码版本、依赖、随机种子、输入数据和计算环境。","raw":"不过这里要注意，运行中的 Kernel 不等于永久保存的实验环境。要实现几个月后仍能一键复现，还需要保存代码版本、依赖、随机种子、输入数据和计算环境。"},{"id":"p34","kind":"heading","text":"3、结构化 Artifact，让回答变成专业对象","raw":"### 3、结构化 Artifact，让回答变成专业对象"},{"id":"p35","kind":"paragraph","text":"我们平时使用 Codex 或 Cowork，最熟悉的交付方式是 Markdown 文件。但科研结果天然不只有文字。","raw":"我们平时使用 Codex 或 Cowork，最熟悉的交付方式是 Markdown 文件。但科研结果天然不只有文字。"},{"id":"p36","kind":"paragraph","text":"一个蛋白质结构、一条基因组轨道、一组多序列比对、一张实验图、一份 PDF 和一段 LaTeX，如果把这些原始数据直接扔进聊天框，用户看到的只会是一大段难以理解的数字或 JSON。","raw":"一个蛋白质结构、一条基因组轨道、一组多序列比对、一张实验图、一份 PDF 和一段 LaTeX，如果把这些原始数据直接扔进聊天框，用户看到的只会是一大段难以理解的数字或 JSON。"},{"id":"p37","kind":"paragraph","text":"为了解决这个问题，OpenScience 会先给工具结果贴上一个「类型标签」：这是蛋白质结构、这是化学分子、这是一条基因组轨道、这是一份 PDF、这是一张实验图。","raw":"为了解决这个问题，OpenScience 会先给工具结果贴上一个「类型标签」：这是蛋白质结构、这是化学分子、这是一条基因组轨道、这是一份 PDF、这是一张实验图。"},{"id":"p38","kind":"paragraph","text":"前端看到标签后，就会自动选择合适的专业查看器：蛋白质结构用可旋转的 3D 视图展示，化学分子用分子结构图展示，基因组数据用轨道图展示。","raw":"前端看到标签后，就会自动选择合适的专业查看器：蛋白质结构用可旋转的 3D 视图展示，化学分子用分子结构图展示，基因组数据用轨道图展示。"},{"id":"p39","kind":"paragraph","text":"整个过程可以理解成一个智能分拣系统：","raw":"整个过程可以理解成一个智能分拣系统："},{"id":"p40","kind":"code","text":"工具获得科研数据 → 标记「这是什么类型」 → 前端选择对应的查看器 → 展示成图表、结构、轨道或文档","raw":"```text\n工具获得科研数据 → 标记「这是什么类型」 → 前端选择对应的查看器 → 展示成图表、结构、轨道或文档\n```"},{"id":"p41","kind":"paragraph","text":"例如，一个蛋白质搜索工具拿到了结构坐标。对于模型来说，这些坐标已经是结果；但对于用户来说，一串数字几乎无法使用。OpenScience 会把它标记为「蛋白质结构」，前端收到后，再把这些坐标交给 3D 蛋白质查看器。于是用户最终看到的不是一堆原始数据，而是一个可以旋转、缩放和观察的蛋白质模型。","raw":"例如，一个蛋白质搜索工具拿到了结构坐标。对于模型来说，这些坐标已经是结果；但对于用户来说，一串数字几乎无法使用。OpenScience 会把它标记为「蛋白质结构」，前端收到后，再把这些坐标交给 3D 蛋白质查看器。于是用户最终看到的不是一堆原始数据，而是一个可以旋转、缩放和观察的蛋白质模型。"},{"id":"p42","kind":"paragraph","text":"这就是 Artifact 的作用：它像一种约定好的科研结果包装格式，告诉前端「这份数据是什么，以及应该怎样展示」。","raw":"这就是 Artifact 的作用：它像一种约定好的科研结果包装格式，告诉前端「这份数据是什么，以及应该怎样展示」。"},{"id":"p43","kind":"paragraph","text":"因此，Artifact 并不只是让界面更漂亮。它真正解决的是：如何把 Agent 得到的原始数据，转化为科研人员能够理解和继续使用的专业成果。","raw":"因此，Artifact 并不只是让界面更漂亮。它真正解决的是：如何把 Agent 得到的原始数据，转化为科研人员能够理解和继续使用的专业成果。"},{"id":"p44","kind":"heading","text":"4、Session，把聊天记录升级为研究空间","raw":"### 4、Session，把聊天记录升级为研究空间"},{"id":"p45","kind":"paragraph","text":"普通 Chatbot 的最小单位是一条消息：用户提问，模型回答。但科研工作的最小单位更像一个持续演化的项目。","raw":"普通 Chatbot 的最小单位是一条消息：用户提问，模型回答。但科研工作的最小单位更像一个持续演化的项目。"},{"id":"p46","kind":"paragraph","text":"因此，Claude Science 也强调「在一个环境中完成研究的所有阶段」，而支撑这件事的核心对象不是某一次 Prompt，而是 Session。","raw":"因此，Claude Science 也强调「在一个环境中完成研究的所有阶段」，而支撑这件事的核心对象不是某一次 Prompt，而是 Session。"},{"id":"p47","kind":"paragraph","text":"普通聊天产品里的 Session，主要用于保存「用户说过什么、模型回答了什么」。但在 OpenScience 中，一个 Session 同时连接了更多状态：","raw":"普通聊天产品里的 Session，主要用于保存「用户说过什么、模型回答了什么」。但在 OpenScience 中，一个 Session 同时连接了更多状态："},{"id":"p48","kind":"list","text":"- 与 sessionID 绑定的 Python / R Kernel\n- Todo、权限请求、问题确认和其他任务状态\n- User Message 与 Assistant Message\n- 文本、工具、文件和 Artifact 等不同 Part\n- Agent、模型以及本轮可用的工具\n- 工具执行中的 running、completed 与 error","raw":"- 与 sessionID 绑定的 Python / R Kernel\n- Todo、权限请求、问题确认和其他任务状态\n- User Message 与 Assistant Message\n- 文本、工具、文件和 Artifact 等不同 Part\n- Agent、模型以及本轮可用的工具\n- 工具执行中的 running、completed 与 error"},{"id":"p49","kind":"paragraph","text":"它不只是一段对话历史，更像是一个研究任务的容器。用户在这里提出假设、查找资料、运行计算、查看图表，再根据结果继续追问。Message 记录交流，Part 记录每一步产生的内容和状态，Kernel 保留计算现场，Artifact 承载专业结果。","raw":"它不只是一段对话历史，更像是一个研究任务的容器。用户在这里提出假设、查找资料、运行计算、查看图表，再根据结果继续追问。Message 记录交流，Part 记录每一步产生的内容和状态，Kernel 保留计算现场，Artifact 承载专业结果。"},{"id":"p50","kind":"paragraph","text":"这些对象被同一个 Session 组织起来后，产品的基本单位也发生了变化：Chatbot 的基本单位是一问一答，科研工作台的基本单位是一个持续演化的研究任务。","raw":"这些对象被同一个 Session 组织起来后，产品的基本单位也发生了变化：Chatbot 的基本单位是一问一答，科研工作台的基本单位是一个持续演化的研究任务。"},{"id":"p51","kind":"paragraph","text":"这是非常重要的产品转变。因为科研用户真正需要保存的，通常不是一句最终答案，而是问题如何被拆解、数据从哪里来、运行过什么计算、产生了哪些中间结果，以及下一步还能从哪里继续。","raw":"这是非常重要的产品转变。因为科研用户真正需要保存的，通常不是一句最终答案，而是问题如何被拆解、数据从哪里来、运行过什么计算、产生了哪些中间结果，以及下一步还能从哪里继续。"},{"id":"p52","kind":"heading","text":"5、让用户看见过程，而不只是等待结果","raw":"### 5、让用户看见过程，而不只是等待结果"},{"id":"p53","kind":"paragraph","text":"科研任务通常比普通问答更慢，也更容易失败。一次任务可能持续几分钟、几小时，甚至几天；数据库可能没有返回，代码可能报错，远程任务也可能失败。","raw":"科研任务通常比普通问答更慢，也更容易失败。一次任务可能持续几分钟、几小时，甚至几天；数据库可能没有返回，代码可能报错，远程任务也可能失败。"},{"id":"p54","kind":"paragraph","text":"如果界面只显示「正在思考」，用户根本不知道系统是正在查文献、运行代码，还是已经卡死了。","raw":"如果界面只显示「正在思考」，用户根本不知道系统是正在查文献、运行代码，还是已经卡死了。"},{"id":"p55","kind":"paragraph","text":"OpenScience 把一轮任务拆成文字、工具、文件、Artifact 等不同状态，并通过事件流实时推到前端。这样用户就能看到工具开始运行、任务完成、错误出现以及结果逐步生成。","raw":"OpenScience 把一轮任务拆成文字、工具、文件、Artifact 等不同状态，并通过事件流实时推到前端。这样用户就能看到工具开始运行、任务完成、错误出现以及结果逐步生成。"},{"id":"p56","kind":"paragraph","text":"Claude Science 也在强化这种过程可见：运行了多少次搜索、调用了哪些子 Agent、远程实验还剩多久、Reviewer 发现了什么、图表对应哪段代码，都不再藏在聊天框背后。","raw":"Claude Science 也在强化这种过程可见：运行了多少次搜索、调用了哪些子 Agent、远程实验还剩多久、Reviewer 发现了什么、图表对应哪段代码，都不再藏在聊天框背后。"},{"id":"p57","kind":"paragraph","text":"对于普通问答，用户可能只关心最后一句话；但对于科研工作，过程本身就是信任的一部分。","raw":"对于普通问答，用户可能只关心最后一句话；但对于科研工作，过程本身就是信任的一部分。"},{"id":"p58","kind":"heading","text":"专业 Agent：把五层科研 Harness 组合起来","raw":"## 专业 Agent：把五层科研 Harness 组合起来"},{"id":"p59","kind":"paragraph","text":"有了数据源、Kernel、Artifact、Session 和过程可见，还需要有人根据任务选择这些能力。","raw":"有了数据源、Kernel、Artifact、Session 和过程可见，还需要有人根据任务选择这些能力。"},{"id":"p60","kind":"paragraph","text":"OpenScience 定义了 research、biology、physics、ml 等不同 Agent。它们的差异不只是一段角色提示词，还体现在默认行为、权限以及可见工具上。ToolRegistry 会根据 Agent 过滤工具，减少无关能力进入上下文。","raw":"OpenScience 定义了 research、biology、physics、ml 等不同 Agent。它们的差异不只是一段角色提示词，还体现在默认行为、权限以及可见工具上。ToolRegistry 会根据 Agent 过滤工具，减少无关能力进入上下文。"},{"id":"p61","kind":"paragraph","text":"因此，专业 Agent 更像一份能力组合方案：","raw":"因此，专业 Agent 更像一份能力组合方案："},{"id":"p62","kind":"code","text":"专业 Agent = 领域提示词 + 专业数据源 + 可用工具集合 + 权限边界 + 结果表达方式","raw":"```text\n专业 Agent = 领域提示词 + 专业数据源 + 可用工具集合 + 权限边界 + 结果表达方式\n```"},{"id":"p63","kind":"paragraph","text":"这比简单地告诉模型「你是一名生物学家」更接近真正的垂直产品：Prompt 负责引导判断，Harness 则负责确保它能接触正确的数据、使用合适的仪器，并以用户熟悉的方式交付结果。","raw":"这比简单地告诉模型「你是一名生物学家」更接近真正的垂直产品：Prompt 负责引导判断，Harness 则负责确保它能接触正确的数据、使用合适的仪器，并以用户熟悉的方式交付结果。"},{"id":"p64","kind":"heading","text":"一次科研任务如何穿过这套 Harness","raw":"### 一次科研任务如何穿过这套 Harness"},{"id":"p65","kind":"paragraph","text":"假设用户提出一个蛋白质相关的研究问题：某个蛋白质有什么功能？它的结构和相关研究证据是什么？","raw":"假设用户提出一个蛋白质相关的研究问题：某个蛋白质有什么功能？它的结构和相关研究证据是什么？"},{"id":"p66","kind":"paragraph","text":"普通 Chatbot 可能根据已有知识生成一段文字回答。但在 OpenScience 中，这个问题会逐步变成一项可以继续推进的研究任务。","raw":"普通 Chatbot 可能根据已有知识生成一段文字回答。但在 OpenScience 中，这个问题会逐步变成一项可以继续推进的研究任务。"},{"id":"p67","kind":"paragraph","text":"首先，Agent 会根据问题查找专业蛋白质数据库，并对结果进行整理和分析：汇总不同论文中的关键结论、整理蛋白质的功能与结构和相关实验信息、使用 Python 清洗或比较数据、根据分析结果生成表格与统计图或结构视图。","raw":"首先，Agent 会根据问题查找专业蛋白质数据库，并对结果进行整理和分析：汇总不同论文中的关键结论、整理蛋白质的功能与结构和相关实验信息、使用 Python 清洗或比较数据、根据分析结果生成表格与统计图或结构视图。"},{"id":"p68","kind":"paragraph","text":"这些分析并不是每次都从零开始。同一个研究任务中的数据、变量和计算结果可以被后续步骤继续使用。","raw":"这些分析并不是每次都从零开始。同一个研究任务中的数据、变量和计算结果可以被后续步骤继续使用。"},{"id":"p69","kind":"paragraph","text":"如果用户接着问「能不能只比较最近五年的研究？」或者「把这个蛋白质的三维结构展示出来」，Agent 可以直接基于前面的资料和计算继续分析，并且根据结果类型，工作台分别展示带来源的文献总结、整理后的数据表格、Python 生成的统计图、可以旋转查看的蛋白质三维结构。","raw":"如果用户接着问「能不能只比较最近五年的研究？」或者「把这个蛋白质的三维结构展示出来」，Agent 可以直接基于前面的资料和计算继续分析，并且根据结果类型，工作台分别展示带来源的文献总结、整理后的数据表格、Python 生成的统计图、可以旋转查看的蛋白质三维结构。"},{"id":"p70","kind":"paragraph","text":"在整个过程中，界面还会告诉用户系统当前正在搜索资料、运行分析、生成图表，还是遇到了错误。用户不需要面对一个长时间没有反应的聊天框，而是可以看见研究任务一步步展开。","raw":"在整个过程中，界面还会告诉用户系统当前正在搜索资料、运行分析、生成图表，还是遇到了错误。用户不需要面对一个长时间没有反应的聊天框，而是可以看见研究任务一步步展开。"},{"id":"p71","kind":"paragraph","text":"这时，产品的价值就不再是「替用户回答一个蛋白质问题」，而是为用户保留资料、分析、结果和修改过程，让研究能够持续向前推进。","raw":"这时，产品的价值就不再是「替用户回答一个蛋白质问题」，而是为用户保留资料、分析、结果和修改过程，让研究能够持续向前推进。"},{"id":"p72","kind":"paragraph","text":"普通 Work Agent 更像是在完成一条指令；而科研工作台则是在陪用户推进一个不断演化的研究项目。","raw":"普通 Work Agent 更像是在完成一条指令；而科研工作台则是在陪用户推进一个不断演化的研究项目。"},{"id":"p73","kind":"paragraph","text":"到这里，OpenScience 才真正从一个会调用科研工具的 Agent，走向一张可以持续工作的科研工作台。","raw":"到这里，OpenScience 才真正从一个会调用科研工具的 Agent，走向一张可以持续工作的科研工作台。"},{"id":"p74","kind":"heading","text":"最后","raw":"## 最后"},{"id":"p75","kind":"paragraph","text":"垂直 Agent 的「垂直」，并不主要来自 Prompt，而来自 Harness。可以把 OpenScience 的产品思路压缩成一个公式：","raw":"垂直 Agent 的「垂直」，并不主要来自 Prompt，而来自 Harness。可以把 OpenScience 的产品思路压缩成一个公式："},{"id":"p76","kind":"code","text":"科研工作台 = 通用 Agent Loop + 专业数据平面 + 持续计算环境\n           + Artifact 协议 + 研究型 Session + 可观察反馈","raw":"```text\n科研工作台 = 通用 Agent Loop + 专业数据平面 + 持续计算环境\n           + Artifact 协议 + 研究型 Session + 可观察反馈\n```"},{"id":"p77","kind":"paragraph","text":"这里模型未必因此变得更聪明，但它开始能够以更接近科研工作的方式使用自己的聪明。","raw":"这里模型未必因此变得更聪明，但它开始能够以更接近科研工作的方式使用自己的聪明。"},{"id":"p78","kind":"paragraph","text":"这也是对 Claude Science 的产品定义：科学家缺少的不是另一个更会聊天的模型，而是一套能够接住完整研究过程的工作环境。","raw":"这也是对 Claude Science 的产品定义：科学家缺少的不是另一个更会聊天的模型，而是一套能够接住完整研究过程的工作环境。"},{"id":"p79","kind":"paragraph","text":"前面的 Loop 让 Agent 能够行动；而后面的 Harness，才让它真正进入了科学家的日常。","raw":"前面的 Loop 让 Agent 能够行动；而后面的 Harness，才让它真正进入了科学家的日常。"}],"authored_claims":[{"id":"vertical-comes-from-harness","text":"垂直 Agent 的「垂直」并不主要来自 Prompt，而来自围绕专业工作流设计的 Harness。只换一段系统提示词，只能让通用 Agent 说话像科研人员。","stance":"judgment","confidence":"high","supersedes":null,"note":null,"formed_at":"2026-07-13"},{"id":"connector-keeps-action-space-stable","text":"把每个数据库单独包成一个 tool，模型的选择错误率会随数据源数量一起上升。加一层 Connector 收敛成 search 和 fetch，数据库可以继续增长而动作空间保持稳定。","stance":"judgment","confidence":null,"supersedes":null,"note":null,"formed_at":"2026-07-13"},{"id":"conversation-memory-is-not-compute-state","text":"对话记忆不等于计算状态。Agent 能在对话记录里「记得」刚做过什么，却无法继续操作刚才的计算现场——除非 Kernel 按 session 复用。","stance":"judgment","confidence":"high","supersedes":null,"note":"2026-10-27 复核说明：“除非”指文中 OpenScience 采用的做法；按 session 复用 Kernel 是维持连续计算的一种方式，不是唯一条件。原话不改。","formed_at":"2026-07-13"},{"id":"artifact-is-a-packaging-protocol","text":"Artifact 不只是让界面更漂亮。它是一种约定好的结果包装格式，告诉前端「这份数据是什么、应该怎样展示」，把原始坐标变成可旋转的蛋白质模型。","stance":"judgment","confidence":null,"supersedes":null,"note":null,"formed_at":"2026-07-13"},{"id":"process-visibility-builds-trust","text":"对于普通问答用户可能只关心最后一句话，但对于科研工作，过程本身就是信任的一部分。","stance":"judgment","confidence":null,"supersedes":null,"note":null,"formed_at":"2026-07-13"}],"claim_ids":["vertical-comes-from-harness","connector-keeps-action-space-stable","conversation-memory-is-not-compute-state","artifact-is-a-packaging-protocol","process-visibility-builds-trust"],"revision":"4f190cf8ffa8f88df57d06859f7499299e13fc229a1ae3e1e60a10af22964e1f"}