Add automatic context checker for RAG integration
This commit is contained in:
91
rag_context.py
Normal file
91
rag_context.py
Normal file
@@ -0,0 +1,91 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
"""
|
||||||
|
RAG Context Checker - Simple wrapper for automatic knowledge base lookup
|
||||||
|
|
||||||
|
Usage from within Python/OpenClaw sessions:
|
||||||
|
from rag_context import check_context
|
||||||
|
check_context("your question here")
|
||||||
|
|
||||||
|
This prints relevant context if found, otherwise silent.
|
||||||
|
"""
|
||||||
|
|
||||||
|
import sys
|
||||||
|
sys.path.insert(0, '/home/william/.openclaw/workspace/rag')
|
||||||
|
|
||||||
|
from rag_query_wrapper import search_knowledge, format_for_ai
|
||||||
|
|
||||||
|
|
||||||
|
def check_context(query: str, max_results: int = 5, min_score: float = 0.3) -> None:
|
||||||
|
"""
|
||||||
|
Check knowledge base for relevant context and print it.
|
||||||
|
|
||||||
|
This is designed as a simple call-and-forget function. If context exists,
|
||||||
|
it prints it. If not, it's silent.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
query: The question or topic to search for
|
||||||
|
max_results: Maximum results to retrieve
|
||||||
|
min_score: Minimum similarity score (not used in current implementation)
|
||||||
|
|
||||||
|
Example:
|
||||||
|
>>> check_context("how to send SMS")
|
||||||
|
📚 Found 3 relevant items...
|
||||||
|
[prints context]
|
||||||
|
"""
|
||||||
|
if not query or len(query) < 3:
|
||||||
|
return
|
||||||
|
|
||||||
|
try:
|
||||||
|
results = search_knowledge(query, n_results=max_results)
|
||||||
|
|
||||||
|
if results and results.get('count', 0) > 0:
|
||||||
|
print("\n" + "="*80)
|
||||||
|
print("📚 RELEVANT CONTEXT FROM KNOWLEDGE BASE\n")
|
||||||
|
formatted = format_for_ai(results)
|
||||||
|
print(formatted)
|
||||||
|
print("="*80 + "\n")
|
||||||
|
|
||||||
|
except Exception as e:
|
||||||
|
# Fail silently - RAG errors shouldn't break conversations
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
def get_context(query: str, max_results: int = 5) -> str:
|
||||||
|
"""
|
||||||
|
Get context as a string (for automated use).
|
||||||
|
|
||||||
|
Returns formatted context string, or empty string if no results.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
query: Search query
|
||||||
|
max_results: Maximum results
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
Formatted context string, or "" if no results
|
||||||
|
|
||||||
|
Example:
|
||||||
|
>>> context = get_context("Reddit automation")
|
||||||
|
>>> if context:
|
||||||
|
>>> print("Found relevant past work:")
|
||||||
|
>>> print(context)
|
||||||
|
"""
|
||||||
|
try:
|
||||||
|
results = search_knowledge(query, n_results=max_results)
|
||||||
|
|
||||||
|
if results and results.get('count', 0) > 0:
|
||||||
|
return format_for_ai(results)
|
||||||
|
|
||||||
|
except Exception as e:
|
||||||
|
pass
|
||||||
|
|
||||||
|
return ""
|
||||||
|
|
||||||
|
|
||||||
|
# Quick test when run directly
|
||||||
|
if __name__ == "__main__":
|
||||||
|
if len(sys.argv) > 1:
|
||||||
|
query = ' '.join(sys.argv[1:])
|
||||||
|
check_context(query)
|
||||||
|
else:
|
||||||
|
print("Usage: python3 rag_context.py <query>")
|
||||||
|
print("Or import: from rag_context import check_context")
|
||||||
Reference in New Issue
Block a user