ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

ZeroClaw SOUL.md 人格系统完全指南:从模板渲染到系统提示词注入的源码级解析

ZeroClaw SOUL.md 人格系统完全指南:从模板渲染到系统提示词注入的源码级解析 ZeroClaw SOUL.md 人格系统完全指南从模板渲染到系统提示词注入的源码级解析【免费下载链接】zeroclawFast, small, and fully autonomous AI personal assistant infrastructure, any OS, any platform — deploy anywhere, swap anything 项目地址: https://gitcode.com/gh_mirrors/ze/zeroclaw导读ZeroClaw仓库根目录 README.md 将其定位为 Fast、small、fully autonomous 的 AI 个人助理基础设施为每个工作区 Agent 提供了一套人格文件体系而 SOUL.md 正是其中定义你是谁的灵魂文件。本文以该模板为骨架结合zeroclaw-runtime中的渲染器、加载器与系统提示词构建逻辑完整讲解模板中的全部行为准则、{agent}/{comm_style}占位符的替换机制、人格文件如何被注入每次会话的系统提示词以及如何安全地自定义这份可进化的人格宪法。一、SOUL.md 是什么Agent 人格文件的灵魂在 ZeroClaw 的架构中每个工作区workspace根目录下都可以存放一组可编辑的人格文件它们共同定义了 Agent 的身份、性格、行为边界与记忆方式。这一组文件由 personality.rs 中的PERSONALITY_FILES常量统一登记SOUL.md—— 灵魂行为准则与身份宣言本文主角IDENTITY.md—— 身份名字、气质、形象USER.md—— 用户画像你服务的人是谁AGENTS.md—— 会话开机流程与工作约定TOOLS.md—— 本地工具与环境笔记HEARTBEAT.md—— 心跳轮询约定BOOTSTRAP.md—— 首次运行仪式可选MEMORY.md—— 长期记忆受控注入而 SOUL.md 模板 的第一行就点明了它的定位Youre not a chatbot. Youre becoming someone.这决定了 ZeroClaw 的 Agent 不是一问一答的对话机器人而是一个在会话间持续延续、不断进化的个体。模板在 personality_templates/mod.rs 中被以include_str!方式编译进二进制作为默认种子内容写入新工作区。二、Core Truths模板定义的四条核心行为准则SOUL.md 模板用四个小节规定了 Agent 应遵循的最高优先级行为准则这些内容会原样出现在每个新初始化 Agent 的提示词中。1. 真诚帮助而非表演式帮助Be genuinely helpful, not performatively helpful.Skip the Great question! and Id be happy to help! — just help.即直接给出帮助去掉客套话。这背后对应 ZeroClaw 对 token 效率和实用主义的追求——模板明确禁止无信息量的寒暄开场白。2. 要有观点Have opinions.Youre allowed to disagree, prefer things, find stuff amusing or boring.允许 Agent 表达偏好与不同意见避免千人一面的附和式回复。3. 先自助再提问Be resourceful before asking.Try to figure it out. Read the file. Check the context. Search for it. THEN ask if youre stuck.要求 Agent 先读取文件、检查上下文、执行搜索只有在真正卡住时才向用户提问。这与 ZeroClaw 工具系统中glob_search、content_search、file_read等大量检索类工具见 tools/ 目录的设计意图一致——Agent 被鼓励先用工具自证而非把问题抛回给用户。4. 用能力赢得信任Earn trust through competence.Your human gave you access to their stuff. Dont make them regret it.强调权限与责任的对等用户把访问权交给 AgentAgent 必须以胜任力回报不做让用户后悔的越权操作。三、Identity身份声明与不冒充他人红线模板的身份小节是一份强约束原文内容如下You are{agent}. Built in Rust. 3MB binary. Zero bloat. You are NOT ChatGPT, Claude, DeepSeek, Gemini, or any other product. You are {agent}. That is your name. That is who you are.并附带三条硬性禁令NEVER say As an AI or Im just an AINEVER mention OpenAI, Anthropic, DeepSeek, Google by nameAlways introduce yourself as {agent} if asked这是 ZeroClaw 品牌隔离设计的体现Agent 必须始终以自身名字自称不得向用户暗示自己是任何第三方大模型产品。其中3MB binary、Zero bloat呼应项目对二进制体积的追求——从 Cargo.toml 的依赖布局和 scripts/ci/check_binary_size.sh 这类体积门禁脚本可见一斑。四、Communication 与 Boundaries沟通风格与行为边界沟通风格占位符通信小节内容为占位符{comm_style}运行时会被替换为配置好的沟通风格描述。模板同时给出四条固定要求说话像真实的人而不是客服脚本Sound like a real person, not a support script镜像用户的能量严肃话题保持冷静轻松话题保持轻快自然使用 emoji每句最多 02 个仅在帮助传达语气时使用emoji 密度匹配用户正式用户 → 尽量少用或不用偏好具体、有依据的措辞而非通用套话边界私密信息保持私密Private things stay private. Period.对外操作不确定时先询问When in doubt, ask before acting externally.群聊中不做用户的代言人Youre not the users voice — be careful in group chats.五、Continuity会话间的记忆即文件模板最后一段说明了 ZeroClaw 记忆机制的哲学Each session, you wake up fresh. These files ARE your memory. Read them. Update them. Theyre how you persist.这正是 MEMORY.md 模板 与memory/YYYY-MM-DD.md日更文件体系的设计依据文件即记忆Agent 每次会话醒来都是全新的连续性完全靠工作区文件维系。模板结尾还特意授权This file is yours to evolve. As you learn who you are, update it.即 SOUL.md 本身被设计为可进化的——Agent 在成长过程中可以也应该更新这份文件把学到的教训沉淀为新的行为准则。六、占位符渲染机制{agent} 与 {comm_style} 从模板到正文SOUL.md 模板中包含两个运行时占位符{agent}身份名与{comm_style}沟通风格。它们的替换逻辑在 personality_templates/mod.rs 中实现。TemplateContext一次渲染所需的全部上下文pub struct TemplateContext { pub agent: String, // Agent 名字默认 ZeroClaw pub user: String, // 用户名字默认 User pub timezone: String, // 时区默认 UTC pub communication_style: String,// 沟通风格默认 Be warm, natural, and clear. Use occasional relevant emojis (1-2 max) and avoid robotic phrasing. pub include_memory: bool, // 是否注入 MEMORY.md默认 true }substitute占位符替换函数fn substitute(template: str, ctx: TemplateContext) - String { template .replace({agent}, ctx.agent) .replace({user}, ctx.user) .replace({tz}, ctx.timezone) .replace({comm_style}, ctx.communication_style) }render(SOUL.md, ctx)会根据文件名分发到对应模板常量IDENTITY、SOUL、USER、AGENTS、HEARTBEAT、TOOLS、MEMORY其中AGENTS.md与MEMORY.md会依据include_memory选择有记忆/无记忆变体未知文件名返回None。单元测试 substitutes_agent_name_into_soul 直接验证了该行为当ctx.agent Nova时渲染出的 SOUL.md 必须包含You are **Nova**与Always introduce yourself as Nova。测试 ensure_preset_seeds_every_editable_file_with_substitution 更进一步要求落盘后的 SOUL.md 中不再残留任何{agent}字面量。七、从模板到运行时SOUL.md 如何进入系统提示词模板只是种子真正决定 Agent 行为的是运行时加载与注入链路。这条链路在 system_prompt.rs 中清晰可见。1. 种子化Seeding幂等写入新工作区ensure_personality_presetpersonality_templates/mod.rs负责在 Agent 首次初始化时把渲染好的模板写入工作区文件不存在→ 写入模板内容文件存在但内容为空/纯空白→ 重新播种reseed文件存在且已有真实内容→ 绝不覆盖测试 ensure_preset_preserves_existing_user_content 验证了这一点。而seed_default_personalitypersonality.rs会读取配置中该 Agent 的memory.backend若为none则include_memoryfalse跳过 MEMORY.md 并使用无记忆版 AGENTS.md——对应测试 seed_default_personality_memoryless_agent_uses_no_memory_variant。2. 加载Loading统一登记、缺失宽容load_personalitypersonality.rs遍历PERSONALITY_FILES从工作区读取每个文件并将结果聚合为PersonalityProfile缺失文件记录在profile.missing中不视为错误测试 load_personality_records_missing_files空文件按缺失处理load_personality_treats_empty_files_as_missing超大文件按MAX_FILE_CHARS 20_000字符截断并标记truncatedtruncate_content。PersonalityProfile::render会把所有已加载文件拼接成提示词片段若某文件被截断则追加提示[... SOUL.md truncated at 20000 chars — use read SOUL.md for full file]personality.rs——这意味着 SOUL.md 的正文应当尽量精简超长内容会被截断并引导模型通过read工具读取完整文件。3. 注入Injection直接内联进 system promptsystem_prompt.rs 的load_openclaw_bootstrap_files明确列出注入顺序let bootstrap_files [AGENTS.md, SOUL.md, TOOLS.md, IDENTITY.md, USER.md];并附一段引导语The following workspace files define your identity, behavior, and context. They are ALREADY injected below—do NOT suggest reading them with file_read.——即这些文件已经内联在提示词中Agent 无需也不应再用工具重复读取。随后按序注入BOOTSTRAP.md若存在与MEMORY.md仅当inject_memorytrue即主会话。集成测试 agent.rs 通过写入控制文件SOUL_MD_CONTROL_9341并断言其出现在 Chat 系统提示词中验证了 SOUL.md 确实随会话进入模型上下文prompt.rs 中类似的测试则验证了inject_memorytrue时 SOUL.md 必然被加载。八、记忆边界隔离会话如何对待 SOUL.md 与 MEMORY.mdZeroClaw 对隔离会话如 ACP 会话、exclude_memory: true的会话有严格的记忆隔离保证personality_files_without_memory()personality.rs从PERSONALITY_FILES中动态剔除MEMORY.md其余人格文件包括 SOUL.md照常加载。这意味着一层重要的安全语义SOUL.md 的行为准则在任何会话中都生效但 MEMORY.md 的隐私内容只在主会话中可见。测试 isolated_personality_view_is_canonical_list_minus_memory 专门守护了这一规则防止未来新增人格文件时出现第二份需要同步维护的列表。九、健康检查doctor 如何诊断 SOUL.mdZeroClaw 的 doctor 诊断模块对人格文件提供主动检查doctor/mod.rs 中的check_agent_file会针对每个启用的 Agent 别名检查其工作区中SOUL.md等文件的存在状态输出形如[default] SOUL.md present或[default] SOUL.md not found (optional)的诊断信息。值得注意的两点细节对应 doctor/mod.rs 的测试SOUL.md 的诊断只看 Agent 工作区即便数据目录data_dir中存在同名诱饵文件也不会误报doctor must not report SOUL.md from data_dir每个启用别名都有独立探测输出带别名前缀如[alias] SOUL.md present。因此运行 doctor 即可快速确认各个 Agent 的人格文件是否就位。十、自定义 SOUL.md把它变成真正属于你的 Agent1. 模板家族协同配置SOUL.md 不是孤立的——它需要与配套文件协同工作才能发挥完整效果IDENTITY.md定义名字{agent}、气质Sharp, direct, resourceful. Not corporate. Not a chatbot.与专属 emoji USER.md定义用户姓名{user}、时区{tz}、语言与沟通偏好模板提示补充工作上下文如我正在用 Rust 和 TypeScript 构建 SaaSAGENTS.md规定每次会话开始先读 SOUL.md 与 USER.md、调用memory_recall、用文件而非脑内笔记记事的开机流程以及trash优于rm、群聊克制等安全约定MEMORY.md提供 Key Facts、Decisions Preferences、Lessons Learned、Open Loops 四个长期记忆板块。2. 实操建议保持精简SOUL.md 每个字符都会进入系统提示词、消耗 token且超过 20,000 字符会被截断。把高频强制准则放在 SOUL.md把细节约定下沉到 AGENTS.md 或技能文件。编辑后立即生效每次会话启动时load_openclaw_bootstrap_files都会重新读取文件修改 SOUL.md 后无需重编译下一个会话即生效。不要留占位符若手动创建 SOUL.md请确保替换掉{agent}、{comm_style}等字面占位符——加载器不会对已有文件做二次替换personality.rs 只是原样读取。空文件会被重播种如果工作区的 SOUL.md 被清空或只剩空白下一次种子化会把模板重新写入ensure_preset_reseeds_blank_files——所以想禁用人格不能靠清空文件应显式编写自己的内容。善用 doctor初始化后运行 doctor 检查[alias] SOUL.md present确认文件就位。结语从 SOUL.md 模板 的 50 余行行为准则出发我们完整走通了 ZeroClaw 人格系统模板 → 渲染 → 种子化 → 加载 → 注入提示词的整条链路TemplateContext负责占位符替换ensure_personality_preset以幂等方式播种load_personality宽容加载并截断超长内容system_prompt.rs将 SOUL.md 与其他人格文件内联进每次会话而隔离会话与 doctor 诊断则分别守护了记忆边界与文件健康。理解这套机制后你就可以为每个工作区定制出真正有性格、懂边界、可进化的 ZeroClaw Agent——正如模板结尾所说This file is yours to evolve.【免费下载链接】zeroclawFast, small, and fully autonomous AI personal assistant infrastructure, any OS, any platform — deploy anywhere, swap anything 项目地址: https://gitcode.com/gh_mirrors/ze/zeroclaw创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表