拓十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

ChatLab 聊天记录智能分析实战:基于 clb 只读 CLI 的查询、证据检索与隐私安全指南

ChatLab 聊天记录智能分析实战:基于 clb 只读 CLI 的查询、证据检索与隐私安全指南 数据分析人工智能AI 应用AI Agent桌面应用CLIMCP 服务AI 技能【免费下载链接】ChatLabLocal-first chat history analyzer with AI. | 本地优先的 AI 聊天记录分析工具项目地址https://gitcode.com/ChatLab/ChatLab点击查看免费下载本篇技术指南以 ChatLab 仓库中 skills/chatlab-analyze/SKILL.md 为核心系统讲解如何通过只读clbCLI 查询与分析已导入的 ChatLab 聊天记录从会话定位、关键词搜索、双人对话抽取到话题总结、统计对比、SQL 兜底查询与证据引用标注。读完本文你将掌握一套完整、可复现、隐私安全的 Agent 查询工作流并理解其底层实现命令解析、隐私预处理、游标分页与证据标记机制是如何在 apps/cli/src/query 中落地的。一、为什么需要 chatlab-analyze只读查询与智能分析的分工ChatLab 是一个本地优先local-first的 AI 聊天记录分析工具数据完全保留在本地。clb是它的命令行界面而chatlab-analyze是围绕clb设计的一套查询与分析技能契约它只面向已经导入 ChatLab 的聊天记录通过只读命令完成三件事——查找证据、总结话题、比较活跃度或成员关系。它有两层明确边界只读查询期间不得修改数据或配置不启用--raw绕过隐私预处理不得使用任何写操作。职责分离如果需要导入新的聊天导出文件应优先使用chatlab-import技能不可用时再参考clb import --help且写入前必须先预览确切导入结果。也就是说导入走导入的工作流分析走分析的工作流二者互不混淆。从源码看这条边界在 CLI 层是硬性的查询命令统一经由 query/context.ts 的createQueryContext建立运行时启动 会话解析 隐私配置三件套上下文而--raw逃逸通道默认关闭需要用户端显式开关cli.allow_raw才能启用。二、查询工作流总览四步递进够用即止SKILL.md 给出了一个清晰的四步工作流核心原则是用最简单的命令直接回答问题不够再加深绝不空跑步骤目标典型命令1. 准备查询加载命令契约、确认目标会话clb manifest、clb sessions list --format json2. 专用命令直答用最贴近问题的专用命令messages search、messages between、topics list3. 补充上下文/统计首轮结果不足时加深messages context、stats keywords4. SQL 兜底专用命令均无法回答时clb schema、clb sql2.1 第一步加载契约与定位会话每个任务只需加载一次命令契约Command Contract不需要反复探测--helpclb manifest clb sessions list --format jsonclb manifest会输出一份机器可读的命令清单包含查询组sessions、members、messages、stats、topics、sql、schema、manifest、每个子命令的参数/选项、退出码表、示例配方与使用须知。从 manifest.ts 可以看到查询命令组的完整集合以及预置的退出码语义退出码含义0成功1内部错误2非法参数、非法游标或能力被禁用3资源未找到会话/成员/消息/话题段4引用有歧义参考error.candidates5SQL 错误clb sessions list --format json返回所有已导入会话的 id、名称、平台、类型、消息数、成员数及首末消息时间。会话一旦在对话中确认后续命令应复用该会话 id 与时间范围只有返回的候选结果和上下文无法消除实质歧义时才向用户提问。如果 CLI 不可用直接报告缺失能力即可——安装需要用户授权不要擅自尝试。2.2 会话与成员引用解析ID 优先、名称容错理解--session与--member的解析规则是让命令一次命中的关键。从 resolve.ts 的源码可以确认如下行为会话引用resolveSession--session ref可传会话 id 或唯一名称不传时若本地只有一个会话则自动选中多个会话则必须显式指定。id 精确命中优先其次唯一名称精确匹配模糊匹配会返回结构化错误退出码 4并附候选列表。成员引用resolveMember--member ref支持数字 id、当前名称群昵称/账号名/平台 id或别名me特殊值解析为会话的拥有者owner档案未配置拥有者时会给出明确提示。任何歧义都以error.hintcandidates的形式返回Agent 应据此用 id 重试而不是反复猜测。三、核心查询命令搜索、对话、上下文与时间窗口3.1 消息搜索messages search关键词搜索是最常用的证据查找手段基础写法clb messages search keyword --session session-id --format agent从 commands-messages.ts 可以看到该命令的完整选项体系关键词与匹配模式支持多个关键词默认--match anyOR 匹配可切换--match allAND 匹配底层是 LIKE 匹配而非全文索引。排序--sort desc默认最新在前或--sort asc用于回答谁最先提到。命中扩展--context n在每个命中前后附加 n 条上下文消息--max-messages n控制扩展后返回的总消息上限默认 200最大 2000超出时优先保留命中本身并给出 warnings。分页--limit n控制每页命中数默认 20最大 500配合meta.nextCursor继续翻页。内容控制--max-tokensagent 文本 token 预算默认 4000、--max-chars单条消息字符上限、--full关闭截断、--fields a,bjson 格式只输出指定字段、--no-contentjson 格式省略消息内容用于分布侦察。成员过滤--member ref限定发送者。3.2 双人对话抽取messages between当问题聚焦我和某个成员之间聊了什么时between是最直接的命令clb messages between --member me --member member --session session-id --last 90d --format agent--member必须恰好重复两次源码中通过collectMembers收集并校验数量否则抛出INVALID_ARGUMENT时间窗口与分页选项与搜索命令一致返回的meta.members会携带两个成员的解析结果。3.3 上下文回看messages context搜索结果中的命中消息通过[#id]标记引用若要查看某条消息周边的完整语境clb messages context --id 1021 --session session-id --window 10 --format agent--id接受逗号分隔的多个数字 id如--id 1021,1058--window n控制每条 id 前后各取多少条默认 10最大 100。只有单个数字 id才能传给messages context --id合并区间标记[#1021-1024]仅用于展示不能直接作为参数源码中assertContextAnchorsPresent会校验锚点 id 必须出现在返回结果中否则报MESSAGE_NOT_FOUND。3.4 时间窗口的三种写法查询类命令共享同一套时间选项见addSharedOptions选项说明--since t开始时间支持YYYY-MM-DD、YYYY-MM-DD HH:mm、ISO 8601、today、yesterday--until t结束时间仅日期时包含整天--last dur相对窗口Nh小时/Nd天/Nw周与--since/--until互斥3.5 输出格式agent 与 json 的取舍SKILL.md 给出了一条黄金规则且与 manifest 内嵌示例完全一致--format agent用于消息正文类结果search、between、context、topics list/show是给 LLM 阅读的紧凑文本。--format json用于结构性侦察sessions、members、统计数字、--no-content搜索便于程序化处理。另外agent/json 模式下 stdout 只承载一个JSON 信封{ ok, command, data, meta }日志一律走 stderr保证解析确定性见 manifest.ts 的使用须知。四、深化分析话题总结与统计对比4.1 话题总结topics list当问题涉及这段时间大家主要聊了什么时话题段segment总结是最省 token 的答案clb topics list --session session-id --last 30d --format agent返回 AI 生成的段落摘要默认脱敏agent 文本格式为[#segmentId] 起 ~ 止 (N msgs) 参与者 摘要正文见 commands-topics-sql.ts。支持--since/--until/--last时间过滤、--query kw摘要子串过滤、--limit n默认 20最大 100。摘要中的[#segmentId]标记可继续用topics show --id segment-id展开查看该段的原始消息。若尚未生成 AI 摘要命令会返回status: summaries_not_generated并提示在 ChatLab 应用中运行摘要生成或改用clb stats keywords兜底——注意topics依赖应用侧预先生成的摘要数据这是它的使用前提。4.2 关键词频率与回复速度stats家族clb stats keywords --session session-id --member member --last 90d --top 20 --format jsonstats家族见 commands-stats.ts提供五种维度子命令用途关键选项stats overview会话总览消息数、成员数、首末时间、Top 成员、摘要数--sessionstats activity成员活跃度排行消息数与占比--top n默认 10最大 100stats time消息时间分布必填--by hour/ weekday/ day/ monthstats keywords高频词隐私过滤后--top n默认 20、--member refstats response回复速度排行中位回复间隔--last dur默认 30d、--top nstats keywords底层使用分词引擎计算词频中文场景依赖 jieba 分词可选依赖node-rs/jieba若分词不可用会返回status: segmentation_unavailable与提示而不是静默失败。五、分页与证据链cursor 与[#id]标记5.1 游标分页hasMore 与 nextCursor当meta.hasMore为 true 时用同一个查询条件 --cursor继续翻页clb messages search 报销 --session session-id --sort asc --limit 5 --format agent # 返回 meta.hasMore true, meta.nextCursor ... clb messages search 报销 --session session-id --sort asc --limit 5 --cursor meta.nextCursor --format agent两个关键约束均可在源码与 manifest 注释中确认游标与查询指纹绑定nextCursor由queryFingerprint会话、关键词、匹配模式、排序、时间范围、黑名单等编码生成只对完全相同的查询有效不能跨命令/跨条件复用。问题答完即停不要为了翻全而翻页。若只看了第一页必须向用户披露这是部分覆盖而不能把一页当作完整数据集。5.2 证据标注规则回答中引用证据时使用三类标记[#1021]单条消息锚点可直接传给messages context --id 1021。[#1021*]表示该消息与某关键词命中的锚点同样可单独传入。[#1021-1024]合并区间仅用于展示统计口径不能作为--id参数源码assertContextAnchorsPresent会明确拒绝。六、SQL 兜底只读、受隐私约束的最后一招只有没有任何专用命令能回答问题时才使用只读 SQL。标准流程是先用schema摸清表结构再执行查询clb schema --session session-id --format json clb sql SELECT COUNT(*) AS n FROM message --session session-id --format jsonclb sql只接受SELECT / WITH语句默认最多返回 100 行最大 1000。它有三道隐私闸门见 commands-topics-sql.ts开关门控SQL 能力默认受cli.allow_sql配置控制被禁用时返回SQL_DISABLED可用clb config set cli.allow_sql true重新开启。查询级拦截非--raw模式下SQL 若读取message表的 content 字段含SELECT *与别名展开检测直接报INVALID_ARGUMENT——防止 SQL 表达式在脱敏器看到之前就把原始正文编码带出。结果级脱敏字符串单元格会经黑名单过滤与脱敏规则清洗命中黑名单的行整行丢弃并计入 warnings。需要强调的是这是兜底手段不是首选。消息正文请始终使用专用消息命令它们才能正确输出经过隐私预处理的内容。七、隐私与安全默认开启绝不绕过SKILL.md 在隐私上的立场非常明确也是 chatlab-analyze 与裸 SQL 翻库式分析的本质区别隐私预处理默认开启每次查询都会加载用户的aiPreprocessConfig黑名单关键词 脱敏规则并合并内置的、按语言区分的脱敏规则组zh-CN、en-US、ja-JP、ko-KR见 preprocess-config.ts。绝不使用--raw--raw是绕过隐私预处理的调试通道默认被cli.allow_raw门控assertRawAllowed见 context.tsAgent 在分析流程中不得启用。绝不透露完整聊天转储ChatLab 的 safe output 始终应用用户隐私预处理回答时只引用必要证据而不是倾倒原始对话。黑名单下推黑名单关键词在 SQL 层就参与过滤design §5.4因此totalHits、游标与分页结果永远不包含黑名单行——这保证了翻页不会泄露被屏蔽内容。八、回答规范先结论、分事实、不越界最后SKILL.md 定义了高质量分析回答的呈现纪律先给答案再点名被查询的会话与时间范围最后把观察到的事实与我的解读分开陈述。避免过度推断关系分析中不要夸大对情感意图的推测只有当error.hint的纠错方向明确时才跟随它。诚实披露覆盖范围翻页未完成、摘要未生成、分词不可用等情况都要如实说明并用meta.hint/warnings中给出的可用路径继续。这些规范与命令返回的结构化metasession、timeRange、totalHits、hasMore、warnings一一对应Agent 完全可以基于meta判断信息是否够答以及是否还有更多证据可查。九、深入验证查询命令的源码落点若想进一步验证上述行为可阅读 apps/cli/src/query 目录下的这些文件commands-messages.tsmessages list / search / context / between 的全部选项解析、分页指纹与上下文扩展逻辑。commands-stats.tsstats 家族五种子命令与隐私过滤实现。commands-topics-sql.tstopics list/show、schema、sql 及 SQL 隐私闸门。commands-sessions-members.tssessions list/show 与 members list/history。manifest.tsclb manifest命令契约的生成逻辑与退出码表。context.ts 与 resolve.ts隐私上下文装配与会话/成员解析规则。preprocess-config.ts用户预处理配置的加载与语言区脱敏规则合并。与查询配套的命令测试如 commands-messages.test.ts、commands-stats.test.ts、commands-topics-sql.test.ts覆盖了参数校验、分页与隐私边界可作为行为契约的补充参考。十、结语chatlab-analyze 的核心价值在于它把分析本地聊天记录这件事收敛成一组只读、隐私安全、证据可追溯的命令协议。对开发者而言clb manifest提供了完整的机器可读契约[#id]证据标记提供了可回查的引用链meta.hasMore与游标提供了确定性的翻页语义而贯穿始终的隐私预处理保证了任何查询路径都不会泄露黑名单内容或原始正文。按照专用命令优先、统计补充、SQL 兜底、--raw永不启用的工作流你可以用最少的命令产出最可靠的聊天分析结论。赞分享数据分析人工智能AI 应用AI Agent桌面应用CLIMCP 服务AI 技能【免费下载链接】ChatLabLocal-first chat history analyzer with AI. | 本地优先的 AI 聊天记录分析工具项目地址https://gitcode.com/ChatLab/ChatLab点击查看免费下载相关推荐CUDA 动态并行CDP实战入门解析 cdpSimplePrint 示例的 GPU 递归内核启动CUDA 动态并行CDP实战入门解析 cdpSimplePrint 示例的 GPU 递归内核启动 CUDA Dynamic ParallelismCDPVitals图标系统解析两大主题风格与自定义实现终极指南Vitals图标系统解析两大主题风格与自定义实现终极指南 Vitals是一款功能强大的GNOME Shell系统监控扩展它能够实时显示计算机的温度、电压、风Kubespray 部署 Kata Containers基于轻量级虚拟机的安全容器运行时实战指南Kubespray 部署 Kata Containers基于轻量级虚拟机的安全容器运行时实战指南 本文基于 Kubespray 官方文档 docs/CRI/k数据分析人工智能AI 应用AI Agent桌面应用CLIMCP 服务AI 技能本地部署上一篇Klib 开源项目教程下一篇终极Telegram搜索神器tgscan开源项目完整使用指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表