Skip to main content

记忆agent

需求

  1. 个人工具
    1.  作为第二大脑,思维助手,能帮助思考、总结
      1. 提升所有人的智力水平
      2. 带无限的记忆,超越人类
      3. 通过Agent(人工算法+LLM)的方式实现高层级抽象、意识、复杂逻辑。Agent的不断运行类似于人脑的逐步思考
    2. 信息工具,不仅仅是笔记
      1. 实现一些基本的对信息的思维逻辑操作
      2. 优秀的人工接口,自然,聪明
  2. 独立系统
    1.  不断学习知识,通过庞大的记忆和渐进式推理能力,攻克领域问题
    2. 作为一个独立的生产力工具
  3. 资料库
    1. 存储所有可能的信息作为数据库
    2. 分等级的信息存储和索引
      1. 自己写的笔记
      2. 阅读过的文章
        1. 添加简易评论和信息,用于AI自动检索和处理关系
        2. 大脑只能记住比较抽象和高级别的印象,AI根据这个印象联系到详细的信息
      3. 没有阅读的相关的各种论文,网络文章
      4. 书籍
    3. 对资料库进行分析和抽象,建立知识树,知识逻辑关系,快速像大脑一样在大量的知识里面整理信息
      1. 这一设计模拟了人类解决复杂问题时的策略:边查边记、反复比对、直至知识充分
  4. 本地数据库管理知识的片段,在密集的信息堆里面不断的编织,把LLM当作是信息的运算器
    1. 多次检索:是否支持多次检索。
    2. 自适应检索:是否能根据当前信息动态地决定是否需要执行进一步的检索动作以及检索什么。
    3. 模型训练:是否对不同阶段进行了针对性训练或偏好优化。
    4. 一次性知识总结:是否在检索后执行一次性检索知识总结。
    5. 迭代知识总结:是否支持在多轮检索中多次更新、积累、总结知识。
  5. 需要支持一些特殊的信息形式的模版: Jira, wiki, todo_list

AI笔记可能的级别

  1. 骨灰
    1. 主动执行一些复杂的任务
      1. 从笔记里面的链接提取出特定的信息
      2. 主动搜索互联网的相关信息,进行知识补充和整理
  2. 专家
    1. 纯自然语言的交互方式,表达和输出
    2. 所有的信息都由AI对输入进行格式化后记录,采用符合要求的自然语言的表达方式进行输出
    3. 对记录的所有信息进行整理,归类,合并,推理后更新记录
    4. 工具自动对信息进行逻辑判断,生成需要的总结和新结论
    5. 不输出原始笔记
  3. 高级工具
    1. 定义一套通用的笔记表达接口
    2. 按照固定的模版或者规范进行对笔记表示、整理、记录,形成固定的格式化的笔记条目
      1. 比如层级式的笔记方法,好理解,表达力强,正如本文
    3. 通用的信息表达方案
  4. 工具
    1. 存储原始的笔记信息文本
    2. 支持自然语义搜索原文

应用界面和交互

  1. 不能仅仅通过对话的形式,应该支持更复杂的交互方式
    1. 自动提供可能的操作选项
    2. 框选字段作为输入
  2. 不仅仅是笔记输入
    1. 屏幕框选和注释
    2. 文章、链接、引用
    3. 输入是思维片段、文本片段,录音,视频,文档,摘要,想法,手稿
  3. 类似于: 代码生成工具,主动提示等
  4. 通过问答的形式交互
  5. 个人思维助理,管家
    1. 输入日历、行程
    2. 导入短信、聊天记录
    3. 接入网盘、照片、云盘

实现1

  1. 数据库记录信息之间的关系
  2. LLM模型通过多步操作API进行交互式的信息生成和编辑
  3. 存储原始的输入的文本、信息
  4. 支持对输入的信息,文本进行结构化,由标签和固定的格式进行表示
    1. 使用固定的逻辑表达式进行编码?
  5. 通过标签和逻辑表达式,查询需要的信息
  6. 对一个或者多个表达式进行转换和处理生成一个表达式
  7. LLM的操作

    1. 根据一段信息生成对应的标签和对应的相似度,可以指定提取信息标签的深度、精细度
    2. 计算一个标签和其他标签的关系,充分,必要,充要,不充分,不必要
    3. 标签的逻辑关系表的存储和查询修改接口
    4. 一个自然语言的问题,输出以标签作为输出的结果,“标签的逻辑关系表”的增删查改的操作
    5. 支持多次交互的LLM操作
      1. 反向Prompt引导深度思考,反逻辑
      2. 多版本对比与迭代
      3. 多个LLM相互验证,能进行自我验证和测试正确性
      4. 结构化输出控制

实现2

  1. 基于LLM的专用meaning处理大模型:小规模,缓慢更新迭代
    1. 功能 
      1. 处理固定的已知的有限的逻辑,生成meaning,形成meaning tree
        1. 逻辑关系类
        2. 已知的名词、事物
      2. 支持生成和识别已知的meaning的组合
      3. 输出和输出特殊的高效的meaning token:meaning tree
      4. 使用AI算法,对meaning tree 进行处理、总结
        1. 分析形成高级抽象meaning,存储与数据库
          1. 通过低层级的通用语义(单词)的逻辑组合,不断组合成高层级语义
          2. 形成由逻辑关系不断组合形成的“逻辑树”,存储与数据库
          3. 可以先总结底层(短语)级别,逐渐形成更高级的逻辑树
        2. 数据库+传统算法+AI处理数据
          1. 由LLM生成待查询的逻辑需求
          2. 数据库按照固定的逻辑进行查询输出
          3. LLM不断一步步进行“查询”“处理”直到不需要查询更多信息
    2. 实现?
      1. 使用更大的LLM进行训练数据生成:文本->meaning token的数据集
  2. 结合meaning tree+原文,推理meaning, 生成prompt
  3. 数据库记录meaning和原文,以及之间的关系:不断更新数据
  4. 公用的LLM根据prompt组织生成自然语言:通用的大规模LLM

实现3

设定

  1. LLM只是一个语言计算器,数据库+逻辑抽象+人工调度算法
    1. 当前的LLM使用大量的权重完全包含和模拟了整个存储和检索,但是容量有限
    2. 人工算法+数据库不能表达复杂的自然语言推理
  2. 类似于把自然语言用传统算法进行表达“计算”
    1. 传统算法模拟大脑的行为,好像不太合理
    2. LLM推理一次等价于大脑思考一次
    3. 每个样本都会存储一个树,经过不断的推理,不断得往高层级的语义合并,引用,减少存储规模
    4. 自动遗忘
    5. 每个语义用一个整形(64bit?)的索引表示,适合高速检索
  3. 怎么复用(链接)相同语义到相同的表示token? xx是xx、因为所以、A是B,B是C,A是C
  4. 人工算法和数据库是不是表示所有的自然语言的关系??

过程

  1. 语句 -> LLM生成单词树 ->  单词树查询数据库 -> 单词树匹配/推理  -> 重新组织语言
  2. 语句 -> LLM总结 -> 单词树(meaning tree)
  3. 单词树节点之间的关系的学习:
    1. 不断遍历可能的节点之间的逻辑关系并记录到数据库
      1. xAx == x被xA
      2. x1 and x2 and x3 ==  x2 and x3 and x1
      3. 只有抽象高度通用的语义才能穷举
    2. 通过关系树表达,形成一个完全符合自然语言的向量数据库
      1. 明文,非黑盒,可以单点修改
      2. 无需大量计算,可以通过简单的算法进行检索
      3. 和LLM的区别是,不能进行复杂的逻辑推理和自然语言的组织
  4. 正向:单词树 ->  prompt -> LLM -> 单词树的关系 -> 关系数据库
    1. 根据已经有的单词树数据库生成prompt
    2. LLM进行自然语言推理
    3. 更新单词树节点之间的关系
    4. 不断循环,从低节点开始建立关系,逐步向上总结到高层级
  5. 逆向:LLM 生成样本 -> 单词树  ->  关系计算 -> 关系数据库
    1. 使用LLM生成的同义句
    2. 根据已知的逻辑关系,更新数据库

实现4

  1. LLM 格式化输入的高级语义到向量空间并存储:seq -> LLM encoder -> vector -> DB 
  2. 检索距离接近的vector的seq,重新组织语言:seq -> LLM encoder -> vector -> DB -> seq -> LLM -> seq

方法学

  1. 需要设计一个健壮的系统,流程化,体系化,理论支撑
  2. 多层级的架构,层级解耦,独立迭代,不断增强
  3. 本质上需要的能力和处理流程
    1. 解析“输入”表达的含义 -> LLM
    2. 根据问题进行计算
    3. 查找已有的通用知识和专有知识
    4. 汇总结果进行输出 -> LLM
  4. 需要存储和计算那个层级的信息?
    1. RAG只是向量化存储原文,无计算能力
    2. LLM权重存储和计算自然语言的高层级抽象
    3. 明确的语法+逻辑推理
      1. 需要人工算法处理类似自然语言,非常复杂
    4. LLM映射高层级的语义到向量,只要匹配向量就可以(类似于打标签)
      1. 不可靠,向量只是梯度下降后的最优的结果
      2. 黑盒,没有标准的映射关系,LLM变更需要重新生成所有的向量
  5. 分几个模块,分别负责什么功能?
    1. 语言能力:自然语言的理解和组织能力:LLM
    2. 信息、知识的格式化,检索
    3. 信息、知识的合理性检查、扩展、举一反三
  6. 存储的信息的数据结构,存储效率,检索效率
    1. LLM权重通过向量空间的转换(类似于查找表)来记录所有的信息,相同的语义会高度复用同一个向量空间
      1. 不可控,不透明,不可靠
      2. 存储容量有限
    2. RAG只是记录每个token的向量空间,只有相同的token才能被索引
      1. 不能支持高级语义的检索,“不聪明”

接口

  1. 数据定义

    1. 信息:一段通用的文本信息:包含level的信息
    2. 标签:简短的一种信息,level较高,可以使用逻辑关系组合成标签树
    3. 关系:包含所有可能的信息之间的关系
  2. LLM接口

    1. 使用指定的标签列表对一段信息进行格式化

      1. 对信息进行格式化,解释
      2. 输出使用标签和逻辑关系组成的标签树
    2. 输入一大堆信息/标签,根据指定的标签树,提取和摘录对应的结果

      1. 根据标签进行查询、匹配
    3. 输入两个(多个)信息/标签树,判断合理性,有无矛盾

  3. 数据库接口

    1. 查询输出指定level的标签
    2. 根据标签树输出所有相关信息
    3. 增加信息、标签、关系
    4. 删除指定的信息、标签、关系

可能的方案

  1. RAG
  2. graphrag  nano-graphrag
  3. Google NotebookLM
  4. 开源onyx https://github.com/onyx-dot-app/onyx
  5. kivy作为本地跨平台APP开发,python, 底层SDL2 性能好,多平台
  6. https://github.com/reflex-dev/reflex 开发web程序 纯python
  7. svelte web开发框架 + pocketBase数据库
  8. 使用gradio https://github.com/gradio-app/gradio.git 纯python,svelte底层,集成度高
  9. MemOS  Memory3项目
  10. A-MEM: Agentic Memory for LLM Agents