---
type: study
created: 2026-08-11
updated: 2026-08-11
sensitivity: standard
status: verified
tags:
  - study
  - langchain
  - typescript
  - integrations
  - retriever
  - reranking
topic: LangChain JavaScript 检索器 查询改写 时效与重排
sources:
  - https://docs.langchain.com/oss/javascript/integrations/retrievers
  - https://docs.langchain.com/oss/javascript/integrations/retrievers/index
  - https://docs.langchain.com/oss/javascript/integrations/retrievers/bedrock-knowledge-bases
  - https://docs.langchain.com/oss/javascript/integrations/retrievers/exa
  - https://docs.langchain.com/oss/javascript/integrations/retrievers/hyde
  - https://docs.langchain.com/oss/javascript/integrations/retrievers/kendra-retriever
  - https://docs.langchain.com/oss/javascript/integrations/retrievers/perplexity_search
  - https://docs.langchain.com/oss/javascript/integrations/retrievers/self_query/hanavector_self_query
  - https://docs.langchain.com/oss/javascript/integrations/retrievers/sourcey
  - https://docs.langchain.com/oss/javascript/integrations/retrievers/time-weighted-retriever
  - https://docs.langchain.com/oss/javascript/integrations/document_compressors/cohere_rerank
  - https://docs.langchain.com/oss/javascript/integrations/document_compressors/mixedbread_ai
last_verified: 2026-08-11
---
# 检索器：查询改写、时效与重排

## 结论

- Retriever 的契约是 `string → Document[]`，只负责返回文档，不要求能存储；Vector Store 可以转成 Retriever，但搜索服务、知识库和算法型检索器也能直接实现该接口。
- HyDE、自查询、时间权重和 reranker 分别解决查询表达、结构化过滤、时间偏好和排序精度，不能用一个旋钮替代另一个。
- `/retrievers` 与 `/retrievers/index` 是同正文别名；本组总计覆盖 10 个 retriever 路由和 2 个 compressor 路由。

## 检索器类型

| 类型 | 集成 | 核心语义 |
|---|---|---|
| 托管知识库 | Bedrock Knowledge Bases、Amazon Kendra | 由云服务负责索引/搜索，LangChain 统一结果 |
| Web 搜索 | Exa、Perplexity | 实时网页检索并返回 Document |
| 站点文档 | Sourcey | 读取 `search-index.json` 与 `llms-full.txt` |
| 查询改写 | HyDE | 先生成假设答案，再 embedding 该文档检索 |
| 结构化自查询 | SAP HANA SelfQuery | LLM 把自然语言转语义 query + metadata filter |
| 时间感知 | TimeWeighted | 相似度加基于最近访问时间的衰减分数 |
| 二阶段重排 | Cohere、Mixedbread | 对候选文档按 query 重新排序/压缩 |

## 托管检索

- `AmazonKnowledgeBaseRetriever` 面向 Bedrock 的端到端 RAG ingestion/index，向量后端可由 AWS 管理。所谓 self-host 只表示运行在自己的 AWS 账户，不能搬到其他云或本地。
- `AmazonKendraRetriever` 查询 Kendra 的企业搜索索引，可覆盖文档、FAQ、知识库和网站。两者都应优先使用 IAM role/workload identity；访问范围由 AWS 资源策略决定，不由 prompt 决定。
- `ExaRetriever` 使用 `EXASEARCH_API_KEY`，返回 Web Document；`PerplexitySearchRetriever` 支持结果数、国家、域名、时效和日期过滤，metadata 含 title、url、date、lastUpdated。

Web 结果必须保留 URL 和采集时间，按不可信证据处理；实时检索失败时明确降级，不应把模型旧知识伪装成已检索结果。

## HyDE

HyDE 用 LLM 针对问题生成一篇“假设答案”，再把它 embedding 后与真实语料比较。它适合原始短查询与文档表达差异大时，但有额外模型成本并可能被生成偏差带离主题。

- LLM 与 embedding model 都是必需依赖；自定义 prompt 只能有 `{question}` 输入。
- 评估时应与原始 query embedding、multi-query 和 query expansion 对照。
- 假设文档只作检索中间物，不当作事实或引用来源。

## SAP HANA SelfQuery

SelfQueryRetriever 结合字段描述、内容描述、LLM 和 `HanaTranslator`，把“Which person is not active?” 之类问题转成向量查询与 metadata filter。为性能，文档示例把常用 metadata 建为 HANA 附加字段。

风险在于 LLM 生成结构化谓词：字段和操作符必须白名单，租户/权限 filter 必须由服务端强制合并，不能让模型覆盖。

## TimeWeighted

文档给出的分数形式为：

```text
(1 - decayRate) ^ hoursPassed + vectorRelevance
```

`hoursPassed` 是自上次访问以来的时间，不是自创建以来；频繁访问的对象会保持“新鲜”。`decayRate` 越低记忆越久，越高越偏向新近访问；精确为 0 或 1 时会退化，使时间不再有效。

该 retriever 需要维护访问 metadata，因此文档必须通过 retriever 的 `addDocuments()` 添加，而不是直接写底层 vector store。并发访问时要避免丢失 last-accessed 更新，并评估“热门内容越来越热门”的反馈回路。

## Sourcey

`SourceyRetriever` 无 API key，从已发布站点读取 `search-index.json`，优先使用 `llms-full.txt`；缺失时回退抓取命中 HTML。站点应配置 canonical `siteUrl`，保证 `metadata.source` 可引用。索引与页面发布应原子切换，避免 search index 指向尚未部署的内容。

## Cohere 与 Mixedbread 重排

- `CohereRerank.rerank()` 返回输入文档 index 和 relevance score；`compressDocuments()` 返回 top-N Document，并把 score 写入 metadata。还可注入 `CohereClient` 连接 Azure、Bedrock 或独立 endpoint。
- `MixedbreadAIReranker.compressDocuments()` 根据 query 返回重排后的文档；凭据可来自 `MXBAI_API_KEY` 或构造参数。

重排通常放在宽召回后：

```text
query → first-stage retrieval (fetchK) → 权限过滤 → rerank → topN → prompt
```

先做权限过滤，避免把无权文档发给第三方 reranker。对候选数、正文长度、批量和超时设限；reranker 故障时可降级到首阶段排序，但必须打上降级指标。

## 评估与观测

1. Retriever 评估 recall@k、MRR/nDCG、过滤正确率、时效和来源覆盖。
2. Reranker 同时评估 top-N 增益、延迟、成本和候选截断损失。
3. 记录 query strategy、filter、fetchK、topN、provider/model version 与降级状态。
4. 为无结果、低分、超时和权限过滤后为空分别建指标，不把它们都归类为“RAG 没答案”。

