gb/ALWAYS.md
Rodrigo Rodriguez (Pragmatismo) 25ea1965a4
Some checks failed
BotServer CI / build (push) Failing after 59s
Implement THINK KB keyword for explicit knowledge base reasoning
- Add botserver/src/basic/keywords/think_kb.rs with structured KB search
- Register THINK KB in keywords module and BASIC engine
- Add comprehensive documentation in ALWAYS.md and botbook
- Include confidence scoring, multi-KB support, and error handling
- Add unit tests and example usage script
2026-03-16 08:03:18 -03:00

9.2 KiB

ALWAYS.md - THINK KB Keyword Documentation

Overview

The THINK KB keyword provides explicit knowledge base reasoning capabilities, allowing bots to perform structured semantic searches across active knowledge bases and return detailed results for analysis and decision-making.

Syntax

results = THINK KB "query_text"
results = THINK KB query_variable

Parameters

Parameter Type Description
query_text String The question or search query to execute against active KBs
query_variable Variable Variable containing the search query

Return Value

The THINK KB keyword returns a structured object containing:

{
  "results": [
    {
      "content": "Relevant text content from document",
      "source": "path/to/source/document.pdf", 
      "kb_name": "knowledge_base_name",
      "relevance": 0.85,
      "tokens": 150
    }
  ],
  "summary": "Brief summary of findings",
  "confidence": 0.78,
  "total_results": 5,
  "sources": ["doc1.pdf", "doc2.md"],
  "query": "original search query",
  "kb_count": 2
}

Result Fields

Field Type Description
results Array Array of search results with content and metadata
summary String Human-readable summary of the search findings
confidence Number Overall confidence score (0.0 to 1.0)
total_results Number Total number of results found
sources Array List of unique source documents
query String The original search query
kb_count Number Number of knowledge bases searched

Individual Result Fields

Field Type Description
content String The relevant text content from the document
source String Path to the source document
kb_name String Name of the knowledge base containing this result
relevance Number Relevance score (0.0 to 1.0)
tokens Number Estimated token count for this content

Examples

Basic Knowledge Base Query

' Activate knowledge bases first
USE KB "company_policies"
USE KB "hr_handbook"

' Perform structured search
results = THINK KB "What is the remote work policy?"

' Access results
TALK results.summary
PRINT "Confidence: " + results.confidence
PRINT "Found " + results.total_results + " results"

' Process individual results
FOR i = 0 TO results.results.length - 1
  result = results.results[i]
  PRINT "Source: " + result.source
  PRINT "Relevance: " + result.relevance
  PRINT "Content: " + result.content
  PRINT "---"
NEXT i

Decision Making with Confidence Thresholds

USE KB "technical_docs"
USE KB "troubleshooting"

query = "How to fix database connection errors?"
results = THINK KB query

IF results.confidence > 0.8 THEN
  TALK "I found reliable information: " + results.summary
  ' Show top result
  IF results.total_results > 0 THEN
    top_result = results.results[0]
    TALK "Best match from: " + top_result.source
    TALK top_result.content
  END IF
ELSE IF results.confidence > 0.5 THEN
  TALK "I found some relevant information, but I'm not completely certain: " + results.summary
ELSE
  TALK "I couldn't find reliable information about: " + query
  TALK "You might want to consult additional resources."
END IF

Comparative Analysis

USE KB "product_specs"
USE KB "competitor_analysis"

' Compare multiple queries
queries = ["pricing strategy", "feature comparison", "market positioning"]

FOR i = 0 TO queries.length - 1
  query = queries[i]
  results = THINK KB query
  
  PRINT "=== Analysis: " + query + " ==="
  PRINT "Confidence: " + results.confidence
  PRINT "Sources: " + results.sources.length
  PRINT "Summary: " + results.summary
  PRINT ""
NEXT i

Source-Based Filtering

USE KB "legal_documents"

results = THINK KB "contract termination clauses"

' Filter by source type
pdf_results = []
FOR i = 0 TO results.results.length - 1
  result = results.results[i]
  IF result.source CONTAINS ".pdf" THEN
    pdf_results.push(result)
  END IF
NEXT i

TALK "Found " + pdf_results.length + " results from PDF documents"

Dynamic Query Building

USE KB "customer_support"

customer_issue = HEAR "What's your issue?"
priority = HEAR "What's the priority level?"

' Build contextual query
query = customer_issue + " priority:" + priority + " resolution steps"
results = THINK KB query

IF results.confidence > 0.7 THEN
  TALK "Here's what I found for your " + priority + " priority issue:"
  TALK results.summary
  
  ' Show most relevant result
  IF results.total_results > 0 THEN
    best_result = results.results[0]
    TALK "From " + best_result.source + ":"
    TALK best_result.content
  END IF
ELSE
  TALK "I need to escalate this issue. Let me connect you with a human agent."
END IF

Advanced Usage Patterns

Multi-Stage Reasoning

USE KB "research_papers"
USE KB "case_studies"

' Stage 1: Find general information
general_results = THINK KB "machine learning applications"

' Stage 2: Drill down based on initial findings
IF general_results.confidence > 0.6 THEN
  ' Extract key terms from top results for refined search
  specific_query = "deep learning " + general_results.results[0].content.substring(0, 50)
  specific_results = THINK KB specific_query
  
  TALK "General overview: " + general_results.summary
  TALK "Specific details: " + specific_results.summary
END IF

Quality Assessment

USE KB "quality_standards"

results = THINK KB "ISO certification requirements"

' Assess result quality
high_quality_results = []
FOR i = 0 TO results.results.length - 1
  result = results.results[i]
  IF result.relevance > 0.8 AND result.tokens > 100 THEN
    high_quality_results.push(result)
  END IF
NEXT i

IF high_quality_results.length > 0 THEN
  TALK "Found " + high_quality_results.length + " high-quality matches"
ELSE
  TALK "Results may need verification from additional sources"
END IF
Feature Automatic (USE KB) Explicit (THINK KB)
Trigger User questions automatically search Explicit keyword execution
Control Automatic, behind-the-scenes Full programmatic control
Results Injected into LLM context Structured data for processing
Analysis LLM interprets automatically Bot can analyze before responding
Confidence Not exposed Explicit confidence scoring
Filtering Not available Full result filtering and processing

Performance Considerations

  • Search Time: 100-500ms depending on KB size and query complexity
  • Memory Usage: Results cached for session duration
  • Token Limits: Automatically respects token limits (default: 2000 tokens)
  • Concurrent Searches: Searches all active KBs in parallel

Error Handling

TRY
  results = THINK KB user_query
  IF results.total_results = 0 THEN
    TALK "No information found for: " + user_query
  END IF
CATCH error
  TALK "Search failed: " + error.message
  TALK "Please try a different query or check if knowledge bases are active"
END TRY

Best Practices

  1. Activate Relevant KBs First: Use USE KB to activate appropriate knowledge bases
  2. Check Confidence Scores: Use confidence thresholds for decision making
  3. Handle Empty Results: Always check total_results before accessing results array
  4. Filter by Relevance: Consider filtering results below 0.5 relevance
  5. Limit Result Processing: Process only top N results to avoid performance issues
  6. Cache Results: Store results in variables for multiple uses

Integration with Other Keywords

With LLM Keyword

results = THINK KB "technical specifications"
IF results.confidence > 0.7 THEN
  context = "Based on: " + results.summary
  response = LLM "Explain this in simple terms" WITH CONTEXT context
  TALK response
END IF

With Decision Making

policy_results = THINK KB "expense policy limits"
IF policy_results.confidence > 0.8 THEN
  ' Use structured data for automated decisions
  FOR i = 0 TO policy_results.results.length - 1
    result = policy_results.results[i]
    IF result.content CONTAINS "maximum $500" THEN
      SET expense_limit = 500
      BREAK
    END IF
  NEXT i
END IF

Troubleshooting

No Results Returned

results = THINK KB query
IF results.total_results = 0 THEN
  PRINT "No active KBs: " + results.kb_count
  PRINT "Try: USE KB 'collection_name' first"
END IF

Low Confidence Scores

  • Refine query terms to be more specific
  • Check if relevant documents are in active KBs
  • Consider expanding search to additional knowledge bases
  • Verify document quality and indexing

Performance Issues

  • Limit concurrent THINK KB calls
  • Use more specific queries to reduce result sets
  • Consider caching results for repeated queries
  • Monitor token usage in results

See Also