ClawCures:基于规划与执行分离的AI药物研发智能体平台实战
1. 项目概述:一个面向药物发现的智能体协同作战平台
最近在折腾一个挺有意思的开源项目,叫 ClawCures。简单来说,它不是一个直接“发现药物”的AI,而是一个药物研发战役的“总指挥”和“调度中心”。它的核心设计理念是把“战略规划”和“战术执行”彻底分开,让擅长宏观思考的AI(OpenClaw)去制定复杂的、多步骤的研究计划,然后由另一个擅长精准操作、懂得科学工具的AI(通过refua-mcp)去一丝不苟地执行这些计划,比如搜索文献、分析化合物性质、评估靶点。
这就像在药物研发这个复杂战场上,你有了一个“参谋长联席会议”和一个“特种作战部队”。参谋长(OpenClaw)根据“攻克所有疾病”或“针对特定癌症”这样的宏大目标,制定出一份详尽的作战方案(JSON格式的计划)。这份方案里会明确:第一步,我们需要派侦察兵(web_search)去搜集关于KRAS靶点的最新论文;第二步,让生化专家(某个ADMET预测工具)分析我们手头几个候选化合物的安全性;第三步,综合评估,选出最有希望的三个分子进入下一轮……而特种部队(refua-mcp)则严格按这份计划书,调用一个个具体的“科学工具”去完成任务,并把每一步的结果反馈回来。
这个项目特别适合两类朋友:一是AI应用开发者,你想看看如何将大语言模型的规划能力与专业领域的工具链深度结合,构建一个能真正跑起来的、多智能体协作系统;二是生物信息学或计算化学领域的研究者,你可能对AI辅助药物发现感兴趣,但厌倦了那些只能生成分子结构却无法融入实际工作流的“玩具”,ClawCures提供了一个从目标设定、证据搜集、方案规划到性质评估的完整自动化探索框架。它不承诺奇迹,但提供了一套可重复、可审计、可迭代的“方法论机器”。
2. 核心架构解析:规划与执行分离的设计哲学
2.1 为什么要把“想”和“做”分开?
在尝试构建复杂AI工作流时,我们常遇到一个困境:一个模型既要理解高层次的战略目标(比如“找到针对老年痴呆症的新疗法”),又要精通调用各种专业API的细节(比如如何格式化请求给某个蛋白质结构预测服务)。这往往导致模型“想得多,做得糙”,或者陷入细节而迷失方向。
ClawCures的架构选择了一条清晰的路:职责分离。
- 规划器 (Planner - OpenClaw):它的核心接口是
/v1/responses。你给它一个任务目标(Objective)和一些背景证据,它返回一个结构化的JSON计划。这个计划定义了要达成目标,需要按什么顺序、调用哪些工具、输入什么参数。规划器不需要知道工具具体怎么调用,它只关心逻辑和策略。 - 执行器 (Executor - refua-mcp):这是一个实现了模型上下文协议(MCP)的服务端。MCP可以理解为一套标准化的“工具菜单”协议。refua-mcp提供了这个菜单,里面包含了各种药物研发相关的工具函数,比如
calculate_admet、search_pubmed,以及项目内置的web_search和web_fetch。执行器只负责一件事:收到规划器发来的“工具调用指令”(tool call),就找到对应工具,传入参数,运行,并返回结果。
这种分离带来了几个实实在在的好处:
- 稳定性提升:规划器可以专注于逻辑推理,使用更强大的模型(甚至云端模型),而不必担心执行过程中的网络超时或API变动。执行器则可以做得非常轻量和鲁棒,专注于工具调用的正确性和安全性。
- 灵活性增强:你可以单独升级规划逻辑(换用不同的OpenClaw模型或提示词),或者单独扩展执行能力(在refua-mcp里增加新的科学计算工具),两者互不影响。
- 可解释性与可审计性:整个战役的“蓝图”(JSON计划)被完整保存下来。你可以审查AI为什么要先做A后做B,也可以在任何步骤重现当时的决策过程。这对于严谨的科学研究至关重要。
2.2 关键组件深度拆解
OpenClaw Gateway:这是整个系统的“大脑接入点”。它不是ClawCures的一部分,而是一个需要你独立部署或连接的服务。它负责管理AI模型,并提供标准的API(/v1/responses)来与这些模型对话。ClawCures通过环境变量配置(如REFUA_CAMPAIGN_OPENCLAW_BASE_URL)与它通信。你可以把它想象成一个AI模型调度中心。
refua-mcp:这是系统的“手和眼睛”。MCP服务器暴露出一个工具列表。ClawCures在初始化时会通过list-tools命令获取这个列表,并在规划时只能使用这些“允许使用”的工具。这构成了一个安全沙箱,防止规划器天马行空地要求调用不存在的或危险的工具。内置的web_search(通常对接Brave Search API)和web_fetch(用于抓取网页内容)是证据收集的关键,让AI的研究计划能基于实时、外部的信息,而不仅仅是训练数据中的知识。
ClawCures Core:这是项目的核心协调引擎。它像一位“战役指挥官”,负责以下流程:
- 接收任务:从命令行或API获取一个目标描述。
- 请求规划:将目标、历史记忆(如果有)和证据文档打包,发送给OpenClaw Gateway请求生成一个计划。
- 解析与验证计划:检查OpenClaw返回的JSON计划是否符合格式要求,工具名是否在允许列表中,参数是否合理。项目内置了自动修复功能,对于本地小模型生成的不规范JSON,会尝试修复。
- 调度执行:将验证后的计划中的工具调用,逐个发送给refua-mcp执行。
- 收集与整合结果:将每个工具的执行结果收集起来,形成本轮战役的“战报”。
- 循环与记忆:在默认的连续循环模式下,它会将本轮的关键发现、失败教训压缩成摘要,作为下一轮规划的历史输入,从而实现跨周期的“记忆”和持续探索。
注意:
web_fetch工具默认禁止访问localhost和私有IP地址,这是重要的安全设计,防止AI智能体被诱导去攻击内部网络。只有在明确设置CLAWCURES_ALLOW_PRIVATE_WEB_FETCH=true时才会放行,生产环境务必谨慎。
3. 从零开始的实战部署与配置
3.1 环境准备与项目初始化
首先,确保你的系统满足基础要求。项目明确要求Python版本在3.11到3.13之间,不支持3.14及以上。这是因为其核心依赖refua-mcp可能尚未适配更新的Python版本。
# 1. 克隆项目代码 git clone https://github.com/agentcures/ClawCures.git cd ClawCures # 2. 创建并激活虚拟环境(强烈推荐,避免污染系统环境) python3.13 -m venv .venv source .venv/bin/activate # Linux/macOS # 如果是Windows,使用:.venv\Scripts\activate # 3. 以“可编辑”模式安装项目及其依赖 pip install -e .使用-e(editable)模式安装的好处是,你对项目源码的任何修改都会立即生效,无需重新安装,非常适合开发调试。
安装完成后,可以快速验证一下核心命令是否可用:
ClawCures --help ClawCures list-tools # 查看当前可用的工具列表,这取决于refua-mcp的配置3.2 OpenClaw Gateway的连接配置
这是最关键也最容易出错的一步。ClawCures本身不包含AI模型,它需要连接到一个正在运行的OpenClaw Gateway服务。
假设一:你使用官方提供的OpenClaw Gateway服务(或自建实例)假设你的Gateway运行在http://my-openclaw-server:18789。
# 设置环境变量(临时,仅当前终端有效) export REFUA_CAMPAIGN_OPENCLAW_BASE_URL="http://my-openclaw-server:18789" export REFUA_CAMPAIGN_OPENCLAW_TOKEN="your_bearer_token_here" # 替换为你的真实TokenREFUA_CAMPAIGN_OPENCLAW_TOKEN是首选的认证方式。如果Gateway配置了密码模式,则可以使用OPENCLAW_GATEWAY_PASSWORD环境变量。
假设二:你在本地使用Docker快速启动一个OpenClaw Gateway(用于测试)可以参考OpenClaw官方文档,一个简单的启动命令可能如下(请务必查阅最新文档获取准确镜像和配置):
docker run -p 18789:8000 \ -e OPENCLAW_GATEWAY_TOKEN="test_token" \ openclaw/gateway:latest启动后,ClawCures的配置就简化为:
export REFUA_CAMPAIGN_OPENCLAW_BASE_URL="http://127.0.0.1:18789" export OPENCLAW_GATEWAY_TOKEN="test_token"验证连接: 配置好环境变量后,运行一个最简单的离线测试命令,它不会真正调用OpenClaw,但会检查内部逻辑:
ClawCures run --objective "Test connection" --dry-run如果配置错误,比如URL不对或Token无效,在运行真实任务时你会看到明确的连接错误或401未授权错误。
3.3 执行你的第一个“药物研发战役”
一切就绪后,启动一次最简单的探索:
ClawCures run --max-cycles 1这个命令会做以下几件事:
- 使用默认的战役目标(“为所有疾病寻找疗法...”)。
- 连接你配置的OpenClaw Gateway,请求生成第一个研究计划。
- 解析并执行该计划中的所有工具调用(可能是先
web_search某个高负担疾病,再调用ADMET预测工具等)。 - 执行完一个完整的“规划-执行”周期后,将结果输出到终端(默认)或你指定的JSON文件。
你会看到控制台输出详细的日志,包括规划器生成的原始JSON计划、每个工具调用的请求和响应。最终,它会生成一个结构化的结果文件,其中最重要的部分是promising_cures(有潜力的疗法列表)和interesting_targets(有趣的靶点假设)。
理解循环模式: 默认情况下,ClawCures run(不加--max-cycles)会进入无限循环模式。这意味着在一个周期结束后,它会自动将本轮的关键发现总结成一段文本,作为下一轮规划的“历史记忆”和输入的一部分,然后开启新一轮的规划与执行。这种设计是为了模拟长期、持续的探索研究。要手动停止,按Ctrl+C。
如果你只想观察单次循环,务必加上--max-cycles 1。
4. 高级功能与定制化战役
4.1 自主规划-评审循环(Planner/Critic Loop)
单纯的规划-执行可能不够可靠。ClawCures提供了run-autonomous命令,引入了一个“评审员”(Critic)角色。在这个模式下,流程变为:
- 规划器生成初始计划。
- 评审员对这个计划进行审查,评估其科学性、可行性、是否符合伦理或预设政策。
- 根据评审意见,规划器可能修改计划。
- 经过多轮评审-修改后,最终计划才被送去执行。
这相当于为AI研究计划增加了“同行评议”环节。你可以通过--agent-model-map-json参数为“评审员”指定一个不同的、可能更谨慎的AI模型。
ClawCures run-autonomous \ --objective "寻找针对非小细胞肺癌EGFR L858R突变体的选择性抑制剂" \ --agent-model-map-json '{"planner":"openclaw:main", "critic":"openclaw:conservative-critic"}' \ --max-cycles 14.2 基于证据的规划(Evidence-Grounded Planning)
让AI的规划基于具体的文献证据,而不是泛泛的知识,能极大提升其建议的质量。--evidence-file参数允许你注入本地文档。
- 首先,将你的研究笔记、综述文章或相关论文摘要整理成一个Markdown或文本文件,例如
my_research_notes.md。 - 运行命令时指定该文件:
ClawCures run \ --objective "基于已有研究,设计克服奥希替尼耐药性的新化合物" \ --evidence-file ./my_research_notes.md \ --max-cycles 1OpenClaw在生成计划时,会将这份证据文件的内容作为上下文的一部分,从而使它的规划建议更贴近你的具体研究背景。
4.3 原生工具循环与定向探索
--native-tool-loop是一个强大的模式。它绕过了中间JSON计划的生成与解析,让OpenClaw模型直接以“函数调用”的方式,逐个工具地进行决策和执行。这更接近人类研究员“边想边做”的交互模式,灵活性更高。
结合--native-discovery-bootstrap-rounds和--auto-web-fetch,可以构建一个强力的初始信息搜集阶段:
ClawCures run \ --native-tool-loop \ --native-discovery-bootstrap-rounds 3 \ --auto-web-fetch \ --session-key "alzheimers_research_v1" \ --store-responses \ --objective "系统性探索阿尔茨海默病β淀粉样蛋白清除疗法的最新临床前研究"--native-discovery-bootstrap-rounds 3:强制前3轮交互只允许使用web_search和web_fetch工具。这相当于命令AI:“在开始设计化合物之前,先花点时间好好查查最新的资料。”--auto-web-fetch:当web_search返回一个有希望的URL时,自动触发web_fetch去抓取该页面的详细内容,丰富证据。--session-key和--store-responses:这两个参数配合,能确保OpenClaw Gateway保存本次战役的所有对话历史。下次你用相同的session-key启动时,AI能回忆起之前的搜索发现和讨论,实现真正的连续对话和记忆。
4.4 项目组合管理与优先级排序
对于药物研发机构,资源总是有限的。rank-portfolio命令提供了一个决策支持功能。你需要准备一个JSON输入文件,描述多个潜在的疾病研发项目。
// portfolio_input.json [ { "disease": "特发性肺纤维化", "burden_metric": 120000, "existing_therapies": ["尼达尼布", "吡非尼酮"], "novel_target_hypothesis": "LOXL2抑制剂", "feasibility_score": 0.6 }, { "disease": "肌萎缩侧索硬化症", "burden_metric": 80000, "existing_therapies": ["利鲁唑", "依达拉奉"], "novel_target_hypothesis": "SOD1基因沉默", "feasibility_score": 0.4 } ]运行排序命令:
ClawCures rank-portfolio --input portfolio_input.jsonAI模型会基于疾病负担、未满足的临床需求、靶点新颖性、可行性等多个维度(这些维度可以由你的提示词定义),对这些项目进行排序,输出一个优先级列表,辅助进行资源分配决策。
5. 输出结果解读与实战技巧
5.1 理解核心输出:promising_cures与interesting_targets
运行一次战役后,最重要的产出是JSON结果文件中的两个数组。
promising_cures:这是一个经过排序的候选疗法列表。每个候选疗法对象通常包含:
name:化合物或疗法名称。mechanism:作用机制描述。metrics:结合了来自工具输出的各种信号分数,如预测的结合亲和力(affinity)、效能(potency)等。admet:这是药物代谢动力学/毒理学属性的核心部分。admet.key_metrics:汇总性评分,如admet_score(综合ADMET分数)、safety_score(安全性分数)。这些分数是模型根据下方具体属性计算或评估得出的。admet.properties:一个详细的键值对地图,包含了从工具调用中提取的所有具体ADMET属性预测值,例如:caco2_permeability(预测的肠上皮细胞渗透性,单位 nm/s)vdss(稳态分布容积,单位 L/kg)half_life(半衰期,单位 h)clearance(清除率)p_glycoprotein_inhibition(P糖蛋白抑制可能性)herg_inhibition(hERG通道抑制风险,与心脏毒性相关)hepatotoxicity(肝毒性风险)
assessment:一段文本总结,概括该候选疗法的优势、风险和下一步建议。
interesting_targets:这是在战役过程中,通过web_search等工具发现的潜在疾病靶点列表。每个靶点包含:
target:靶点名称(如“PI3Kα”、“Tau蛋白”)。disease_association:与疾病的关联描述。evidence_density:一个基于搜集到的文献数量和质量计算的分数,表示证据的丰富程度。supporting_urls:相关证据的网页链接。
5.2 实战技巧与避坑指南
从“离线验证”开始:在连接真实的OpenClaw Gateway之前,先用
--dry-run模式和本地计划模板进行测试。这能验证你的ClawCures安装和基础配置是否正确,而不会消耗API调用。ClawCures run --objective "测试" --plan-file examples/plan_template.json --dry-run为规划器提供清晰、具体的指令:目标的描述质量直接影响计划的质量。避免模糊的“研究癌症”,而是使用“寻找对KRAS G12C突变具有高选择性、且能穿透血脑屏障的小分子抑制剂”。越具体,AI生成的计划就越有针对性。
善用会话记忆进行长程探索:对于复杂的探索任务,使用
--session-key和一个固定的描述(如--objective),并让战役运行多个循环。AI会在后续循环中参考之前的发现,避免重复劳动,实现更深度的探索。记得搭配--store-responses(如果Gateway支持)以保留完整对话历史。处理本地小模型的不稳定性:如果你使用能力较弱的本地开源模型作为OpenClaw后端,它生成的JSON计划可能格式错误。ClawCures内置了自动修复功能,但有时仍会失败。此时,可以:
- 在目标中明确要求“输出严格的、可解析的JSON”。
- 使用
--dry-run先检查规划器输出的原始JSON,手动修正格式后再用--plan-file加载执行。 - 考虑使用更强大的模型进行规划阶段。
结果的后处理与分析:ClawCures的输出是JSON,这是机器友好的,但人不直观。你需要编写简单的脚本(用Python的
json库或jq命令行工具)来提取和可视化关键数据。例如,提取所有候选疗法的admet_score和herg_inhibition风险,绘制散点图,快速筛选出“高安全、高ADMET评分”的候选分子。安全边界牢记于心:
web_fetch默认禁止访问内网。refua-mcp的工具调用也有严格的白名单。永远不要在配置中放宽这些安全限制,除非你完全清楚自己在做什么,并且运行在一个隔离的测试环境中。AI生成的计划可能包含意想不到的、甚至恶意的工具调用尝试。
6. 故障排查与性能优化
6.1 常见错误与解决方案
| 问题现象 | 可能原因 | 排查步骤与解决方案 |
|---|---|---|
Connection refused或Failed to establish connection | 1. OpenClaw Gateway服务未启动。 2. REFUA_CAMPAIGN_OPENCLAW_BASE_URL配置错误(端口、协议)。3. 网络防火墙阻止。 | 1. 检查Gateway进程是否运行:`ps aux |
401 Unauthorized | 认证失败。Token错误、过期,或认证方式不匹配。 | 1. 确认使用的环境变量名与Gateway认证模式匹配(Token模式用REFUA_CAMPAIGN_OPENCLAW_TOKEN,密码模式用OPENCLAW_GATEWAY_PASSWORD)。2. 检查Token值是否正确,有无多余空格。 3. 在Gateway侧验证Token是否有效。 |
requires a different Python: ... not in '<3.14,>=3.11' | Python版本不兼容。 | 1. 使用python --version确认当前环境版本。2. 使用 pyenv或conda创建并切换至3.11, 3.12或3.13版本的解释器。3. 重新创建虚拟环境并安装依赖。 |
| 规划器输出非JSON或解析失败 | 使用的AI模型(尤其是小参数模型)输出不稳定,未遵循指令。 | 1. 查看详细日志,找到规划器返回的原始文本。检查是否被截断或包含多余标记。 2. 尝试在目标指令中加入“请输出一个格式严格、可被JSON解析的响应。”。 3. 使用 --dry-run模式先单独测试规划步骤,观察输出。4. 考虑升级到更强大的规划模型。 |
| 工具调用失败,提示工具不存在 | 1. refua-mcp服务未启动或未正确配置工具。 2. 规划器使用了不在工具白名单中的工具名。 | 1. 运行ClawCures list-tools,确认当前可用的工具列表。2. 检查refua-mcp的日志,确保其已成功加载所有工具。 3. 对比规划器JSON中的 tool_name与list-tools的输出,看是否存在大小写或别名不一致。ClawCures会尝试规范化工具名,但并非万能。 |
| 战役运行缓慢 | 1. 单个工具调用(如某些计算化学模拟)耗时过长。 2. 网络延迟高。 3. AI模型响应慢。 | 1. 使用--timeout参数(通过REFUA_CAMPAIGN_TIMEOUT_SECONDS环境变量设置)为每个步骤设置合理的超时时间,避免卡死。2. 对于计算密集型工具,考虑在refua-mcp端优化其性能或使用缓存。 3. 如果使用云端模型,检查其区域和你的网络延迟。 |
6.2 性能与稳定性调优建议
超时设置:默认180秒超时适用于大多数情况,但如果你的任务涉及复杂的
web_search(可能返回大量结果)或缓慢的科学计算工具,可能需要增加。通过export REFUA_CAMPAIGN_TIMEOUT_SECONDS=300来设置。模型路由优化:如果你的OpenClaw Gateway连接了多个不同特长的模型,使用
--agent-model-map-json进行智能路由。例如,让一个精通肿瘤学的模型处理癌症相关目标,让一个更谨慎的模型担任评审员。--agent-model-map-json '{"planner:oncology":"openclaw:oncology-specialist", "planner:neuro":"openclaw:neuro-specialist", "critic":"openclaw:conservative"}'ClawCures会根据目标描述中的关键词(如“cancer”、“Alzheimer‘s”)尝试匹配最合适的规划器。
控制探索广度与深度:在无限循环模式下,AI可能会不断提出新的搜索和计算请求。为了控制资源消耗,你可以:
- 在目标中明确限制范围,例如“针对以下三个已知靶点(EGFR, ALK, ROS1)进行深入分析,不要探索新靶点”。
- 使用
--max-cycles明确限制总轮数。 - 监控输出文件大小,如果
interesting_targets列表过长,可能意味着探索过于发散,需要更聚焦的目标。
结果缓存与复用:对于昂贵的工具调用(如分子动力学模拟),目前的ClawCures本身不提供缓存。一个实用的技巧是,在refua-mcp服务端实现工具级别的缓存。或者,将一次战役中有价值的中间结果(如某个化合物的ADMET属性)保存下来,在后续战役中通过
--evidence-file注入,避免重复计算。
这个项目的价值不在于提供一个“一键出药”的魔术按钮,而在于构建了一个可扩展、可审查、将人类领域知识与AI推理执行能力相结合的自动化研究框架。它把药物发现中那些重复性的、基于固定规则的文献调研和初步筛选工作自动化,让研究人员能更专注于更高层次的科学假设和创新设计。在实际使用中,你会不断调整目标指令、优化工具链、并学习如何解读和验证AI产生的研究计划与候选结果,这个过程本身,就是人机协同科研的一次深度实践。
