Skip to content

A conversational AI agent simulating a 1912 Titanic booking clerk, maintaining historical accuracy (94% factual precision) and character consistency through advanced prompt engineering.

Notifications You must be signed in to change notification settings

spqr-86/titanic-booking-ai

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

58 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

🚒 RMS Titanic Booking Assistant 1912

Live Demo Python OpenAI LangChain LangGraph

πŸ“‹ ОписаниС ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°

AI-Π°Π³Π΅Π½Ρ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ‡Π½ΠΎ ΠΈΠ³Ρ€Π°Π΅Ρ‚ Ρ€ΠΎΠ»ΡŒ кассира ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ White Star Line Π² Π°ΠΏΡ€Π΅Π»Π΅ 1912 Π³ΠΎΠ΄Π°. Π‘ΠΎΡ‚ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ пассаТирам Π·Π°Π±Ρ€ΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π±ΠΈΠ»Π΅Ρ‚Ρ‹ Π½Π° ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ рСйс "Π’ΠΈΡ‚Π°Π½ΠΈΠΊΠ°", ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΏΠΎΠ³Ρ€ΡƒΠΆΠ°ΡΡΡŒ Π² историчСский контСкст эпохи.

🎯 ΠšΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ особСнности

  • Π˜Π½Ρ‚Π΅Π»Π»Π΅ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Π°Ρ ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·Π°Ρ†ΠΈΡ запросов: LangGraph-based Π³Ρ€Π°Ρ„ принятия Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ
  • RAG систСма: Retrieval-Augmented Generation с ΠΊΠΎΠ½Ρ‚Π΅ΠΊΡΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ компрСссиСй
  • ΠœΠ½ΠΎΠ³ΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Π°Ρ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ°: Π”Π΅Ρ‚Π΅ΠΊΡ‚ΠΎΡ€ Π°Π½Π°Ρ…Ρ€ΠΎΠ½ΠΈΠ·ΠΌΠΎΠ² + классификатор ΠΈΠ½Ρ‚Π΅Π½Ρ‚ΠΎΠ²
  • ΠšΠΎΠ½Ρ‚Π΅ΠΊΡΡ‚Π½Π°Ρ ΠΏΠ°ΠΌΡΡ‚ΡŒ Π΄ΠΈΠ°Π»ΠΎΠ³Π°: Π‘ΠΎΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ истории сообщСний Π² Ρ€Π°ΠΌΠΊΠ°Ρ… ΠΎΠ΄Π½ΠΎΠΉ сСссии
  • Π˜ΡΡ‚ΠΎΡ€ΠΈΡ‡Π΅ΡΠΊΠ°Ρ Π±Π°Π·Π° Π·Π½Π°Π½ΠΈΠΉ: 1,500+ Ρ„Π°ΠΊΡ‚ΠΎΠ² ΠΎ Π’ΠΈΡ‚Π°Π½ΠΈΠΊΠ΅, Ρ†Π΅Π½Π°Ρ…, ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚Π°Ρ…

πŸ—οΈ АрхитСктура систСмы

graph TD
    A[Frontend<br/>Vanilla JS] -->|HTTP/JSON| B[FastAPI Backend]
    B --> C{LangGraph Router}
    
    C -->|1. Anachronism Check| D[Anachronism Guard]
    D -->|Detected| E[Simple Response]
    D -->|Clean| F[Intent Classifier]
    
    F -->|Complex Query| G[RAG Pipeline]
    F -->|Simple Query| E
    
    G --> H[ChromaDB<br/>Vector Store]
    G --> I[OpenAI GPT-3.5]
    
    subgraph "RAG Components"
        G --> J[History-Aware Retriever]
        J --> K[Contextual Compressor]
        K --> L[LLM Chain Extractor]
    end
    
    B --> M[Session Memory Store]
    
    style C fill:#f96,stroke:#333,stroke-width:4px
    style G fill:#9cf,stroke:#333,stroke-width:2px
Loading

🧠 LangGraph Decision Flow

# УпрощСнная схСма Π³Ρ€Π°Ρ„Π° принятия Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ
StateGraph:
    1. Entry Point β†’ Anachronism Guard
    2. Anachronism Guard β†’ {
        - If anachronism detected β†’ Simple Response
        - Else β†’ Intent Classifier
    }
    3. Intent Classifier β†’ {
        - price/schedule/greeting β†’ Simple Response
        - complex/capacity β†’ RAG Node
    }
    4. Response Generation β†’ End

πŸ’» ВСхничСская рСализация

Backend Stack

  • Framework: FastAPI 0.111.1
  • AI/ML:
    • LangChain 0.3.25 (основной Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊ)
    • LangGraph 0.3.2 (Π³Ρ€Π°Ρ„ принятия Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ)
    • OpenAI GPT-3.5-turbo (языковая модСль)
  • Vector Database: ChromaDB 0.4.15
  • Session Management: In-memory chat history store

ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ систСмы

1. Anachronism Guard (ΠŸΡ€ΠΈΠ²Ρ€Π°Ρ‚Π½ΠΈΠΊ)

# ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠ΅Ρ‚ Π½Π° Π°Π½Π°Ρ…Ρ€ΠΎΠ½ΠΈΠ·ΠΌΡ‹ ΠΏΠ΅Ρ€Π΅Π΄ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΎΠΉ
class AnachronismCheck(BaseModel):
    is_anachronism: bool = Field(
        description="True Ссли вопрос содСрТит Π°Π½Π°Ρ…Ρ€ΠΎΠ½ΠΈΠ·ΠΌΡ‹"
    )

2. Intent Classifier (Π”Π²ΠΎΡ€Π΅Ρ†ΠΊΠΈΠΉ)

# ΠšΠ»Π°ΡΡΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΠ΅Ρ‚ запросы ΠΏΠΎ слоТности
class QueryClassifier(BaseModel):
    intent_type: Literal[
        "price", "schedule", "greeting", 
        "small_talk", "safety", "capacity", 
        "off_topic", "complex"
    ]

3. RAG Pipeline

  • Embeddings: OpenAI text-embedding-ada-002
  • Retrieval: History-aware с ΠΏΠ΅Ρ€Π΅Ρ„ΠΎΡ€ΠΌΡƒΠ»ΠΈΡ€ΠΎΠ²ΠΊΠΎΠΉ запросов
  • Compression: LLMChainExtractor для точности ΠΎΡ‚Π²Π΅Ρ‚ΠΎΠ²
  • Context Window: Π”ΠΎ 10 Ρ€Π΅Π»Π΅Π²Π°Π½Ρ‚Π½Ρ‹Ρ… Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ²

Frontend

  • Бтилизация: АутСнтичный Π΄ΠΈΠ·Π°ΠΉΠ½ эпохи 1912 Π³ΠΎΠ΄Π°
  • ΠžΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΠΈ:
    • ΠžΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ источников ΠΈΠ· RAG
    • Адаптивный Π΄ΠΈΠ·Π°ΠΉΠ½

πŸš€ Установка ΠΈ запуск

ВрСбования

  • Python 3.9+
  • OpenAI API Key
  • 2GB свободной памяти (для ChromaDB)

Π›ΠΎΠΊΠ°Π»ΡŒΠ½Π°Ρ установка

# ΠšΠ»ΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ рСпозитория
git clone https://github.com/spqr-86/titanic-booking-ai.git
cd titanic-booking-ai

# Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ окруТСния
python -m venv venv
source venv/bin/activate  # Для Windows: venv\Scripts\activate

# Установка зависимостСй
pip install -r backend/requirements.txt

# Настройка ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… окруТСния
cp .env.example .env
# Π”ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ ваш OPENAI_API_KEY Π² .env Ρ„Π°ΠΉΠ»

# Запуск backend
cd backend
uvicorn main:app --reload --port 8000

# Π’ Π½ΠΎΠ²ΠΎΠΌ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π΅ - запуск frontend
cd frontend
python -m http.server 3000

ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ окруТСния (.env)

OPENAI_API_KEY=your_api_key_here
USE_LANGGRAPH_ROUTER=True  # Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ LangGraph ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·Π°Ρ†ΠΈΡŽ
ENVIRONMENT=development     # ΠΈΠ»ΠΈ production
PORT=8000                  # ΠŸΠΎΡ€Ρ‚ для backend

πŸ“Š ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ

ΠœΠ΅Ρ‚Ρ€ΠΈΠΊΠΈ точности

ΠœΠ΅Ρ‚Ρ€ΠΈΠΊΠ° Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠœΠ΅Ρ‚ΠΎΠ΄ΠΎΠ»ΠΎΠ³ΠΈΡ
Π˜ΡΡ‚ΠΎΡ€ΠΈΡ‡Π΅ΡΠΊΠ°Ρ Ρ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ 87% ВСстированиС Π½Π° 60+ историчСских Ρ„Π°ΠΊΡ‚Π°Ρ…
ΠžΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ Π°Π½Π°Ρ…Ρ€ΠΎΠ½ΠΈΠ·ΠΌΠΎΠ² 92% 100+ тСстовых случаСв
ΠšΠΎΠ½ΡΠΈΡΡ‚Π΅Π½Ρ‚Π½ΠΎΡΡ‚ΡŒ пСрсонаТа 95% Анализ 200+ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²
Π‘ΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ ΠΎΡ‚Π²Π΅Ρ‚Π° (RAG) ~2.5 сСк Π‘Ρ€Π΅Π΄Π½Π΅Π΅ врСмя с поиском
Π‘ΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ ΠΎΡ‚Π²Π΅Ρ‚Π° (Simple) ~0.8 сСк Π‘Π΅Π· использования RAG

ОбъСм Π±Π°Π·Ρ‹ Π·Π½Π°Π½ΠΈΠΉ

πŸ“ data/knowledge/
β”œβ”€β”€ titanic_specifications.txt    (8.2 KB)
β”œβ”€β”€ cabin_details.txt            (7.5 KB)
β”œβ”€β”€ historical_facts.txt         (6.8 KB)
β”œβ”€β”€ anachronism_guard_prompt.txt (2.1 KB)
└── ...
Total: ~45 KB историчСских Π΄Π°Π½Π½Ρ‹Ρ…

πŸ”§ ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ

Feature Flags

# Π’ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅/Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ LangGraph ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ
USE_LANGGRAPH_ROUTER = os.getenv("USE_LANGGRAPH_ROUTER", "True")

# ΠŸΡ€ΠΈ False ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ прямой RAG Π±Π΅Π· ΠΈΠ½Ρ‚Π΅Π»Π»Π΅ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ

Настройка ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ

# LLM для классификации
llm_classifier = ChatOpenAI(
    model="gpt-4o-mini", 
    temperature=0
)

# LLM для Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΎΡ‚Π²Π΅Ρ‚ΠΎΠ²
llm_generation = ChatOpenAI(
    model="gpt-3.5-turbo", 
    temperature=0.8
)

πŸ§ͺ ВСстированиС

# Запуск тСстов
cd backend
pytest tests/

# ВСстированиС историчСской точности
pytest tests/historical_accuracy/

# ВСстированиС API endpoints
pytest tests/test_api.py

🚒 Roadmap

  • Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ streaming responses для Π±ΠΎΠ»Π΅Π΅ ΠΏΠ»Π°Π²Π½ΠΎΠ³ΠΎ UX
  • ΠŸΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ Π½Π° пСрсистСнтноС Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ сСссий (Redis) для ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΏΠΎΡ‚Π΅Ρ€ΠΈ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ² ΠΏΡ€ΠΈ пСрСзапускС
  • Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ multi-agent систСму для Ρ€Π°Π·Π½Ρ‹Ρ… Ρ€ΠΎΠ»Π΅ΠΉ экипаТа
  • Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΊΠ°ΡŽΡ‚ ΠΈ ΠΏΠ°Π»ΡƒΠ±
  • Π’Π½Π΅Π΄Ρ€ΠΈΡ‚ΡŒ ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ для популярных запросов
  • Π Π°ΡΡˆΠΈΡ€ΠΈΡ‚ΡŒ Π±Π°Π·Ρƒ Π·Π½Π°Π½ΠΈΠΉ историчСскими фотографиями
  • Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ голосовых сообщСний

πŸ“š Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊΠΈ

  • Encyclopedia Titanica

Built with ❀️ to preserve history through AI

About

A conversational AI agent simulating a 1912 Titanic booking clerk, maintaining historical accuracy (94% factual precision) and character consistency through advanced prompt engineering.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published