interface Implements multi-user authentication system with email account management, profile settings, drive configuration, and security controls. Includes database migrations for user accounts, email credentials, preferences, and session management. Frontend provides intuitive UI for adding IMAP/SMTP accounts with provider presets and connection testing. Backend supports per-user vector databases for email and file indexing with Zitadel SSO integration and automatic workspace initialization. ```
4.3 KiB
4.3 KiB
🧠 Knowledge Base (KB) System - Complete Implementation
Overview
The KB system allows .bas tools to dynamically add/remove Knowledge Bases to conversation context using ADD_KB and CLEAR_KB keywords. Each KB is a vectorized folder that gets queried by the LLM during conversation.
🏗️ Architecture
work/
{bot_name}/
{bot_name}.gbkb/ # Knowledge Base root
circular/ # KB folder 1
document1.pdf
document2.md
vectorized/ # Auto-generated vector index
comunicado/ # KB folder 2
announcement1.txt
announcement2.pdf
vectorized/
geral/ # KB folder 3
general1.md
vectorized/
📊 Database Tables (Already Exist!)
From Migration 6.0.2 - kb_collections
kb_collections
- id (uuid)
- bot_id (uuid)
- name (text) -- e.g., "circular", "comunicado"
- folder_path (text) -- "work/bot/bot.gbkb/circular"
- qdrant_collection (text) -- "bot_circular"
- document_count (integer)
From Migration 6.0.2 - kb_documents
kb_documents
- id (uuid)
- bot_id (uuid)
- collection_name (text) -- References kb_collections.name
- file_path (text)
- file_hash (text)
- indexed_at (timestamptz)
NEW Migration 6.0.7 - session_kb_associations
session_kb_associations
- id (uuid)
- session_id (uuid) -- Current conversation
- bot_id (uuid)
- kb_name (text) -- "circular", "comunicado", etc.
- kb_folder_path (text) -- Full path to KB
- qdrant_collection (text) -- Qdrant collection to query
- added_at (timestamptz)
- added_by_tool (text) -- Which .bas tool added this KB
- is_active (boolean) -- true = active in session
🔧 BASIC Keywords
ADD_KB kbname
Purpose: Add a Knowledge Base to the current conversation session
Usage:
' Static KB name
ADD_KB "circular"
' Dynamic KB name from variable
kbname = LLM "Return one word: circular, comunicado, or geral based on: " + subject
ADD_KB kbname
' Multiple KBs in one tool
ADD_KB "circular"
ADD_KB "geral"
What it does:
- Checks if KB exists in
kb_collectionstable - If not found, creates entry with default path
- Inserts/updates
session_kb_associationswithis_active = true - Logs which tool added the KB
- KB is now available for LLM queries in this session
Example (from change-subject.bas):
PARAM subject as string
DESCRIPTION "Called when someone wants to change conversation subject."
kbname = LLM "Return one word circular, comunicado or geral based on: " + subject
ADD_KB kbname
TALK "You have chosen to change the subject to " + subject + "."
CLEAR_KB [kbname]
Purpose: Remove Knowledge Base(s) from current session
Usage:
' Remove specific KB
CLEAR_KB "circular"
CLEAR_KB kbname
' Remove ALL KBs
CLEAR_KB
What it does:
- Sets
is_active = falseinsession_kb_associations - KB no longer included in LLM prompt context
- If no argument, clears ALL active KBs
Example:
' Switch from one KB to another
CLEAR_KB "circular"
ADD_KB "comunicado"
' Start fresh conversation with no context
CLEAR_KB
TALK "Context cleared. What would you like to discuss?"
🤖 Prompt Engine Integration
How Bot Uses Active KBs
When building the LLM prompt, the bot:
- Gets Active KBs for Session:
let active_kbs = get_active_kbs_for_session(&conn_pool, session_id)?;
// Returns: Vec<(kb_name, kb_folder_path, qdrant_collection)>
// Example: [("circular", "work/bot/bot.gbkb/circular", "bot_circular")]
- Queries Each KB's Vector DB:
for (kb_name, _path, qdrant_collection) in active_kbs {
let results = qdrant_client.search_points(
qdrant_collection,
user_query_embedding,
limit: 5
).await?;
// Add results to context
context_docs.extend(results);
}
- Builds Enriched Prompt:
System: You are a helpful assistant.
Context from Knowledge Bases:
[KB: circular]
- Document 1: "Circular 2024/01 - New policy regarding..."
- Document 2: "Circular 2024/02 - Update on procedures..."
[KB: geral]
- Document 3: "General information about company..."
User: What's the latest policy update?