← 返回笔记索引

项目实践

为什么 Personal AI Assistant 不应该直接成为 Search Agent:zglab-rag 的外部研究边界

记录 zglab-rag Phase 11 的架构规划:个人知识优先,外部研究仅在符合资格的证据不足场景中作为临时、可引用的补充。

为什么 Personal AI Assistant 不应该直接成为 Search Agent:zglab-rag 的外部研究边界

目录

当前状态与问题

本文描述的是 zglab-rag Phase 11 的架构规划,不是已上线能力。当前系统的边界仍是个人公开 知识库:当证据不足时返回 insufficient_evidence,不会自动联网。这个选择与 Agent 长期记忆 中“Memory、Knowledge Base 和当前 Context 不应混为一谈”的原则一致。

引入外部网页后,系统面对的不是单纯的检索能力提升,而是三种新风险:把网上同名人物信息补成个人 事实;把搜索摘要当作足以支持答案的证据;让恶意网页内容、URL 或内网地址影响系统行为。

为什么不是“不知道就搜索”

个人事实与一般外部知识的缺失语义不同。个人资料不足不能通过搜索引擎补全实习公司、电话、论文状态 或获奖记录:同名信息和陈旧页面都可能污染 Persona。另一方面,通用技术问题缺少个人 Notes 时, 外部资料可以是有价值的补充,但仍要遵守同样的 Evidence 与 Citation 要求。

因此不触发研究的情况包括 ProviderFailure、InternalError、Timeout、RateLimit 和 ServiceBusy。 这些是服务故障或容量问题,不是“知识不足”;把它们路由到联网只会掩盖问题并放大不可控性。

Personal-first 决策链

flowchart TD
    Q[用户问题] --> P[先检索 Personal Knowledge]
    P --> G[Grounded Generation]
    G --> S{是否 personal sufficient?}
    S -->|是| A[返回个人证据回答]
    S -->|否| E{问题是否属于一般外部知识?}
    E -->|否:个人事实| I[继续 insufficient evidence]
    E -->|是| R[受控 Web Research]
    R --> T[Temporary ExternalEvidence]
    T --> C[Grounded Generation + Citation Validation]
    C --> W[带 Web Citation 的回答]

触发条件复用 GenerationStatus.INSUFFICIENT_EVIDENCE,不引入 LLM Router 或自由规划的 Agent。这个固定 Workflow 比“由模型决定何时上网、搜什么、再搜几轮”更容易给出资格、成本和失败 边界。

Temporary Evidence 的设计

Search 结果不等于证据。规划中的链路是 search → fetch → extraction → normalization → ExternalEvidence[]:至少保留 evidence_id、title、url、content、retrieved_at 与 origin=web。 只有实际取回并提取的内容才能进入 Context;模型不能凭空新增、修改 URL 或把搜索 snippet 伪装成全文。

flowchart LR
    S[Search] --> F[Fetch]
    F --> X[正文提取与规范化]
    X --> E[ExternalEvidence]
    E --> C[临时 Context]
    C --> V[CitationValidator]
    V --> A[Web 来源回答]
    E -.不写入.-> K[(knowledge.db / 长期索引)]

这些 Web Evidence 默认为 request-scoped;后续若实现同一浏览器 session 的复用,也应采用有限 TTL、 最大 session、最大 evidence items 与最大字节数。它们不写入 knowledge.db、长期 Embedding、个人 Profile、Notes 或 Git,也不自动成为个人知识。

安全与失败语义

网页正文被视为不可信 Evidence Data,而不是系统指令。Research 层还需要防 SSRF:禁止 localhost、 RFC1918、link-local 等内网目标,限制重定向、响应大小、内容类型和超时。外部链接经过 allow/deny 策略后再 fetch,不能由模型直接调用任意 URL。

如果 Personal insufficient 且 Research 不可用,正确结果仍是 insufficient_evidence,内部可记录 RESEARCH_PROVIDER_UNAVAILABLE,而不是生成无引用答案。评测也应覆盖:personal sufficient 不联网、 个人事实不自动补全、引用 URL 必须真实、恶意网页只作为证据、SSRF 被拒绝、研究失败不胡编。

非目标与方法论

Phase 11 第一版的非目标包括:自主研究 Agent、浏览器自动化、永久自动 ingestion、Redis、完整 Conversation Memory、无引用浏览和无限递归搜索。它扩展的是 Evidence Source,不是绕过现有 Grounding 的捷径。

核心方法论是:

  1. Personal Knowledge First:已有个人证据足够时不联网。
  2. External Research Is Fallback:只有符合资格的证据不足才进入研究。
  3. Web Evidence Is Temporary:外部资料不沉淀为个人事实。
  4. Citation Continues to Be Mandatory:网页让答案范围变大,但不让证据标准变低。

真正值得避免的不是 Search 本身,而是把搜索能力误当作回答权限。一个个人 AI Assistant 应该先忠于 自己的资料边界,再谨慎地说明何时引用了外部世界。