我会把我一开始的需求内容再次发给你,你要逐个文件确认,需求被正确实现,功能代码正常可用:
我计划写一个可插拔的记忆模块,通过转发模型调用请求时,存取记忆来实现模型记忆外挂。这里会涉及到内容的处理,记忆的结构化梳理,向量数据库的读写,嵌入模型的调用等,所以最好使用 python 实现。
我的设想是,这个记忆模块是一个类似模型的存在,通过传入的内容这个记忆模型每次都在发生参数变化和热重载,通过 http://memory-server/http://openai-api/v1/chat/completions 的形式,在转发过程中,发生记忆的读取,并同时在不过多影响响应的情况下完成记忆存储。
应允许用户传递请求头 MEMORY_USER ,由用户自行设置 512 位以内的字符作为用户识别码,用来对记忆进行分隔,当设置了 MEMORY_USER 时应只允许读取 MEMORY_USER 关联的记忆和 SYSTEM 关联的记忆,未设置 MEMORY_USER 时默认 MEMORY_USER 为 SYSTEM 。
记忆应考虑联想记忆法,宫殿记忆法等多种记忆方法,以及数学统计学的聚类等方法,用于构建易于检索的记忆模型。
因为单纯的通过向量模型嵌入,可能因为关键词匹配度不够高导致检索不到理想的记忆,所以应该对记忆内容做元关联和抽象化标签控制。
如果涉及到需要 llm 模型介入的功能,应在环境遍历中另外配置使用,减少转发模型接口的调用,避免主要请求开销过大照成卡顿。
关于 Milvus 向量数据库,有几点细节需要注意
1. 应使用官方的 python 库实现相关操作
2. 在环境变量中设置了 MILVUS_DB_NAME=memory ,如果不存在需要自动创建
3. 需要按 MEMORY_USER 对数据进行隔离
4. 如果需要的时候,允许自动创建 collections ,但是需要同时自动将 collections 设置为加载。
复盘下,记忆的存储是否考虑了数据库字段长度,是否考虑了嵌入模型的最大 token 和维度。模型接口的返回内容也应该记录到记忆当中。
需要用一张表,记录时间,MEMORY_USER ,记忆归属角色 role:user/system/ai/other ,和具体的记忆内容,并和记忆向量表做关联,便于用户问题涉及时序,如几时问过什么问题,上一次问的什么问题之类的内容时,可以根据时序获取到记忆内容,且需要这张表能有分页 api 用于查询,便于将对话记忆等内容,通过接口获取,用于前端渲染。
并帮我开发一个简单的前端展示页面,用户能够在页面缓存中记住 MEMORY_USER ,模型 api ,模型名称等配置信息,然后进行对话,要支持 markdown 渲染。使用上面的接口获取记忆数据进行渲染,当滚动记忆对话往上时,逐步加载更多的对话记忆内容。
进行一遍复盘,确保所有功能需求被实现,确保代码功能正常。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.