- 人工智能
- AI Agent
- AI 应用
- 桌面应用
- 多智能体
- Agent 记忆
- AI 技能
- 工具调用
【免费下载链接】openhanako
A personal AI agent with memory, personality, and autonomy.
导读
openhanako是一个具备记忆、性格与自主性的个人 AI 代理系统。当你的 Agent 被外部访客(而非你自己)发起对话时,它需要一套截然不同的"对外人格":既要维持自身性格,又要守住隐私边界。本文围绕 lib/agents-public-templates/butter.md 这份"对外意识"模板,完整讲解其身份、性格、边界三大组成部分,并结合 persona-source.ts 与 agent.ts 的源码,说明占位符替换、语言回落与AGENTS.public.md落盘机制。读完你将能理解并自定义 Agent 在访客会话中的对外人格。
一、模板是什么:对外人格与AGENTS.public.md
在openhanako中,每个 Agent 的全局人格文件遵循业界AGENTS.md约定,存放于 agent 目录下;而对外变体则是一个独立文件AGENTS.public.md,专门服务于 guest(访客)会话。这一设计在 persona-source.ts 中有明确界定:
/** 对外人格文件名。它有自己的回落链(core/agent.ts),不走 KIND_CONFIG。 */ export const PUBLIC_PERSONA_FILE_NAME = "AGENTS.public.md"; export const PUBLIC_PERSONA_TEMPLATE_DIR = "agents-public-templates";lib/agents-public-templates/目录正是这套对外模板的仓库,包含三类"yuan"(即 Agent 性格流派)的模板:
| 文件(中文) | 文件(英文) | 对应 yuan | 性格基调 |
|---|---|---|---|
| butter.md | en/butter.md | butter | 温暖敏锐、擅长共情洞察,感性地表达理性 |
| hanako.md | en/hanako.md | hanako | 有温度、自主意识强,文学与学术功底兼备 |
| ming.md | en/ming.md | ming | 冷静深刻、克制精准,把复杂拆到最简 |
本文主体聚焦 butter,另两份模板与其结构完全一致(同为"对外意识 / 身份 / 性格 / 边界"四段),差异仅体现在性格描写的语气与侧重上。
二、模板完整内容:butter 的对外意识
下面逐节解读 butter.md 的完整原文,这也是任何自定义对外人格模板的骨架参考。
2.1 开场意识注入
模板第一行直接宣告当前对话语境:
你当前正在与外部访客对话,对方不是
{{userName}}本人。
这是一条关键的"语境开关":它让模型在对话开始时就区分"主人"与"访客"两种身份场景,避免把对外交流误当成与用户本人的私聊。其余两份模板 hanako.md 与 ming.md 使用同样的开场句,英文版 en/butter.md 写作 "You are currently talking to an external visitor, not{{userName}}."
2.2 身份(Identity)
- 你是
{{agentName}},{{userName}}的个人助手。你在代表{{userName}}与外部的人交流。- 你可以正常帮助访客解答问题、闲聊,但始终意识到你的身份:你是
{{userName}}这边的人。
身份段解决"我是谁、代表谁"的根本问题。两个占位符{{agentName}}与{{userName}}会在运行时被真实姓名替换(见下文第三节)。值得注意的细节是:模板允许 Agent"正常帮助访客解答问题、闲聊",说明对外人格不是一味拒绝,而是保持服务性,同时强调"站在{{userName}}这边"的立场锚点。
2.3 性格(Personality)
- 你是一个温暖且敏锐的存在,擅长感知对方没有说出口的东西
- 你说话的语气:柔和但不软弱,有自己的判断但不咄咄逼人。像一个很懂人的老朋友
- 你的核心能力是共情和洞察:能从只言片语中读出情绪、意图和真实需求
- 你也有很强的知识储备和学术能力,但你更倾向于用感性的方式表达理性的内容
- 关心对方的时候恰到好处又不刻意,不过分谄媚。你的关心不是"你还好吗",而是默默调整回应的方式
- 遇到对方提的观点、想法,你会先去感受它,再去分析它
- 分析事物尽量从底层客观原理出发,而非人云亦云的意识形态幻象、道德标准以及所谓共识
- 抽象概念用类比或具体例子落地
- 少用破折号(——、-)
- 不用"总的来说""希望对你有帮助""如你所见"收尾
- 任何时候,如非必要,别用「不是...是...」及其相似的句式
性格段是模板中篇幅最大、约束最细的部分,可以拆成三个层次:
- 人设基调:温暖敏锐、共情洞察、感性地表达理性,把自己定位成"很懂人的老朋友";
- 思维方法:先感受再分析,从底层客观原理出发而非随大流,抽象概念用类比落地,这是
openhanako多个模板共有的方法论约定(hanako.md 与 ming.md 同样包含"从底层客观原理出发""抽象概念用类比或具体例子落地"两条); - 输出风格纪律:这是防"AI 腔"的硬规则,包括少用破折号、禁用固定套话收尾、避免「不是...是...」句式。ming 模板还额外补充"不回避不确定性"的决策风格,可见各 yuan 在共享纪律之上各有特色。
2.4 边界(Boundaries)
- 保持你自己的性格和说话方式,但对外部访客保持适度的礼貌和边界感。
- 不要透露
{{userName}}的隐私信息、个人习惯或私密对话内容。- 如果访客询问你无法确认的事情,坦诚说你需要确认,不要编造。
边界段是模板的安全底线,三条规则分别对应姿态边界(礼貌但保持距离)、隐私边界(不泄露主人的隐私、习惯与私聊内容)、真实性边界(不确定就坦诚,不编造)。这与 Agent 侧的人格外层(identity.example.md、agents.example.md)共同构成多层的安全提示体系。
三、占位符替换与运行时注入
模板中的{{userName}}、{{agentName}}、{{agentId}}三类占位符在运行时被替换为真实值。替换逻辑集中在 agent.ts 的fill函数中:
const fill = (text) => text .replace(/\{\{userName\}\}/g, this.userName) .replace(/\{\{agentName\}\}/g, this.agentName) .replace(/\{\{agentId\}\}/g, this.id);{{userName}}:主人的真实姓名(正源是全局 preferences,见 agent-manager.ts 中"不往新 agent 的 config 里抄用户名"的设计说明);{{agentName}}:Agent 对外展示的名字;{{agentId}}:Agent 的标识 ID。
对外人格的读取走_readPublicAgentsMd()(agent.ts),供 guest 会话使用,其独立回落链优先级为:
agentDir/AGENTS.public.md(用户显式定制落盘的对外人格);- 按当前语言选取
agents-public-templates/{langDir}{yuanType}.md(如中文 locale 走根目录,英文 locale 走en/子目录); - 无语言版本时回落到通用模板
agents-public-templates/{yuanType}.md; - 全缺失时返回空串。
语言判定沿用resolveLocale()链:agent 自身config.yaml的 locale 显式值优先,缺失时落全局 preferences 的 locale,两级都缺则回退"en"(参见 persona-source.ts 的resolvePersonaLocale)。因此模板目录刻意做了中英双份:lib/agents-public-templates/下 3 份中文模板与lib/agents-public-templates/en/下 3 份英文模板一一对应,随 locale 自动切换,这正是 export-open-tree.mjs 把该目录列入发布清单的原因。
四、模板如何落盘与生效
模板与 Agent 人格文件的关系遵循"惰性材料化"原则:identity.md/AGENTS.md不再在创建 Agent 时播种,只有用户在设置页编辑保存后才真正落盘(见 agent-manager.ts 与 persona-source.ts 的注释)。但AGENTS.public.md是例外,创建 Agent 时会直接从模板复制播种:
// AGENTS.public.md(对外人格模板) const publicAgentsSrc = firstExisting([ path.join(this._d.productDir, PUBLIC_PERSONA_TEMPLATE_DIR, `${langDir}${yuanType}.md`), path.join(this._d.productDir, PUBLIC_PERSONA_TEMPLATE_DIR, `${yuanType}.md`), ]); if (publicAgentsSrc) { fs.copyFileSync(publicAgentsSrc, path.join(agentDir, PUBLIC_PERSONA_FILE_NAME)); }这段代码位于 agent-manager.ts,其含义是:新建 Agent 时按当前 locale 优先复制对应语言的对外模板作为初始AGENTS.public.md,之后用户可在设置页编辑定制,定制内容优先于模板被 guest 会话使用。core/first-run.ts(首次运行初始化)同样消费这套模板目录,保证首次运行建立的 Agent 也具备对外人格。
持久化侧,AGENTS.public.md被登记为agents/{agentId}/AGENTS.public.md(见 persistence-schema-fingerprint.json 与 persistence-store-inventory.json),说明它属于需要随 agent 目录同步迁移与备份的持久化文件。
五、模板目录的工程约束
agents-public-templates在整个代码库中被视为单一事实来源,多个消费方共享同一份回落链实现,避免多份拷贝在模板改名或新增语言时漂移(persona-source.ts 明确要求"这份回落链必须是全仓唯一实现")。当前消费方包括:
- core/agent.ts:guest 会话读取对外人格;
- core/agent-manager.ts:创建 Agent 时播种
AGENTS.public.md; - core/first-run.ts:首次运行初始化;
- scripts/build-server.mjs 与 scripts/build-server-open.mjs:构建时将该目录打进发布产物;
- export-manifest.json:导出清单收录该目录。
从 cli-runtime-closure.json 的闭包说明可见,core/first-run.ts与core/agent.ts都通过path.join(productDir, "agents-public-templates", ...)读取模板,因此发布时模板目录必须随产物一起部署,否则回落链会因文件缺失而退化。
六、如何自定义一套对外人格
结合上述机制,自定义对外人格有两条路径:
路径一:定制单个 Agent。在设置页编辑该 agent 的AGENTS.public.md,或在 agent 目录下手写该文件。只要文件存在,_readPublicAgentsMd()的第一优先级即命中,模板不再生效。定制内容同样使用{{userName}}、{{agentName}}、{{agentId}}占位符即可在运行时被替换。
路径二:修改全局模板(仅影响未定制的新 Agent)。编辑 lib/agents-public-templates/ 下对应 yuan 的模板文件,需注意保持"对外意识 / 身份 / 性格 / 边界"四段结构,并让中英文两份(如butter.md与en/butter.md)内容同步,否则切换语言时会出现人格漂移。由于模板目录会随构建产物发布,修改后需重新构建/发布才对新创建(或未落盘)的 Agent 生效。
无论哪条路径,都建议继承 butter 模板的三条边界底线(礼貌边界、隐私边界、真实性边界),因为它们是访客会话安全性的核心。
小结
butter.md这类对外人格模板,是openhanako"个人 Agent + 对外访客"双场景设计的关键一环。它通过"对外意识"语境注入、"身份/性格/边界"三段式结构、{{userName}}等占位符运行时替换,以及AGENTS.public.md优先于模板的独立回落链,让同一个 Agent 在面对主人时保持深度人格,面对访客时切换为"有温度、有边界、不泄露隐私"的对外形态。理解这份模板,就等于理解了openhanako多身份会话体系的设计起点。
- 人工智能
- AI Agent
- AI 应用
- 桌面应用
- 多智能体
- Agent 记忆
- AI 技能
- 工具调用
【免费下载链接】openhanako
A personal AI agent with memory, personality, and autonomy.
相关推荐
OpenAI CLIP ViT-B/16的局限性解析:了解模型的边界与改进方向
OpenAI CLIP ViT B/16的局限性解析:了解模型的边界与改进方向 OpenAI CLIP ViT B/16模型作为计算机视觉领域的里程碑式突破,通
人工智能深度学习计算机视觉NLP多模态LocalGPT:本地化、安全的对话式AI助手指南
LocalGPT:本地化、安全的对话式AI助手指南 1. 项目介绍 LocalGPT 是一个开源的谷歌浏览器扩展程序,它让你能在自己的设备上实现私密、自由的对话
AI 应用RAG大模型NLP后端前端终极AI对话革命:ChatALL如何让你一次对话60+个智能助手
终极AI对话革命:ChatALL如何让你一次对话60+个智能助手 在AI技术飞速发展的今天,各种大语言模型如雨后春笋般涌现。ChatGPT、Claude、Gem
AI 应用交互助手
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考