rerankers.md
Book Agent 0.1.0 · 本版随附原文,按章节提供导览;完整原文可在文末展开。文内本机路径属于示例,请替换为你的实际路径。
本版本其他文档与许可
- 用户完整使用手册.md
- 网站发布交接说明.md
- 一句话安装提示词.md
- 安装Agent操作指南.md
- README-交付说明.md
- README.md
- dependency-licenses.json
- acceptance.md
- architecture.md
- build.md
- codex-diagnostics.md
- contracts.md
- deployment.md
- evaluation.md
- example-package-inspection.md
- hosts.md
- mcp.md
- package-format.md
- portability.md
- query-runtime.md
- rerankers.md
- retrieval.md
- security.md
- source-resolution.md
- sqlite-adapters.md
- troubleshooting.md
- visual-fallback.md
- windows-binary-validation.md
- offline-dependency-licenses.json
- 289bfef3a422b5d7-LICENSE
- 320fb46da982dd20-LICENSE
- 0d26a74c4cd409f1-LICENSE
- 29f0a9349a98f786-LICENSE.txt
- 8fe2fae6851b8b02-LICENSE_zstd.txt
- 5927d884110638aa-LICENSE
- c1aedbaa6db194c8-LICENSE
- 2e2d841f3829cb8c-LICENSE
- 37deb54162951132-LICENSE
- 1c294ee0ed0fe5a4-LICENSE.txt
- 9cbd6b2bcad1331c-LICENSE.txt
- 22cdd958c280cb3f-LICENSE.APACHE
- 33a7c36a4f64f214-LICENSE.BSD
- 8e9b59db150b8b29-LICENSE
- 9d2d6534b255a725-LICENSE
- 44ac41031103bcac-LICENSE
- 39d084ff20ffc40e-LICENSE.txt
- b6618d8dc766ea7c-LICENSE.md
- 696bca653f07d94f-LICENSE
- 1a79882f84c42428-LICENSE.md
- 404602f585d7ece7-LICENSE
- d91c8e1dcc4f21a2-LICENSE.md
- b0ec1e6164c921a7-LICENSE.txt
- 2102cfff7eb71b8c-LICENSE.txt
- 60b346c789b9f38f-LICENSE
- 21b64ce33aa4532a-LICENSE
- 37bbe72ee1bbafbd-LICENSE
- 3a70ad943ce55a72-LICENSE.txt
- 0f4ffb2948b11d2f-LICENSE.txt
- 0f552da71ad28735-LICENSE.txt
- 14c3180f75c13432-LICENSE.txt
- 237d5ce190d18ec8-LICENSE.md
- 33f4c2195fc42df4-LICENSE.md
- 34e0a82278464f7a-LICENSE.md
- 606163a509c60e74-LICENSE.txt
- 68188ef77bc0f51d-LICENSE.md
- 7d261385d7c11247-LICENSE.md
- 892e6e9281e05f9e-LICENSE.md
- a62d8b7410f97d10-LICENSE
- aefd64774c70ee6f-LICENSE
- ba28e7ff75ea728b-dragon4_LICENSE.txt
- c21c93791addfba9-LICENSE.md
- c38cab56d01cd957-LICENSE
- caa67dbe4c1ea31d-LICENSE.md
- ddfcf34665e22241-LICENSE
- f384fe378597d8ee-LICENSE.md
- fa40db527ec8a4f8-LICENSE.md
- 11c854e2fea5c3c3-LICENSE
- e9a5bac8b5a01882-LICENSE.APACHE
- ef96a0844cda24cd-LICENSE.BSD
- 60b8570677f4c852-LICENSE
- b750eeade19bb396-LICENSE
- 7d70cfb623ece0f5-LICENSE
- c6dc91d12372ba7d-LICENSE
- 4d610a0401713428-LICENSE
- b4cf246d7037e3e5-LICENSE
- 6ba7e4be3a3e5e98-LICENSE.rst
- bd6c3caec9dc0b2c-LICENSE
- 404f172525c78526-LICENSE
- ea58743ddd8149fe-LICENSE
- d94ac33ee6c5b99c-LICENSE
- 06fc5f72f75ece40-LICENSE
- 6ee341f79804040b-LICENSE
- ca8b44050606bf3f-LICENSE.txt
- 0eb90f9858c86a9d-MAPIStubLibrary-License.txt
- 0f36ec7ac95c3104-Scintilla-License.txt
- 1445ad867b84e928-LICENSE.txt
- 1b588beb4a04f4c3-LICENSE
- 3c06ee52d5d89b25-License.txt
- 6300165282b47172-License.txt
- 6eec8b7b9c778ef7-License.txt
- 6fbb090f28b7d9d7-NOTICE.md
- 7f00f05027a6f1b3-license.txt
- 881f648ef42a607c-License.txt
- ae73a46638a88910-License.txt
- c2a4985aa4145fc3-License.txt
- cf5cae3ab668ac79-License.txt
- d04b9dead3df9f2b-License.txt
- dc8527163d427906-LICENSE.txt
- ff463f305e7e68dc-license.txt
- 1f5c94674bb026f1-LICENSE
- 0fb05a2e9284070c-LICENSE.txt
- bd7b91afd66e7fa0-NOTICE
- fb0b720c70d8ce6a-LICENSE
- fcd0c1933c03449f-LICENSE
- 07c67dcb9a0a1264-LICENSE
- 0e45092c306c1829-LICENSE
- 123439bfbc433e83-LICENSE.APACHE
- 1ab641e9121b81f5-LICENSE
- 4094fd3590b59adb-NOTICE
- 4a7fd6a9c689e423-LICENSE
- 4d09286af1bf926b-LICENSE
- 63a92caf8157263d-LICENSE
- 6562dd76db576ab9-LICENSE
- 8b28658c9e8179cb-LICENSE.txt
- 9fe05a3195b3cc3f-LICENSE
- aeab75b4c2775e84-LICENSE
- b8b1f5f03784d7a5-LICENSE
- c2780f51d1429c4b-LICENSE
- c80865de46db705d-LICENSE.BSD
- c9e41e71fb671b2e-LICENSE
- d6b8bc4557547f24-LICENSE
- e972ee51f8cb405e-NOTICE
- e453abd81b5ad12e-LICENSE
- 717f721f1be51398-LICENSE.md
- 767eeaf795dbfce8-LICENSE
- 94e2a313c2183fa6-LICENSE.txt
- 3391f6db464bf907-LICENSE
- c4388b01504343b0-LICENSE
- 000af5e58f31978d-LICENSE.txt
- 012d34b072b31cdb-LICENSE
- 020fa8056b9cc414-LICENSE
- 057ffcbbade9301e-LICENSE
- 096eee7c37050ec5-LICENSE
- 0b14d5ccfc8ae3b6-LICENSE
- 0d84796ed41f21b5-LICENSE.txt
- 0f51b035ee2b205e-LICENSE.txt
- 15ac02d83e9f5cf0-LICENSE
- 1987b9857feb2977-LICENSE
- 1ab5abcd87c44e46-LICENSE.rst
- 1b491a95f1ea6812-LICENSE
- 1bddb28b536554a8-LICENSE
- 1e0dae2d67a75d8f-LICENSE
- 1f00093269c431aa-LICENSE
- 1f88918564d6b190-LICENSE.txt
- 23170591db6c2e35-LICENSE
- 24e7a39da250d246-LICENSE
- 25356621a82f4798-LICENSE
- 2b6931cc6558558d-LICENSE
- 2e20b75d944dfc10-LICENSE.rst
- 3148042f9d6dc44b-LICENSE
- 34440ff12dbdee0b-LICENSE
- 38d7390db6751b95-LICENSE
- 394f72aa9820b35e-LICENSE
- 3a1efc907aa90e6e-LICENSE.txt
- 3f471b7b9a34654b-LICENSE
- 3f59a46ca08f425d-LICENSE
- 41a82292d67b1815-LICENSE
- 43e0660fee92e3d9-LICENSE
- 4418818ca0528087-LICENSE
- 44bd708d348a7f79-LICENSE.txt
- 45a5f164a90b025e-LICENSE
- 4679f7f6ca539098-LICENSE
- 46bcf873674918a0-LICENSE
- 4cb2f76b15650e2b-LICENSE.txt
- 4ce67a1d3f22f06e-LICENSE
- 4d4c272c2aaf7d4c-LICENSE.txt
- 4f73bb9c13a8cf6a-LICENSE
- 50d2c50ab17033d4-LICENSE
- 568ef02dec145f8f-LICENSE.APACHE
- 5d0844276d7620c3-LICENSE
- 5d3ee7cad434b050-LICENSE
- 63c9efa00504c8e7-LICENSE.BSD
- 658c67bb72402f54-LICENSE
- 65feb792d908bb47-LICENSE
- 6ab6f3ebe36250fc-LICENSE
- 6f3ff74d1e961003-LICENSE
- 70c92009f569c7ff-LICENSE
- 71e8135b761ff506-LICENSE
- 720a043a5f63b8e2-LICENSE
- 732e9d1d0dc3a9f3-LICENSE.rst
- 76fa1ec680b6563a-LICENSE
- 778654dd362ccfc1-LICENSE
- 7bad43a1c663d2d3-LICENSE
- 7e5ab77aaefbcbfe-LICENSE
- 81f9de42fb4cff6d-LICENSE.rst
- 83a0b2cad3631647-LICENSE
- 83d9a4cd337039d3-LICENSE
- 878c0ed7cc080bee-LICENSE.txt
- 8e3c8657c4d54274-LICENSE
- 923573b2290edd3f-LICENSE.txt
- 932fff1dd3afca18-LICENSE.rst
- 93b14a999e446b81-LICENSE
- 93ef29e6e98ebe1c-LICENSE
- 95a8821c42dd5a93-LICENSE
- 9611af4ef03999e9-LICENSE.txt
- 9690869ec82dc7ff-LICENSE
- 98445537094b5eca-LICENSE.txt
- 9bcc07396f3695fd-LICENSE.txt
- 9d236d10d50376fa-LICENSE
- a3af08ceb14d4e70-LICENSE.rst
- a42e3616102ec1a4-LICENSE
- a68145b6a6945de2-LICENSE
- ac000064f187d287-LICENSE
- b14490d244e39dd6-LICENSE.txt
- b152e206fedb11c6-LICENSE
- b5cccfdd56d29de3-LICENSE
- bb4c4e06309173d1-LICENSE.txt
- c18a22744d03cae4-LICENSE.rst
- c59a7e2bf6163ddd-LICENSE
- c643fc658eb3d4f4-LICENSE
- ce8e5d64c3015701-LICENSE
- d382d51b74d1dde7-LICENSE
- d414936ad243b5dd-LICENSE.txt
- d431c50ef2b89f09-LICENSE
- d86156e7d7554a5f-LICENSE
- e04596b38de5343a-LICENSE
- e1fd63729d99cd47-LICENSE
- e3aa5bda22dc7a7a-LICENSE
- e3f5bf83e6fd8b70-LICENSE
- e7f7eb90618838ff-LICENSE
- e845cee760dabf6e-LICENSE
- ea19c7c3e4500582-LICENSE
- f063c5a9ee927ae6-LICENSE
- f589495d9a662be4-LICENSE.txt
- f7f25c636a548517-LICENSE.rst
- f861d3e2e007d200-LICENSE.txt
- fa17b838b2594837-LICENSE.txt
- 14a65df99717c958-LICENSE
- 2231b6c46c068b83-LICENSE
- 215ebb8580f197a8-LICENSE
- 3677f050c9618f5d-LICENSE.txt
- b645068efededc15-LICENSE.md
- MODEL-LICENSE.md
- README.md
- UPSTREAM-LICENSE.txt
# Optional rerankers The default `none` provider returns original candidate order with `rerank_requested=false` and `rerank_applied=false`. Enabling, disabling or changing rerank only changes runtime configuration. Existing document vectors and original files are untouched. `create_reranker(config, runtime_dir)` returns a provider with `rerank(query, candidates, top_n)`, `healthcheck()` and `provider_info()`. Candidate dictionaries retain their evidence/record IDs, original text, source locator and earlier scores. A successful result adds `scores.rerank` and stage/provider/score-direction metadata. Scores are ranking values, not calibrated probabilities. All providers bound candidate count, query characters, document characters and concurrency. Defaults are 40 candidates, 4,000 query characters, 8,000 document characters and two concurrent calls. Truncation affects only the provider input; returned evidence text and citation positions remain original. `on_error=keep_candidates` preserves original top candidates with a machine-readable error and `rerank_applied=false`; `on_error=strict` raises `RerankerError`. Empty candidate lists do not call a service.
SiliconFlow
The adapter implements JSON POST `/v1/rerank` with model, query, documents, top_n and `return_documents=false`; returned `results[].index` and `relevance_score` are validated. The official [SiliconFlow rerank API](https://docs.siliconflow.cn/docs/api/rerank-post) was checked on 2026-10-02. Model availability and pricing can change. There is no free-service promise, default model selection or live service verification in this repository.
Example runtime JSON:
```json
{
"provider": "siliconflow",
"endpoint": "https://api.siliconflow.cn/v1/rerank",
"model": "BAAI/bge-reranker-v2-m3",
"auth_env": "SILICONFLOW_API_KEY",
"allow_remote_requests": true,
"allowed_endpoints": ["https://api.siliconflow.cn/v1/rerank"],
"timeout": 20,
"retry": 2,
"backoff": 0.25,
"concurrency": 2,
"max_documents": 40,
"max_document_chars": 8000,
"on_error": "keep_candidates"
}
```
Enabling remote rerank sends the question and bounded candidate book text to that exact endpoint. Consent and an exact endpoint allowlist are both required. An input manifest URL is not consent. Credentials come from the named environment variable; values are never stored in provider information, health diagnostics or failure messages. HTTPS is required. An explicit local HTTP exception exists only for localhost service testing. Redirects are blocked so credentials/body cannot follow to another address.
Timeout, 429, 503 and 504 retries are bounded by configured attempts. 401/403 are not retried. Backoff/Retry-After delays are capped at two seconds, response size is bounded, and error bodies are omitted to avoid credential echoes. Invalid, duplicate, bool or out-of-range indexes and nonfinite scores invalidate the whole response.
`healthcheck` is a passive configuration/credential check. `live_service_verified=false` makes clear that it does not call a billable endpoint. Tests use Mock HTTP responses and cover timeouts, HTTP errors, retries, response validation and candidate preservation; these are protocol tests, not online acceptance.
Local CrossEncoder
The optional `local` adapter accepts an existing `model_path`, optional model label, `device` (default CPU), `batch_size` (default 8) and `max_length` (default 512 tokens). It uses Sentence Transformers CrossEncoder with `local_files_only=true`, `trust_remote_code=false` and `model_kwargs.use_safetensors=true`. Pickle-based model weight loading and model code downloads are not enabled. The [official CrossEncoder documentation](https://www.sbert.net/docs/package_reference/cross_encoder/model.html) documents local path/loading controls and forwarding model arguments; checked 2026-10-02.
```json
{
"provider": "local",
"model_path": "C:/Models/my-cross-encoder",
"device": "cpu",
"batch_size": 8,
"max_length": 512,
"on_error": "keep_candidates"
}
```
Install the optional local rerank dependencies separately. Provide a compatible Sentence Transformers/Hugging Face CrossEncoder directory with its tokenizer, configuration and safetensors weights. A directory offering only pickle-based weights fails explicitly. Arbitrary ONNX, GGUF or other model folders are not assumed compatible. Model cache is directed into runtime storage; large model files are not bundled or downloaded. Local loading failures are explicit. No local model weights were available for real inference acceptance; the suite tests constructor/inference contracts with a fake CrossEncoder and reports `model_inference_verified=false` in passive health output. Local inference runs synchronously under a provider lock; this release does not claim a hard kill timeout for native model execution.
Custom protocol
`custom` accepts an approved HTTPS `endpoint`, safe nonsecret static headers, an `auth_env` reference with optional `auth_header`/`auth_scheme`, and constrained request/response mappings. JSON POST is the supported HTTP method. `protocol=siliconflow` selects the SiliconFlow compatible preset. `protocol=generic` requires explicit request and response mappings to adapt other object shapes.
```json
{
"provider": "custom",
"protocol": "generic",
"endpoint": "https://rerank.example.com/order",
"allow_remote_requests": true,
"allowed_endpoints": ["https://rerank.example.com/order"],
"auth_env": "CUSTOM_RERANK_KEY",
"auth_header": "X-Api-Key",
"auth_scheme": "",
"request_mapping": {
"input.question": "query",
"input.passages": "documents",
"count": "top_n"
},
"response_mapping": {
"results": "data.items",
"index": "document.position",
"score": "value.score"
},
"higher_is_better": true
}
```
Request destinations and response fields use simple dotted object keys. Request sources are limited to query, documents, top_n, model and return_documents. No expressions, Python code, shell, templates or executable deserialization are accepted. The response must map each row back to the original zero based candidate index. Unsupported ID-only or non-JSON protocols require a dedicated adapter; they are not silently guessed.
查看完整原文(逐字保留)
# Optional rerankers
The default `none` provider returns original candidate order with `rerank_requested=false` and `rerank_applied=false`. Enabling, disabling or changing rerank only changes runtime configuration. Existing document vectors and original files are untouched.
`create_reranker(config, runtime_dir)` returns a provider with `rerank(query, candidates, top_n)`, `healthcheck()` and `provider_info()`. Candidate dictionaries retain their evidence/record IDs, original text, source locator and earlier scores. A successful result adds `scores.rerank` and stage/provider/score-direction metadata. Scores are ranking values, not calibrated probabilities.
All providers bound candidate count, query characters, document characters and concurrency. Defaults are 40 candidates, 4,000 query characters, 8,000 document characters and two concurrent calls. Truncation affects only the provider input; returned evidence text and citation positions remain original. `on_error=keep_candidates` preserves original top candidates with a machine-readable error and `rerank_applied=false`; `on_error=strict` raises `RerankerError`. Empty candidate lists do not call a service.
## SiliconFlow
The adapter implements JSON POST `/v1/rerank` with model, query, documents, top_n and `return_documents=false`; returned `results[].index` and `relevance_score` are validated. The official [SiliconFlow rerank API](https://docs.siliconflow.cn/docs/api/rerank-post) was checked on 2026-10-02. Model availability and pricing can change. There is no free-service promise, default model selection or live service verification in this repository.
Example runtime JSON:
```json
{
"provider": "siliconflow",
"endpoint": "https://api.siliconflow.cn/v1/rerank",
"model": "BAAI/bge-reranker-v2-m3",
"auth_env": "SILICONFLOW_API_KEY",
"allow_remote_requests": true,
"allowed_endpoints": ["https://api.siliconflow.cn/v1/rerank"],
"timeout": 20,
"retry": 2,
"backoff": 0.25,
"concurrency": 2,
"max_documents": 40,
"max_document_chars": 8000,
"on_error": "keep_candidates"
}
```
Enabling remote rerank sends the question and bounded candidate book text to that exact endpoint. Consent and an exact endpoint allowlist are both required. An input manifest URL is not consent. Credentials come from the named environment variable; values are never stored in provider information, health diagnostics or failure messages. HTTPS is required. An explicit local HTTP exception exists only for localhost service testing. Redirects are blocked so credentials/body cannot follow to another address.
Timeout, 429, 503 and 504 retries are bounded by configured attempts. 401/403 are not retried. Backoff/Retry-After delays are capped at two seconds, response size is bounded, and error bodies are omitted to avoid credential echoes. Invalid, duplicate, bool or out-of-range indexes and nonfinite scores invalidate the whole response.
`healthcheck` is a passive configuration/credential check. `live_service_verified=false` makes clear that it does not call a billable endpoint. Tests use Mock HTTP responses and cover timeouts, HTTP errors, retries, response validation and candidate preservation; these are protocol tests, not online acceptance.
## Local CrossEncoder
The optional `local` adapter accepts an existing `model_path`, optional model label, `device` (default CPU), `batch_size` (default 8) and `max_length` (default 512 tokens). It uses Sentence Transformers CrossEncoder with `local_files_only=true`, `trust_remote_code=false` and `model_kwargs.use_safetensors=true`. Pickle-based model weight loading and model code downloads are not enabled. The [official CrossEncoder documentation](https://www.sbert.net/docs/package_reference/cross_encoder/model.html) documents local path/loading controls and forwarding model arguments; checked 2026-10-02.
```json
{
"provider": "local",
"model_path": "C:/Models/my-cross-encoder",
"device": "cpu",
"batch_size": 8,
"max_length": 512,
"on_error": "keep_candidates"
}
```
Install the optional local rerank dependencies separately. Provide a compatible Sentence Transformers/Hugging Face CrossEncoder directory with its tokenizer, configuration and safetensors weights. A directory offering only pickle-based weights fails explicitly. Arbitrary ONNX, GGUF or other model folders are not assumed compatible. Model cache is directed into runtime storage; large model files are not bundled or downloaded. Local loading failures are explicit. No local model weights were available for real inference acceptance; the suite tests constructor/inference contracts with a fake CrossEncoder and reports `model_inference_verified=false` in passive health output. Local inference runs synchronously under a provider lock; this release does not claim a hard kill timeout for native model execution.
## Custom protocol
`custom` accepts an approved HTTPS `endpoint`, safe nonsecret static headers, an `auth_env` reference with optional `auth_header`/`auth_scheme`, and constrained request/response mappings. JSON POST is the supported HTTP method. `protocol=siliconflow` selects the SiliconFlow compatible preset. `protocol=generic` requires explicit request and response mappings to adapt other object shapes.
```json
{
"provider": "custom",
"protocol": "generic",
"endpoint": "https://rerank.example.com/order",
"allow_remote_requests": true,
"allowed_endpoints": ["https://rerank.example.com/order"],
"auth_env": "CUSTOM_RERANK_KEY",
"auth_header": "X-Api-Key",
"auth_scheme": "",
"request_mapping": {
"input.question": "query",
"input.passages": "documents",
"count": "top_n"
},
"response_mapping": {
"results": "data.items",
"index": "document.position",
"score": "value.score"
},
"higher_is_better": true
}
```
Request destinations and response fields use simple dotted object keys. Request sources are limited to query, documents, top_n, model and return_documents. No expressions, Python code, shell, templates or executable deserialization are accepted. The response must map each row back to the original zero based candidate index. Unsupported ID-only or non-JSON protocols require a dedicated adapter; they are not silently guessed.
原文 SHA-256:4a384cfe88b698dff0c2150a8c1243a1e566cc8e7c5b4d179346cd5ec579dc1e