Skip to main content

Reflect

Generate disposition-aware responses using retrieved memories.

When you call reflect, Hindsight performs a multi-step reasoning process:

  1. Recalls relevant memories from the bank based on your query
  2. Applies the bank's disposition traits to shape the reasoning style
  3. Generates a contextual answer grounded in the retrieved facts
  4. Forms opinions in the background based on the reasoning (available in subsequent calls)

The response includes the generated answer along with the facts that were used, providing full transparency into how the answer was derived.

How Reflect Works

Learn about disposition-driven reasoning and opinion formation in the Reflect Architecture guide.

Prerequisites

Make sure you've completed the Quick Start to install the client and start the server.

Basic Usage

from hindsight_client import Hindsight

client = Hindsight(base_url="http://localhost:8888")

client.reflect(bank_id="my-bank", query="What should I know about Alice?")

Parameters

ParameterTypeDefaultDescription
querystringrequiredQuestion or prompt
budgetstring"low"Budget level: "low", "mid", "high"
contextstringNoneAdditional context for the query
response = client.reflect(
bank_id="my-bank",
query="What do you think about remote work?",
budget="mid",
context="We're considering a hybrid work policy"
)

The Role of Context

The context parameter steers how the reflection is performed without impacting the memory recall. It provides situational information that helps shape the reasoning and response.

How context is used:

  • Shapes reasoning: Helps understand the situation when formulating an answer
  • Disambiguates intent: Clarifies what aspect of the query matters most
  • Does not affect recall: The same memories are retrieved regardless of context
# Context is passed to the LLM to help it understand the situation
response = client.reflect(
bank_id="my-bank",
query="What do you think about the proposal?",
context="We're in a budget review meeting discussing Q4 spending"
)

Opinion Formation

When reflect reasons about a question, it may form new opinions based on the evidence in the memory bank. These opinions are created in the background and become available in subsequent reflect and recall calls.

Why opinions matter:

  • Consistent thinking: Opinions ensure the memory bank maintains a coherent perspective over time
  • Evolving viewpoints: As more information is retained, opinions can be refined or updated
  • Grounded reasoning: Opinions are always derived from factual evidence in the memory bank

Opinions are stored as a special memory type and are automatically retrieved when relevant to future queries. This creates a natural evolution of the bank's perspective, similar to how humans form and refine their views based on accumulated experience.

Disposition Influence

The bank's disposition affects reflect responses:

TraitLow (1)High (5)
SkepticismTrusting, accepts claimsQuestions and doubts claims
LiteralismFlexible interpretationExact, literal interpretation
EmpathyDetached, fact-focusedConsiders emotional context
# Create a bank with specific disposition
client.create_bank(
bank_id="cautious-advisor",
background="I am a risk-aware financial advisor",
disposition={
"skepticism": 5, # Very skeptical of claims
"literalism": 4, # Focuses on exact requirements
"empathy": 2 # Prioritizes facts over feelings
}
)

# Reflect responses will reflect this disposition
response = client.reflect(
bank_id="cautious-advisor",
query="Should I invest in crypto?"
)
# Response will likely emphasize risks and caution

Using Sources

The based_on field shows which memories informed the response:

response = client.reflect(bank_id="my-bank", query="Tell me about Alice")

print("Response:", response.text)
print("\nBased on:")
for fact in response.based_on or []:
print(f" - [{fact.type}] {fact.text}")

This enables:

  • Transparency — users see why the bank said something
  • Verification — check if the response is grounded in facts
  • Debugging — understand retrieval quality