chain-interpretation

Chain·解读——访客提问,语料库以你的声音作答

上级:requirements-to-design

L0 · 愿景

  • introduction ——"把压缩过程倒过来":一个经过整理的知识库,访客可以对它提问,由 AI 用你自己的声音作答,答案扎根于你自己写下的文字并带有引用;"模式即角色——四个应用共享同一份语料库(自用 / 公开 / 招聘方 / 朋友)";ACL 是硬墙,角色是软的框架。
  • lossy-self-presentation ——三种损耗(记忆 / 捕获 / 传递);StandMeet 存储的是图结构,并在查询发生时针对具体问题做线性化
  • dont-repeat-myself ——每一次系统替你吸收的重复讲解,都是省下来的时间。
  • differentiation ——检索是对话式的:一个具体问题对应一个具体答案,而不是一份排名列表。

L1 · 承诺

任何人都可以提出一个具体问题,并得到一个用主人的口吻表达、有依据、带引用、并按其角色调整过框架的具体答案——一份语料库,按提问者、按每个问题分别做线性化。

L2 · 需求(旅程与功能)

访客旅程集合(详见 features-and-journeys),运行在三个功能面上:公开页面——根路径是首页 microsite(a5e1cada9,2026-09-04;没挂 microsite 时从代码直接提供由 SDK widget 组成的 DefaultHome,28f750caf / 185c4321b,app/src/app/default-home.tsx),ChatRoom 是内建的带码聊天(app/src/app/visitor-root.tsx:10),外加 /wiki / /output / /writings 阅读页——推理/对话引擎、以及访客会话——包括阅读页上的 AskAboutThis(早先的 FloatingChatDock 已移除,1d9500acd,2026-08-16)。(每条旅程的细节记录在那份文档里;本 chain 不重复陈述。)

L3 · 设计决策

  • 角色框架——访客的规则与人设来自在代码签发时冻结的 RoleSnapshot;愿景中的"四个应用"其实是同一份语料库之上的角色配置。
  • 检索——corpus-retrievalMeilisearch 词法索引(Postgres FTS 作退路)加树形导航;刻意不用向量检索(相关性 = 主人自己建立的链接)。图遍历也已落地,但不是这里写的那种有界深度 BFS —— 它是 corpus_links,一个1 跳的 op,返回 {outgoing, backlinks},要不要再往下走由 agent 自己决定(对某个邻居再调一次)。BFS 是错的心智模型:相关性就是那些链接,所以深度是一个阅读决定,不是一个查询参数。"把图线性化"现在在检索层也成立了,不只是数据层。
  • 依据(Grounding)——引用以 grounding_refs 的形式随落库的那一轮一起存(Citation VO 与消息行原子写入,backend/internal/routes/public/agent_turn.go:205conversation/ops/conversations_shape.go:85),在对话记录里渲染成 CitationsList(app/src/components/visitor/ChatTranscript.tsx);原来的 chat.show_grounding op 随 dispatcher 重构一起没了(5bd5ed95f,2026-08-01)。
  • 循环终止——force-final-answer:带 ReturnDirectlyask_visitor 结束循环。
  • 结果呈现面——ui-cardsui:// 卡片,用于 corpus_search/list、摘要、日程时段)。
  • 入口中立——entry-agnostic-agent:聊天入口只是中立启动边界的众多消费者之一。

L4 · 工程实现

  • backend/internal/conversation/inference——eino ADK 循环(Anthropic 原生 / OpenAI 兼容适配器);SSE 代理也在这里实现(unbuffered-sse-passthrough)。
  • backend/agentcore——BuildVisitorAgent(driver, input)visitor_build.go:50),启动接缝所在处。
  • prompts——visitor-header 片段(backend/internal/owner/entity/prompt_fragments.go,在 conversation/usecase/visitor_chat_prompt.go 里组装);part_ids + hash 是漂移检测仪system-prompt-hash-regression),钉住组装后提示词的身份。
  • mcp-servers/retrieval——八个工具,corpus_search / read / list / links / map / resolve / peek / grepmain.go:39-46),运行在沙盒中,通过 capsocket 访问宿主数据(隔离,一条窄套接字)。
  • backend/internal/infra/session——visitor_sessionquery_queue.go
  • app/src/lib/page/use-chat.tsuse-chat-session.ts——薄的 SSE 消费端;ChatRoom / ChatTranscript / AskAboutThis 组件;SDK 的 CorpusWidget 带 subtree / sort / limit 查询语言(113ba6a1a,2026-09-06),让 microsite 能内联展示语料。

L5 · 验证

E2e 规格标签(记录于 features-and-journeys 中):[✓ public-page][✓ byoai-chat][✓ visitor-chat-permissions-deny],加上 visitor-chat 套件;eval-harness 通过 EvalDriver 驱动同一条真实循环(golden/插件/检索组装 + 启动测试)。

现状与缺口

循环、人设冻结、依据呈现面、卡片都已落地——这条 chain 过去等着的两个面也落地了:爬取面corpus_links 沿 note_refs 走,mcp-servers/retrieval/main.go:42corpus_grep 作为永不漏的通道;corpus_search 在分词器看不见查询时会明说,bd45353f4)和渲染面(阅读页上的 KaTeX / Mermaid / callout / TikZ,rendering-engines)。"根据你已链接的思考来作答"现在是对 owner 链接的一次真正遍历,不再是文本上的 FTS(corpus-retrieval)。仍然单薄的不是机制而是度量:质量由 eval-harness 离线检查,不在活的循环上(eight-controls-applied)。

about this entry

One of sijie's wiki entries. The AI on this site is grounded in the same corpus and answers in sijie's voice, with citations back to entries like this one — answering costs sijie money, so it waits behind a code: enter an access code →