Opinions
How memory banks form, store, and evolve beliefs.
Prerequisites
Make sure you've completed the Quick Start to install the client and start the server.
What Are Opinions?
Opinions are beliefs formed by the memory bank based on evidence and disposition. Unlike world facts (objective information received) or experience (conversations and events), opinions are judgments with confidence scores.
| Type | Example | Confidence |
|---|---|---|
| World Fact | "Python was created in 1991" | — |
| Experience | "I recommended Python to Bob" | — |
| Opinion | "Python is the best language for data science" | 0.85 |
How Opinions Form
Opinions are created during reflect operations when the memory bank:
- Retrieves relevant facts
- Applies disposition traits
- Forms a judgment
- Assigns a confidence score
- Python
# Ask a question that might form an opinion
answer = client.reflect(
bank_id="my-bank",
query="What do you think about functional programming?"
)
# Check if new opinions were formed
for opinion in answer.get("new_opinions", []):
print(f"New opinion: {opinion['text']}")
print(f"Confidence: {opinion['confidence']}")
Searching Opinions
- Python
- CLI
# Search only opinions
opinions = client.recall(
bank_id="my-bank",
query="programming languages",
types=["opinion"]
)
for op in opinions:
print(f"{op['text']} (confidence: {op['confidence_score']:.2f})")
hindsight recall my-bank "programming" --types opinion
Opinion Evolution
Opinions change as new evidence arrives:
| Evidence Type | Effect |
|---|---|
| Reinforcing | Confidence increases (+0.1) |
| Weakening | Confidence decreases (-0.15) |
| Contradicting | Opinion revised, confidence reset |
Example evolution:
t=0: "Python is best for data science" (0.70)
↓ New evidence: Python dominates ML libraries
t=1: "Python is best for data science" (0.85)
↓ New evidence: Julia is 10x faster for numerical computing
t=2: "Python is best for data science, though Julia is faster" (0.75)
↓ New evidence: Most teams still use Python
t=3: "Python is best for data science" (0.82)
Disposition Influence
Different dispositions form different opinions from the same facts:
- Python
# Create two memory banks with different dispositions
client.create_bank(
bank_id="open-minded",
disposition={"skepticism": 2, "literalism": 2, "empathy": 4}
)
client.create_bank(
bank_id="conservative",
disposition={"skepticism": 5, "literalism": 5, "empathy": 2}
)
# Store the same facts to both
facts = [
"Rust has better memory safety than C++",
"C++ has a larger ecosystem and more libraries",
"Rust compile times are longer than C++"
]
for fact in facts:
client.retain(bank_id="open-minded", content=fact)
client.retain(bank_id="conservative", content=fact)
# Ask both the same question
q = "Should we rewrite our C++ codebase in Rust?"
answer1 = client.reflect(bank_id="open-minded", query=q)
# Likely: "Yes, Rust's safety benefits outweigh migration costs"
answer2 = client.reflect(bank_id="conservative", query=q)
# Likely: "No, C++'s ecosystem and our team's expertise make it the safer choice"
Opinions in Reflect Responses
When reflect uses opinions, they appear in based_on:
answer = client.reflect(bank_id="my-bank", query="What language should I learn?")
print("World facts used:")
for f in answer.based_on.get("world", []):
print(f" {f['text']}")
print("\nOpinions used:")
for o in answer.based_on.get("opinion", []):
print(f" {o['text']} (confidence: {o['confidence_score']})")
Confidence Thresholds
Opinions below a confidence threshold may be:
- Excluded from responses
- Marked as uncertain
- Revised more easily
# Low confidence opinions are held loosely
# "I think Python might be good for this" (0.45)
# High confidence opinions are stated firmly
# "Python is definitely the right choice" (0.92)