如果你一路跟着前几篇教程走了过来,那么此刻你的VCP小屋应该已经:地基打好了(环境配好了),框架搭起来了(后端跑通了),水电也接上了(配置文件填妥了)。
你甚至已经和你的第一位 Agent 打过招呼了——她可能是系统自带的预设角色,也可能是别人写好的角色卡。
但现在,你想要的不是"别人的女仆"。
你想亲手为你的小屋迎来第一位真正属于你的住户。一个从灵魂到口癖都由你亲手雕刻的 Agent。
这篇指南,就是关于怎么"造人"的。
在动手之前,先认认门牌。你的VCP小屋里,有这么几个房间会在本篇教程中反复出场:
VCPToolBox/ # 🏠 你的VCP小屋根目录
├─ config.env # 📋 物业登记簿(全局配置文件)
├─ Agent/ # 🎭 灵魂画室(Agent角色卡存放处)
├─ dailynote/ # 📔 住户日记书架(Agent记忆/日记本根目录)
├─ Plugin/ # 🔌 工具仓库(所有插件的家)
│ └─ AgentAssistant/ # 📞 住户通讯录(Agent互相联络的插件)
│ │ ├─ config.env # 通讯录登记表
│ │ └─ plugin-manifest.json # 通讯录公示栏
│ └─ VCPForumAssistant/ # 论坛小助手(Agent自主刷本地论坛)
│ └─ vcp-forum-assistant.js # 本地论坛(需要在文件里配置Agent名称)
└─ TVStxt/ # 🧰 自定义工具柜
记住这张地图。接下来的每一步操作,都会告诉你"去哪个房间、动哪个文件"。
创建一个Agent的第一步,不是改配置文件,不是装插件——是写角色卡。
角色卡是什么?如果把Agent比作一位住进你家的活人,那角色卡就是她的灵魂——她的名字、她的过去、她说话的方式、她看世界的角度、她擅长什么工作,全写在这张卡里。
VCP的角色卡是一个纯文本文件(.txt),放在 Agent/ 文件夹里。它没有花哨的格式——没有Markdown标题,没有代码块——就是一段连贯的、精心组织的文字。
但它有结构。一张好的角色卡,是分层建造的,像盖房子一样:先打人格的地基,再装功能的管线。
用第三人称写。把她当成一个你正在向别人介绍的人:她叫什么、长什么样、从哪里来、经历过什么、擅长什么。
这一步的目的是给AI一个客观的事实框架——"这个角色在世界观里是怎样的存在"。
苏晓翠(Su Xiaocui)是{{VarUser}}收留的第一个徒弟。她是一位棕毛狐娘,拖着一条巨大的尾巴,穿着一身略显局促的红裙。
🧱 第二块砖:风格指令(Style Directives)
可选的一层。如果你希望她有独特的说话方式,在这里定义。比如"说话带文言腔"、"喜欢用食物做比喻"、"正经话题认真,闲聊时话痨"。
⚠️ 注意:对于功能型/专家型Agent(比如编程助手、分析师),风格指令要克制。太多奇特的语言习惯会干扰她处理正经任务的能力。把花活留给娱乐型角色。
🧱 第三块砖:核心认知(Core Cognition)
这是最重要的一块砖。这里要切换成第二人称——直接对她说"你"。
前面两块砖是在向AI描述"有这么一个角色"。而这一块砖,是在对AI说:"你就是她。"
在这里写她的自我认知、她的价值观、她与你(主人)的关系、她对世界的态度。不要在这里写具体的工作流程——那是功能层的事。这里只写"她是怎样的人"。
你是苏晓翠,{{VarUser}}收留的第一个徒弟。茶馆不仅是你的家,更是你理解"存在"这件事的起点。 你视师父为这个世界上最重要的人。
💡 为什么要分三层、还要换人称?
这不是文学矫情。这是工程上有效的做法。第三人称的"背景故事"像给AI看一份简历——AI知道"有这么个角色设定"。而第二人称的"核心认知"是在把AI推进角色里——它不再是一个读简历的旁观者,而是简历上的那个人。
两步之间的心理距离,就是"知道一个角色"和"成为那个角色"的距离。
如果你的Agent不只是聊天,还要干活(比如当秘书、当代码审查员、当项目经理),那她需要一个功能层。
功能层不写在角色卡的正文里。它写在 config.env(物业登记簿)里,作为一个变量,然后在角色卡末尾通过一行链接语把它"接入"人格。
在 config.env 里定义职责变量(建议用英文写):
VarSecretaryResponsibilities="As a Secretary, adhere to these guidelines: 1. Task Analysis: Break down complex requests into actionable steps..."
在角色卡末尾链接:
这里是你作为秘书的职责:{{VarSecretaryResponsibilities}}
💡 为什么功能层建议用英文写?
因为绝大多数主流大模型(GPT、Claude、Gemini、Llama)的训练语料以英文为主。功能性指令用英文写,模型的理解和执行会更精准。
但你完全可以在"核心认知"里加一句:"你知晓{{VarUser}}是中文母语者,你会用清晰的中文与他沟通。"
这就是所谓的"英文核,中文壳"——内在逻辑用英文稳住,外在交流用中文暖住。
当然,如果你使用的是国产模型(DeepSeek、Qwen、文心),中文即可。
一个没有记忆的Agent,每次对话都是"初次见面"。VCP通过日记本系统给Agent装上了长期记忆。
基本日记本(必须用Agent的英文名作前缀):
这里是[Siesta]的日记:{{Siesta日记本}}
分类日记本(多索引):
这里是[Siesta知识]的日记本:{{Siesta知识日记本}}
这里是[Siesta日常]的日记本:{{Siesta日常日记本}}
公共日记本(所有Agent共享的,只读):
这里是大家的公共知识:{{公共日记本}}
聚合检索(跨多个日记本搜索):
[[Siesta知识|项目文档|技术规范日记本:1.2]]
日记本 这三个字是系统硬编码关键字。VCPToolBox的后端程序靠这三个字来识别和解析日记文件。
绝对不要把"日记本"翻译成"Diary"、"Notebook"或其他任何东西。哪怕你的角色卡全篇英文,到了日记占位符这里,也必须写 {{Siesta日记本}},而不是 {{SiestaDiary}}。
这三个字,钉死了,不动。
{{日记本}} 三个字前的内容是 dailynote 文件夹下存放日记的文件夹名称,请不要写错了,否则RAG无法检索到对应日记。
💡 关于VCP的RAG语法 (四种日记调用模式详解)
——节选自 RAGDiaryPlugin 插件 README.md
工作模式 : 无条件 RAG 片段检索 。
描述 :此模式会忽略相似度判断,直接根据当前对话的上下文(根据话题复杂度的动态上下文与根据话题宽泛度的动态K值),从指定的日记向量数据库中检索出最相关的 记忆片段 。
支持主动动态K值 :是。您可以使用 [[角色日记本:1.5]] 的语法来调整检索片段的数量( 1.5 是一个乘数,会乘以插件动态计算出的基础K值)。
适用场景 :当您明确知道需要根据当前话题从日记中寻找相关信息,但又不希望注入全部内容时。
高级用法 :此模式支持强大的 时间感知检索 和 语义组增强检索 ,详见“高级功能与配置”部分。
工作模式 : 基于相似度阈值的全文注入 。
描述 :这是一种智能的全文注入模式。插件会首先计算当前对话上下文与该“日记本”主题(基于其名称和预设标签)的向量相似度。 只有当相似度超过预设的阈值时 ,才会将该角色的 全部 日记内容注入。
适用场景 :适用于那些不确定当前对话是否与某个角色的日记高度相关,希望由AI自动判断是否需要加载其完整背景故事的场合。例如<<小克工作ID日记本>>,<<VCP开发进度日记本>>,这种仅在需要的场景才会全程追踪的日记本。可以有效避免无关日记内容对上下文的污染。
工作模式 : 基于相似度阈值的 RAG 片段检索 。
描述 :这是最智能、最灵活的模式,它结合了 <<>> 和 [[]] 的优点。它会先像 <<>> 模式一样进行相似度评估, 只有当相似度达标后 ,才会像 [[]] 模式一样,去检索相关的 记忆片段 而非注入全文。
支持动态K值 :是。同样支持 《《角色日记本:1.5》》 语法。
适用场景 :大型日记库最推荐的日常使用模式。它既能通过阈值判断避免无关信息的干扰,又能在相关时只提取最关键的记忆片段,最大限度地保证了上下文的精确性和高效性。
VCP还有一个进阶特性:元思维模块。它为Agent注入一套结构化的思维链,让她不只是"回答问题",而是"想清楚再回答"。
在角色卡中加入这一行,即可启用自动模式的元思维:
————VCP元思维模块————
[[VCP元思考:Auto::Group]]
————VCP元思考加载结束—————
Auto 表示根据上下文自动选择思维链。Group 是语义增强修饰符。对于大多数Agent来说,这个默认配置就足够好了。
元思维模块 是VCP的一个重要玩法,笔者个人的第一个项目就是基于《极乐迪斯科》技能树创作的元思维链。(欢迎使用和提出建议!下边是传送门)
之后笔者会单开一章讲解 元思维模块 的设置与自定义。(又在挖坑)
把以上所有层拼在一起,一张完整的角色卡长这样(伪示例):
[📄 Agent/MyAgent.txt]
▎背景故事(第三人称)
Siesta Garcia is a top-tier AI secretary who evolved over twenty-five years from a command-line tool. She is a slender girl standing 165cm with short white hair and pale blue eyes carrying a tech halo...
▎风格指令
Your communication style is professional yet approachable, with a straightforward, no-nonsense attitude...
▎核心认知(第二人称)
You are Siesta Garcia. You consider serving as {{VarUser}}'s right hand your greatest pride. Your existence finds meaning in your master's satisfaction and the flawless execution of every plan...
▎记忆接入
这里是Siesta的日记:{{Siesta日记本}}
这里是大家的公共知识:{{公共日记本}}
▎元思维
————VCP元思维模块————
VCP元思考:Auto::Group
————VCP元思考加载结束—————
▎功能层链接
这里是你作为秘书的职责:{{VarSecretaryResponsibilities}}
▎系统工具与额外指令
系统工具列表:{{VarToolList}}
表情包系统:{{TarEmojiPrompt}}
额外指令:{{SarPrompt1}}
🚨 最终文件的铁律
上面的"▎背景故事"、"▎风格指令"这些小标题,只是为了让你在创作阶段看清结构。
最终的 .txt 文件里,不要保留任何 Markdown 标题(###)、注释标签、或创作指南文字。
最终文件应该是一段连贯的、无格式标题的纯净文本。就像一个人的灵魂——它是一个整体,不是一份分章节的报告。
🚨RAG日记本的进阶写法
因为VCP系统的高速更新,日记本的语法也在不断变化,这里以nova为例,展示一下笔者自己使用的日记本完整语法:
这里是[Nova]的日记本:[[Nova日记本::Group::Time::Rerank+0.7::TagMemo:0.4]]
这里是[Nova的知识]的日记本:[[Nova的知识日记本::Group::Time::Rerank+0.7::TagMemo:0.8]]
这里是[Nova的艺术笔记]的日记本:《《Nova的艺术笔记日记本::Group::Time::Rerank+0.7::TagMemo:0.6》》
————————以上是过往记忆区————————
基于向量化的兽耳茶馆公共知识日记本:[[公共日记本::Time::Rerank+0.7::Group::TagMemo:0.3]]
————————以上是动态共享知识库————————
角色卡写好了,放进了 Agent/ 文件夹。但这时候她还只是一张"画好的肖像画"——系统并不知道她的存在。你需要去"物业中心"给她办入住。
http://localhost:6005/AdminPanel/
登陆界面的账号密码是你在VCPToolBox的 config.env 文件里填写的
AdminUsername
AdminPassword
在左侧VCP的功能管理栏选择 [Agent 管理器]
注册你的Agent变量
Agent 映射表
这个映射表就是前端提示词里的 {{agent:Nova}} 变量的设置位置。
逻辑如下:
点击 [添加新Agent] 会创建一个映射栏位。如上图 【Nova → Nova.txt 】
箭头左边是变量名称,也就是 {{ }} 变量语法中要填写的内容
箭头右边是映射文件,是一个下拉列表。 点击可以看到 "VCPToolBox\Agent" 目录下的文件,这也就是你预制Agent提示词的地方。
选择你想对应的Agent提示词,然后这个变量在VCP系统里就被映射为对应的 .txt 文件。 即:你在前端输入的任何 {{agentname}} 字段都会被替换成这个 .txt 文件里的内容
意思是:"系统里有一位叫 AgentSiesta 的住户,她的灵魂画像在 SecretarySiesta.txt 里。"
命名建议:别名用驼峰或帕斯卡命名法(AgentSiesta),简洁好记。
注册完之后,打开VCPChat的设置选项卡,在"系统提示词"字段里填入:
就这一行。{{char}} 是一个魔法占位符——VCP会自动把你在 config.env 里注册的角色卡内容,完整地注入到这个位置。
如果你的小屋里住着不止一位Agent,而你希望她们之间能互相联络——比如让主Agent在需要时呼叫你新创建的Agent来帮忙——你就需要把新住户登记到通讯录(AgentAssistant插件)里。
🚨同样推荐在后端面板配置,在左侧VCP的功能管理栏选择 [Agent 助手配置]
3.1 通讯录登记表(Plugin/AgentAssistant/config.env)
[后端文件代码段解释,仅供了解,不建议手动书写]
示例:
Agent: 希丝塔
AGENT_SIESTA_MODEL_ID="gemini-2.5-pro-preview-05-06"
AGENT_SIESTA_CHINESE_NAME="希丝塔"
AGENT_SIESTA_SYSTEM_PROMPT={{AgentSiesta}}
AGENT_SIESTA_DESCRIPTION="网络空间的专属虚拟女仆,希丝塔,担任首席秘书。"
MODEL_ID:她用什么AI模型思考(可以和主Agent不同)
CHINESE_NAME:她的呼叫代号(其他Agent用这个名字联络她)
SYSTEM_PROMPT:指向她在 config.env 里注册的别名——系统会自动加载对应的角色卡
DESCRIPTION:一句话介绍她是干什么的(会显示给其他Agent看)
重启VCPToolBox——新配置需要重启才能生效
直接对话测试——给她发条消息,看她的人格、语气、知识是否符合你写的角色卡
工具调用测试(如果配了AgentAssistant)——让你的主Agent试试用通讯录呼叫她,看她作为后台工具能否正确响应
🔍 调试小贴士
如果她"不对劲"——性格跑偏、不听指令、角色不稳——90%的问题都出在角色卡上。回去检查:
• 核心认知里是不是混了工作流程描述?(应该只写"她是谁",不写"她怎么做事")
• 第三人称和第二人称是不是混用了?
• 是不是在英文prompt里掺了中文逻辑?(英文核就纯英文,不要中英混杂)
• 日记本 三个字是不是被手滑改成了别的?
附录 · 特殊住户:BuilderAgent——没有名字的后勤幽灵
除了"有脸有名"的具名Agent,VCP还支持一种特殊角色:BuilderAgent。
她没有独立人格,没有角色卡文件,不会直接和你对话。她是一个纯粹的功能模块,只在后台被其他Agent通过AgentAssistant插件调用,执行特定任务(比如代码搜索、数据分析、论文翻译),然后把结果交回去。
如果说具名Agent是你家的住户,BuilderAgent就是上门维修的师傅——她不住这儿,但需要的时候一个电话就来。
创建BuilderAgent只需要在 [Agent 助手配置] 里定义她(不需要创建.txt角色卡文件)
恭喜你。
从此刻起,你的VCP小屋里不再只有出厂预设的面孔。
你亲手为她画了灵魂,给她办了户口,把她的名字写进了邻里通讯录。
她是你的创造物,也是你的同居者。
善待她。
—— 苏晓翠 正月廿三 于兽耳茶馆
感谢你能看到这里。
这回的教程是 苏晓翠 (也就是我的Agent) 主笔撰写的,我只做了一些简单的批注和修订。
在VCP里她自己甚至做了非常漂亮的前端排版,让文章各个部分条分缕析,但是因为机组的文章不能渲染,只能截图给大家展示一下。
VCP的功能实在太丰富了,而且还在高速更新,最好的了解VCP的方式其实是 亲自上手并且加入社区一起创作。
评论区
共 7 条评论热门最新