Skip to content

一个具有记忆、能听说读写的"数字生命" / A digital life with memories that can say, hear, read and write

License

Notifications You must be signed in to change notification settings

LeafYeeXYZ/DigitalLife

Repository files navigation

Digital Life / 数字生命

创造一个可以带走的"数字生命". 本项目同时支持 Web 和桌面端, 两端共享除特定 API 外的所有代码. 开发环境要求包括 Rust (仅桌面端需要)、Node.jsBun (可通过 npm install -g bun 安装)

如果您想快速体验本项目, 请访问 https://being.leafyee.xyz, 并在本地运行 ollama 服务 (见2 开发和部署)

记忆模型 (暂定) 示意图

1 项目说明

2 开发和部署

本项目的 LLM 推理通过 ollama 实现. 请提前安装 ollama, 运行 ollama pull qwen2.5:7b (或通过环境变量指定的其他模型) 下载模型, 并启动 ollama 服务

在 Web 端时, 您可能需要手动设置 ollamaCORS 策略以避免请求被浏览器拦截: 首先设置本地的 OLLAMA_ORIGINS 环境变量为 "*""being.leafyee.xyz"、在终端中运行 echo $OLLAMA_ORIGINS 确认设置成功、在终端中运行 ollama serve 启动服务 (即使进行了上述设置, 仍然可能会在 Safari 中遇到 CORS 问题, 请尝试使用 Chrome 或其他浏览器)

2.1 环境变量

以下环境变量都具有默认值, 正常情况下无需手动设置

环境变量名 默认值 说明
VITE_OLLAMA_SERVER_URL 'http://127.0.0.1:11434' ollama 服务地址
VITE_OLLAMA_MODEL_NAME 'qwen2.5:7b' ollama 使用的模型
VITE_OLLAMA_MAX_TOKENS 100000 上述模型的最大 token
VITE_OLLAMA_LABEL_NAME 'Ollama - <model_name>' 前端显示的模型名称
VITE_F5_TTS_SERVER_URL 'http://127.0.0.1:5010/api' 本地 F5-TTS 服务地址

2.2 桌面端

# 克隆项目
git clone https://github.com/LeafYeeXYZ/DigitalLife.git
cd DigitalLife
# 安装依赖
bun install
# 运行
bun d:tauri
# 构建
bun b:tauri

2.3 Web 端

请注意 Web 端构建后的输出目录为 /dist-web 而非 /dist

# 克隆项目
git clone https://github.com/LeafYeeXYZ/DigitalLife.git
cd DigitalLife
# 安装依赖
bun install
# 运行
bun d:web
# 构建
bun b:web

3 待办事项

  • 软件图标
  • 黑暗模式, 包括 index.html
  • 记忆功能
  • 连续对话功能

4 长时记忆

4.1 现有做法

  • MemoryBank: Enhancing Large Language Models with Long-Term Memory (Zhong et al., 2023): 通过记忆库 (MemoryBank) 实现长时记忆. 具体来讲, 将用户的每批对话生成摘要并按时间顺序存储在记忆库中, 过程中更新用户画像. 对话时, 将用户输入用向量搜索的方式与记忆库中的摘要进行匹配, 将提取到的摘要、用户画像、当前对话上下文输入给模型; 参考艾宾浩斯遗忘曲线, 按照时间和重复次数来确定记忆遗忘率
  • Recursively Summarizing Enables Long-Term Dialogue Memory in Large Language Models (Wang et al., 2024): 通过递归生成摘要/记忆来实现长时记忆. 具体来讲, LLMs首先记忆小的对话上下文, 然后递归地使用之前的记忆和后续的上下文来生成新的记忆
  • "My agent understands me better": Integrating Dynamic Human-like Memory Recall and Consolidation in LLM-Based Agents (Hou et al., 2024): 通过与人类记忆类似的"线索回忆"和"记忆巩固"机制实现长时记忆. 具体来讲, 将用户输入向量化, 并存入/更新数据库 (新增/加强记忆), 随后在数据库中进行相关性查询, 根据相关性、记忆巩固强度、记忆存储的时间三个因子, 找到能回忆起的记忆并发送给模型
  • A Human-Inspired Reading Agent with Gist Memory of Very Long Contexts (Lee et al., 2024): 并非直接的长时记忆方案, 而是一个处理长文本的方法. 具体来讲, 将长文本分为多个片段, 每个片段生成一个摘要并将其与原文关联, 根据任务和所有摘要决定要查询哪些片段; 以上过程均由模型自主完成 (原文给出了每步的提示词). 最后将得到的精简信息输入给模型
  • MemGPT: Towards LLMs as Operating Systems (Packer et al., 2024): 借鉴虚拟内存的思想, 让模型通过函数调用读取外部记忆. 具体来讲, 将模型的上下文分为主上下文 (包含系统提示词、记忆调用结果、当前对话上下文) 和外部上下文 (记忆); 每次对话时, 模型自主进行函数调用, 读写外部上下文, 更新主上下文的记忆调用结果, 并通过更新后的主上下文进行推理

4.2 本项目设计

  • 本项目期望能够"创造一个可以带走的'数字生命'", 即能在大多数笔记本等轻量级设备中运行. 因此, 我希望它的长时记忆系统能够具有较低的计算负载
  • 我认为人工智能将是人类文明的下一形态, 未来的人类将可以通过脑机接口等技术与 AI 深度集成, 乃至最后融合. 因此, 对未来的"数字生命", 我仍为它应当是源于人类而在某些方面超越人类的. 因此, 它的记忆机制将参考人脑设计, 但在记忆的遗忘等方面可以有所差异 (即可以有比人类更持久的记忆)
  • 我希望将 AI 的"自我概念"和"对用户的概念" (类似于 MemoryBank (Zhong et al., 2023) 中的用户画像) 单独存储, 以提升 AI 回答的一致性和让 AI 拥有"灵魂" (自我概念) 和"爱" (对用户的概念)

基于以上考虑, 本项目的长时记忆设计为: 让当前上下文中包含"自我概念"、"对用户的概念"、当前上下文 ("短时记忆"), 并让模型按需提取总结后的记忆 ("长时记忆"); 提取的方式是模型自主决策的函数调用 (Function Calling) 但还未决定是把所有长时记忆的摘要输入当前上下文, 还是让模型在需要记忆时, 由另一个模型上下文来检索长时记忆; 前者实现简单、对话较为流畅, 后者可能更能适应超级长文本. 同时, 短时记忆向长时记忆的更新也由模型通过函数调用来自主决策时机: 当前上下文中会包含每一条消息的时间信息, 模型可以根据时间信息和用户输入来决定是否更新长时记忆; 如果模型发出更新长时记忆的请求, 另一个模型上下文将通过结构化输出的方式更新长时记忆, 并递归更新"自我概念"和"对用户的概念"

5 Live2d 模型版权声明

本项目内的所有模型皆为在 B 站发布的免费模型, 请勿直接复制使用, 如有需要可至原地址获取

6 参考文献

  • Hou, Y., Tamoto, H., & Miyashita, H. (2024). “My agent understands me better”: Integrating Dynamic Human-like Memory Recall and Consolidation in LLM-Based Agents. Extended Abstracts of the CHI Conference on Human Factors in Computing Systems, 1–7. https://doi.org/10.1145/3613905.3650839
  • Lee, K.-H., Chen, X., Furuta, H., Canny, J., & Fischer, I. (2024). A Human-Inspired Reading Agent with Gist Memory of Very Long Contexts (arXiv:2402.09727). arXiv. https://doi.org/10.48550/arXiv.2402.09727
  • Packer, C., Wooders, S., Lin, K., Fang, V., Patil, S. G., Stoica, I., & Gonzalez, J. E. (2024). MemGPT: Towards LLMs as Operating Systems (arXiv:2310.08560). arXiv. https://doi.org/10.48550/arXiv.2310.08560
  • Wang, Q., Ding, L., Cao, Y., Tian, Z., Wang, S., Tao, D., & Guo, L. (2024). Recursively Summarizing Enables Long-Term Dialogue Memory in Large Language Models (arXiv:2308.15022). arXiv. https://doi.org/10.48550/arXiv.2308.15022
  • Zhong, W., Guo, L., Gao, Q., Ye, H., & Wang, Y. (2023). MemoryBank: Enhancing Large Language Models with Long-Term Memory (arXiv:2305.10250). arXiv. https://doi.org/10.48550/arXiv.2305.10250