Second Me 源码分析
一、项目概述与愿景
Second-Me 是一个开源项目,旨在创建一个“数字第二自我”(AI Self)。这个“第二自我”是一个个性化的AI,能够学习和模拟用户的个性和知识,成为用户在数字世界的延伸。
项目的核心理念是让每个人都能拥有一个属于自己的、可控的、可进化的AI,而不是被通用的大型AI所取代。其主要目标包括:
- 个性化AI: 训练一个能够真实反映用户个性和背景的AI分身。
- 数据主权: AI在本地进行训练和托管,保证用户数据的隐私和100%控制权。
- 智能扩展: 通过去中心化的网络,让用户的“第二自我”能够相互连接和协作,从而扩展个体的智能。
- AI原生应用: 作为一个AI身份接口,支持构建新型的AI原生应用,如角色扮演和AI空间协作。
二、核心能力
Second-Me 的核心能力是围绕“AI分身”的创建、训练和应用构建的。其能力体系可以概括为以下金字塔结构:
1 | AI分身创建与管理平台 |
三、技术架构与栈
项目采用前后端分离架构,并使用Docker进行容器化部署,确保了开发和部署的便捷性。
3.1 整体项目结构
1 | Second-Me/ |
lpm_frontend(前端模块): 使用 React(Next.js), TypeScript 和 antd/Tailwind CSS 构建的现代Web应用,为用户提供图形化界面来交互、训练和管理AI分身。lpm_kernel(后端核心): 项目的核心,采用分层架构 (L0, L1, L2),负责AI的训练、推理、记忆管理和API服务。mcp(Me Control Protocol): 自定义的“自我控制协议”,用于程序化地与本地或公共的“第二自我”实例通信,是实现“AI空间”等协作功能的基础。integrate(集成模块): 包含与第三方服务集成的示例代码,例如微信机器人,让用户可以通过外部应用与AI分身交互。
3.2 技术栈概览
- 后端: Python, Flask
- 前端: React, Next.js, TypeScript, antd, Tailwind CSS
- 数据库: 关系型数据库 (通过 SQLAlchemy ORM 访问), 向量存储
- 部署: Docker, Docker Compose
- AI 框架与模型:
- 基础模型: 主要使用 Qwen2.5 系列模型
- 推理引擎: llama.cpp 用于高效推理
- 数据处理: 集成 Microsoft GraphRAG 进行实体关系提取和数据合成
- 训练框架: 支持 LoRA 和 DPO (直接偏好优化)
- Apple Silicon优化: 在Mac M系列芯片上,可使用 MLX 进行训练和运行
四、核心源码与工作流分析
4.1 后端分层设计 (L0-L2)
lpm_kernel 采用分层架构,将AI的构建过程分解为多个层次,逻辑清晰:
L0(基础生成与分析层): 负责与底层大语言模型交互,执行文档基础分析(如摘要、关键词提取)和原始文本生成。L1(个性合成与记忆层): 在L0之上,负责从原始数据中提取结构化的记忆,并合成个性特征,如用户简介、性格特点和兴趣主题。L2(深度理解与微调层): 负责管理AI的长期记忆,并根据用户的“记忆”数据对模型进行DPO微调,实现深度理解和个性化。
4.2 核心工作流:从文档到记忆
这是项目实现个性化学习的核心流程,展示了如何将用户的原始文档(如PDF, TXT)转化为AI可用的记忆。
1. API入口与文件处理 (memories/routes.py & memory_service.py)
- 用户通过
POST /api/memories/file上传文档。 StorageService接收文件,进行查重,并将原始文件保存至resources/raw_content/。- 随后,调用
ProcessorFactory.auto_detect_and_process()启动文档内容提取。
2. 处理器工厂与内容提取 (process_factory.py & processors/)
ProcessorFactory采用自动发现机制,扫描processors/目录下的具体处理器(如PDF处理器、Markdown处理器)。- 每个处理器(如
PDFProcessor)使用特定库(如PyMuPDF)从文件中提取纯文本内容。 - 提取出的文本内容 (
raw_content) 被保存在数据库的Document表中,供后续处理。
3. L0层:文档基础分析 (lpm_kernel/kernel/l0_base.py)
- L0层接收提取出的文档内容,调用LLM生成标题、摘要和关键词,为上层记忆处理提供基础数据。
1 | def analyze(self, doc: DocumentDTO, insight: str = "") -> Dict: |
4. L1层:记忆提取与合成 (lpm_kernel/kernel/l1/l1_manager.py)
- L1层从文档中提取结构化的“笔记(Note)”和记忆向量,是形成长期记忆的关键。
- 完整流程:
- 从文档中提取笔记(Note)和记忆向量。
- 对记忆向量进行聚类,生成主题(clusters)。
- 为每个聚类生成“shade”(记忆片段或性格特质)。
- 合并所有shades,形成完整的个性化记忆。
- 生成全局传记(biography)。
1 | # L1层核心函数示例:从文档中提取笔记和记忆 |
4.3 核心工作流:聊天交互与知识检索
1. API 入口 (api/domains/kernel2/routes_l2.py)
- 核心聊天接口为
/api/kernel2/chat,兼容OpenAI的Chat API格式。 - 该接口接收聊天消息,并通过
enable_l0_retrieval和enable_l1_retrieval等参数控制是否启用不同层次的知识检索。
2. 聊天服务与策略链 (ChatService & prompt_builder.py)
ChatService使用“策略链 (Strategy Chain)”动态构建最终的系统提示(System Prompt)。BasePromptStrategy: 应用基础系统提示。RoleBasedStrategy: 根据请求的role_id,加载特定角色的性格设定,实现人格切换。KnowledgeEnhancedStrategy:- L0检索: 检索与当前对话相关的“参考知识”(来自文档)。
- L1检索: 检索相关的“参考shades”(性格特质)。
- 将检索到的知识和特质注入系统提示,为LLM提供丰富的上下文,从而生成更个性化、更准确的回复。
4.4 L2层:高级处理与模型训练
1. GraphRAG 集成 (lpm_kernel/L2/data.py)
- 项目集成 Microsoft GraphRAG 来处理L1生成的笔记,提取实体关系图,为DPO训练生成高质量的合成数据。
- 处理步骤包括:创建文本单元 -> 提取实体关系图 -> 优化图谱。
1 | # GraphRAG 索引流程调用示例 |
2. DPO 训练流程 (lpm_kernel/L2/dpo/README.md)
- 使用直接偏好优化(DPO)对基础模型进行微调,以强化AI的个性。
- 流程:
- 部署SFT(监督微调)模型。
- 基于SFT模型和GraphRAG处理过的数据,合成DPO训练所需的数据集。
- 使用合成数据进行DPO训练,生成LoRA适配器权重。
- 将适配器权重与基础模型合并,生成最终的个性化模型。
- 权重合并命令示例:
1 | python lpm_kernel/L2/merge_lora_weights.py \ |
4.5 训练全流程管理
lpm_kernel/api/domains/trainprocess/train_progress.py 文件定义并跟踪了完整的训练流程状态,该流程包含5个主要阶段,每个阶段下有多个步骤:
- 基础模型下载
- 记忆矩阵激活 (文档处理与嵌入)
- 人生叙事合成 (主题提取、传记生成、实体网络映射)
- 深度理解训练数据准备 (偏好解码、身份强化)
- 模型训练与优化 (DPO训练)
系统会实时跟踪每个步骤的状态和进度,并计算整体完成度。
五、前端分析
前端 lpm_frontend 是一个功能完备的Web应用,为用户提供了友好的操作界面。
5.1 项目结构
前端代码结构清晰,遵循React社区的最佳实践:
src/app/: 应用页面与路由,主要分为home(主页)、dashboard(仪表盘)和standalone(独立分享页)。src/components/: 可复用的UI组件。src/contexts/: 用于全局状态管理的React上下文。src/service/: 封装了与后端API交互的服务层,文件名与后端蓝图清晰对应(如train.ts,role.ts,memory.ts)。src/utils/: 工具函数,包括一个封装了axios或fetch的统一请求工具。
5.2 核心页面与功能
dashboard/: 用户登录后的核心操作区。playground/: 与AI自由对话和实验的“游乐场”。train/: 引导用户上传文档、启动和监控AI训练过程的界面。applications/: 展示和管理基于“第二自我”的各种应用。
六、未来规划
根据项目文档,预计在2025年5月推出的功能包括:
- 版本控制: 实现对记忆和身份状态的智能版本管理。
- 持续训练管道: 基于用户输入的新记忆,实现模型的自动化持续更新。
- 性能与稳定性提升: 优化推理能力、模型对齐,并升级基础模型。
- 云解决方案: 提供云端训练和部署选项,以减轻用户本地硬件的负担。