Skip to content

跨联系人 AI 问答

不限于单个联系人——直接问关于所有聊天记录的问题,AI 自动搜索并汇总回答。

功能入口

AI 首页,点击顶部的 「跨联系人问答」 按钮切换模式。

使用示例

问题AI 做了什么
谁跟我聊过旅行?搜索所有联系人含"旅行"的消息,按匹配数排列
去年国庆我都跟谁聊天了?查询 10/1-10/7 的日历数据,列出每天的聊天对象
哪些朋友经常提到加班?搜索"加班"关键词,汇总每人出现频次
最近一个月谁给我发了红包?搜索"红包"相关消息
有没有人跟我聊过买房?搜索"买房"关键词

技术原理:LLM Agent 模式

传统做法是把所有消息塞给 LLM,但百万级消息会消耗上亿 token,完全不可行。

WeLink 采用 Agent 模式——LLM 不直接读消息,而是决定调用什么工具来收集数据:

用户提问

Step 1: LLM 解析意图(~500 token)
    → 提取关键词、时间范围、搜索类型
    → 输出 JSON:{ type, keywords, date_from, date_to }

Step 2: 自动执行搜索/查询(0 token)
    → 关键词问题 → 调用全局搜索 API
    → 时间问题 → 调用日历 API 逐天查询
    → 混合问题 → 两者都调用

Step 3: LLM 汇总回答(~3000 token)
    → 把搜索结果组织成上下文
    → LLM 基于真实数据生成自然语言回答

意图解析(Step 1)

第一步使用 LLM 将自然语言问题解析为结构化 JSON:

json
{
  "type": "search",
  "keywords": ["旅行"],
  "date_from": null,
  "date_to": null,
  "search_type": "contact",
  "summary": "用户想知道谁聊过旅行"
}

支持的意图类型:

type触发条件调用的 API
search问题含具体关键词GET /api/search?q=关键词
calendar问题含时间范围GET /api/calendar/day?date=日期
both同时含关键词和时间两个 API 都调用

数据收集(Step 2)

搜索模式:调用已有的全局搜索 API,返回每个联系人/群聊的匹配消息(每个最多 5 条)。取前 10 个匹配度最高的联系人,每人取 3 条消息样本。

日历模式:逐天查询日历 API,获取每天的活跃联系人列表和消息数。最多查询 14 天。

两种模式的数据收集都在后端完成,不消耗 LLM token

汇总回答(Step 3)

将收集到的数据组织成紧凑的文本上下文,连同用户原始问题一起发给 LLM:

【搜索「旅行」结果:3 个联系人匹配】

[联系人] Saka(5 条匹配):
  [2025-03-15 14:23] Saka:下周准备去日本旅行
  [2025-06-01 09:12] 我:你那次旅行怎么样
  ...

[联系人] Ødegaard(2 条匹配):
  [2024-12-20 20:30] Ødegaard:云南旅行攻略分享给你
  ...

LLM 基于这些真实搜索结果生成自然语言回答,不会编造不存在的数据。

Token 消耗

步骤消耗
意图解析~500 token
数据收集0 token(后端 API)
汇总回答~3000 token
总计~4000 token

相比全量分析(可能需要几十万 token),Agent 模式降低了 99% 的 token 消耗。

局限性

  • 关键词搜索依赖精确匹配,语义相似但用词不同的消息可能搜不到
  • 日历查询最多覆盖 14 天,超长时间范围会被截断
  • LLM 意图解析偶尔会提取不准确的关键词,可以换一种问法重试
  • 搜索结果每个联系人最多返回 5 条,不一定覆盖所有相关消息

隐私说明

  • 搜索和日历查询完全在本地后端执行,不经过 LLM
  • 只有搜索结果的摘要(关键消息片段)会发送给 LLM
  • 隐私模式下联系人姓名会被替换为 ***

WeLink · AGPL-3.0 · 所有数据仅在本地处理,不上传任何服务器 · vdev