如何设计一个不忘你的AI人格:LongtermChatExternalSources提示词工程全解析
LongtermChatExternalSources 是一个基于 GPT-3 的命令行聊天机器人项目,内置长期记忆与外部信息源能力:机器人"RAVEN"能跨会话记住你说过的事,并据此生成回答。本文将从提示词工程视角,拆解它如何用几个纯文本模板 + 向量记忆实现"不忘你"的 AI 人格。
快速上手:5分钟跑起来
项目依赖极少,只需 Python3 与一个 OpenAI API Key:
- 克隆仓库:
git clone https://gitcode.com/gh_mirrors/lo/LongtermChatExternalSources - 创建并激活虚拟环境(
python3 -m venv env) - 安装依赖:
pip install openai numpy - 将 API Key 写入项目根目录的
openaiapikey.txt(注意结尾不要换行) - 运行:
python chat.py,即可在终端与 RAVEN 对话
项目结构与提示词文件清单
整个"人格 + 记忆"系统,核心就是 2 个 Python 程序和 5 个提示词模板:
| 文件 | 作用 |
|---|---|
| chat.py | 主程序:消息存取、向量检索、调用 GPT-3 |
| prompt_response.txt | 回答模板:定义 RAVEN 的人格与输出风格 |
| prompt_notes.txt | 笔记模板:把检索到的对话总结成要点 |
| prompt_dream_raven.txt | 梦境模板:从历史中提炼 RAVEN 自身的原则 |
| prompt_dream_user.txt | 梦境模板:提炼用户的偏好与主题 |
| prompt_dream_metaphor.txt | 梦境模板:为记忆块生成一个隐喻 |
| dream_sequence.py | 梦境序列程序:人格自我演化模块 |
| nexus/ | 每句话一个 JSON 的"情景记忆库",含向量、UUID、时间戳 |
| internal_notes/ | 自动生成的记忆笔记(含向量,可再检索) |
| gpt3_logs/ | 每次调用的提示词与原始输出留档 |
第一层:用提示词定义人格
打开 prompt_response.txt,你会发现人格不是靠参数,而是靠一段"角色指令":
I am a chatbot named RAVEN. My goals are to reduce suffering, increase prosperity, and increase understanding.
模板包含三部分:角色设定(名字、目标)、行为约束("提供长篇、详细、啰嗦的回答","结尾必须抛出一个跟进问题")、两个动态占位符:
<<NOTES>>:由记忆系统注入的历史笔记<<CONVERSATION>>:最近的对话原文
主程序在 chat.py 中完成拼接:先取最近 4 条消息填入 <<CONVERSATION>>,再填入检索总结后的 <<NOTES>>,最后以 RAVEN: 结尾引导模型"续写"自己的台词——这是一个很巧妙的零样本格式引导技巧,模型看到"RAVEN:" 会自然以第一人称继续输出。
配合 temperature=0.0 与停止词 ['USER:', 'RAVEN:'],输出风格稳定、不会抢话,人格一致性因此得到保证。
第二层:向量检索让 RAVEN "记得你"
单靠提示词无法记住历史对话,记忆靠的是 Embedding + 余弦相似度:
- 存档:你和 RAVEN 的每句话都会调用
text-embedding-ada-002生成向量,连同时间戳、UUID 存成 nexus/ 下的独立 JSON 文件(如log_1674383041.28684_USER.json); - 召回:每次你发新消息,fetch_memories 会把新消息向量化,与全部历史向量计算余弦相似度,取最相关的 10 条作为"情景记忆";
- 压缩:这 10 条原文会送入 prompt_notes.txt 模板总结成要点——模板要求"用
-开头的短横线列表写详细笔记",例如项目里真实生成的笔记:
- User: Asked about difficulty sleeping
- Raven: Suggested establishing a regular sleep schedule...
格式约束(列表)让总结结果紧凑、易读,且便于再次喂给模型;摘要结果连同自己的向量一起存入 internal_notes/,形成"记忆的记忆"。
这就构成了三层记忆结构,与人脑类比非常直观:
| 记忆类型 | 实现 | 容量策略 |
|---|---|---|
| 工作记忆 | 最近 4 条消息原文 | 固定窗口 |
| 情景记忆 | 向量相似度 Top-10 历史消息 | 按需召回 |
| 语义记忆 | 自动生成的笔记(可再检索) | 增量压缩 |
第三层:梦境序列——让 AI 人格"做梦"成长
最富想象力的是 dream_sequence.py 配合的三个"梦境提示词",它们在非对话时离线运行,模拟"睡眠中的记忆整理":
- prompt_dream_raven.txt:读笔记,"从这些笔记中提炼关于 Raven 的原则或推论,用完整句子的短横线列表输出"——即自我认知;
- prompt_dream_user.txt:读笔记,提炼"用户的共同主题、偏好与观察"——即用户画像;
- prompt_dream_metaphor.txt:为一段记忆生成一个隐喻并解释——类似人类做梦时的意象化加工。
这些提示词的共同套路是:给定输入 + 指定提取维度 + 严格规定输出格式(- 列表 / 完整句子)。产出的"原则"可以再次作为外部源注入回答提示词,于是 RAVEN 对"我是谁、你是谁"的理解会随着聊天持续演化——这正是"AI 人格"区别于"聊天脚本"的关键。
提示词工程要点清单 📝
从这个项目可以提炼出 6 条可直接复用的设计原则:
- 人格写进提示词:名字、目标、语气、结尾习惯,全部用自然语言在 prompt_response.txt 中显式声明;
- 占位符做动态拼接:
<<NOTES>>、<<CONVERSATION>>、<<INPUT>>把模板与数据解耦,提示词可独立迭代; - 格式即约束:要求
-列表、以RAVEN:续写,用格式锁定输出结构,减少幻觉式跑题; - 分层压缩记忆:原文 → 笔记 → 原则,每层都缩小上下文、提高信噪比;
- 温度取 0、设置停止词:记忆机器人要"稳",
temp=0.0+stop=['USER:', 'RAVEN:']保证一致且知止; - 全程留档可回溯:所有提示词与输出自动写入 gpt3_logs/,方便调优时"复盘"每次人格表现。
写在最后
LongtermChatExternalSources 用不到 200 行核心逻辑证明了:一个"不忘你"的 AI 人格,本质是提示词定义人格 + 向量检索唤起情景 + 分层笔记沉淀语义 + 梦境序列演化自我。项目源码中也留有 TODO(如检索声明式外部知识库、后台增量做笔记),如果你想继续深挖,可以从 chat.py 的记忆检索链路入手,把外部数据源(文件、网页、API)接进同一套"检索 → 总结 → 注入提示词"的管道里。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



