This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
# Start Chainlit conversational interface (primary UI)
chainlit run chainlit_app.py
# Start Flask web interface (simple API)
python flask_app.py
# Start advanced Flask application with full agent APIs
python citu_app.py
# Run training pipeline with data from data_pipeline/training_data directory
python -m data_pipeline.trainer.run_training --data_path ./data_pipeline/training_data/
# Complete automated schema workflow (DDL generation → Q&A generation → SQL validation → Training data loading)
python -m data_pipeline.schema_workflow \
--db-connection "postgresql://user:pass@host:port/database_name" \
--table-list tables.txt \
--business-context "业务系统描述" \
--output-dir ./data_pipeline/training_data/
# Generate only schema documentation without validation
python -m data_pipeline.schema_workflow \
--db-connection "postgresql://user:pass@host:port/db_name" \
--table-list tables.txt \
--business-context "系统描述" \
--skip-validation
# Test QA feedback and conversation management APIs
python test_qa_apis.py
# Test training data management APIs
python test_training_data_apis.py
chainlit_app.py
- Modern conversational UI with streaming responses, fallback mechanisms, and comprehensive error handlingcitu_app.py
- Production Flask application with full REST APIs for agent queries, conversation management, QA feedback, and health monitoringflask_app.py
- Simple REST API for basic database queriesapp_config.py
is the main configuration hub controlling:
# Multi-provider LLM selection
LLM_MODEL_TYPE = "api" # api or ollama
API_LLM_MODEL = "qianwen" # qianwen or deepseek
# Vector database selection
VECTOR_DB_TYPE = "pgvector" # chromadb or pgvector
# Agent routing behavior
QUESTION_ROUTING_MODE = "hybrid" # hybrid, database_direct, chat_direct, llm_only
# Feature toggles
ENABLE_RESULT_SUMMARY = True
ENABLE_CONVERSATION_CONTEXT = True
DISPLAY_RESULT_THINKING = False
The system supports 6 LLM + vector database combinations via common/vanna_combinations.py
:
All combinations are created through core/vanna_llm_factory.py
using factory pattern.
agent/citu_agent.py
implements a sophisticated LangGraph-based workflow:
Question → Classify → [DATABASE Path] → SQL Generation → SQL Validation → SQL Execution → Summary
→ [CHAT Path] → General Chat
Routing Modes:
hybrid
(default) - Intelligent classification between database and chatdatabase_direct
- Skip classification, direct SQL generationchat_direct
- Skip classification, direct chat responsellm_only
- LLM-based classification onlyThree-Database Architecture:
APP_DB_CONFIG
) - Source data for queriesPGVECTOR_CONFIG
) - Training data and embeddingsREDIS_*
) - Conversations, QA results, embedding cacheTraining data is managed in data_pipeline/training_data/
directory.
File Format Mapping:
.ddl
files → train_ddl_statements()
.md/.markdown
→ train_documentation_blocks()
_pair.json/_pairs.json
→ train_json_question_sql_pairs()
_pair.sql/_pairs.sql
→ train_formatted_question_sql_pairs()
.sql
(other) → train_sql_examples()
data_pipeline/
provides automated database reverse engineering:
qa_generation/
) - LLM-generated question-SQL pairsvalidators/
) - EXPLAIN-based validation with auto-repairtrainer/
) - Vanna.ai training data ingestioncommon/vanna_instance.py
implements thread-safe singleton for global Vanna instance management.
Multi-layer caching via common/
:
session_aware_cache.py
- Web session-aware cachingembedding_cache_manager.py
- High-performance embedding cachingredis_conversation_manager.py
- Conversation lifecycle managementComprehensive fallback mechanisms throughout the stack:
.env
file)app_config.py
defaultsdata_pipeline/config.py
)