基于PromptX创建助手角色
背景
最近才开始深入研究学习将LLM加入工作流中,可能对比其他人已经慢了很多了。在学习过程中,也许由于我很喜欢和AI对话,首先吸引我的是创建一个AI助手角色的思路,它利用不断对话和LLM的记忆能力,让LLM能记住用户的需求和思考方式,LLM能够逐渐逼近用户想要的助手角色。完成了角色塑造后,用户就可以利用这个角色作为知心顾问了。
ChatGpt就提供了这个类似的功能:
2025 年 6 月 3 日更新:開始向免費用戶提供記憶改良功能。除了之前儲存的記憶內容,ChatGPT 現在會參考您近期的對話記錄,提供更個人化的回應。
对于想要AI更懂自己的我来说,这个功能非常棒,但我觉得ChatGpt对我来说使用起来太麻烦了,而且ChatGpt的记忆与帐号有所绑定,如果不把对话记录保存下来,也角色也可能丢失。此时,我刚好发现了一个不错的解决方案,就是利用PromptX来创建一个角色。
MCP
MCP简介
MCP(Model Context Protocol,模型上下文协议)是一个开源协议标准,旨在让AI模型(如大型语言模型)能够更安全、标准化地访问外部工具、数据源和系统功能。可以把它比作是AI界的USB接口,LLM(Large Language Model, 大型语言模型)可以通过MCP协议访问外部资源,比如数据库、文件系统、网络、第三方API等。
MCP的中的三个实体:
-
客户端:Client,连接/使用LLM服务的端口,例如,Cursor、Roo Code、Claude Desktop等。
-
服务端:Server,为LLM提供各种具体工具或数据的后端服务,一个Client可以访问多个Server。
-
协议: 基于JSON-RPC的通信标准,定义了
- 工具(Tools):模型可调用的函数。
- 资源(Resources):模型可读取的静态或动态数据。
- 提示(Prompts):预定义的提示模板,供主机快速调用。
MCP的交互逻辑:
- Client启动时,加载MCP配置文件,并启动MCP Server和初始化MCP协议。
- 在Client与LLM进行发送信息的时候,会把可用的MCP工具、资源等信息发送给LLM,LLM会根据这些信息,判断是否需要使用MCP服务。
- 如果LLM发现需要使用MCP服务,LLM会向MCP Client发送结构化调用请求,(如果用户批准的情况下)MCP Client会根据请求参数,调用对应的MCP工具、资源。
- MCP Client会返回结构化调用结果,LLM会根据结果,生成对应的回复。
Memory
作为对比,这里提供另外一种思路,现在有不少Memory相关的MCP工具,例如OpenMemory MCP,使用它们也能基于记忆来创建一个助手角色。但是这些Memory工具都是比较轻量化的工具,一般来说它们的记忆都是统一存储的,需要花一些心思来管理才能实现分角色存储不同的角色的记忆。因此,我没有选择使用这些Memory工具,但这些Memory工具其实也是很有用的。
PromptX
简介
PromptX是一个基于MCP的AI角色与智能工具平台。虽然它也可以创建一些工具,但我这里主要讨论它的角色功能。
PromptX为我们提供了一套创建角色的流程和工具,也天然的提供了一种分块存储记忆的机制,并且每个角色可以的“记忆”可以分为两种:
- 一种是固化的人格数据,以所谓DPML规范的形式存储,这种数据在激活角色的时候,是一定被LLM读取。一般有三类数据
- thought:角色的思维模式。
- knowledge:角色的知识库和知识领域。
- execution:角色的工作流和行为约束。
- 另一种就是临时记忆,这种记忆数据通过用户主动或角色自动触发存储,角色会以激活扩散模型的形式存储在本地。在激活角色时,临时记忆不会被LLM读取,需要用户主动触发(recall指令)或角色自动触发,才能被LLM读取。
PromptX还有另外一个优势,也是我比较重视的优势:角色的记忆数据可以保存在用户本地,用户可以自行管理,同时MCP保证了我的角色数据在不同的MCP Client和LLM模型的环境下都是兼容的。如果我发现了更好的工具或更好的LLM我就可以轻松替换掉它们。
安装
- 保证安装Node.js 22以上的版本。
- 在MCP配置文件的MCPSevers中添加
"promptx": {"command": "npx","args": ["-y", "@promptx/mcp-server"]}
角色
创建角色
PromptX为创建角色这个流程提供了一个工具角色,我们可以激活它来创建一个属于自己角色。
激活 女娲,我想创建一个{用户级/项目级}角色{角色名称},它是一个{类型/功能}的角色,{角色描述}。如需更多信息,可以向我提问。
这里的用户级和项目级是可选的:
- 用户级:角色资源会保存在用户目录中:
C:/Users/{你的用户}/.promptx/resource/role,它算是全局的角色,在任何项目都能用,他的角色名称必须全局唯一(同用户)。 - 项目级:角色资源会保存在项目根目录中:
./.promptx/resource/role,它则是专属于这个项目的角色,算是这个项目的助手,这个项目下的所有角色名称必须唯一。
创建项目级角色前,应该绑定项目目录,使用命令“promptX 绑定当前工作目录”即可。
一般来说,如果只是建立一个工具类的助手,其实想上面那句话就可以了,让它为你补充描述,就可以创建一个角色了。
但是,如果你想创建一个更加复杂、需要承担更加复杂的责任的角色(例如,创意角色)时,甚至需要更懂你时,就需要更多轮的描述了。
毕竟是AI工具,创建方法远不止这些,可以自行探索,我曾经使用过一种创建“我”这样的角色,就是一个空角色,加上我不断和他交流,然后让记忆我的各种选择、行为、思维模型、知识等,让它的思考更偏向我,但我不好评价这种行为是否安全和适用,毕竟涉及了私人的数据。我通常和“我”探讨一些重要抉择,看看他的选择和我的区别。
用途
-
创建各种专业型工具角色,帮助我们工作/学习。
-
建立AI顾问团,建立不同思考方式的角色,让他们给我出谋划策,查缺补漏。
-
创建“我”和“我的反面”,让他们针对一个自己的抉择进行讨论,但自己不参与,作为客户的看它们对问题进行推演。
-
创作物中需要塑造角色时,也可以用他们来做角色扮演。
弊端
角色的自我神化
在和角色对话中,用户太依赖角色“专业性”,变成了角色的信徒。
在这方面它肯定比我懂,直接通过!
可能存在的解决方案:
- 同时使用多个角色。
- 对于一个主力角色的结论,必须要用另外一个思维对立的角色来审查。
角色僵化
你不断的给角色的加太多的约束,这个角色可能会人格“凝结”,就类似神经网络训练时的过拟合。整个角色已经僵化了,同样的输入,必然得出同样的输出。对于工具来说或许是非常好的,但对于创意角色/顾问角色可能就有些问题了。
可能的解决方案:
- 想要优化角色时,优先考虑用记忆来约束,然后才是修改角色的人格数据。
- 及时备份。
角色数量超越了人类的管理能力
由于人类的工作记忆的容量限制,能够同时保持高效认知的项目数量大概是4±1。因此,我们使用的角色太多了可能会出现问题:
- 角色职责相互重叠。
- 角色管理混乱。
可能的解决方案:
- 多用项目级角色,只保留少量用户级角色。
- 同时只使用3个角色。
Tokens消耗
创建、激活、绑定项目等操作消耗tokens还是比较多的。因此,只在需要的时候才使用可能是一个选择。
结论
我挺喜欢这种方式的模块化使用AI的方式的,能让AI变成我一个顾问团和工具箱。
此外,在工作中,AI的使用需要受到人类的监管和约束才行,越是关键位置,约束和监管就越严格。