Second Me 源码分析

一、项目概述与愿景

Second-Me 是一个开源项目,旨在创建一个“数字第二自我”(AI Self)。这个“第二自我”是一个个性化的AI,能够学习和模拟用户的个性和知识,成为用户在数字世界的延伸。

项目的核心理念是让每个人都能拥有一个属于自己的、可控的、可进化的AI,而不是被通用的大型AI所取代。其主要目标包括:

  • 个性化AI: 训练一个能够真实反映用户个性和背景的AI分身。
  • 数据主权: AI在本地进行训练和托管,保证用户数据的隐私和100%控制权。
  • 智能扩展: 通过去中心化的网络,让用户的“第二自我”能够相互连接和协作,从而扩展个体的智能。
  • AI原生应用: 作为一个AI身份接口,支持构建新型的AI原生应用,如角色扮演和AI空间协作。

二、核心能力

Second-Me 的核心能力是围绕“AI分身”的创建、训练和应用构建的。其能力体系可以概括为以下金字塔结构:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
AI分身创建与管理平台
├─ 本地训练与隐私保护
│ ├─ 100%本地运行,数据完全私密
│ └─ 用户对数据拥有完全控制权
├─ AI原生记忆系统
│ ├─ 基于HMM(分层记忆建模)和Me-Alignment(自我对齐)算法
│ ├─ 捕捉用户身份特征与上下文理解
│ └─ 支持多语言记忆处理
├─ 智能扩展能力
│ ├─ 从本地部署到去中心化网络扩展
│ ├─ 支持跨平台上下文共享
│ └─ 允许授权访问与协作
└─ 应用场景支持
├─ 角色扮演(多 persona 切换)
└─ AI空间协作(多分身协同)

三、技术架构与栈

项目采用前后端分离架构,并使用Docker进行容器化部署,确保了开发和部署的便捷性。

3.1 整体项目结构

1
2
3
4
5
6
7
8
9
Second-Me/
├── lpm_frontend/ # 前端项目 (React/Next.js)
├── lpm_kernel/ # 后端核心 (Python/Flask)
├── mcp/ # Me Control Protocol,用于与AI自我实例交互
├── integrate/ # 与第三方服务集成的示例 (如微信机器人)
├── docker/* # Docker相关配置
├── resources/* # 数据与模型等辅助资源
├── scripts/ # 辅助脚本
└── docker-compose.yml # Docker Compose 配置文件
  • 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
2
3
4
5
6
7
8
9
10
11
12
13
14
def analyze(self, doc: DocumentDTO, insight: str = "") -> Dict:
# 根据文档类型处理
document_type = DocumentType.from_mime_type(doc.mime_type)
file_info = FileInfo(...)

# 调用LLM生成摘要
summarizer_input = SummarizerInput(file_info=file_info, insight=insight)
summary_result = self.generator.summarizer(summarizer_input)

return {
"title": summary_result.get("title"),
"summary": summary_result.get("summary"),
"keywords": summary_result.get("keywords", []),
}

4. L1层:记忆提取与合成 (lpm_kernel/kernel/l1/l1_manager.py)

  • L1层从文档中提取结构化的“笔记(Note)”和记忆向量,是形成长期记忆的关键。
  • 完整流程:
    1. 从文档中提取笔记(Note)和记忆向量。
    2. 对记忆向量进行聚类,生成主题(clusters)。
    3. 为每个聚类生成“shade”(记忆片段或性格特质)。
    4. 合并所有shades,形成完整的个性化记忆。
    5. 生成全局传记(biography)。
1
2
3
4
5
6
7
8
9
10
11
# L1层核心函数示例:从文档中提取笔记和记忆
def extract_notes_from_documents(documents) -> tuple[List[Note], list]:
notes_list = []
memory_list = []
for doc in documents:
doc_embedding = document_service.get_document_embedding(doc_id)
# 构建Note对象,包含文档元数据、内容、嵌入向量等
note = Note(...)
notes_list.append(note)
memory_list.append({"memoryId": str(doc_id), "embedding": doc_embedding})
return notes_list, memory_list

4.3 核心工作流:聊天交互与知识检索

1. API 入口 (api/domains/kernel2/routes_l2.py)

  • 核心聊天接口为 /api/kernel2/chat,兼容OpenAI的Chat API格式。
  • 该接口接收聊天消息,并通过 enable_l0_retrievalenable_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
2
3
4
5
6
7
8
9
10
# GraphRAG 索引流程调用示例
def graphrag_indexing(self, note_list: List[Note], ...):
# 配置GraphRAG的LLM和嵌入模型参数
settings["models"]["default_chat_model"]["api_base"] = chat_base_url
...
# 运行GraphRAG索引脚本
result = subprocess.run(
["bash", "lpm_kernel/L2/data_pipeline/data_prep/scripts/graphrag_indexing.sh"],
...
)

2. DPO 训练流程 (lpm_kernel/L2/dpo/README.md)

  • 使用直接偏好优化(DPO)对基础模型进行微调,以强化AI的个性。
  • 流程:
    1. 部署SFT(监督微调)模型。
    2. 基于SFT模型和GraphRAG处理过的数据,合成DPO训练所需的数据集。
    3. 使用合成数据进行DPO训练,生成LoRA适配器权重。
    4. 将适配器权重与基础模型合并,生成最终的个性化模型。
  • 权重合并命令示例:
1
2
3
4
python lpm_kernel/L2/merge_lora_weights.py \
--base_model_path "path/to/base_model" \
--lora_adapter_path "path/to/lora_adapter" \
--output_model_path "path/to/output_model"

4.5 训练全流程管理

lpm_kernel/api/domains/trainprocess/train_progress.py 文件定义并跟踪了完整的训练流程状态,该流程包含5个主要阶段,每个阶段下有多个步骤:

  1. 基础模型下载
  2. 记忆矩阵激活 (文档处理与嵌入)
  3. 人生叙事合成 (主题提取、传记生成、实体网络映射)
  4. 深度理解训练数据准备 (偏好解码、身份强化)
  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/: 工具函数,包括一个封装了axiosfetch的统一请求工具。

5.2 核心页面与功能

  • dashboard/: 用户登录后的核心操作区。
    • playground/: 与AI自由对话和实验的“游乐场”。
    • train/: 引导用户上传文档、启动和监控AI训练过程的界面。
    • applications/: 展示和管理基于“第二自我”的各种应用。

六、未来规划

根据项目文档,预计在2025年5月推出的功能包括:

  1. 版本控制: 实现对记忆和身份状态的智能版本管理。
  2. 持续训练管道: 基于用户输入的新记忆,实现模型的自动化持续更新。
  3. 性能与稳定性提升: 优化推理能力、模型对齐,并升级基础模型。
  4. 云解决方案: 提供云端训练和部署选项,以减轻用户本地硬件的负担。