尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

LongtermChatExternalSources记忆原理揭秘:Embedding向量化与余弦相似度检索的完整拆解

LongtermChatExternalSources记忆原理揭秘:Embedding向量化与余弦相似度检索的完整拆解 LongtermChatExternalSources记忆原理揭秘Embedding向量化与余弦相似度检索的完整拆解【免费下载链接】LongtermChatExternalSourcesGPT-3 chatbot with long-term memory and external sources项目地址: https://gitcode.com/gh_mirrors/lo/LongtermChatExternalSourcesLongtermChatExternalSources 是一个开源的GPT-3 长期记忆聊天机器人核心能力正是 Embedding 向量化与余弦相似度检索。这篇教程带你逐行看懂 chat.py 的记忆实现10 分钟搞懂 AI 聊天机器人记住过去的完整原理。为什么聊天机器人需要长期记忆默认的 GPT-3 API 是无状态的——每次请求都是全新的聊完即忘。这个项目用一套纯文件 向量的方案解决记忆问题架构非常轻量目录角色类比nexus/每条对话的消息 向量情景记忆海马体internal_notes/GPT-3 生成的记忆摘要陈述记忆压缩笔记gpt3_logs/每次调用的提示词与输出调试日志 一句话概括每条消息都变成一个高维向量存盘提问时再靠向量夹角找出最相关的旧记忆。Embedding 向量化把文字变成 1536 维向量记忆的入口在 gpt3_embedding 函数def gpt3_embedding(content, enginetext-embedding-ada-002): content content.encode(encodingASCII,errorsignore).decode() response openai.Embedding.create(inputcontent,engineengine) vector response[data][0][embedding] # this is a normal list return vector关键点调用 OpenAI 的text-embedding-ada-002模型将任意文本编码为1536 维浮点向量发送前先用 ASCII 编码过滤掉非英文字符errorsignore兼容当时 API 的限制向量的魔法在于语义越相近的两段文字向量方向越接近可以直接翻一下真实数据感受 nexus/log_1674383041.28684_USER.json一句good morning raven就对应一个包含 speaker、时间戳、uuid 和上千行向量的 JSON 文件。余弦相似度找出意思相近的记忆拿到查询向量后如何判断哪条旧记忆最相关答案在 similarity 函数def similarity(v1, v2): return np.dot(v1, v2)/(norm(v1)*norm(v2)) # return cosine similarity这就是教科书级的余弦相似度公式cos θ 点积 / (模长 × 模长)。结果范围是 -1 ~ 1越接近 1 表示两条记忆方向越一致越相关只比较方向、忽略长度因此早上好和清晨问候能被判为高相似而不受句子长短影响检索逻辑在 fetch_memories 函数 中遍历nexus/全部历史消息逐条打分、排序跳过与当前消息完全相同的向量最后返回Top 10条最相关记忆。完整检索链路AI 想起过去的 6 个步骤主循环 chat.py 第 141-172 行 把上面的零件串成流水线每一轮对话都执行用户输入 → 向量化gpt3_embedding(a)连同 uuid、时间戳存为nexus/log_时间戳_USER.json载入全部历史load_convo 按时间正序读取nexus/下所有 JSON检索情景记忆fetch_memories(vector, conversation, 10)取余弦相似度最高的 10 条摘要压缩summarize_memories 把 10 条记忆拼成文本块用 prompt_notes.txt 让 GPT-3 写成-开头的笔记列表再为笔记块本身生成向量存入internal_notes/组装提示词prompt_response.txt 中NOTES和CONVERSATION两个占位符分别填入摘要笔记和最近 4 条消息生成并存档回复text-davinci-003输出答案回复同样向量化后存回nexus/完成一轮闭环流程图直观版用户输入 ──▶ Embedding 向量化 ──▶ 余弦相似度检索 Top10 记忆 ▲ │ │ ▼ 回复存档 ◀── GPT-3 生成 ◀── 摘要笔记 最近4条消息用真实数据验证记忆效果打开 internal_notes/notes_1674383045.5926764.json能看到 GPT-3 实际压缩出的记忆笔记User: Asked about difficulty sleepingRaven: Suggested establishing a regular sleep schedule…User: Asked about the singularityRaven: Explained the concept of the singularity…8 条原始对话被浓缩成 8 行要点uuids/times字段保留了可回溯的溯源链。此外dream_sequence.py 是作者预留的梦境模块复用了同一套向量化与相似度能力用于离线提炼用户偏好原则提示词见 prompt_dream_user.txt属于项目规划中的扩展方向。快速上手5 步跑通你的记忆型 GPT-3 聊天机器人按照 README.md 的说明操作克隆仓库git clone https://gitcode.com/gh_mirrors/lo/LongtermChatExternalSources创建虚拟环境python3 -m venv env并激活安装依赖pip install openai numpy将 OpenAI API Key 写入项目根目录的openaiapikey.txt末尾不要换行运行python chat.py即可在命令行与有记忆的 RAVEN 对话常见问题Q1为什么不用向量数据库而是逐文件遍历消息量小时暴力扫描足够且架构零依赖、完全透明代码里的 TODO 注释也表明后续计划引入时间邻近召回等优化见 chat.py 第 58 行。Q2记忆会无限膨胀吗每条消息一个 JSON 文件笔记是增量摘要而非全量重算配合uuid索引便于后续去重与归档。Q3换成中文能用吗当前errorsignore会丢弃非 ASCII 字符直接输入中文会被清空改造该过滤逻辑即可支持这也是动手练习的好切入点。总结LongtermChatExternalSources 用不到 200 行代码演示了 RAG 时代记忆系统的雏形——向量化存记忆、余弦相似度找记忆、大模型压缩记忆。吃透 chat.py 后你就能为任何无状态大模型应用挂上长期记忆。【免费下载链接】LongtermChatExternalSourcesGPT-3 chatbot with long-term memory and external sources项目地址: https://gitcode.com/gh_mirrors/lo/LongtermChatExternalSources创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表