11 KiB
11 KiB
KB and TOOL System Documentation
Overview
The General Bots system provides 4 essential keywords for managing Knowledge Bases (KB) and Tools dynamically during conversation sessions:
- USE_KB - Load and embed files from
.gbkbfolders into vector database - CLEAR_KB - Remove KB from current session
- USE_TOOL - Make a tool available for LLM to call
- CLEAR_TOOLS - Remove all tools from current session
Knowledge Base (KB) System
What is a KB?
A Knowledge Base (KB) is a folder containing documents (.gbkb folder structure) that are vectorized/embedded and stored in a vector database. The vectorDB retrieves relevant chunks/excerpts to inject into prompts, giving the LLM context-aware responses.
Folder Structure
work/
{bot_name}/
{bot_name}.gbkb/ # Knowledge Base root
circular/ # KB folder 1
document1.pdf
document2.md
document3.txt
comunicado/ # KB folder 2
info.docx
data.csv
docs/ # KB folder 3
README.md
guide.pdf
KB Loading Process
- Scan folder - System scans
.gbkbfolder for documents - Process files - Extracts text from PDF, DOCX, TXT, MD, CSV files
- Chunk text - Splits into ~1000 character chunks with overlap
- Generate embeddings - Creates vector representations
- Store in VectorDB - Saves to Qdrant for similarity search
- Ready for queries - KB available for semantic search
Supported File Types
- PDF - Full text extraction with pdf-extract
- DOCX/DOC - Microsoft Word documents
- TXT - Plain text files
- MD - Markdown documents
- CSV - Structured data (each row as entry)
- HTML - Web pages (text only)
- JSON - Structured data
USE_KB Keyword
USE_KB "circular"
# Loads the 'circular' KB folder into session
# All documents in that folder are now searchable
USE_KB "comunicado"
# Adds another KB to the session
# Both 'circular' and 'comunicado' are now active
CLEAR_KB Keyword
CLEAR_KB
# Removes all loaded KBs from current session
# Frees up memory and context space
Tool System
What are Tools?
Tools are callable functions that the LLM can invoke to perform specific actions:
- Query databases
- Call APIs
- Process data
- Execute workflows
- Integrate with external systems
Tool Definition
Tools are defined in .gbtool files with JSON schema:
{
"name": "get_weather",
"description": "Get current weather for a location",
"parameters": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "City name or coordinates"
},
"units": {
"type": "string",
"enum": ["celsius", "fahrenheit"],
"default": "celsius"
}
},
"required": ["location"]
},
"endpoint": "https://api.weather.com/current",
"method": "GET"
}
Tool Registration
Tools can be registered in three ways:
- Static Registration - In bot configuration
- Dynamic Loading - Via USE_TOOL keyword
- Auto-discovery - From
.gbtoolfiles in work directory
USE_TOOL Keyword
USE_TOOL "weather"
# Makes the weather tool available to LLM
USE_TOOL "database_query"
# Adds database query tool to session
USE_TOOL "email_sender"
# Enables email sending capability
CLEAR_TOOLS Keyword
CLEAR_TOOLS
# Removes all tools from current session
# LLM can no longer call external functions
Session Management
Context Lifecycle
- Session Start - Clean slate, no KB or tools
- Load Resources - USE_KB and USE_TOOL as needed
- Active Use - LLM uses loaded resources
- Clear Resources - CLEAR_KB/CLEAR_TOOLS when done
- Session End - Automatic cleanup
Best Practices
KB Management
- Load relevant KBs only - Don't overload context
- Clear when switching topics - Keep context focused
- Update KBs regularly - Keep information current
- Monitor token usage - Vector search adds tokens
Tool Management
- Enable minimal tools - Only what's needed
- Validate tool responses - Check for errors
- Log tool usage - For audit and debugging
- Set rate limits - Prevent abuse
Performance Considerations
Memory Usage
- Each KB uses ~100-500MB RAM (depends on size)
- Tools use minimal memory (<1MB each)
- Vector search adds 10-50ms latency
- Clear unused resources to free memory
Token Optimization
- KB chunks add 500-2000 tokens per query
- Tool descriptions use 50-200 tokens each
- Clear resources to reduce token usage
- Use specific KB folders vs entire database
API Integration
REST Endpoints
# Load KB
POST /api/kb/load
{
"session_id": "xxx",
"kb_name": "circular"
}
# Clear KB
POST /api/kb/clear
{
"session_id": "xxx"
}
# Load Tool
POST /api/tools/load
{
"session_id": "xxx",
"tool_name": "weather"
}
# Clear Tools
POST /api/tools/clear
{
"session_id": "xxx"
}
WebSocket Commands
// Load KB
ws.send({
type: "USE_KB",
kb_name: "circular"
});
// Clear KB
ws.send({
type: "CLEAR_KB"
});
// Load Tool
ws.send({
type: "USE_TOOL",
tool_name: "weather"
});
// Clear Tools
ws.send({
type: "CLEAR_TOOLS"
});
Implementation Details
Vector Database (Qdrant)
Configuration:
- Collection: Per bot instance
- Embedding Model: text-embedding-ada-002
- Dimension: 1536
- Distance: Cosine similarity
- Index: HNSW with M=16, ef=100
File Processing Pipeline
// src/basic/keywords/use_kb.rs
1. Scan directory for files
2. Extract text based on file type
3. Clean and normalize text
4. Split into chunks (1000 chars, 200 overlap)
5. Generate embeddings via OpenAI
6. Store in Qdrant with metadata
7. Update session context
Tool Execution Engine
// src/basic/keywords/use_tool.rs
1. Parse tool definition (JSON schema)
2. Register with LLM context
3. Listen for tool invocation
4. Validate parameters
5. Execute tool (HTTP/function call)
6. Return results to LLM
7. Log execution for audit
Error Handling
Common Errors
| Error | Cause | Solution |
|---|---|---|
KB_NOT_FOUND |
KB folder doesn't exist | Check folder name and path |
VECTORDB_ERROR |
Qdrant connection issue | Check vectorDB service |
EMBEDDING_FAILED |
OpenAI API error | Check API key and limits |
TOOL_NOT_FOUND |
Tool not registered | Verify tool name |
TOOL_EXECUTION_ERROR |
Tool failed to execute | Check tool endpoint/logic |
MEMORY_LIMIT |
Too many KBs loaded | Clear unused KBs |
Debugging
Enable debug logging:
RUST_LOG=debug cargo run
Check logs for:
- KB loading progress
- Embedding generation
- Vector search queries
- Tool invocations
- Error details
Examples
Customer Support Bot
# Load product documentation
USE_KB "product_docs"
USE_KB "faqs"
# Enable support tools
USE_TOOL "ticket_system"
USE_TOOL "knowledge_search"
# Bot now has access to docs and can create tickets
HEAR user_question
# ... process with KB context and tools ...
# Clean up after session
CLEAR_KB
CLEAR_TOOLS
Research Assistant
# Load research papers
USE_KB "papers_2024"
USE_KB "citations"
# Enable research tools
USE_TOOL "arxiv_search"
USE_TOOL "citation_formatter"
# Assistant can now search papers and format citations
# ... research session ...
# Switch to different topic
CLEAR_KB
USE_KB "papers_biology"
Enterprise Integration
# Load company policies
USE_KB "hr_policies"
USE_KB "it_procedures"
# Enable enterprise tools
USE_TOOL "active_directory"
USE_TOOL "jira_integration"
USE_TOOL "slack_notifier"
# Bot can now query AD, create Jira tickets, send Slack messages
# ... handle employee request ...
# End of shift cleanup
CLEAR_KB
CLEAR_TOOLS
Security Considerations
KB Security
- Access Control - KBs require authorization
- Encryption - Files encrypted at rest
- Audit Logging - All KB access logged
- Data Isolation - Per-session KB separation
Tool Security
- Authentication - Tools require valid session
- Rate Limiting - Prevent tool abuse
- Parameter Validation - Input sanitization
- Execution Sandboxing - Tools run isolated
Best Practices
- Principle of Least Privilege - Only load needed resources
- Regular Audits - Review KB and tool usage
- Secure Storage - Encrypt sensitive KBs
- API Key Management - Rotate tool API keys
- Session Isolation - Clear resources between users
Configuration
Environment Variables
# Vector Database
QDRANT_URL=http://localhost:6333
QDRANT_API_KEY=your_key
# Embeddings
OPENAI_API_KEY=your_key
EMBEDDING_MODEL=text-embedding-ada-002
CHUNK_SIZE=1000
CHUNK_OVERLAP=200
# Tools
MAX_TOOLS_PER_SESSION=10
TOOL_TIMEOUT_SECONDS=30
TOOL_RATE_LIMIT=100
# KB
MAX_KB_PER_SESSION=5
MAX_KB_SIZE_MB=500
KB_SCAN_INTERVAL=3600
Configuration File
# botserver.toml
[kb]
enabled = true
max_per_session = 5
embedding_model = "text-embedding-ada-002"
chunk_size = 1000
chunk_overlap = 200
[tools]
enabled = true
max_per_session = 10
timeout = 30
rate_limit = 100
sandbox = true
[vectordb]
provider = "qdrant"
url = "http://localhost:6333"
collection_prefix = "botserver_"
Troubleshooting
KB Issues
Problem: KB not loading
- Check folder exists in work/{bot_name}/{bot_name}.gbkb/
- Verify file permissions
- Check vector database connection
- Review logs for embedding errors
Problem: Poor search results
- Increase chunk overlap
- Adjust chunk size
- Update embedding model
- Clean/preprocess documents better
Tool Issues
Problem: Tool not executing
- Verify tool registration
- Check parameter validation
- Test endpoint directly
- Review execution logs
Problem: Tool timeout
- Increase timeout setting
- Check network connectivity
- Optimize tool endpoint
- Add retry logic
Migration Guide
From File-based to Vector Search
- Export existing files
- Organize into .gbkb folders
- Run embedding pipeline
- Test vector search
- Update bot logic
From Static to Dynamic Tools
- Convert function to tool definition
- Create .gbtool file
- Implement endpoint/handler
- Test with USE_TOOL
- Remove static registration
Future Enhancements
Planned Features
- Incremental KB Updates - Add/remove single documents
- Multi-language Support - Embeddings in multiple languages
- Tool Chaining - Tools calling other tools
- KB Versioning - Track KB changes over time
- Smart Caching - Cache frequent searches
- Tool Analytics - Usage statistics and optimization
Roadmap
- Q1 2024: Incremental updates, multi-language
- Q2 2024: Tool chaining, KB versioning
- Q3 2024: Smart caching, analytics
- Q4 2024: Advanced security, enterprise features