generalbots/docs/src/chapter-02/gbdialog.md

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
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.