arganzheng · 2026-10-19
事实进上下文、行为进权重;检索有三类按前提选、失败大多在检索之前;检索与生成分开评。
%%{init: {"flowchart": {"wrappingWidth": 170}}}%%
flowchart TB
K1["01 上下文还是权重"] --> K2["02 三类检索"]
K2 --> K3["03 解析与分块"] --> K4["04 索引、混合与 rerank"]
K4 --> K5["05 → agentic retrieval"]
K2 --> K6["06 结构化知识"]
K3 & K4 & K5 & K6 --> K7["07 评测与运营"]
事实进上下文、行为进权重——微调学分布不学事实,默认先 prompt 再检索
%%{init: {"flowchart": {"wrappingWidth": 230}}}%%
flowchart LR
Q["模型不知道的这件事,是什么类型?"] --> F{"是<b>事实</b>(知道什么)<br/>还是<b>行为</b>(怎么做)?"}
F -- "事实" --> C["<b>进上下文</b><br/>每秒变的(库存、工单)→ 工具直接查<br/>每天变的(政策、文档)→ 检索<br/>有 schema 的(客户、订单、关系)→ SQL / 本体"]
F -- "行为" --> B["<b>先用便宜的,再考虑权重</b><br/>术语、格式、风格 → few-shot + 术语表<br/>流程性技能 → SKILL.md<br/>稳定且仍不够 → 微调(SFT)"]
C -. "回答有可核对的来源,<br/>更新当天生效" .-> R["共同点"]
B -. "微调学的是分布,<br/>不是事实" .-> R
四问任一为是 → 进上下文不进权重
| 四问 | 任一为「是」→ 不进权重 |
|---|---|
| 会变? | 价格、政策、库存 |
| 有 schema? | 表、字段、关系 |
| 要引用? | 合规、客服 |
| 按用户不同? | 权限、个性化 |
词法、向量、结构化各有前提——coding agent 只用 grep 是前提全中
%%{init: {"flowchart": {"wrappingWidth": 300}}}%%
flowchart TB
Q["一条查询"] --> L & V & S
subgraph L["词法 / 精确:grep、BM25"]
direction TB
L1["前提:有精确标识符"] --> L2["买到:零过期、可解释"] --> L3["付出:词汇不匹配"]
end
subgraph V["向量 / 语义:embedding + ANN"]
direction TB
V1["前提:问法 ≠ 写法"] --> V2["买到:语义召回"] --> V3["付出:索引要维护"]
end
subgraph S["结构化:SQL、API、图谱"]
direction TB
S1["前提:有 schema、问关系"] --> S2["买到:精确关系查询"] --> S3["付出:要 schema"]
end
L & V & S --> H["生产系统几乎总是混用"]
三类检索各有前提——代码词法全中所以只用 grep
| 产品 | 选择 |
|---|---|
| Claude Code | 放弃向量库,agentic grep;Anthropic「从 agentic 搜索开始」 |
| Cursor | Merkle 树 + 块哈希缓存 + turbopuffer——写路径付过期税 |
| Cody 5.3 | 移除 embedding |
解析规则→布局模型→VLM 按需升级;三个静默失败在检索之前
%%{init: {"flowchart": {"wrappingWidth": 190}}}%%
flowchart LR
subgraph PARSE["解析梯级"]
direction TB
F["文件<br/>PDF · Office · 扫描件"] --> P{"梯级"}
P -->|"数字"| R1["① 规则抽取"]
P -->|"表格"| R2["② 布局模型"]
P -->|"扫描"| R3["③ 视觉 OCR"]
R1 & R2 & R3 --> S["结构化文本"]
end
S --> C["分块+前缀"] --> M["元数据"] --> I["索引(第四篇)"]
classDef step fill:#fff7e0,stroke:#c98a00,stroke-width:2px,color:#222
classDef dec fill:#eef6ff,stroke:#5b8fd6,color:#222
class F,R1,R2,R3,S,C,M,I step
class P dec
解析按需升级;分块按结构不切函数
| 量 | 数 |
|---|---|
| OmniDocBench | PaddleOCR-VL-1.6(0.9B)96.34 > Gemini 3 Pro 92.91 > GPT-5.2 86.59 |
| Mistral OCR 4 | 每千页 $4 |
| contextual retrieval(Anthropic) | 失败率 −49%,加 rerank −67% |
| 块大小 | 200–800 token |
BM25 + 向量 RRF 是默认形态;rerank 只精排 top-20 是性价比最高一步
%%{init: {"flowchart": {"wrappingWidth": 200}}}%%
flowchart LR
Q["查询"] --> B["BM25 top-50"] & V["向量 top-50"]
B & V --> R["RRF(k = 60)→ top-20"] --> RR["rerank → top-5"] --> G["进上下文"]
P["权限过滤"] -. "在召回时" .-> B & V
流水线可控无多跳、agentic 多跳但成本不定——最常见是级联兜底
%%{init: {"flowchart": {"wrappingWidth": 460}}}%%
flowchart TB
subgraph P["流水线 RAG"]
direction TB
P1["query"] --> P2["混合召回 + rerank"] --> P3["top-k 进 prompt"] --> P4["生成"]
end
subgraph AG["agentic retrieval"]
direction TB
A1["决定先查什么"] --> A2["调 search_docs / sql"] --> A3["够不够?"] --> A1
A3 -- "够了" --> A4["生成(带引用)"]
end
P -. "确定、成本固定" .-> X["取舍"]
AG -. "多跳、不可预测" .-> X
流水线可控;agentic 多跳但成本延迟不定
| 规则 | 为什么 |
|---|---|
| 工具返回摘要 + 引用,不返全文 | 上下文爆炸;全文另取 |
| 步数上限必配 | 成本不定 |
| 内置 file search 是服务端工具 | 失去权限与分块控制 |
text-to-SQL 裸 schema 只有两成要语义层;GraphRAG 只对全局/多跳
%%{init: {"flowchart": {"wrappingWidth": 440}}}%%
flowchart TB
Q["答案在「关系」里"] --> W{"数据什么样?"}
W -- "有 schema" --> S["<b>text-to-SQL + 语义层</b>"]
W -- "对象关系 + 动作" --> O["<b>本体</b><br/>对象导航替代 join"]
W -- "实体关系" --> G["<b>GraphRAG</b><br/>实体关系建图"]
S & O & G --> C["不替代向量检索:<br/>先线索,再结构导航"]
裸 schema 只两成——要语义层;建图看多跳比
| 判据 | 数 |
|---|---|
| SQL 四道门 | 语法、只读、成本、超时 |
| 建图门限 | 全局 / 多跳问题比例低于一成不建图 |
检索与生成分开评——没找到 vs 找到了没说对,药完全不同
检索与生成分开评——药完全不同
| 项 | 数 / 案例 |
|---|---|
| judge 一致率 | ≥ 85% 才能用 |
| 权限泄漏 | Slack AI 跨权限注入;Copilot 暴露 SharePoint 权限债 |
| 「不该看到」查询集 | 进 CI |
/retrieval-and-knowledge-access.html;通关自测在系列总结