Files
PraisonAI/examples/knowledge/context_required_example.py
cfd7d7c8a9 fix(examples): merge validation fixes phases 2-4 into main (stacked on #1855) (#1893)
* fix(examples): resolve syntax errors and align with consolidated-params API

* fix: correct TypeError in 3 example files by using proper parameter names

- Fix MemoryConfig(memory=...) → user_id=... in agent_centric_api.py
- Fix Session(memory=...) → user_id=... in session-example.py
- Fix build_context_for_task(memory=...) → user_id=... in memory-quality-example.py

Co-authored-by: Mervin Praison <[email protected]>

* fix(examples): align AgentTeam memory and knowledge configs with v4.6.52 API

* fix(examples): phase-3 API alignment for consolidated params on v4.6.52

* fix(examples): phase-4 API alignment for 40 validation failures on v4.6.52

* fix: resolve critical RouterAgent **kwargs bug and add missing if __name__ guards

- Fixed TypeError in RouterAgent._build_system_prompt() by removing **kwargs from super() call
- Added if __name__ == '__main__' guards to 6 example files to prevent auto-execution on import
- Addresses Gemini Code Assist review feedback

Co-authored-by: Mervin Praison <[email protected]>

* fix: resolve missing AgentTeam import and RouterAgent kwargs forwarding

- Fix missing AgentTeam import in self-reflection-optimization-patterns.py
- Forward kwargs properly in RouterAgent._build_system_prompt to super()
- Addresses critical issues identified by Gemini code reviewer

Co-authored-by: Mervin Praison <[email protected]>

* fix(examples): remove merge-conflict residue for PR #1893

---------

Co-authored-by: Dhivya-Bharathy <[email protected]>
Co-authored-by: praisonai-triage-agent[bot] <272766704+praisonai-triage-agent[bot]@users.noreply.github.com>
Co-authored-by: Mervin Praison <[email protected]>
Co-authored-by: Mervin Praison <[email protected]>
2026-06-23 00:03:04 +01:00

134 lines
4.6 KiB
Python

#!/usr/bin/env python3
"""
Example: Knowledge Retrieval with Context-Required Questions
This example demonstrates:
1. Agent answers questions that REQUIRE retrieved context (not general knowledge)
2. Unique codes/secrets that cannot be guessed
3. Verification that context is text, not file path
Requirements:
- pip install praisonaiagents[knowledge]
- OPENAI_API_KEY environment variable
Usage:
python context_required_example.py
"""
import os
import tempfile
import shutil
from praisonaiagents import Agent
def main():
temp_dir = tempfile.mkdtemp(prefix='praison_ctx_')
try:
# Create test document with UNIQUE content that cannot be guessed
doc = os.path.join(temp_dir, 'company_policy.txt')
with open(doc, 'w') as f:
f.write("""
Acme Corporation Internal Policy Document
==========================================
Remote Work Policy:
- Employees may work from home up to 3 days per week
- Manager approval is required for remote work
- Manager approval code: ZEBRA-71
- All requests must be submitted via the HR portal
Expense Reimbursement:
- Maximum daily meal allowance: $47.50
- Mileage rate: $0.655 per mile
- Expense submission code: TIGER-42
- Receipts required for amounts over $25
IT Security:
- VPN access code prefix: FALCON-
- Password reset hotline: 555-0199
- Security incident code: HAWK-88
This document is confidential. Last updated: 2024-01-15.
""")
print("=" * 60)
print("Example: Context-Required Knowledge Retrieval")
print("=" * 60)
print(f"\nDocument location: {doc}")
print("\nThis example asks questions that CANNOT be answered")
print("without the retrieved context (unique codes/values).\n")
# Create agent with knowledge
agent = Agent(
name="PolicyExpert",
instructions="""You are a company policy expert.
Answer questions based ONLY on the provided knowledge context.
If the answer is not in the context, say 'I don't have that information.'
Be precise and quote exact values when asked about codes or numbers.""",
knowledge=[temp_dir],
memory={"user_id": "demo_user"},
output="verbose",
)
# Question 1: Unique code that requires context
print("-" * 40)
print("Question 1: What is the manager approval code for remote work?")
print("-" * 40)
response = agent.chat("What is the manager approval code for remote work?")
print(f"\nAnswer: {response}\n")
# Verify the answer contains the unique code
if "ZEBRA-71" in str(response or "").upper():
print("✅ VERIFIED: Agent correctly retrieved the unique code from context!\n")
else:
print("❌ WARNING: Agent did not find the code - check retrieval\n")
# Question 2: Another unique value
print("-" * 40)
print("Question 2: What is the maximum daily meal allowance?")
print("-" * 40)
response = agent.chat("What is the maximum daily meal allowance?")
print(f"\nAnswer: {response}\n")
if "47.50" in response or "$47.50" in response:
print("✅ VERIFIED: Agent correctly retrieved the specific amount!\n")
else:
print("❌ WARNING: Agent did not find the amount - check retrieval\n")
# Question 3: Security code
print("-" * 40)
print("Question 3: What is the security incident code?")
print("-" * 40)
response = agent.chat("What is the security incident code?")
print(f"\nAnswer: {response}\n")
if "HAWK-88" in str(response or "").upper():
print("✅ VERIFIED: Agent correctly retrieved the security code!\n")
else:
print("❌ WARNING: Agent did not find the code - check retrieval\n")
# Show context preview to prove it's text, not path
print("=" * 60)
print("Context Verification")
print("=" * 60)
context, _ = agent._get_knowledge_context("policy codes", use_rag=True)
print(f"\nRetrieved context preview (first 300 chars):")
print("-" * 40)
print(context[:300] if context else "NO CONTEXT")
print("-" * 40)
# Verify context is text, not path
if temp_dir in context:
print("\n❌ ERROR: Context contains file path instead of text!")
else:
print("\n✅ VERIFIED: Context contains actual text, not file path!")
finally:
shutil.rmtree(temp_dir, ignore_errors=True)
if __name__ == "__main__":
main()