lemonPCRM 分阶段开发计划
基于 lemonPCRM.md 产品需求 + user-flow.md 用户流程制定。 目标:以最小可用单元逐步落地,每阶段交付可独立运行的功能切片。
总体架构回顾
[前端 HTML — 联系人列表 + 五标签画布]
↕ SSE / REST
[server — ACP 编排引擎] ← 已有基础
↕ 工具调用
[MCP 工具箱] ← 待构建
↕
[本地知识图谱 (Kùzu / SQLite)] ← 待构建
Phase 0|地基夯实(已完成)
目标:确认现有 ACP 内核可稳定驱动 Claude CLI,作为后续所有阶段的底座。
| 任务 | 说明 | 状态 |
|---|---|---|
| ACP 协议层 | ClaudeCliProtocol + SessionPool + AgentManager | ✅ 完成 |
| SSE 对话路由 | /api/master/chat 多轮流式对话 |
✅ 完成 |
| 文件上传解析 | .docx / .pdf 注入对话上下文 | ✅ 完成 |
| 配置体系 | backends.json / agents.json / .env | ✅ 完成 |
交付物:可通过 curl 发起多轮 AI 对话,文件内容可注入上下文。
Phase 1|本体论数据层(第 1 个月)
目标:建立知识图谱数据模型,提供基础 CRUD 能力,AI 可通过工具写入/查询。
1.1 选型与初始化
- 使用 Kùzu(本地嵌入式图数据库,无服务进程)或 SQLite + JSON 图扩展
- 在
server/db/目录初始化数据库,提供统一的GraphStore模块
1.2 核心本体模型
节点(Node)
├── Person id, name, alias[], avatar, notes, analysisStatus, createdAt
├── Organization id, name, type, domain
├── Project id, name, status, description
├── Event id, type(chat/meeting/post), date, summary, rawText
└── Asset id, type(photo/video/doc), filePath, mimeType, vectorId
边(Edge)
├── Person --[KNOWS]--> Person (channel, since)
├── Person --[BELONGS_TO]--> Organization (role, since)
├── Person --[PARTICIPATED]--> Event
├── Event --[CONTAINS]--> Asset
├── Person --[MENTIONED_IN]--> Event
└── Person --[ASSOCIATED]--> Project
analysisStatus 字段驱动前端联系人状态:none / partial / complete(对应 ⚪🔵🟢)
1.3 MCP 工具箱 v1(基础图操作)
在 server/src/tools/graph/ 实现以下工具,供 Master Agent 调用:
| 工具名 | 功能 |
|---|---|
create_person(name, meta) |
创建 Person 节点 |
get_person(name_or_id) |
查询 Person 及其所有关联边 |
link_persons(a, b, relation, meta) |
建立两人之间的关系边 |
create_event(type, date, summary, persons[]) |
创建事件并关联参与者 |
search_graph(query) |
全文 + 属性模糊搜索 |
get_relationship_path(a, b) |
找两人之间的最短关系路径 |
交付物:可通过 AI 对话完成人脉节点的增删改查;curl /api/master/chat 说"新增联系人张三,来自字节跳动"即可写入图谱。
Phase 2|微信联系人导入(第 2 个月)
目标:将微信作为第一个数据源,批量导入联系人和聊天记录,为前端提供真实数据。
2.1 微信数据读取
实现 server/services/wechat/ 模块,支持两种导入方式:
- 手动导出:解析微信 PC 端导出的 CSV / JSON 联系人文件
- 本地数据库(进阶):读取
EnMicroMsg.db(需用户自行解密提供)
2.2 数据清洗与入图
原始微信联系人 → NLP 实体清洗 → Person 节点写入 → 关系边推断
- 调用
extract_entities_from_text()工具让 AI 从备注/标签中推断关系 - 去重策略:以微信 ID 为主键,姓名 / 手机号辅助合并
- 写入后设置
analysisStatus = partial
2.3 聊天记录导入
- 解析聊天记录 txt/html 导出文件
- 每段对话创建
Event:ChatSession节点,关联发言人 - AI 自动提取对话中提及的第三方人名、公司、项目,扩充图谱
交付物:微信通讯录和聊天记录完整入图;联系人列表有真实数据,状态为 ⚪ 或 🔵。
Phase 3|前端主界面 + 档案激活流程(第 2–3 个月)
目标:构建本地 HTML 单页应用,实现「搜索联系人 → 点击激活 → 多维画布」的完整主流程。
3.1 技术选型
- 图渲染:AntV G6(关系图谱画布专用)
- 框架:原生 HTML + Vanilla JS(Local-First,零构建工具依赖)
- 通信:SSE 接收 AI 分析输出,REST 查询图谱数据
3.2 页面布局
┌────────────────────────────────────────────────────────┐
│ lemonPCRM [设置] [同步] │
├──────────────────────────┬─────────────────────────────┤
│ 搜索(姓名/公司/标签) │ [档案][图谱][时间轴] │
│ │ [对话洞察][AI报告] │
│ 联系人列表 │ │
│ 🟢 张三 字节跳动 │ ← 右侧五标签画布区 │
│ 🔵 李四 OpenAI │ │
│ ⚪ 王五 (未激活) │ │
└──────────────────────────┴─────────────────────────────┘
3.3 档案激活流程(核心交互)
点击联系人后触发 AI 并发分析,右侧实时显示进度:
✅ 微信通讯记录读取完成
✅ 图谱基础数据加载完成
🔄 LinkedIn 数据匹配中...
⏳ 对话内容分析(等待中)
新增 MCP 工具支撑激活流程:
| 工具名 | 功能 |
|---|---|
activate_contact_profile(personId) |
触发全量聚合分析,以 SSE 返回进度流 |
get_conversation_insights(personId) |
统计对话话题分布、承诺事项、关系温度 |
generate_profile_report(personId) |
生成结构化 Markdown 分析报告 |
3.4 五个画布标签
| 标签 | 核心内容 |
|---|---|
| 📋 档案视图 | 联系方式、性格与沟通风格、职业轨迹、与我的关系描述 |
| 🕸️ 关系图谱 | 以此人为中心的 G6 关系网络,支持节点下钻跳转 |
| 📅 时间轴 | 微信 + 会议纪要的互动事件时序,支持按类型筛选 |
| 💬 对话洞察 | 话题分布图、待跟进承诺事项、关系热度趋势 |
| 🤖 AI 报告 | 一键生成可导出 Markdown 的结构化人脉分析报告 |
所有标签右下角均常驻 AI 对话框(SSE 流式)。
交付物:/frontend/index.html 可直接浏览器打开;点击任意联系人后 5 个画布均可用;AI 对话框可对当前联系人随时追问。
Phase 4|多源数据接入(第 3–4 个月)
目标:接入 LinkedIn、X(Twitter)等平台数据,丰富每个 Person 节点的数字画像,让档案视图更完整。
4.1 LinkedIn 数据导入
- 解析 LinkedIn 官方数据导出包(
Connections.csv、Messages.csv) - 合并到现有 Person 节点,补充职位 / 公司 / 教育背景
4.2 X(Twitter)动态关联
- 通过 X API v2 或本地导出的
tweets.js解析用户动态 - 每条推文创建
Event:Post节点,AI 提取高频话题标签 - 定期摘要:"该联系人近 30 天在 X 上高频词:#AI #创业"
4.3 会议纪要自动处理
- 集成 Whisper(本地语音转文字):音频文件 → Markdown 纪要
- 会议纪要作为
Event:Meeting节点入图,AI 提取参与者和提及的第三方 - 支持通过
/api/master/upload直接上传音频/纪要文件
4.4 MCP 工具箱 v2(多源数据)
| 工具名 | 功能 |
|---|---|
import_linkedin_export(filePath) |
解析 LinkedIn 导出包 |
import_x_timeline(userId, data) |
导入 X 用户动态 |
transcribe_audio(filePath) |
Whisper 本地转写 |
import_meeting_notes(text, participants[]) |
会议纪要入图 |
交付物:档案视图和对话洞察标签中出现 LinkedIn + X + 会议纪要的多维数据;联系人 analysisStatus 升为 🟢 complete。
Phase 5|AI 深度分析能力(第 4–5 个月)
目标:在完整图谱数据基础上,提供超越单人视角的跨网络洞察能力。
5.1 关系路径分析
"我和王总没有直接关系,帮我找最短关系链"
- 调用图算法(BFS/Dijkstra)计算最短路径
- AI 用自然语言解释路径:"你 → 张三(前同事)→ 李四(LinkedIn 好友)→ 王总"
5.2 圈子识别(Community Detection)
- 运行 Louvain 社区发现算法,自动识别人脉圈子
- 在图谱画布上用不同颜色区域标注圈子(如"AI 创业圈"、"前公司同事圈")
5.3 跟进提醒 Agent
- 后台定时 Agent,扫描"超过 N 天未互动"的重要联系人
- 生成跟进建议:"张三 60 天未联系,上次聊到他在看新机会,建议主动询问近况"
- 前端首页展示提醒卡片
交付物:关系图谱画布展示圈子色块;首页出现跟进提醒;可查询任意两人之间的关系路径。
Phase 6|多模态资产关联(第 5–6 个月,可选)
目标:将本地照片/视频与人脉图谱关联,实现多模态检索。
6.1 人脸识别关联
- 集成
face_recognition(Python 本地库)扫描相册 - 匹配到已知联系人后,照片作为
Asset:Photo节点挂载到对应 Person - 在档案视图的「关联资产」区域展示
6.2 多模态向量化
- 使用 CLIP 模型提取图片语义向量,存入向量索引(如
hnswlib) - 支持语义搜索:"找出所有和张三在户外的照片"
6.3 时空轨迹重现
- 在时间轴画布集成地图组件(Leaflet.js)
- 根据照片 EXIF、会议地点等数据,可视化联系人的时空轨迹
交付物:照片/视频可与人脉节点关联;时间轴画布增加地图视角;支持自然语言多模态检索。
里程碑汇总
| 阶段 | 时间 | 核心交付 |
|---|---|---|
| Phase 0 | 完成 | ACP 编排内核可用 |
| Phase 1 | 第 1 个月 | 知识图谱数据层 + 基础 MCP 工具 |
| Phase 2 | 第 2 个月 | 微信联系人 & 聊天记录入图 |
| Phase 3 | 第 2–3 个月 | 前端主界面 + 档案激活 + 五标签画布全通 |
| Phase 4 | 第 3–4 个月 | LinkedIn / X / 会议纪要多源数据接入 |
| Phase 5 | 第 4–5 个月 | 关系路径分析、圈子识别、跟进提醒 Agent |
| Phase 6 | 第 5–6 个月 | 多模态照片关联(可选扩展) |
开发原则
- Local-First:每个 Phase 的数据和计算全部在本地完成,不依赖云 API
- 主流程优先:Phase 3 之前必须打通「搜索 → 点击 → 激活 → 五画布」完整链路
- AI 驱动数据写入:图谱更新优先通过自然语言对话触发,避免手动 UI 表单
- 向后兼容:每阶段新增工具不破坏现有 ACP 编排接口