💬 ChatAgent

The ChatAgent is Ryoma’s conversational AI agent for general questions, explanations, and knowledge sharing. It provides intelligent responses using advanced language models.

🎯 Core Capabilities

🗣️ Conversational AI

  • Natural language understanding and generation

  • Context-aware responses

  • Multi-turn conversations with memory

  • Intelligent question routing

📚 Knowledge Sharing

  • Technical explanations and tutorials

  • Best practices and recommendations

  • Conceptual discussions

  • Help and guidance

🔗 Context Integration

  • Vector store integration for knowledge retrieval

  • Conversation history management

  • Shared context across agent interactions

🚀 Quick Start

from ryoma_ai.agent.chat_agent import ChatAgent

# Basic chat agent
agent = ChatAgent(
    model="gpt-4o",
    model_parameters={
        "temperature": 0.7,  # More creative for conversations
        "max_tokens": 2000
    }
)

# Ask general questions
response = agent.stream("What are the best practices for database design?")
print(response)

🔧 Advanced Configuration

Custom Prompts

from langchain_core.prompts import ChatPromptTemplate

# Custom base prompt
custom_prompt = ChatPromptTemplate.from_messages([
    ("system", "You are a helpful data engineering expert."),
    ("human", "{question}")
])

agent = ChatAgent(
    model="gpt-4o",
    base_prompt_template=custom_prompt
)

Vector Store Integration

# Chat agent with knowledge retrieval
agent = ChatAgent(
    model="gpt-4o",
    vector_store=vector_store_config,
    embedding=embedding_config
)

# Questions can now leverage indexed knowledge
response = agent.stream("How do I optimize SQL queries for large datasets?")

📊 Methods

Core Methods

stream(question: str, display: bool = True)

Stream conversational responses in real-time.

# Stream response
agent.stream("Explain the difference between OLTP and OLAP systems")

# Stream without display
response = agent.stream("What is data normalization?", display=False)

invoke(question: str, display: bool = True)

Get complete response at once.

# Get full response
response = agent.invoke("How do database indexes work?")
print(response.content)

chat(question: str, display: bool = True, stream: bool = False)

Unified interface for both streaming and invoke modes.

# Use chat interface
agent.chat("What are the benefits of using vector databases?", stream=True)

Advanced Methods

add_prompt(prompt)

Add context to the conversation.

# Add domain-specific context
agent.add_prompt("""
You are an expert in financial data analysis.
Focus on accounting principles and regulatory compliance.
""")

response = agent.stream("How should I structure my customer revenue tables?")

set_base_prompt(prompt)

Replace the base prompt template.

from langchain_core.prompts import ChatPromptTemplate

# Technical documentation assistant
tech_prompt = ChatPromptTemplate.from_messages([
    ("system", "You are a technical documentation expert. Provide clear, actionable answers."),
    ("human", "{question}")
])

agent.set_base_prompt(tech_prompt)

set_output_parser(parser)

Structure responses using Pydantic models.

from pydantic import BaseModel

class TechnicalAnswer(BaseModel):
    concept: str
    explanation: str
    examples: list[str]
    best_practices: list[str]

agent.set_output_parser(TechnicalAnswer)
response = agent.invoke("Explain database indexing")
print(f"Concept: {response.concept}")

🎨 Use Cases

1. Technical Help and Guidance

# Get technical explanations
agent.stream("What's the difference between clustered and non-clustered indexes?")
agent.stream("When should I use a data warehouse vs data lake?")

2. Best Practices Consultation

# Ask for recommendations
agent.stream("What are the security best practices for database connections?")
agent.stream("How should I structure my data pipeline architecture?")

3. Learning and Education

# Educational content
agent.stream("Explain how database transactions work")
agent.stream("What are the ACID properties and why are they important?")

4. Troubleshooting Support

# Get help with issues
agent.stream("My PostgreSQL queries are running slowly, what could be wrong?")
agent.stream("How do I debug connection timeout errors?")

🔍 Integration with Other Agents

Multi-Agent Workflows

The ChatAgent works seamlessly with other agents through the router:

from ryoma_ai.agent.multi_agent_router import MultiAgentRouter

router = MultiAgentRouter(
    model="gpt-4o",
    datasource=your_datasource,
    meta_store=meta_store,
    vector_store=vector_store
)

# Natural routing between agents
agent, classification, context = router.route_and_execute(
    "First explain how joins work, then show me all orders with customer names"
)
# → Routes to ChatAgent for explanation, then SqlAgent for query

Context Sharing

# Share context between agent types
router.switch_agent_context(
    from_agent="chat",
    to_agent="sql",
    context_data={
        "previous_explanation": "User learned about joins",
        "complexity_level": "beginner"
    }
)

🛡️ Safety and Validation

Content Filtering

# Configure content policies
agent = ChatAgent(
    model="gpt-4o",
    safety_config={
        "enable_content_filter": True,
        "block_sensitive_info": True,
        "require_data_context": False
    }
)

Response Validation

# Validate responses for technical accuracy
agent = ChatAgent(
    model="gpt-4o",
    validation_config={
        "enable_fact_checking": True,
        "cross_reference_sources": True,
        "confidence_threshold": 0.8
    }
)

📈 Performance Optimization

Caching Responses

# Enable response caching for common questions
agent = ChatAgent(
    model="gpt-4o",
    enable_caching=True,
    cache_config={
        "ttl": 3600,  # 1 hour
        "cache_key_fields": ["question", "base_prompt"]
    }
)

Model Optimization

# Optimize for conversation flow
agent = ChatAgent(
    model="gpt-4o",
    model_parameters={
        "temperature": 0.7,        # Creative but consistent
        "max_tokens": 1500,        # Reasonable response length
        "presence_penalty": 0.1,   # Encourage topic variation
        "frequency_penalty": 0.1   # Reduce repetition
    }
)