Полнофункциональная система RAG (Retrieval-Augmented Generation) для русскоязычных текстов из Википедии с использованием современных технологий машинного обучения.
git clone <repository-url>
cd rag-system
# Создайте .env файл с вашим OpenAI API ключом
echo "OPENAI_API_KEY=your_openai_api_key_here" > .env
echo "SEARCH_DB=chroma" >> .env
# Запуск всех сервисов
docker compose up -d
# Инициализация базы данных (если не выполнена)
python scripts/create_chroma_db.py
# Проверка статуса сервисов
docker compose ps
# Тест API
curl -X POST "http://localhost:8081/invoke" \
-H "Content-Type: application/json" \
-d '{"message": "Расскажи о истории России"}'
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ Streamlit │ │ FastAPI │ │ PostgreSQL │
│ Frontend │◄──►│ Agent Service │◄──►│ Database │
│ Port: 8502 │ │ Port: 8081 │ │ Port: 5440 │
└─────────────────┘ └─────────────────┘ └─────────────────┘
│
▼
┌─────────────────┐ ┌─────────────────┐
│ ChromaDB │ │ Phoenix │
│ Vector Store │ │ Monitoring │
│ │ │ Port: 8881 │
└─────────────────┘ └─────────────────┘
src/agents/enhanced_retriever.py)Продвинутая система поиска с несколькими уровнями обработки:
# Основные параметры
chunk_size = 800 # Размер текстовых фрагментов
chunk_overlap = 400 # Перекрытие между фрагментами
base_k = 10 # Количество кандидатов для поиска
min_score_threshold = 0.5 # Минимальный порог релевантности
deepvk/USER-base (оптимизирована для русского языка)ru_rag_collectionsrc/agents/rag_assistant.py)LangGraph-основанный агент с возможностями:
src/agents/tools.py)Специализированный инструмент для поиска в базе знаний:
def database_search_func(query: str) -> str:
"""Поиск информации в базе знаний на русском языке с улучшенным ранжированием."""
retriever = load_enhanced_retriever()
documents = retriever.retrieve(query, k=5)
return format_contexts(documents)
# Обработка текстов
RecursiveCharacterTextSplitter(
chunk_size=800,
chunk_overlap=400,
separators=["\n\n", "\n", ". ", "! ", "? ", "; ", ", "]
)
# Генерация эмбеддингов
HuggingFaceEmbeddings(
model_name="deepvk/USER-base",
model_kwargs={'device': 'cpu'},
encode_kwargs={'normalize_embeddings': True}
)
/invokeОднократный запрос к RAG системе:
{
"message": "Расскажи о истории России",
"model": "gpt-4o-2024-08-06",
"thread_id": "optional-thread-id"
}
/streamПотоковый запрос с получением ответа в реальном времени:
{
"message": "Что такое машинное обучение?",
"stream_tokens": true
}
/infoМетаданные сервиса:
{
"agents": ["rag_assistant"],
"models": ["gpt-4o-2024-08-06", "gpt-3.5-turbo"],
"default_agent": "rag_assistant",
"default_model": "gpt-4o-2024-08-06"
}
/historyПолучение истории разговора:
{
"thread_id": "conversation-id"
}
/healthПроверка состояния сервиса:
{
"status": "ok"
}
# .env file
OPENAI_API_KEY=your_openai_api_key_here
SEARCH_DB=chroma
MODE=development
DEV_MODE=true
POSTGRES_HOST=bread-postgres
POSTGRES_PORT=5432
POSTGRES_USER=postgres
POSTGRES_PASSWORD=postgres
POSTGRES_DB=agent_service
PHOENIX_ENABLED=true
OTEL_EXPORTER_OTLP_ENDPOINT=http://bread-phoenix:4317
OTEL_SERVICE_NAME=bread-agent-service
# Установка зависимостей
pip install -r requirements.txt
# Локальный запуск сервиса
python src/run_service.py
# Локальный запуск Streamlit
streamlit run src/streamlit_app.py
# Тестирование RAG функциональности
python -c "
from src.agents.enhanced_retriever import EnhancedRetriever
retriever = EnhancedRetriever('./data/chroma_db', 'ru_rag_collection')
results = retriever.retrieve('история России', k=3)
print(f'Found {len(results)} results')
"
# Просмотр логов сервисов
docker compose logs -f bread-service
docker compose logs -f bread-streamlit
# Мониторинг базы данных
docker compose logs -f bread-postgres
Полнофункциональная система RAG (Retrieval-Augmented Generation) для русскоязычных текстов из Википедии с использованием современных технологий машинного обучения.
git clone <repository-url>
cd rag-system
# Создайте .env файл с вашим OpenAI API ключом
echo "OPENAI_API_KEY=your_openai_api_key_here" > .env
echo "SEARCH_DB=chroma" >> .env
# Запуск всех сервисов
docker compose up -d
# Инициализация базы данных (если не выполнена)
python scripts/create_chroma_db.py
# Проверка статуса сервисов
docker compose ps
# Тест API
curl -X POST "http://localhost:8081/invoke" \
-H "Content-Type: application/json" \
-d '{"message": "Расскажи о истории России"}'
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ Streamlit │ │ FastAPI │ │ PostgreSQL │
│ Frontend │◄──►│ Agent Service │◄──►│ Database │
│ Port: 8502 │ │ Port: 8081 │ │ Port: 5440 │
└─────────────────┘ └─────────────────┘ └─────────────────┘
│
▼
┌─────────────────┐ ┌─────────────────┐
│ ChromaDB │ │ Phoenix │
│ Vector Store │ │ Monitoring │
│ │ │ Port: 8881 │
└─────────────────┘ └─────────────────┘
src/agents/enhanced_retriever.py)Продвинутая система поиска с несколькими уровнями обработки:
# Основные параметры
chunk_size = 800 # Размер текстовых фрагментов
chunk_overlap = 400 # Перекрытие между фрагментами
base_k = 10 # Количество кандидатов для поиска
min_score_threshold = 0.5 # Минимальный порог релевантности
deepvk/USER-base (оптимизирована для русского языка)ru_rag_collectionsrc/agents/rag_assistant.py)LangGraph-основанный агент с возможностями:
src/agents/tools.py)Специализированный инструмент для поиска в базе знаний:
def database_search_func(query: str) -> str:
"""Поиск информации в базе знаний на русском языке с улучшенным ранжированием."""
retriever = load_enhanced_retriever()
documents = retriever.retrieve(query, k=5)
return format_contexts(documents)
# Обработка текстов
RecursiveCharacterTextSplitter(
chunk_size=800,
chunk_overlap=400,
separators=["\n\n", "\n", ". ", "! ", "? ", "; ", ", "]
)
# Генерация эмбеддингов
HuggingFaceEmbeddings(
model_name="deepvk/USER-base",
model_kwargs={'device': 'cpu'},
encode_kwargs={'normalize_embeddings': True}
)
/invokeОднократный запрос к RAG системе:
{
"message": "Расскажи о истории России",
"model": "gpt-4o-2024-08-06",
"thread_id": "optional-thread-id"
}
/streamПотоковый запрос с получением ответа в реальном времени:
{
"message": "Что такое машинное обучение?",
"stream_tokens": true
}
/infoМетаданные сервиса:
{
"agents": ["rag_assistant"],
"models": ["gpt-4o-2024-08-06", "gpt-3.5-turbo"],
"default_agent": "rag_assistant",
"default_model": "gpt-4o-2024-08-06"
}
/historyПолучение истории разговора:
{
"thread_id": "conversation-id"
}
/healthПроверка состояния сервиса:
{
"status": "ok"
}
# .env file
OPENAI_API_KEY=your_openai_api_key_here
SEARCH_DB=chroma
MODE=development
DEV_MODE=true
POSTGRES_HOST=bread-postgres
POSTGRES_PORT=5432
POSTGRES_USER=postgres
POSTGRES_PASSWORD=postgres
POSTGRES_DB=agent_service
PHOENIX_ENABLED=true
OTEL_EXPORTER_OTLP_ENDPOINT=http://bread-phoenix:4317
OTEL_SERVICE_NAME=bread-agent-service
# Установка зависимостей
pip install -r requirements.txt
# Локальный запуск сервиса
python src/run_service.py
# Локальный запуск Streamlit
streamlit run src/streamlit_app.py
# Тестирование RAG функциональности
python -c "
from src.agents.enhanced_retriever import EnhancedRetriever
retriever = EnhancedRetriever('./data/chroma_db', 'ru_rag_collection')
results = retriever.retrieve('история России', k=3)
print(f'Found {len(results)} results')
"
# Просмотр логов сервисов
docker compose logs -f bread-service
docker compose logs -f bread-streamlit
# Мониторинг базы данных
docker compose logs -f bread-postgres