blog: Tuning Recall — Hindsight's Four Retrieval Arms, Explained - #3836
blog: Tuning Recall — Hindsight's Four Retrieval Arms, Explained#3836benfrank241 wants to merge 1 commit into
Conversation
A tuning guide for recall: what each of the four retrieval arms does (semantic, BM25, graph, temporal), the knob and default that controls each, and how to match the pipeline to the shape of a bank. Covers the per-bank toggles including the new enable_text_search (#3819), the recall budget mapping, strategy boosts, recency decay, and the retain-side pairing for plain-retrieval banks. Every default and threshold is taken from configuration.md and the hindsight-api-slim source rather than restated from memory. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Strix Security ReviewNo security issues found. Updated for Reviewed by Strix |
Sanderhoff-alt
left a comment
There was a problem hiding this comment.
The env var names, defaults and the failover/decay/budget descriptions all match config.py and configuration.md. One factual correction in the FAQ: the similarity thresholds are not per-bank overridable.
|
|
||
| ### Can I configure recall differently per bank? | ||
|
|
||
| Yes. All four toggles, the recall budget mapping, and the thresholds are hierarchical: environment variables set the deployment default and any bank overrides it through the config API or a bank template. |
There was a problem hiding this comment.
The thresholds are not hierarchical. semantic_min_similarity, graph_seed_min_similarity, temporal_semantic_min_similarity, semantic_link_min_similarity and bm25_min_score are not in _CONFIGURABLE_FIELDS (hindsight-api-slim/hindsight_api/config.py:2911-2975), so a config-API or bank-template write naming one of them is rejected in hindsight-api-slim/hindsight_api/config_resolver.py:452-467 ("Only configurable fields can be overridden per-bank"). Only the four toggles and the recall_budget_* fields are per-bank here.
Suggested: "All four toggles and the recall budget mapping are hierarchical: environment variables set the deployment default and any bank overrides them through the config API or a bank template. The similarity thresholds are server-level only."
A pillar post on tuning recall: what each of the four retrieval arms does, the knob and default that controls each, and how to match the pipeline to the shape of a bank.
What's in it
0.3, graph seed0.3, temporal0.1, semantic-link0.7, BM25 min score0)enable_text_searchfrom feat(recall): add a per-bank enable_text_search toggle for pure vector recall #3819fixed100/300/1000 vsadaptive), strategy boosts, recency decayretain_extraction_mode: chunks,enable_observations: false) for plain-retrieval banksVerification
Every default, threshold, and env var name is taken from
hindsight-docs/docs/developer/configuration.mdand thehindsight-api-slimsource, not restated from memory. Theenable_text_searchbehavior is checked againstengine/search/retrieval.py:190and the knowledge-page path inengine/memory_engine.py.The post deliberately contains no CLI commands:
set_configinhindsight-cli/src/commands/bank.rsaccepts only the LLM, retain, mission, and disposition params, so none of the four recall toggles are settable via a CLI flag. Configuration is shown through the config API and environment variables only.Files
hindsight-docs/blog/2026-08-27-tuning-recall-retrieval-arms.mdhindsight-docs/static/img/blog/tuning-recall-retrieval-arms.png(1600x900)Noted separately, not fixed here
The "plain-retrieval (RAG) banks" curl example in
configuration.mdstill lists only the three original recall toggles and omitsenable_text_search: false, though that section's premise is making a bank behave like a conventional vector store. #3819 updated the table above it but not the example. Left for its own docs PR.🤖 Generated with Claude Code