手搓的 OpenClaw 每轮喂 8 个 MD 提示词,模型 Base URL 填 TaoToken

发布时间:2026/9/19 14:09:18

手搓的 OpenClaw 每轮喂 8 个 MD 提示词,模型 Base URL 填 TaoToken 本文把 OpenClaw 的模型 Base URL 接到 TaoToken官网是 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content。这篇记录 claw-step2-md 的接入配置AgentScope 1.0.11 JDK 21 手搓的 OpenClaw每轮对话都会把工作区里的 MD 提示词重新加载并拼进系统提示词。PromptUtils.addSystemPrompt 负责按顺序读取ReloadMdHook 挂在 PreCall 前重载所以 SOUL.md 的性格、IDENTITY.md 的人设、BOOTSTRAP.md 的首次引导都会跟着请求送到模型。可真正让这些内容调不动的往往不是 MD 逻辑而是 AgentConfiguration 里那段模型通道还写着旧 Key、旧地址、旧模型名。本文只改模型通道Base URL 写https://taotoken.net/apiKey 用 TaoToken 刚创建的那把MD 加载与 ReloadMdHook 原样保留。一、原问题与场景claw-step2-md 每轮都在喂 8 个 MD 提示词手搓 OpenClaw 到claw-step2-md这个阶段最容易误判的是问题方向。页面能打开Agent 菜单能读 MD前端也能保存 MD但一说“你好”就报错、超时、返回空内容或者永远不进入 BOOTSTRAP.md 的身份确认流程。此时很多人会先怀疑 PromptUtils怀疑 MD 文件编码怀疑 ReloadMdHook 优先级其实要先看模型请求有没有真正发出去。OpenClaw 的完整设计里有 8 个 MD 文件AGENTS.md、SOUL.md、IDENTITY.md、USER.md、TOOLS.md、BOOTSTRAP.md、MEMORY.md、HEARTBEAT.md。claw-step2-md这一版先接住其中 5 个核心文件顺序是AGENTS.md - SOUL.md - IDENTITY.md - USER.md - BOOTSTRAP.mdPromptUtils.addSystemPrompt会把它们拼到一段系统提示词里。ReloadMdHook又在每次PreCallEvent前重新读取工作区文件重新setSysPrompt。这意味着每轮对话开始时当前 MD 内容都会跟着请求一起送给大模型。谁在烧 Token跑 OpenClaw 的 Agent。谁在决定 Agent 的性格、身份、做事边界也是这些 MD。只要模型通道没配好前面所有设计都只停留在本地。原始代码里最关键的模型配置在AgentConfiguration.model(DashScopeChatModel.builder() .apiKey(System.getenv(DASHSCOPE_API_KEY)) .modelName(System.getenv(QWEN_MODEL)) .enableThinking(true) .build())这段代码本身没有错错在环境变了以后 Key、地址、模型名没有同步换。DASHSCOPE_API_KEY没有、过期、权限不对或者QWEN_MODEL在当前通道下不存在都会让请求失败。结果就是SOUL.md 写了什么性格模型收不到IDENTITY.md 写了什么人设模型收不到BOOTSTRAP.md 让 Agent 第一次运行先确认身份也触发不了。本文要做的事很窄不动PromptUtils不动ReloadMdHook不动前端 MD 读取与保存接口只把AgentConfiguration里的模型通道换成 TaoToken 兼容通道。改完以后claw-step2-md还是原来的claw-step2-md但模型请求走 TaoToken。二、TaoToken 前置在官网创建 Key确认 Base URL 与模型 ID第一步不是改 Java而是先把 Key 和模型 ID 准备好。打开官网注册账号https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content登录后进入控制台在 API Keys 页面创建一把新 Key。创建时建议命名成能识别的名字例如openclaw-claw-step2-md-local这样后面在日志或用量页看到调用时能知道是哪台机器、哪个项目在用。Key 创建后只展示一次或有限次先复制到安全位置不要直接写进仓库。本篇需要的三个值如下TAOTOKEN_API_KEY YOUR_API_KEY TAOTOKEN_BASE_URL https://taotoken.net/api TAOTOKEN_MODEL 你在 TaoToken 控制台确认可用的模型 ID这里有两个容易出错的点。第一Base URL 写https://taotoken.net/api不要写成https://taotoken.net/api/v1也不要加 UTM 参数。UTM 是给网页链接做来源统计的不是给模型客户端做请求地址的。Java 里、OpenAI 兼容客户端里、curl 手工验证时真正给 SDK 的 base URL 就是https://taotoken.net/api。第二Key 不要硬编码。原文用System.getenv读取环境变量这个习惯继续保留。可以设置export TAOTOKEN_API_KEYYOUR_API_KEY export TAOTOKEN_BASE_URLhttps://taotoken.net/api export TAOTOKEN_MODEL你的模型ID如果是 IDEA 或 Eclipse 里启动不要只在终端export还要在 Run Configuration 的 Environment variables 里补上。否则终端能echo出来Spring Boot 进程读不到最后还是 401。模型 ID 的确认方式不要靠猜。可以在 TaoToken 控制台的模型列表、模型对话页面或接入文档里核对。把模型 ID 写进TAOTOKEN_MODEL后面AgentConfiguration里直接读这个变量。这样以后换模型不用改 Java只改环境变量。三、可复制配置只改 AgentConfiguration 的模型通道不动 PromptUtils 和 ReloadMdHook现在改AgentConfiguration。目标是保留原来的 createDefaultAgent 结构工具、PlanNotebook、PromptUtils、ReActAgent、ReloadMdHook 都不动只把DashScopeChatModel换成 TaoToken 的 OpenAI 兼容模型客户端。如果当前 AgentScope Java 版本里有 OpenAI 兼容模型类通常可以按下面这种方式写import io.agentscope.core.model.OpenAIChatModel; // 省略其它 import保留原有 Toolkit、PlanNotebook、PromptUtils、ReloadMdHook 引用 private Agent createDefaultAgent() { URL resource ClassLoader.getSystemResource(Constant.WORKSPACE_DIR); File directory new File(resource.getPath()); Toolkit toolkit new Toolkit(); ShellCommandTool shellTool new ShellCommandTool(directory.getPath(), null, null); ReadFileTool readTool new ReadFileTool(directory.getPath()); WriteFileTool writeTool new WriteFileTool(directory.getPath()); toolkit.registerTool(shellTool); toolkit.registerTool(readTool); toolkit.registerTool(writeTool); PlanNotebook planNotebook PlanNotebook.builder() .needUserConfirm(false) .build(); String configPrompt PromptUtils.addSystemPrompt(resource.getPath()); return ReActAgent.builder() .name(AgentScope Claw) .sysPrompt(您是运行在 AgentScope Claw 内部的个人助手。\n\n configPrompt) .model(OpenAIChatModel.builder() .apiKey(System.getenv(TAOTOKEN_API_KEY)) .baseUrl(https://taotoken.net/api) .modelName(System.getenv(TAOTOKEN_MODEL)) .build()) .toolkit(toolkit) .planNotebook(planNotebook) .memory(new InMemoryMemory()) .hook(new ReloadMdHook()) .maxIters(20) .build(); }这段配置的核心只有三个参数apiKey - TAOTOKEN_API_KEY baseUrl - https://taotoken.net/api modelName - TAOTOKEN_MODEL再看一遍没有改PromptUtils.addSystemPrompt没有改ReloadMdHook的PreCallEvent没有改ReActAgent的sysPrompt拼接逻辑也没有改MDController、MDService的前端接口。只是把模型客户端从 DashScopeChatModel 换成兼容 OpenAI 协议的模型客户端并把地址指到 TaoToken。如果你的 AgentScope 1.0.11 工程里类名或 builder 方法不同不要照抄类名照抄这三个值的位置Key 从哪里读、Base URL 写哪里、模型 ID 写哪里。重点是不能把/v1拼进 base URL不能让 UTM 参数进入 Java 代码。另外application.yml里可以保留原有 AG-UI 配置不需要大改server: port: 8080 agentscope: agui: path-prefix: /agui cors-enabled: true cors-allowed-origins: - * run-timeout: 10m emit-state-events: true emit-tool-call-args: true default-agent-id: default agent-id-header: X-Agent-Id enable-path-routing: true server-side-memory: true max-thread-sessions: 1000 session-timeout-minutes: 30 enable-reasoning: false前端还是http://localhost:8080/index.html后端还是 8080AG-UI 还是/agui/run。这些都不需要因为换模型通道而改。四、验证请求与成功结果启动 claw-step2-md访问 index.html 说“你好”先做一次最小连通性验证。OpenAI 兼容客户端里 base_url 填https://taotoken.net/api不要带/v1。如果你用 curl 手工测可以按兼容路径补全请求地址curl https://taotoken.net/api/v1/chat/completions \ -H Authorization: Bearer $TAOTOKEN_API_KEY \ -H Content-Type: application/json \ -d { model: $TAOTOKEN_MODEL, messages: [ {role: user, content: 你好} ] }这里https://taotoken.net/api/v1/chat/completions是 curl 的完整请求路径不是让你在 Java 的baseUrl里写/v1。Java 的baseUrl仍然是https://taotoken.net/api。连通后启动claw-step2-mdcd claw-step2-md mvn spring-boot:run或者用已打包的 jarjava -jar claw-step2-md.jar看到 Spring Boot 启动完成端口 8080 监听正常后打开http://localhost:8080/index.html在聊天框输入你好预期结果不是普通聊天而是 Agent 根据BOOTSTRAP.md进入首次运行引导。它应该反过来问你身份相关问题例如你是谁、希望它叫什么、用什么风格、怎么称呼你。此时不要急着判断模型“只会聊天”这是 BOOTSTRAP.md 的设计在起作用。接着输入类似下面的身份信息你是 agentscope-claw你是一个个人助手风格是随意。 我是 linmoo可以叫我 moo我在北京东八区。预期结果Agent 开始把身份信息写入IDENTITY.md、USER.md等文件。如果 SOUL.md 需要调整也会按引导写入或更新。首次引导完成后BOOTSTRAP.md被删除。打开 Agent 菜单AGENTS.md、SOUL.md、IDENTITY.md、USER.md、TOOLS.md 等 MD 文件仍然可读、可编辑、可保存。控制台或日志里模型请求目标已经是 TaoToken 的兼容通道而不是原来的 DashScope 地址。如果这 5 点都出现说明模型通道切换成功。MD 加载逻辑没被破坏ReloadMdHook 还在每次 PreCall 前重载OpenClaw 的提示词链路还是原来的链路只是模型请求走 TaoToken。五、本篇常见错排查401、404、模型 ID、MD 不更新接入配置最容易卡在几个固定位置下面按报错和现象排查。1. 401 Unauthorized优先查 Key 是否真的进了进程。终端里echo $TAOTOKEN_API_KEY有值不代表 IDEA Run Configuration 里有值。Spring Boot 重启一次再确认System.getenv(TAOTOKEN_API_KEY)不是 null。如果 Key 复制时带了空格、换行也会 401。Key 应该来自 TaoToken 控制台 API Keys 页面不要混用旧项目的 Key。2. 404 Not Found最常见原因是 Base URL 写错。Java 里应写https://taotoken.net/api不要写https://taotoken.net/api/v1 https://taotoken.net/api/ https://taotoken.net/api?utm_source...UTM 是网页统计参数不要进入模型客户端配置。末尾斜杠、多/v1、多空格都会让兼容客户端拼出错误路径。3. 模型不存在或模型 ID 无效检查System.getenv(TAOTOKEN_MODEL)。如果还沿用原来的QWEN_MODEL或者环境变量没换就会把旧模型名发到新通道。把TAOTOKEN_MODEL设成你在 TaoToken 控制台确认可用的模型 ID再重启claw-step2-md。4. 页面能打开但 Agent 不按 BOOTSTRAP.md 走先看ReloadMdHook有没有注册进ReActAgent.hook(new ReloadMdHook())如果这行被删了系统提示词只在创建 Agent 时加载一次后续修改 MD 不会在 PreCall 前刷新。还要确认PromptUtils.addSystemPrompt读取的工作区目录正确BOOTSTRAP.md确实存在于resources/workspaces对应目录下。如果文件不存在模型自然拿不到首次引导。5. MD 能改但对话内容不变化ReloadMdHook的优先级是 50挂在 PreCall 前。如果自己又加了别的 Hook把PreCallEvent提前消费或改掉了 Agent也可能导致setSysPrompt没执行。排查时可以在 Hook 里临时打印一次PromptUtils.addSystemPrompt的结果长度确认每次请求前确实重载了。6. BOOTSTRAP.md 不删除或 IDENTITY.md 不写入这通常不是模型通道问题而是工具调用链路问题。AgentConfiguration里注册了WriteFileTool、ReadFileTool、ShellCommandTool工作目录是Constant.WORKSPACE_DIR对应目录。如果目录权限不足或者工具没有注册成功Agent 即使返回了“我要写入身份文件”的意图也执行不了。检查Toolkit注册和运行用户权限。7. Agent 菜单加载失败前端 Agent 菜单依赖/md/load和/md/save。如果菜单能打开但报加载失败看MDController、MDService是否正常静态资源index.html与agui-client.js是否被正确加载。换模型通道不需要改这些但排查时不要把它们误伤。8. 启动后仍然请求旧地址最常见是旧进程没停8080 还被占用。另一个原因是 IDE 缓存了旧环境变量或者项目里有多个AgentConfiguration。全局搜DashScopeChatModel、DASHSCOPE_API_KEY、QWEN_MODEL确认没有残留代码继续生效。六、语义一致 CTA把 OpenClaw 的模型通道固定到 TaoToken这一篇的关键词是接入配置不是重写 Agent。手搓 OpenClaw 到claw-step2-md后MD 提示词体系已经能承担性格、身份、用户信息和首次引导真正需要稳定的是模型通道。把AgentConfiguration里的 Key、Base URL、模型 ID 换成 TaoTokenPromptUtils和ReloadMdHook都不用动8 个 MD 的加载与重载逻辑继续按原设计工作。如果你也在做同样的接入可以先创建 Key再照着接入文档核对 Base URL 和模型 ID创建 Keyhttps://taotoken.net/console/api-keys?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentapi-keys接入文档https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentdoc如果你准备把 OpenClaw 这类 Agent 长期放进编码流程、让它反复读取 MD、调用工具、执行计划可以看 Coding Planhttps://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentcoding-plan模型连通性也可以先在模型对话里验证https://taotoken.net/console/model-chat?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentmodel-chat回到claw-step2-md你需要记住的配置只有三行TAOTOKEN_API_KEY用刚创建的 KeybaseUrl写https://taotoken.net/apimodelName用 TaoToken 确认可用的模型 ID。改完重启访问http://localhost:8080/index.html说“你好”BOOTSTRAP.md 该反问就反问IDENTITY.md 该写入就写入BOOTSTRAP.md 该删除就删除。模型通道换了OpenClaw 的提示词逻辑没换。
延伸阅读

更多相关文章

2026/9/19 14:09:18

胎心仪语音+蓝牙双模协同设计原理与WT2801A4实战解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/19 14:09:18

基于语音识别与PLC的温室灌溉控制系统设计

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/19 14:09:18

工业质检无监督异常检测:PatchCore在MVTec AD的实战与调优

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/19 15:09:20

Arduino玩转MPU6050六轴传感器:从接线到姿态解算与排坑实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/19 15:09:20

多传感器融合SLAM实战:视觉+激光雷达如何提升建图精度

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/19 15:04:20

Java基础练习题改造:把固定答案变成可修改的面试通关法

简介:这份Java基础练习题面向零基础自学者和备考Java岗位笔试的初级用户,将Java核心语法整理成一套可随学随练的习题资料。内容覆盖Java程序的入口main方法定义、JVM执行特点、语言特性、基本数据类型、运算符与表达式、控制结构、方法调用、异常处理等基…

2026/9/18 14:13:01

拯救者Y7000黑屏故障排查与维修实战指南

1. 项目概述:一台黑屏的拯救者Y7000,到底卡在哪一步? 联想拯救者Y7000系列笔记本,从2018年第一代搭载i5-8300H开始,到后来的i7-9750H、i7-10750H、i5-11400H,再到2023年款的R7-7840HS,它始终是学…

2026/9/19 0:03:10

验证 OpenSpec 兼容性,Cursor 的 Token 从 TaoToken 出

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/19 0:03:10

书桌角落的 Mac mini,OpenClaw 通过 TaoToken 跑任务。

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/19 0:03:10

oh-my-hermes:打造跨工具的命令编排与插件化工作流

1. 项目概述与设计初衷1.1 它到底是什么先说结论:oh-my-hermes 是一个面向开发者日常终端操作的效率工具套件,核心定位是“把分散在各类命令行工具里的高频操作,统一收拢成一套插件化、可编排的工作流”。项目灵感来源很明显——oh-my-zsh 重…

2026/9/18 14:13:03

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/18 14:13:02

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/18 14:13:02

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码