{"id":48999892,"url":"https://github.com/runzhliu/welink","last_synced_at":"2026-05-07T12:02:07.747Z","repository":{"id":345275408,"uuid":"1184366339","full_name":"runzhliu/welink","owner":"runzhliu","description":"🔍微信聊天数据分析的本地化AI-agent(Docker/Windows/MacOS) · AI分身 / 大模型分析 / 好友排行 / 词云 / 情感趋势 / 群聊画像","archived":false,"fork":false,"pushed_at":"2026-04-24T12:39:41.000Z","size":73890,"stargazers_count":109,"open_issues_count":0,"forks_count":25,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-26T07:29:57.507Z","etag":null,"topics":["chat-analysis","chat-history","chat-mcp","llm","macos","mcp-server","skill","skills","wechat","weixin"],"latest_commit_sha":null,"homepage":"https://welink.click","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/runzhliu.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-03-17T14:16:24.000Z","updated_at":"2026-04-25T16:18:30.000Z","dependencies_parsed_at":null,"dependency_job_id":"9626dc70-2108-466f-b13b-8013f3c67685","html_url":"https://github.com/runzhliu/welink","commit_stats":null,"previous_names":["runzhliu/welink"],"tags_count":40,"template":false,"template_full_name":null,"purl":"pkg:github/runzhliu/welink","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/runzhliu%2Fwelink","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/runzhliu%2Fwelink/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/runzhliu%2Fwelink/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/runzhliu%2Fwelink/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/runzhliu","download_url":"https://codeload.github.com/runzhliu/welink/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/runzhliu%2Fwelink/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32736582,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-07T02:14:30.463Z","status":"ssl_error","status_checked_at":"2026-05-07T02:14:29.405Z","response_time":62,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["chat-analysis","chat-history","chat-mcp","llm","macos","mcp-server","skill","skills","wechat","weixin"],"created_at":"2026-04-18T18:01:50.836Z","updated_at":"2026-05-07T12:02:07.731Z","avatar_url":"https://github.com/runzhliu.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src=\"logo.svg\" width=\"80\" height=\"80\" alt=\"WeLink Logo\" /\u003e\n\u003c/p\u003e\n\n\u003ch1 align=\"center\"\u003eWeLink\u003c/h1\u003e\n\n\u003cp align=\"center\"\u003e\u003cstrong\u003eAI 驱动的微信聊天数据分析平台\u003c/strong\u003e\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://github.com/runzhliu/welink/actions/workflows/docker-publish.yml\"\u003e\n    \u003cimg src=\"https://github.com/runzhliu/welink/actions/workflows/docker-publish.yml/badge.svg\" alt=\"Build\" /\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://github.com/runzhliu/welink/pkgs/container/welink%2Fbackend\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/ghcr.io-backend-blue?logo=docker\" alt=\"Backend Image\" /\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://github.com/runzhliu/welink/pkgs/container/welink%2Ffrontend\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/ghcr.io-frontend-blue?logo=docker\" alt=\"Frontend Image\" /\u003e\n  \u003c/a\u003e\n  \u003ca href=\"LICENSE\"\u003e\n    \u003cimg src=\"https://img.shields.io/badge/license-AGPL--3.0-green\" alt=\"License\" /\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://github.com/runzhliu/welink/stargazers\"\u003e\n    \u003cimg src=\"https://img.shields.io/github/stars/runzhliu/welink?style=flat\" alt=\"Stars\" /\u003e\n  \u003c/a\u003e\n  \u003cimg src=\"https://img.shields.io/badge/platform-macOS%2012%2B-lightgrey?logo=apple\" alt=\"Platform macOS\" /\u003e\n  \u003cimg src=\"https://img.shields.io/badge/platform-Windows%2010%2B-lightgrey?logo=windows\" alt=\"Platform Windows\" /\u003e\n  \u003cimg src=\"https://img.shields.io/badge/data-local%20only-brightgreen\" alt=\"Local Only\" /\u003e\n  \u003cbr/\u003e\u003cbr/\u003e\n  \u003ca href=\"https://welink.click\"\u003e\u003cstrong\u003e官方文档\u003c/strong\u003e\u003c/a\u003e \u0026nbsp;·\u0026nbsp;\n  \u003ca href=\"https://demo.welink.click\"\u003e\u003cstrong\u003e在线 Demo\u003c/strong\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n你的微信聊天记录里，藏着你和每个人关系最真实的样子。WeLink 把这些数据交给 AI 来读——不只是统计图表，而是能让你直接提问、得到洞察：\n\n\u003e 「我和 XXX 的关系在哪个阶段最好？后来发生了什么？」\n\u003e\n\u003e 「这个群里真正活跃的人是谁？他们通常聊什么？」\n\u003e\n\u003e 「我今年和哪些朋友聊得越来越少了？」\n\n所有数据留在本地，不上传任何服务器。\n\n---\n\n## 功能示例\n\n\u003e 点击可放大查看\n\n| AI 分身 | AI 分析 |\n|:---:|:---:|\n| [![AI 分身](pics/1-AI分身.gif)](pics/1-AI分身.gif) | [![AI 分析](pics/2-AI分析.gif)](pics/2-AI分析.gif) |\n| **AI 群聊** | **AI 首页** |\n| [![AI 群聊](pics/3-AI群聊.gif)](pics/3-AI群聊.gif) | [![AI 首页](pics/4-AI首页.gif)](pics/4-AI首页.gif) |\n| **快速入门引导** | **好友总览** |\n| [![快速入门引导](pics/5-快速入门引导.gif)](pics/5-快速入门引导.gif) | [![好友总览](pics/6-好友总览.gif)](pics/6-好友总览.gif) |\n| **好友深度画像** | **群聊画像** |\n| [![好友深度画像](pics/7-好友深度画像.gif)](pics/7-好友深度画像.gif) | [![群聊画像](pics/8-群聊画像.gif)](pics/8-群聊画像.gif) |\n| **全局搜索** | **时间线** |\n| [![全局搜索](pics/9-全局搜索.gif)](pics/9-全局搜索.gif) | [![时间线](pics/10-时间线.gif)](pics/10-时间线.gif) |\n| **时光机** | **纪念日** |\n| [![时光机](pics/11-时光机.gif)](pics/11-时光机.gif) | [![纪念日](pics/12-纪念日.gif)](pics/12-纪念日.gif) |\n\n---\n\n## AI 分身（核心功能）\n\n让 AI 学习任何联系人的聊天风格，**模拟和 TA 对话——像真的在和 TA 聊天一样**。\n\n聊天记录是一个人最真实的语言印记。AI 分身从中学习 TA 的用词习惯、语气特征和表达方式，让你可以：\n\n\u003e 和已经**失去联系**的老友再聊一次——哪怕只是 AI 模拟的，也能找回当年的感觉\n\u003e\n\u003e 让**远在天堂的亲人**以 TA 熟悉的方式\"回复\"你——不是冰冷的机器，而是带着 TA 说话习惯的温暖文字\n\u003e\n\u003e 在做重要决定前，和**最信任的人的 AI 分身**聊聊——TA 会用 TA 的方式给你回应\n\u003e\n\u003e 或者纯粹好奇——**你最好的朋友**如果看到你发的这句话，会怎么回？\n\n\u003e [!NOTE]\n\u003e AI 分身旨在帮助用户回忆珍贵的人际关系。模拟结果由 AI 生成，不代表真人的真实想法。请善意使用，不要用于冒充他人身份或误导第三方。使用本功能即表示用户同意自行承担使用后果，项目作者不对因使用 AI 分身产生的任何直接或间接影响负责。\n\n### 功能特点\n\n- **风格学习**：从私聊记录 + 共同群聊中提取 TA 的文本消息（可选 100 / 300 / 1000 / 2000 / 全部条），AI 学习 TA 的用词、语气、断句、emoji 习惯\n- **背景补充**：可填写 TA 的籍贯、职业、与你的关系等背景信息，让 AI 更准确地还原 TA 的人物特征\n- **群聊联动**：自动列出与该联系人的共同群聊，可勾选要包含的群聊，只提取 TA 在群里的发言（按 sender_id 精确过滤），不会混入其他人的消息\n- **Session 机制**：学习一次即缓存，后续多轮对话不再重复加载数据库，响应速度快\n- **流式对话**：仿微信气泡界面，AI 回复逐字显示\n- **对话续写**：AI 同时模拟你和 TA 继续聊天，像看一部关于你们的迷你剧\n\n详细实现见 [ai-clone.md](docs/ai-clone.md)。\n\n### AI 群聊模拟\n\n让 AI 模拟群友继续聊天——按每个成员的**发言比例**和**说话风格**生成对话，你也可以随时加入。\n\n- **风格画像**：自动分析每个成员的用词习惯、消息长度、表情使用、提问频率等特征\n- **自定义配置**：可选参与成员、设定话题场景、调节聊天氛围（日常/激烈/深夜/搞笑/严肃）\n- **多轮记忆**：模拟对话使用多轮对话机制，群友会回应你说的话，不会重复\n\n详细说明见 [ai-group-sim.md](docs/ai-group-sim.md)。\n\n### 跨联系人 AI 问答\n\n不再局限于单个联系人——直接问关于**所有聊天记录**的问题，AI 自动搜索并汇总回答。\n\n\u003e 「谁跟我聊过旅行？」→ AI 搜索全部联系人，找到 3 人提到过旅行，汇总每人聊了什么\n\u003e\n\u003e 「去年国庆我都跟谁聊天了？」→ AI 查询 10/1-10/7 的日历数据，列出每天的聊天对象\n\u003e\n\u003e 「哪些朋友经常提到加班？」→ AI 搜索关键词，按匹配频次排列\n\n技术原理：LLM Agent 模式——第一步 LLM 解析问题意图（提取关键词/时间范围），第二步自动调用搜索/日历 API 收集数据，第三步 LLM 基于真实数据生成回答。每次提问仅消耗 ~4000 token。\n\n### 对话历史持久化\n\nAI 首页的联系人分析和跨联系人问答的对话**自动保存到本地数据库**，支持：\n- 历史记录列表，按时间排序，显示预览文字\n- 点击加载历史对话，继续追问\n- 刷新页面不丢失，下次打开仍可查看\n\n### AI 洞察\n\n对任意联系人生成三种深度分析（基于统计摘要 + 采样消息，低 token 消耗）：\n\n- **关系报告**：关系发展阶段、沟通特点、关键数字、AI 感言\n- **风格画像卡**：性格标签、口头禅、聊天习惯、趣味类比\n- **AI 日记**：选择任意一天，AI 以第一人称写日记\n\n### 自定义 Prompt 模板\n\n所有 AI 功能的系统提示词（System Prompt）**完全透明、可自定义**：\n\n- 每个 AI 功能旁边都有「查看 Prompt」按钮，可以看到当前使用的完整提示词\n- 在设置页的「Prompt 模板」区块，可以编辑任意功能的 Prompt\n- 支持变量：`{{name}}`（联系人名）、`{{today}}`（日期）、`{{rounds}}`（轮数）等\n- 留空即恢复默认值，修改即时生效\n\n---\n\n## 🧪 创意实验室 — 把聊天记录玩出花\n\n侧边栏「实验室」Tab，集合了一组**好玩、能分享**的小工具。和\"分析\"路线不同，这一组以\"卡片化、可截图、像 Spotify Wrapped 一样\" 为目标。\n\n### 聊天 DNA\n\n类 Spotify Wrapped 的年度聊天人设卡：消息总数、最爱的人、活跃时段、emoji 偏好、最长一句话、最早开始聊的人 …… 全部**纯统计、无 LLM**——零 token 成本，离线也能出。一键导出长图分享。\n\n### 高光瞬间\n\nAI 从你和某位联系人的聊天记录里，挑出 5–8 段**最有故事感**的对话片段——表白、争吵、深夜聊人生、第一次见面、相互坦白。每段配一张可截图的卡片，自动生成标题和情绪标签。\n\n### 灵魂提问机\n\nAI 出 5 道**只有你们俩才答得上**的默契测试题（\"TA 最常吃的早餐是？\"\"你们第一次见面在哪？\"），翻面看答案。可以截图给对方做。\n\n### 关系星图\n\n把联系人按\"共同群聊\"聚拢的力导向图——同一个圈子的朋友会自动靠拢成簇，让你一眼看出社交圈层结构。**自写的迷你 force-directed layout，零新增依赖**。\n\n### 平行宇宙对话\n\n选一个联系人 + 输入一个\"如果……\"场景（\"如果我们五年前就认识\"、\"如果我现在跟 TA 求婚\"、\"如果我们是同事\"），AI 用 TA 的人设生成一段虚构对话，逐字流式展开。复用 AI 群聊模拟的 persona 引擎。\n\n\u003e 5 个 Lab 都支持**白底分享图导出**，footer 自带 `welink.click` + 日期，发朋友圈合适。\n\n---\n\n## AI 分析\n\nWeLink 内置完整的 AI 分析引擎，可对任意联系人、群聊或某一天的聊天记录发起对话式分析。\n\n### 三种检索模式\n\n| 模式 | 工作方式 | 适合场景 |\n|------|---------|---------|\n| **全量分析** | 将选定时间范围内的全部消息送入 LLM 上下文 | 深度关系分析、长期趋势总结 |\n| **混合检索（RAG）** | FTS5 全文检索 + 语义向量检索，精准召回相关片段 | 查找特定事件、关键词检索 |\n| **时光机 AI** | 跨所有对话的单日聚合分析 | 「某天发生了什么」式的日记回顾 |\n\n### 记忆提炼\n\nLLM 批量阅读聊天记录，自动提炼关键事实（人名、事件、情感节点）并持久化存储。后续对话中，AI 可以调用这些「长期记忆」，而不依赖每次重新加载全量消息。\n\n### 支持的 LLM 提供商\n\n| 提供商 | 说明 |\n|--------|------|\n| DeepSeek | 默认 `deepseek-v4-pro`，国产高性价比首选 |\n| 豆包（火山方舟） | 字节 Doubao 系列，OpenAI 兼容；默认 `doubao-seed-2-0-pro-260215` |\n| Kimi | Moonshot（月之暗面），支持超长上下文 |\n| OpenAI | GPT-4o 等，标准 API |\n| Claude | Anthropic Claude，通过原生 API 接入 |\n| Gemini | Google Gemini，支持 OAuth 2.0 认证 |\n| **Vertex AI** | **Google Cloud Vertex AI，原生支持**。认证方式：Service Account JSON → JWT → OAuth2 token（自动缓存刷新）。走 Vertex AI 的 OpenAI 兼容端点，支持所有 Gemini 模型 |\n| **AWS Bedrock** | **原生支持**。认证方式：AWS SigV4 签名（手写实现，无 AWS SDK 依赖）。使用 Converse API（跨模型家族统一 API），支持 Claude / Llama / Mistral / Titan / Cohere 等所有 Bedrock 模型 |\n| MiniMax | 国内版 + 国际版，支持 MiniMax-Text-01 等 |\n| GLM | 智谱 AI，GLM-4 系列 |\n| Grok | xAI Grok |\n| 通义千问（DashScope） | 阿里 Qwen 系列，OpenAI 兼容模式 |\n| 腾讯混元 | Hunyuan-turbo / pro 等 |\n| 百度千帆（文心一言） | ERNIE-4.0 系列，OpenAI 兼容端点 |\n| OpenRouter | 一个 Key 接入 300+ 模型的聚合网关 |\n| Mistral AI | mistral-large / codestral 等 |\n| Groq | LPU 极速推理，Llama / Mixtral 等开源模型 |\n| Together AI | 开源模型托管，价格友好 |\n| Fireworks AI | 开源模型高速托管 |\n| Perplexity | 内置联网搜索（Sonar 系列） |\n| Cohere | Command R+，企业 RAG 强项 |\n| 硅基流动 SiliconFlow | 国内开源模型聚合（DeepSeek / Qwen / Llama 等） |\n| 零一万物（Yi） | yi-large 系列 |\n| 阶跃星辰（StepFun） | step-1 / step-2 系列 |\n| Azure OpenAI | 企业版 OpenAI；Base URL 需填写完整 deployment 端点 |\n| Ollama | 本地部署，完全离线，数据不出本机 |\n| 自定义 | 任意兼容 OpenAI 接口的模型服务 |\n\n在设置页面填写提供商、Base URL、API Key 和模型名称即可。支持为 AI 对话和记忆提炼分别指定不同的模型。\n\n\u003e **Vertex AI 配置**：选择 `Google Vertex AI` provider → 粘贴完整的 Service Account JSON → 填写 GCP Project ID 和 Region → 选择模型（默认 `google/gemini-2.0-flash-001`）\n\u003e\n\u003e **Bedrock 配置**：选择 `AWS Bedrock` provider → 填写 AWS Access Key ID 和 Secret Access Key → 填写 Region → 填写 Model ID（如 `anthropic.claude-3-5-sonnet-20241022-v2:0`）\n\n本地 Ollama 配置参考 [ollama-setup.md](docs/ollama-setup.md)，完整 AI 功能说明见 [ai-analysis.md](docs/ai-analysis.md)。\n\n---\n\n## MCP — 在 Claude Code 里直接提问\n\nWeLink 内置 [MCP（Model Context Protocol）](https://modelcontextprotocol.io/) 服务器，让你在 **Claude Code（CLI）** 里用自然语言查询微信数据，无需打开浏览器。\n\n完整配置见 [mcp-server/README.md](mcp-server/README.md)。\n\n---\n\n## 🔮 Skill 炼化 — 把聊天记录变成 AI 工具的能力包\n\n**把聊天记录里的人际关系，直接炼化成 Claude Code / Codex / Cursor 等 AI 编程工具的 Skill 文件包。** 一次炼化，多处使用。\n\n### 三种 Skill 类型\n\n| 类型 | 输入 | 用途 |\n|------|------|------|\n| **contact** 联系人分身 | 和某联系人的全部聊天 | 让 AI 用 TA 的语气帮你写邮件、起草回复、预演对话 |\n| **self** 我的写作风格 | 我发出去的所有消息 | 让 AI 用你自己的口吻写公众号、朋友圈、邮件，避免 AI 腔 |\n| **group** 群聊智囊 | 某个群的集体聊天 | 回答「这个群会怎么说」，把群的集体知识/术语/氛围封装起来 |\n\n### 六种输出格式（一键切换）\n\n| 格式 | 目标工具 | 产物路径 |\n|------|---------|---------|\n| **claude-skill** | Claude Code Skills（目录式） | `~/.claude/skills/\u003cname\u003e/SKILL.md` + 附件 |\n| **claude-agent** | Claude Code Subagent（单文件） | `~/.claude/agents/\u003cname\u003e.md`（带 frontmatter） |\n| **codex** | OpenAI Codex CLI | 项目根 `AGENTS.md` |\n| **opencode** | OpenCode Agent | `.opencode/agent/\u003cname\u003e.md` |\n| **cursor** | Cursor Rules | `.cursor/rules/\u003cname\u003e.mdc`（支持 glob） |\n| **generic** | 通用 Markdown | 工具无关，可粘贴到任何 AI 对话 |\n\n### 炼化的内容\n- **性格特征**：LLM 从真实对话里抽取的人物画像\n- **说话风格**：句长、语气、用词偏好、标点习惯、emoji 使用\n- **高频词与口头禅**：独特词汇和常用短语\n- **常聊话题**：兴趣领域和专业方向\n- **关系背景**：你和 TA 的关系推断（仅 contact 类型）\n- **代表性原话**：5-8 条最能体现风格的消息片段（自动脱敏）\n- **使用注意事项**：什么场景适合用、什么场景不适合\n\n### 使用入口\n- 联系人深度画像头部 → 紫色 Sparkles 图标按钮\n- 群聊画像头部 → 紫色 Sparkles 图标按钮\n- 洞察页「个人自画像」卡 → 「炼化我的 Skill」按钮\n\n### Skills 管理\n\n侧边栏新增「Skills」页面，集中管理所有已炼化的 Skill 包：\n\n- **持久化存储**：每次炼化自动写入本地数据库（`ai_analysis.db` 的 `skills` 表），文件保存到 `~/.welink/skills/\u003cid\u003e/\u003cfilename\u003e.zip`\n- **后台异步执行**：炼化任务在 goroutine 中运行，**关闭弹窗、刷新页面都不会中断**\n- **状态实时追踪**：等待中 / 炼化中 / 成功 / 失败（含错误原因），页面每 2s 自动刷新\n- **搜索 + 筛选**：按目标名/文件名/模型名搜索，按类型（联系人/自画像/群聊/群成员）和状态筛选\n- **表头排序**：按目标、类型、格式、炼化时间升降序排列\n- **重新下载**：已成功的任务随时可以重新下载 zip 文件，不需要重新炼化\n- **Mac App 路径显示**：炼化成功后显示保存到 `~/Downloads/` 的完整路径，可一键复制\n\n### 隐私保护\n- 炼化前手机号、邮箱、身份证号自动脱敏\n- 整个过程只调用一次 LLM（约 5-15k token）\n- 产物是本地 zip 文件，由你决定是否分享\n\n---\n\n## 💕 关系动态预测 — 谁在悄悄变冷，谁值得主动联系\n\nWeLink 不止告诉你\"现在关系多热\"，而是**前瞻性**地判断每段关系的走向，并给出具体行动建议。\n\n### 四档状态判定\n\n扫描每个联系人最近 6 个月的消息节奏，对比**最近 3 月 vs 前 3 月**自动打档：\n\n| 状态 | 判定条件 | 典型场景 |\n|---|---|---|\n| 🔥 **升温** | 最近 3 月消息增加 ≥50% | 新认识的人 / 深化中的关系 |\n| ✅ **稳定** | 波动 ±30% 内 | 日常长期好友 |\n| ❄️ **降温** | 最近 3 月消息量不到前期一半 | 开始疏远的信号 |\n| 🚨 **濒危** | 前期 ≥10 条但 60 天没说过话 | 长期联系人快失联 |\n\n### 多维度信号增强\n\n简单的「消息减少了」可能是双方都忙，结合多维信号才能识别**到底是谁在疏远谁**：\n\n- **主动占比趋势** — 过去你占 72%，现在降到 42% → 说明对方不再主动找你。差 ≥15pp 在 reason 里自动提示\n- **响应时延趋势** — TA 去年 10 分钟回你，现在平均 8 小时 → 「TA 回复从 X 分钟变成 Y 小时」（变慢 ≥3× 且原本 ≤1h 才提）\n- **连续冷却周数** — 基于客户端 localStorage 滚动 6 周快照，连续 ≥2 周处于 cooling/endangered 显示 🕐 红色徽章\n- **最后消息相对时间** — 30 / 60 / 90 天阶梯色阶\n\nreason 文案示例：\n\u003e 最近 3 个月消息减少 65%（120 → 42）；原本你更主动（72%），现在对方说得更多（58%）；TA 回复从 12 分钟变成 8 小时\n\n### 两种入口\n\n- **AI 首页「建议主动联系」卡片** — Top 5 cooling + endangered，直接可点打开联系人详情。每张卡支持「🪄 写开场白」和「不再推荐此人」。「今日不再提醒」按日期关闭\n- **统计页「关系动态预测」section** — 4 tab 完整列表（濒危/降温/稳定/升温），每条带 12 月迷你折线，点 sparkline 弹大图 modal（12 月柱状图 + 峰值标注 + 主动占比双进度条 + 响应时延对比）\n\n### 🪄 AI 开场白草稿（行动闭环）\n\n对 cooling / endangered 联系人，点「写开场白」→ 取最近 40 条消息 + 相识年数 + 沉默天数 → LLM 写 4 条不同调性（关心 / 回忆 / 调侃 / 约见）的破冰草稿，一键复制粘到微信。\n\n### 每周变化摘要\n\nAI 首页顶部的小 banner，对比上次快照（≥5 天前）：「近 7 天变化：3 位关系降温 · 1 位回暖」。按 ISO 周关闭。\n\n### 管理忽略名单\n\n设置页加「关系预测 · 忽略名单」，首页点「不再推荐此人」后可在这里撤销。\n\n---\n\n## 📦 导出中心 — 数据一键搬家\n\n把年度回顾、对话归档、AI 对话历史、记忆图谱四类内容，统一打包导出到 **8 种目标**：\n\n**笔记 / 文档平台**\n\n| 目标 | 实现方式 | 输出 |\n|---|---|---|\n| **Markdown** | 本地打包 | 单文件直下 / 多文件自动 .zip |\n| **Notion** | `POST /v1/pages` + 自实现 Markdown→Blocks（标题/列表/引用/代码/表格） | 指定 Parent Page 下建新页 |\n| **飞书文档** | `upload_all` → `import_tasks` 异步轮询 | 获得 docx URL |\n\n**云盘 / 对象存储**\n\n| 目标 | 协议 / 认证 | 覆盖服务 |\n|---|---|---|\n| **WebDAV** | HTTP PUT + Basic Auth + 递归 MKCOL | 坚果云 / Nextcloud / ownCloud / 群晖等 |\n| **S3 兼容** | `minio-go` v7，支持 path-style / virtual-host 切换 | AWS S3 / Cloudflare R2 / 阿里云 OSS / 腾讯 COS / 七牛 / MinIO / Backblaze B2 |\n| **Dropbox** | `files/upload` API + App Console 长期 Access Token（PAT 模式免 OAuth 回调） | Dropbox |\n| **Google Drive** | 完整 OAuth 2.0 + multipart upload，refresh token 自动刷新 | Google Drive |\n| **OneDrive** | Microsoft Identity Platform v2 OAuth + Graph API PUT | OneDrive（个人 / 工作账号） |\n\nToken 配置与既有 LLM 配置一样支持脱敏占位符 `__HAS_KEY__`，保存后不会泄露明文。\n\n**OAuth 类目标（Google Drive / OneDrive）使用流程**\n1. 在目标平台的开发者控制台创建 OAuth Client，授权回调 URI 填 `http(s)://\u003c你的 WeLink 地址\u003e/api/export/oauth/\u003cgdrive|onedrive\u003e/callback`\n2. 把 Client ID / Secret 粘到导出中心配置卡 → 保存 → 点「授权」→ 浏览器跳转完成授权 → 自动回传 token\n3. 之后每次导出自动 refresh，token 过期不用管\n\n---\n\n## 🗄️ 数据库管理 — 分析师工作台\n\nSQLite 数据直接暴露给懂 SQL 的用户，配 **4 件套** 工具：\n\n- **SQL 模板**：10 个预置常用查询（消息排行、联系人列表、群聊列表、AI 对话历史、Skill 记录、记忆提炼等），点一下填入编辑器 + 自动选数据库\n- **结果一键画图**：结果 ≥2 列时点「图表」，第一列 X 轴 / 第一个数字列 Y 轴自动出柱状/折线（日期格式走折线）\n- **磁盘占用环形饼图**：每个 DB 文件占比 + Tooltip + 彩色图例\n- **SQL 历史 + 收藏**：自动记录最近 20 条执行历史；点「收藏」起名保存常用 SQL，列表置顶展示\n\n### 💬 自然语言查数据（中文问 AI 写 SQL）\n\n在面板里输入中文问题，例如：\n\n\u003e 「我和老婆的第一条消息是什么时候」\n\u003e 「今年跟我妈聊了多少条消息」\n\nLLM 会：\n1. 读取自动生成的 WCDB schema 摘要\n2. 输出 `{db, sql, explain}` JSON（严格限制 SELECT/PRAGMA only + LIMIT 50）\n3. 后端执行并返回结果表 / 自动画图\n\n**跨库联系人消息**（`mode=contact_messages`）：按备注模糊查 contact.db → md5 计算 `Chat_xxx` 表名 → 遍历 message_N.db 找到有该表的 DB 执行 SQL。\"我和 XX 的...\" 这类跨库问题现在也能直接回答。\n\n结果表支持**一键 CSV 下载**。\n\n---\n\n## 数据分析功能\n\n**好友分析**\n- 消息总量排行、关系热度变化（历史峰值 vs. 近一个月）\n- 聊天趋势折线图、24 小时活跃分布、聊天日历热力图\n- 词云分析、情感趋势曲线（按月，可切换仅对方/双方）\n- 撤回次数、红包/转账次数（分开统计，含时间线记录）、主动发起对话比例等社交特征\n- 共同群聊数\n- **聊天里程碑**：初识日期 + 第一条消息预览、消息量门槛（100/500/1K/5K…）、最火月份、认识天数\n- **深夜守护统计**：深夜消息占比、最活跃时段、深夜密友 Top 3\n- **渐行渐远的人**：近一月消息量比历史峰值下降超过 80% 的联系人预警\n- **弹窗全屏模式**：私聊和群聊弹窗支持全屏查看\n- **刷新保持**：联系人/群聊弹窗状态写入 URL hash，刷新页面自动恢复\n\n**时光机**\n- 以 3 个月为单位的可滑动日历热力图，覆盖全部历史\n- 点击任意日期查看当天私聊 + 群聊记录，或直接发起 AI 分析\n- **「去年今天」回忆横幅**：自动检测 1-5 年前今天的聊天记录，点击查看\n\n**群聊分析 + 小团体检测 + 对比**\n- 成员发言排行、活跃时间分布、高频词\n- 人物关系力导向图：互动频率可视化，支持拖拽和悬停高亮\n- **小团体检测**：Louvain 社区检测 + 模块度 Q 兜底（Q\u003c0.3 时不强行凑圈），基于真实 `refermsg/chatusr` 引用信号而非时间窗\n- **潜水成员检测**：显示每个成员的最后发言时间（\u003e180天红色 / \u003e30天橙色），支持按消息数/最后发言/名字排序，快捷筛选 Top 3/10/50/全部\n- **💕 群内「我的 CP」**：扫描引用消息（lt=49 `\u003crefermsg\u003e\u003cchatusr\u003e`），列出跟我双向引用互动最多的成员 Top 3，挂在群画像顶部。比单纯 @ 或消息数更能识别\"隐形聊友\"\n- **🎬 群聊回放**：按最近 N 条 / 按日期范围加载群消息，6 档倍速（实时 ~ 100×）真实时间间隔回放，连续同发言人合并头像 + 日期分割线\n- **群聊搜索**：支持按发言人筛选，结果可导出 TXT/CSV\n- **群聊活跃度对比**：同时选中多个群对比消息量、成员数、日均消息、人均消息\n\n**群聊四件套 — 这个群的指纹**\n- **⚡ 群号称卡**（群的 MBTI）：基于 hourly_dist / weekly_dist / type_dist / member_rank 规则派生 2-4 条标签 —— 深夜话唠 / 工作日正午群 / 晚八点饭后群 / 周末活跃 / 工作日只上班群 / 表情包战场 / 图包王国 / 链接集散地 / 语音派对 / 红包雨 / 消息洪流 / 静默多数派 / 潜水员联盟 等。零 LLM 零后端\n- **🕐 时钟指纹**：7×24 小热图徽章，log 压缩着色，一眼识别「工作群作息 / 深夜局 / 周末亲友群」不同性格\n- **📊 群影响力指数**：我发言后 30 分钟内有异发言者回应的比例 vs 群整体基线，Score = min(myRate/baseRate, 2) × 50。看你在哪个群更\"有号召力\"\n- **📖 AI 群年报**：Spotify Wrapped 风格分页卡片 —— 年度概览 / 话痨榜 Top 3 / AI 精选 3 条金句（原文引用）/ 月度趋势柱状图 / 60-100 字 AI 叙事。每群每年可生成\n\n**群聊列表四维信息**\n- **我的参与度**：在每行副标展示「我 #N · X%」（在成员发言排行里的位置 + 消息占比）\n- **近期活跃度**：旁边一个「30天 N 条」区分\"已死\"和\"活跃\"群\n- **活跃趋势箭头**：最近 3 月 vs 前 3 月百分比变化，↑12% 绿 / ↓35% 红\n- **我最后发言时间**：不同于群最后消息 —— 显示我自己在这个群潜水了多久\n\n**回复节奏分析（联系人深度画像）**\n- 双向对比我 / 对方的回复速度（中位数、均值、秒回次数、慢回次数）\n- 按 24 小时分时段的平均回复速度柱状图\n- 消息间隔分布直方图：10秒 / 1分钟 / 10分钟 / 1小时 / 6小时 / 1天\n- 聊天密度曲线：按月统计消息间隔均值，自动判断升温 / 降温 / 平稳趋势\n\n**谁最像谁 — 联系人相似度分析**\n- 基于消息类型分布、平均消息长度、表情偏好、互动方式等 18 维特征向量\n- 余弦相似度算法计算所有联系人间的聊天风格相似度\n- 展示共同高频词，发现说话最像的两个人\n\n**红包 / 转账全局总览**\n- 全局 KPI：红包总数、转账总数、我发出、我收到\n- 月度收发趋势柱状图\n- 联系人红包转账排行，细分四个方向（发红包 / 收红包 / 发转账 / 收转账）\n\n**个人自画像**\n- 汇总所有「我」方向的消息数据\n- 发出消息总数、平均字数、最活跃时段、联系过的人数\n- 最爱发消息的星期、最常联系的人\n- 24 小时个人发送分布\n\n**每日社交广度**\n- 每天联系了多少个不同的人（不是消息数）\n- 年度曲线 + 日均 / 最广日统计，看到\"社牛日\"和\"闭关日\"\n\n**共同社交圈**\n- 选择两个联系人，基于共同所在群聊推测他们的共同朋友圈\n- 列出共同群聊（小群优先）和推测的共同好友\n- 标记每个共同好友出现的群数，多群共现 = 关系更紧密\n\n**链接收藏夹**\n- 自动扫描所有聊天中发过 / 收过的链接，按域名聚合\n- 支持搜索、按域名筛选、导出 CSV\n- 当作\"个人书签库\" — 那些在微信里分享过的好文章再也不会丢\n\n**消息撤回排行**\n- 基于已有的撤回数据做\"谁最爱撤回消息\"排行 + 撤回率\n\n**词云交互**\n- 悬浮显示词频 tooltip，点击固定详情卡（次数、排名、相对频率条）\n\n**全局统计**\n- 关系热度分布五档：活跃 / 温热 / 渐冷 / 沉寂 / 零消息\n- 月度趋势、深夜聊天排行榜\n\n**纪念日**\n- 自动检测生日（扫描\"生日快乐\"等关键词，按年份去重）\n- 友谊里程碑提醒（认识 100/365/1000/... 天）\n- 支持自定义纪念日（标题、日期、是否每年重复）\n- **AI 首页「今天的纪念日」banner**：客户端聚合 4 类当天命中（首条消息 MM-DD 对应的整周年 / 检测生日 / 0 天里程碑 / 自定义），Hero 上方小卡，单条点击直接开联系人，多条跳纪念日 tab，按日期关闭\n\n**全局搜索增强**\n- 跨联系人全局关键词搜索（热门推荐词 + 搜索历史持久化）\n- 时间范围筛选（预设一周/一月/三月/一年 + 自定义日期）\n- 搜索结果排序（匹配数 / 最新时间 / 联系人消息量）\n- 统计摘要条 + Top 5 迷你柱状图\n- 即输即搜（2 字以上 500ms debounce 自动搜索）\n- 空结果建议（换关键词 / 清除时间筛选）\n\n**链接收藏夹增强**\n- 来源筛选（全部 / 私聊 / 群聊）+ 方向筛选（我发出 / 我收到）\n- 时间范围筛选 + 联系人快捷选择（Top 30 按链接数排序）\n\n**其他**\n- 认识时间线（垂直河流式，按年月展开，支持播放回忆动画）\n- 联系人对比（勾选 2-6 人，雷达图 + 柱状图 + 数据明细）\n- 社交体检报告（健康指数 + 洞察，支持分享为图片）\n- 全局字号调节（设置页 12-22px 滑块，Docker/macOS/Windows 全平台支持）\n- 时间范围筛选（预设 + 自定义）\n- 隐私屏蔽（联系人 / 群聊，仅本地生效）\n\n---\n\n## 使用技巧\n\n完整说明见 [docs/ux.md](docs/ux.md)，高频用到的几项：\n\n| 功能 | 快捷键 / 入口 | 做什么 |\n|---|---|---|\n| **命令面板** | `⌘K` / `Ctrl+K` | 搜索联系人 / 群聊 / AI 对话历史（支持拼音首字母，输入 `zw` 能搜到「张伟」）；触发备份、诊断、刷新索引、切主题、反馈问题等动作；空查询显示最近打开 |\n| **Tab 快捷切换** | `⌘1` .. `⌘9` | 首页 / 统计 / 联系人 / 群聊 / 搜索 / 时间线 / 日历 / Skills / 设置 |\n| **🔒 锁屏保护** | 设置 → 锁屏 PIN / `⌘L` / `Ctrl+L` | 设 4-32 位 PIN 后手动或闲置超时（30min / 1h / 2h）自动锁屏；可配置 App 启动即锁。全屏毛玻璃遮罩 + PIN 输入框，PIN 以 bcrypt 哈希存 `preferences.json` |\n| **一键诊断** | 设置 → 诊断 | 数据目录健康 / 索引状态 / LLM 探活 / 磁盘占用；支持一键复制为 Markdown 贴 issue |\n| **AI 数据备份 / 恢复** | 设置 → AI 数据备份 | `VACUUM INTO` 自洽快照；App 模式写下载目录 + 可在 Finder 定位，Docker 模式触发浏览器下载 |\n| **多账号切换** | 设置 → 数据目录·多账号切换 | 把多个 `decrypted/` 作为 profile 保存，热替换无需重启 |\n| **AI 对话全局搜索** | `⌘K` 输入关键词 | 跨所有联系人 / 时光机 / AI 首页的对话里做子串搜索，命中展示上下文片段 |\n| **索引进度 + 取消** | 初始化屏幕 | 真实进度条 + ETA + 当前处理联系人；中途可取消 |\n| **导出目录可配置** | 设置 → 导出图片保存位置 | 默认 `~/Downloads`，可改成任意 Home 下目录；保存后 toast 里有「在 Finder 中显示」 |\n| **启动自动探测** | — | 找不到数据目录时，Docker / App 各自展示针对性引导；只读盘会给出警告 |\n| **一键反馈问题** | 设置 → 诊断 → 反馈问题，或 ⌘K「反馈」 | 自动附带诊断报告 + 环境信息；没 GitHub 账号可复制 md / 下载文件贴到任意地方 |\n| **界面崩溃自救** | — | ErrorBoundary 接住异常，不会白屏；可一键带 stack 反馈 |\n| **设置页内搜索** | 设置页顶部搜索框 | 输入\"下载\"/\"LLM\" 等关键词过滤 section |\n| **自动检查新版本** | 启动 5s 后后台 GitHub API 轮询 | 有新版本弹 Release Notes Modal 展示 changelog；「我先用着」记住版本不再烦人 |\n| **LLM 用量统计** | 设置 → LLM 用量 | 累计字符 / 估算 tokens，按 provider 分组 |\n| **有趣发现** | 统计页底部 | 字数换算 / 最话痨一天 / 互动档位 / 陪伴时长 / 微信 MBTI / 首次相遇 / 沉默最久 / Ghost 月 / 表情包浓度 / 独白指数 / 最像我的朋友 / 我的人设 / 秘语雷达 / 词语年鉴 / 失眠陪聊榜 |\n| **关系动态预测** | AI 首页 + 统计页底部 | 4 档趋势 + 建议主动联系 Top 5 + AI 开场白草稿 + 12 月折线大图 |\n| **导出中心** | 侧边栏「导出」 | 年度回顾 / 对话归档 / AI 历史 / 记忆图谱 × 8 种目标（Markdown / Notion / 飞书 / WebDAV / S3 / Dropbox / Google Drive / OneDrive） |\n| **数据库查询** | 侧边栏「数据库」 | SQL 模板 + 自然语言问 AI 写 SQL + 结果画图 + SQL 历史收藏 |\n| **真实头像** | 所有聊天回放 / 日聊面板 / 搜索上下文 | 对方和「我」都显示真实头像，无头像时降级彩色首字母圆圈 |\n\n---\n\n## 快速开始\n\n### 第一步：解密微信数据库\n\n把手机聊天记录同步到电脑后（微信 → 设置 → 通用 → 聊天记录迁移），使用 [wechat-decrypt](https://github.com/ylytdeng/wechat-decrypt) 解密：\n\n```bash\ngit clone https://github.com/ylytdeng/wechat-decrypt\ncd wechat-decrypt\nsudo python3 main.py   # 选择 decrypt 模式\n```\n\n解密后生成 `decrypted/` 目录（含 `contact/contact.db` 和 `message/message_N.db`）。\n\n### 第二步：启动 WeLink\n\n**Docker 模式**（将 `decrypted/` 放在仓库根目录内）：\n\n```bash\ncd welink\ndocker compose up\n```\n\n访问 [localhost:3418](http://localhost:3418) 开始使用。\n\n\u003e 完整 Docker 部署指南（环境变量 / Volume / 反代 HTTPS / 升级 / 多 profile / K8s 等）见 [docs/docker.md](docs/docker.md)。\n\n**macOS / Windows App**（无需 Docker）：前往 [GitHub Releases](https://github.com/runzhliu/welink/releases) 下载，启动后在设置页选择 `decrypted/` 目录即可。\n\n\u003e **端口说明**：详见下方[端口与自定义](#端口与自定义)章节。\n\n### 没有数据？先试试 Demo\n\n```bash\ndocker compose -f docker-compose.demo.yml up\n```\n\n或直接访问 **[https://demo.welink.click](https://demo.welink.click)**。\n\n\u003e Demo 数据以**阿森纳 2025/26 赛季一线队球员与教练组**为联系人，消息内容充满更衣室气息。**COYG！** 🔴⚪\n\n---\n\n## macOS App 安装说明\n\n\u003e **系统要求：macOS 12（Monterey）及以上**\n\n1. 前往 [GitHub Releases](https://github.com/runzhliu/welink/releases) 下载最新 `WeLink.dmg`\n2. 拖入 `/Applications`，双击运行\n\n\u003e **提示「无法打开」？** 右键 → 「打开」→ 再次点击「打开」。若仍无效：`xattr -cr /Applications/WeLink.app`\n\n完整指南（配置路径 / 端口自定义 / 升级 / 多 profile / FAQ）见 [docs/install-macos.md](docs/install-macos.md)。从源码构建：`make dmg`。\n\n## Windows App 安装说明\n\n\u003e **系统要求：Windows 10 1903 及以上**\n\n1. 下载 `WeLink-windows-amd64.zip`，解压后双击 `WeLink.exe`\n2. 如提示缺少 WebView2，从 [Microsoft 官网](https://developer.microsoft.com/microsoft-edge/webview2/) 安装 Evergreen Bootstrapper\n3. SmartScreen 拦截时点「更多信息」→「仍要运行」\n\n完整指南（`%APPDATA%\\WeLink` 配置路径 / 端口自定义 / 升级 / 多 profile / FAQ）见 [docs/install-windows.md](docs/install-windows.md)。从源码构建：`make exe`。\n\n---\n\n## 端口与自定义\n\nWeLink 启动时会占用以下端口：\n\n| 运行方式 | 后端端口 | 前端端口 | 说明 |\n|----------|---------|---------|------|\n| **macOS / Windows App** | `8080` | — | 内置 WebView，后端直接监听 8080，无需额外端口 |\n| **Docker Compose** | `8080`（容器内） | `3418` → 容器 `80` | 浏览器访问 `localhost:3418` |\n| **本地开发** | `8080` | `3418` | 后端 `go run .`，前端 `npm run dev` |\n\n### 自定义端口\n\n**macOS / Windows App**：在设置页修改端口，或编辑 `preferences.json`：\n```json\n{ \"port\": \"9090\" }\n```\n也可以通过环境变量覆盖：\n```bash\nPORT=9090 ./WeLink\n```\n\n**Docker Compose**：修改 `docker-compose.yml` 的端口映射：\n```yaml\nports:\n  - \"5000:80\"  # 改为 5000\n```\n\n**本地开发**：\n- 后端端口：编辑 `config.yaml` 的 `server.port`，或 `PORT=9090 go run .`\n- 前端端口：编辑 `frontend/vite.config.ts` 的 `server.port`\n\n---\n\n## 推荐运行配置\n\n| 数据规模 | 消息量 | 推荐内存 | 首次索引时间 |\n|----------|--------|----------|-------------|\n| 轻量     | \u003c 50 万条  | 2 GB | \u003c 30 秒 |\n| 中等     | 50–200 万条 | 4 GB | 1–3 分钟 |\n| 重度     | 200 万条以上 | 8 GB+ | 3–10 分钟 |\n\n首次使用建议先选「近 6 个月」体验，确认无误后再切换到「全部数据」。\n\n---\n\n## 整体架构\n\n```\n                       ┌──────────────────────────────────────────┐\n                       │             终端用户 (浏览器 / App)        │\n                       └────────────────┬─────────────────────────┘\n                                        │ HTTP / SSE\n                                        ▼\n          ┌───────────────────────────────────────────────────────┐\n          │                      前端 (React)                     │\n          │   Dashboard · AI 对话 · 设置 · 数据库 · 记忆库 · 播客   │\n          └────────────────┬──────────────────────────────────────┘\n                           │ REST + SSE\n                           ▼\n          ┌───────────────────────────────────────────────────────┐\n          │              后端 (Go + Gin, 单 binary)               │\n          │                                                       │\n          │  ┌─────────┐  ┌────────┐  ┌──────┐  ┌──────┐  ┌────┐ │\n          │  │ 统计分析 │  │ AI/LLM │  │ RAG  │  │ 记忆 │  │ TTS│ │\n          │  │  服务   │  │ 多 provider│ FTS+向量│  提炼 │  代理│ │\n          │  └─────────┘  └────┬───┘  └──┬───┘  └──────┘  └────┘ │\n          │                    │         │                        │\n          │              ┌─────▼─────────▼────┐                   │\n          │              │   DB 管理器 (纯 Go) │                   │\n          │              └─────┬─────────┬────┘                   │\n          └────────────────────┼─────────┼────────────────────────┘\n                               │         │\n                      ┌────────▼───┐   ┌─▼──────────────┐\n                      │ 解密后的    │   │ ai_analysis.db │\n                      │ 微信 DB     │   │ AI 对话/记忆/  │\n                      │ (contact/   │   │ 向量索引/播客   │\n                      │  message)   │   │ 历史           │\n                      └─────────────┘   └────────────────┘\n                               ▲\n                               │ 本地解密（不出机器）\n                               │\n                      ┌────────┴─────────────┐\n                      │ wechat-decrypt       │\n                      │ (从微信进程内存取 key) │\n                      └──────────────────────┘\n\n  外部可选集成（全部用户自备凭证）\n  ─────────────────────────────────────────────────────────────────\n  LLM:   OpenAI / Anthropic / Gemini / DeepSeek / 豆包 / Kimi / Ollama / Vertex / Bedrock\n  导出:  Markdown / Notion / 飞书 / WebDAV / S3 / Dropbox / Google Drive / OneDrive\n  MCP:   Claude Code / Claude Desktop / Cline / Continue / Windsurf / Zed / ... (独立 Go binary)\n  TTS:   OpenAI / Azure / Edge-TTS (播客功能)\n```\n\n**关键设计**\n\n- **本地优先**：微信数据库全程在本地机器解密、索引、检索；只有你明确触发 AI 对话时才会把相关片段发到你配置的 LLM 提供商\n- **单 binary 部署**：后端 Go 源码编译成一个可执行文件，内嵌前端静态资源，Docker 镜像 \u003c 50MB，也可打包成 macOS / Windows 桌面 App\n- **零 CGO**：SQLite 用 modernc 纯 Go 实现，向量检索/FTS 全部走 Go，跨平台编译不依赖 C 工具链\n- **MCP 集成**：独立的 `mcp-server` binary 通过本地 HTTP 反向代理后端 API，让 Claude Code 等 MCP 客户端能直接用自然语言查询你的聊天数据\n\n---\n\n## 技术栈\n\n| 层次 | 技术 |\n|------|------|\n| 后端 | Go + Gin |\n| 前端 | React 18 + TypeScript + Tailwind CSS |\n| 数据库 | SQLite（modernc，纯 Go，无 CGO） |\n| 全文检索 | SQLite FTS5 |\n| 向量检索 | 余弦相似度（纯 Go，无外部依赖） |\n| AI / LLM | OpenAI / Ollama / Gemini / 自定义（兼容 OpenAI 接口） |\n| 中文分词 | go-ego/gse |\n| 部署 | Docker Compose |\n\nAPI 文档：启动后访问 [localhost:3418/swagger/](http://localhost:3418/swagger/)。架构细节与分层职责见 [docs/architecture.md](docs/architecture.md)，更多技术文档见 [docs/](docs/README.md)。\n\n---\n\n## 数据安全\n\n所有数据仅在本地处理，不会上传至任何服务器。请仅分析自己的聊天记录。\n\n## 感谢\n\n本项目依赖 [ylytdeng/wechat-decrypt](https://github.com/ylytdeng/wechat-decrypt) 实现微信数据库解密。微信数据库使用 SQLCipher 加密，该项目从进程内存中提取密钥，是 WeLink 的基础。\n\n## 开源协议\n\n本项目采用 [GNU Affero General Public License v3.0 (AGPL-3.0)](LICENSE) 协议。\n\n## Star History\n\n[![Star History Chart](https://api.star-history.com/svg?repos=runzhliu/welink\u0026type=Date)](https://star-history.com/#runzhliu/welink\u0026Date)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frunzhliu%2Fwelink","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frunzhliu%2Fwelink","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frunzhliu%2Fwelink/lists"}