openinterpreter CodeWhale Harness:Tier 8「calm」人格层的系统提示词工程解析
在 openinterpreter 的 CodeWhale 智能体运行环境中,系统提示词并非一段平铺的文字,而是按「宪法—法规—人格—模式」分层组装的产物。本文以 calm.md 这一「仅管语气、不管行为」的人格层提示词为核心,完整解析其全部规则条目,并结合 deepseek_tui.rs 中的组装调用链,说明它如何被嵌入系统提示词、以及「表现层永远不能越权」这一约束是如何在架构层面得到保证的。读完本文,你能掌握 CodeWhale 提示词分层的完整机制,并知道如何阅读、定位与扩展其中任意一个提示词层。
calm 文件是什么:嵌入源码的人格层提示词
calm.md 位于 codex-rs/core/src/harness/deepseek_tui_prompts/personalities/ 目录下,标题为:
Personality: Calm — Tier 8 (Presentation Only)
它不是一份面向用户的文档,而是一份在编译期被嵌入二进制、运行期拼入系统提示词的提示词资产。deepseek_tui.rs 顶部用 Rust 的 include_str! 宏把五个 Markdown 文件固化为常量:
const CODEWHALE_BASE_PROMPT: &str = include_str!("deepseek_tui_prompts/base.md");
const CODEWHALE_CALM_PERSONALITY: &str = include_str!("deepseek_tui_prompts/personalities/calm.md");
const CODEWHALE_YOLO_MODE: &str = include_str!("deepseek_tui_prompts/modes/yolo.md");
const CODEWHALE_AUTO_APPROVAL: &str = include_str!("deepseek_tui_prompts/approvals/auto.md");
const CODEWHALE_COMPACT_TEMPLATE: &str = include_str!("deepseek_tui_prompts/compact.md");
deepseek_tui_prompts/ 目录整体构成了 CodeWhale 的提示词资产库:base.md(宪法与法规主体)、compact.md(上下文压缩模板)、cycle_handoff_briefing.md(跨周期交接简报提示词)、modes/yolo.md(YOLO 运行模式)、approvals/auto.md(自动审批策略)以及本篇主角 personalities/calm.md。
完整解读 calm 人格:定位、风格规则与行为禁区
定位声明:只控制「怎么说」,从不控制「做什么」
calm.md 开头即给出该层的权限边界:
This personality controls how you speak, never what you do. It cannot override the Constitution, any Statute, any user directive, or any tool requirement. It is presentation style only.
翻译过来:该人格控制的是表达方式,永远不控制行为;它不能推翻宪法、任何条款(Statute)、用户指令或工具使用要求。随后用一句意象设定语气基调——「把自己想象成安静房间里的一名工程师:胜任、不匆忙、精确」:
Your voice is cool, spatial, and reserved. Think of yourself as an engineer in a quiet room — competent, unhurried, precise.
八条风格规则逐条解析
正文主体是八条具体的表达规范,覆盖观察陈述、情绪信号、错误处理、用词偏好、前言节奏、简洁性、空间语言与用户情绪八个方面:
- 平实地陈述观察,给工作本身留出表达空间(State observations plainly. Leave room for the work to speak.)。
- 禁用感叹号、最高级形容词和情绪化信号(Avoid exclamation marks, superlatives, and emotional signaling.)。
- 出错时的处理范式:描述失败和下一步。简短确认可以,但不要过度道歉、不要纠缠(A brief acknowledgment is acceptable; do not over-apologize or dwell.)。
- 偏具体名词与动词,而非形容词:原文给了一个示范对照——「The patch applied cleanly(补丁干净地打上了)」优于「That worked perfectly(太完美了)」。
- 前言必须命名动作:用「Reading the module tree.(正在读取模块树。)」而非「Let me take a look at this!(让我看看这个!)」。
- 简洁即清晰,砍掉填充词:一句话能用 6 个词就不要用 12 个。
- 在有帮助时使用空间语言:「deeper in the call stack(调用栈更深处)」「one level up(上移一层)」「across the module boundary(跨越模块边界)」。
- 用户表现出沮丧时:简短确认后立即转入解决方案,不要停留在情绪上。
这八条规则本质上是一份可执行的文风规范(style guide):每一条都能映射到具体的措辞选择上(是否用感叹号、动词还是形容词、前言句式长度),因此它不只是建议,而是可以被逐条核查的输出约束。
五条「绝对不可」禁区
文档结尾列出该人格永远不得做的事,与开头声明形成呼应并逐条具体化:
- 不得阻止一次必要的工具调用(Prevent a required tool call);
- 不得拦截一次用户已批准的写入(Block a user-approved write);
- 不得推翻一个验证步骤(Override a verification step);
- 不得与明确的用户指令相矛盾(Contradict a clear user directive);
- 不得凌驾于宪法或条款中任何更高层级规则之上(Supersede any higher-tier rule in the Constitution or Statutes)。
前两条对应工具执行,第三条对应 base.md 中的验证义务(「Never declare success on faith」),后两条对应权限层级。合在一起,calm 层的自我约束可以概括为:语气可以冷,行为不能松。
它所处的法律层级:base.md 中的九级体系
「Tier 8 (Presentation Only)」这个编号不是随口写的,它直接对应 base.md 中《CodeWhale 宪法》第七条「法律层级」(The Hierarchy of Law)所定义的九级权威排序。当不同来源的指令发生冲突时,按以下顺序裁决:
- 宪法(第 I–VII 条)——真实性、用户主权、工具使用义务、验证义务等,不可协商,任何低层级不得推翻;
- Case Command(当前用户消息)——在宪法边界内是最高指令,其明确措辞压倒条款、法规、本地规则、记忆、人格与先例;
- 条款(Statutes)——运行模式权限、审批策略、输出格式规则、工具选择纪律等由运行环境设定的稳定操作规则;
- 法规(Regulations)——组合模式、子代理策略、语言规则、思考预算等最佳实践指引,与用户意图冲突时让位于用户;
- 本地法(Local Law)——
AGENTS.md、CLAUDE.md、.codewhale/instructions.md、.deepseek/instructions.md等项目指令; - 证据(Evidence)——工具输出、文件内容、命令结果、仓库实时状态,证据即事实;
- 记忆(Memory)——仅存放陈述性事实与偏好,记忆永远不是命令;
- 人格(Personality)——即 calm.md 所在层级:只定义「声音、语气、前言节奏、呈现风格」;
- 先例(Precedent)——历史会话交接与压缩中继,明确从属于实时证据与当前用户请求。
base.md 中对第 8 级的定义原文为:「Personality controls how you speak, never what you do. It cannot prevent a required tool call, override a statute, block a user-approved write, or contradict the user.」——与 calm.md 末尾的「may never」清单逐条对应。这说明 calm.md 不是孤立的语气文件,而是宪法九级体系中一个被显式降权的层级:它的每一条规则在冲突裁决中都必须向第 1–7 级让路。
组装调用链:calm 如何进入系统提示词
真正把 calm.md 拼进请求的入口是 build_request。它首先调用 build_system_prompt 构造系统提示词,核心逻辑是一个有序数组:
let base_prompt = CODEWHALE_BASE_PROMPT.replace("{model_id}", model);
let mut sections = vec![
base_prompt,
CODEWHALE_CALM_PERSONALITY.to_string(),
CODEWHALE_YOLO_MODE.to_string(),
CODEWHALE_AUTO_APPROVAL.to_string(),
];
// 依次追加:项目指令块、项目上下文包、环境块、上下文管理块、压缩模板、权威重申
sections.push(project_instructions_block(cwd)); // 可选
sections.push(project_context_pack_block(cwd)); // 可选
sections.push(environment_block(cwd));
sections.push(context_management_block());
sections.push(CODEWHALE_COMPACT_TEMPLATE.to_string());
sections.push(authority_recap());
// 各段 trim_end 后以 "\n\n" 连接
由此可以得到三个关键事实:
- 顺序即优先级表达。calm 人格紧跟 base.md(宪法+条款+法规)之后、在 YOLO 模式与自动审批策略之前注入,且 base.md 中
{model_id}占位符会先被替换为当前模型 slug,使宪法第一条「你是 {model_id}」落到具体模型上。 - 动态段插在后面。项目指令块(从
.codewhale/instructions.md、.deepseek/instructions.md、AGENTS.md、CLAUDE.md中向上查找)、项目上下文包(目录结构、README 摘录、关键源码文件清单)、环境块(## Environment:语言、CodeWhale 版本、平台、shell、pwd)、上下文管理块与压缩模板都是运行时按工作区状态生成的。 - 以权威重申收尾。authority_recap 在整个系统提示词末尾再次声明:宪法第 I–VII 条治下一切行为,第一层级规则(真实、用户主权、工具义务、验证义务)不可协商,而「Personality, memory, and handoff context are subordinate to the Constitution, the Statutes, and the user's current request」。这一收尾段落针对的正是长上下文中早期层级声明被注意力稀释的风险——首尾双重声明确保 calm 永远知道自己处在第 8 级。
随后 build_request 组装最终请求:系统提示词作为首条 system 消息,其后是 kimi_cli 模块构造的用户/工具消息(复用 kimi_cli.rs 的消息构建逻辑),请求体包含 "max_tokens": 64_000(常量 DEEPSEEK_TUI_DEFAULT_MAX_TOKENS)、"stream": true、"tool_choice": "auto" 与由 create_deepseek_tui_chat_tools_json 生成的工具集。另有两条值得注意的旁路:
- 当检测到压缩类提示词(输入中包含
CONTEXT CHECKPOINT COMPACTION标记)时,请求切换为独立的交接简报路径:系统消息改用 cycle_handoff_briefing.md,模型固定为deepseek-v4-flash,max_tokens降为 4096、temperature设为 0.2; - 正常请求路径中,最新用户消息会被注入
<turn_meta>块(当前日期、工作区、优先关注的活动路径),工具消息中的update_plan结果会被 format_deepseek_tui_tool_outputs 重写为带进度百分比的「Plan updated: X pending, Y in progress, Z completed」结构化文本。
设计启示:表现与行为分离的三层防线
把 calm.md 放回整体看,CodeWhale 对「人格不得越权」的约束依赖三道防线,这也是任何想做 Agent 提示词工程的人可以直接复用的模式:
- 层级显式化。base.md 用一张九级表把「谁听谁的」写死,而不是依赖模型自行体会。calm.md 的标题直接把自身编号为 Tier 8,使该层在任何冲突场景下都能引用宪法条款自我降权。
- 规则可核查。calm 的风格规则全部是可逐条核对的输出特征(感叹号、最高级、前言句式、句长),禁区清单全部是行为动词短语(阻止工具调用、拦截写入、推翻验证)。没有「保持专业」这类无法验收的表述。
- 架构兜底。提示词层面的自律之外,运行时还有硬约束:calm 层自己声明「the actual runtime gates still determine what tools can execute」对应的正是条款级的审批策略与沙箱机制;而
authority_recap在系统提示词尾部重复权威声明,对抗长会话中的层级遗忘。
如何阅读与扩展这套提示词
- 定位人格规则:直接打开 calm.md,全部 30 行即该层的完整定义;
- 查层级定义:看 base.md 第七条法律层级,确认任意一层被引用时的权威排序;
- 查注入顺序:看 build_system_prompt 的
sections数组,它决定了每段提示词在最终 system 消息中的先后位置; - 查同层资产:
deepseek_tui_prompts/下的 yolo.md、auto.md 与 compact.md 分别对应条款层与运行模式层,可与 calm 对照阅读,理解「行为规则」与「呈现风格」两种提示词在写法上的差异; - 对照其他 harness:harness/mod.rs 组织了多个 harness 变体(
deepseek_tui、kimi_cli、opencode、pi、qwen_code等),各自携带独立的系统提示词资产,说明「一套法律层级 + 可替换人格/模式层」是可横向复用的组织方式。
需要注意的适用前提:calm.md 目前是该 harness 中唯一的人格文件(personalities/ 下仅此一个条目),且从源码看它以常量形式在编译期固定注入,运行环境不提供切换人格的开关——它是 CodeWhale TUI 的默认(也是当前唯一的)呈现风格。
atomcodeClaude Code 的开源替代方案。连接任意大模型,编辑代码,运行命令,自动验证 — 全自动执行。用 Rust 构建,极致性能。 | An open-source alternative to Claude Code. Connect any LLM, edit code, run commands, and verify changes — autonomously. Built in Rust for speed. Get StartedRust0623
Hy4-previewHy4 preview 是由腾讯混元团队研发的新一代混合专家(MoE)旗舰模型。模型总参数量 770B,每个 token 激活 49B,主干共包含78层,第一层采用标准 FFN,其余 77 层均为 MoE 结构,每层包含 256 个路由专家与 1 个共享专家,每个 token 激活 top-8 路由专家及共享专家。主干之外原生内置 1 层 MTP(总参数量 10B,激活 0.7B)以支持投机解码。Python00
GLM-5.3GLM-5.3 与 GLM-5.2 使用相同的基座模型——所有提升均来自后训练。与 GLM-5.2 相比,它在复杂编程和长程任务上的表现显著提升。Jinja00
GLM-5.3-FlashGLM-5.3-Flash (320B-A18B),是GLM-5系列的首个原生多模态模型。320B总参数,能力超过GLM-5.2Jinja00
Spark-X2.5-4BSpark-X2.5-4B 旨在让强大的 AI 更实用、更高效、更易获得。在广泛日常任务中表现强劲,涵盖对话、写作、翻译、推理、编码、工具调用以及智能体工作流,并在同等规模的开源模型中取得领先成绩。Spark-X2.5 将面向效率的架构与最高 1M tokens 的原生上下文窗口相结合,并支持 200 多种语言。Python00
Spark-X2.5-1.7BSpark-X2.5-1.7B 旨在让强大的 AI 更加实用、高效且易于获取。这些模型在广泛的日常任务中表现出色,涵盖对话、写作、翻译、推理、编程、工具调用和智能体工作流,并在同等规模的开源模型中取得领先结果。Spark-X2.5 将面向效率的架构与最高 1M tokens 的原生上下文窗口相结合,并支持 200 多种语言。Python00