6 KiB
6 KiB
.gbdialog Dialogs
The .gbdialog package contains BASIC scripts that define conversation flows, tool integrations, and bot behavior.
What is .gbdialog?
.gbdialog files are written in a specialized BASIC dialect that controls:
- Tool execution and integrations
- LLM prompting and context
- Knowledge base activation
- Session and memory management
- External API calls
Modern Approach: Let the LLM Work
Minimal BASIC Philosophy
Instead of complex logic, use the LLM's natural understanding:
' Example from announcements.gbai/update-summary.bas
' Generate summaries from documents
let text = GET "announcements.gbkb/news/news.pdf"
let resume = LLM "In a few words, resume this: " + text
SET BOT MEMORY "resume", resume
' Example from law.gbai/case.bas
' Load context and let LLM answer questions
text = GET "case-" + cod + ".pdf"
text = "Based on this document, answer the person's questions:\n\n" + text
SET CONTEXT text
TALK "Case loaded. You can ask me anything about the case."
Key Components
1. LLM Integration
' Direct LLM usage for natural conversation
response = LLM "Help the user with their question"
TALK response
' Context-aware responses
SET CONTEXT "user_type" AS "premium customer"
answer = LLM "Provide personalized recommendations"
TALK answer
2. Tool Execution
' Define tools with parameters
PARAM name AS string LIKE "John Smith" DESCRIPTION "Customer name"
PARAM email AS string LIKE "john@example.com" DESCRIPTION "Email"
' LLM automatically knows when to call this
SAVE "customers.csv", name, email
TALK "Registration complete!"
3. Knowledge Base Usage
' Activate knowledge base collections
USE KB "products"
USE KB "policies"
' LLM searches these automatically when answering
answer = LLM "Answer based on our product catalog and policies"
TALK answer
4. Session Management
' Store session data
SET "user_name", name
SET "preferences", "email notifications"
' Retrieve later
saved_name = GET "user_name"
TALK "Welcome back, " + saved_name
Script Structure
Entry Point: start.bas
Every bot needs a start.bas file:
' Minimal start script - let LLM handle everything
USE KB "company_docs"
response = LLM "Welcome the user and offer assistance"
TALK response
Tool Definitions
Create separate .bas files for each tool:
' enrollment.bas - The LLM knows when to use this
PARAM student_name AS string
PARAM course AS string
DESCRIPTION "Enrolls a student in a course"
SAVE "enrollments.csv", student_name, course, NOW()
TALK "Enrolled successfully!"
Best Practices
1. Minimal Logic
' Good - Let LLM handle the conversation
answer = LLM "Process the user's request appropriately"
TALK answer
' Avoid - Don't micromanage the flow
' IF user_says_this THEN do_that...
2. Clear Tool Descriptions
DESCRIPTION "This tool books appointments for customers"
' The LLM uses this description to know when to call the tool
3. Context Over Conditions
' Provide context, not rules
SET CONTEXT "business_hours" AS "9AM-5PM weekdays"
response = LLM "Inform about availability"
' LLM naturally understands to mention hours when relevant
4. Trust the LLM
' Simple prompt, sophisticated behavior
answer = LLM "Be a helpful customer service agent"
' LLM handles greetings, questions, complaints naturally
Common Patterns
Document Summarization (from announcements.gbai)
' Schedule automatic updates
SET SCHEDULE "59 * * * *"
' Fetch and summarize documents
let text = GET "announcements.gbkb/news/news.pdf"
let resume = LLM "In a few words, resume this: " + text
SET BOT MEMORY "resume", resume
Interactive Case Analysis (from law.gbai)
' Ask for case number
TALK "What is the case number?"
HEAR cod
' Load case document
text = GET "case-" + cod + ".pdf"
IF text THEN
' Set context for LLM to use
text = "Based on this document, answer the person's questions:\n\n" + text
SET CONTEXT text
TALK "Case loaded. Ask me anything about it."
ELSE
TALK "Case not found, please try again."
END IF
Tool Definition Pattern
' Tool parameters (auto-discovered by LLM)
PARAM name AS string
PARAM email AS string
DESCRIPTION "Enrollment tool"
' Tool logic (called when LLM decides)
SAVE "enrollments.csv", name, email
TALK "Successfully enrolled " + name
Multi-Collection Search
USE KB "products"
USE KB "reviews"
USE KB "specifications"
answer = LLM "Answer product questions comprehensively"
TALK answer
Advanced Features
Memory Management
SET BOT MEMORY "company_policy", policy_text
' Available across all sessions
retrieved = GET BOT MEMORY "company_policy"
External APIs
result = GET "https://api.example.com/data"
response = LLM "Interpret this data: " + result
TALK response
Suggestions
ADD SUGGESTION "Schedule Meeting" AS "schedule"
ADD SUGGESTION "View Products" AS "products"
' UI shows these as quick actions
Error Handling
The system handles errors gracefully:
- Syntax errors caught at compile time
- Runtime errors logged but don't crash
- LLM provides fallback responses
- Timeouts prevent infinite operations
Script Execution
Scripts run in a sandboxed environment with:
- Access to session state
- LLM generation capabilities
- Knowledge base search
- Tool execution rights
- External API access (configured)
Migration from Traditional Bots
Old Way (Complex Logic)
' DON'T DO THIS - 1990s style
' IF INSTR(user_input, "order") > 0 THEN
' IF INSTR(user_input, "status") > 0 THEN
' TALK "Checking order status..."
' ELSE IF INSTR(user_input, "new") > 0 THEN
' TALK "Creating new order..."
' END IF
' END IF
New Way (LLM Intelligence)
' DO THIS - Let LLM understand naturally
response = LLM "Handle the customer's order request"
TALK response
' LLM understands context and intent automatically
The key is to trust the LLM and write less code for more intelligent behavior.