DocuWeave — это современное веб-приложение для работы с документами, использующее RAG (Retrieval-Augmented Generation) и интеллектуальных агентов на основе LangGraph. Позволяет загружать, анализировать и взаимодействовать с документами через естественный язык.
- 📄 Умная обработка документов: Поддержка PDF, DOCX, TXT с автоматическим извлечением текста и чанкированием
- 🤖 Интеллектуальный агент: Агент на LangGraph с инструментами для анализа, суммаризации и ответов на вопросы
- 🔍 Векторный поиск: Интеграция с ChromaDB для семантического поиска по документам
- 💬 Интерактивный чат: Чат-интерфейс с потоковыми ответами и историей диалогов
- 🚀 Готовое развертывание: Полная Docker Compose конфигурация для быстрого запуска
- 🔐 Безопасность: JWT аутентификация, ролевая модель, защита данных
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ Frontend │ │ Backend │ │ Базы данных │
│ (React) │◄──►│ (FastAPI) │◄──►│ PostgreSQL │
│ TypeScript │ │ Python │ │ ChromaDB │
└─────────────────┘ └─────────────────┘ └─────────────────┘
│ │ │
│ │ │
▼ ▼ ▼
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ Пользователь │ │ AI Сервисы │ │ Хранилище │
│ Интерфейс │ │ Ollama │ │ Документов │
└─────────────────┘ │ LangChain │ └─────────────────┘
│ LangGraph │
└─────────────────┘
- RAG система: Модульная архитектура с разделением на Indexer, Retriever, Generator, Orchestrator
- Агентная система: Интеллектуальный агент на LangGraph с инструментами для анализа документов
- API слой: RESTful API с эндпоинтами для документов, чатов, проектов и агента
- Инфраструктура: Docker, PostgreSQL, ChromaDB, Ollama
- UnifiedOllamaClient: Единый клиент для работы с моделями Ollama
- AgentOrchestrator: Координатор работы агента с интеграцией RAG
- RAGOrchestrator: Управление полным RAG пайплайном
- DocumentProcessor: Обработка и чанкирование документов
- Docker и Docker Compose
- 16+ GB RAM (рекомендуется для работы моделей Ollama)
- Git
# 1. Клонирование репозитория
git clone <repository-url>
cd DocuWeave
# 2. Настройка переменных окружения
cp .env.example .env
# Отредактируйте .env при необходимости
# 3. Запуск всех сервисов
docker-compose up -d
# 4. Проверка работоспособности
docker-compose psПосле запуска откройте в браузере:
- 📚 Backend API документация: http://localhost:8000/docs (Swagger UI)
- 🎨 Frontend приложение: http://localhost:5173
- 🔍 ChromaDB UI: http://localhost:8001
- 🤖 Ollama API: http://localhost:11434
# Миграции выполняются автоматически при первом запуске
# Для ручного запуска:
docker-compose run migrations- Backend документация - Подробное описание API, архитектуры и разработки бэкенда
- Frontend документация - Руководство по фронтенду, компонентам и UI
- Docker Compose - Конфигурация всех сервисов
- Переменные окружения - Шаблон для настройки окружения
| Сервис | Порт | Назначение | Особенности |
|---|---|---|---|
| backend | 8000 | FastAPI приложение | Автоматическая перезагрузка, health checks |
| frontend | 5173 | React приложение | Hot reload, оптимизированная сборка |
| db | 5432 | PostgreSQL | Персистентное хранилище, health checks |
| chromadb | 8001 | ChromaDB | Векторная база для эмбеддингов |
| ollama | 11434 | Ollama LLM | Локальные LLM модели |
| migrations | - | Alembic миграции | Автоматическое применение миграций |
POST /agent/query- Обработка запроса через интеллектуального агентаPOST /agent/query/rag-fallback- Обработка с fallback на RAGPOST /agent/analyze-document- Анализ документа инструментами агентаPOST /agent/batch-process- Пакетная обработка запросовGET /agent/info- Информация о конфигурации агентаGET /agent/health- Проверка здоровья агента
POST /documents/upload- Загрузка документа (PDF, DOCX, TXT)DELETE /documents/{document_id}- Удаление документаGET /documents- Список документов проектаGET /documents/{document_id}- Получение метаданных документа
POST /chat/sessions- Создание сессии чатаGET /chat/sessions- Список сессий пользователяPOST /chat/{chat_id}/messages- Отправка сообщенияGET /chat/{chat_id}/messages/stream- Потоковое получение ответаGET /chat/{chat_id}/messages- История сообщений
GET /projects- Список проектов пользователяPOST /projects- Создание проектаPATCH /projects/{project_id}- Обновление настроек проектаDELETE /projects/{project_id}- Удаление проекта
POST /auth/register- Регистрация пользователяPOST /auth/login- Вход и получение JWT токенаPOST /auth/refresh- Обновление токенаGET /auth/me- Информация о текущем пользователе
Агент построен на LangGraph и состоит из следующих узлов:
graph LR
A[Входной запрос] --> B[classify_query]
B --> C{Тип запроса}
C -->|Поиск| D[rag_search]
C -->|Анализ| E[document_analysis]
C -->|Суммаризация| F[summarize]
D --> G[call_tools]
E --> G
F --> G
G --> H[generate_response]
H --> I[finalize]
I --> J[Ответ пользователю]
- rag_search - Поиск релевантных документов в векторной базе
- document_analysis - Анализ документа (суммаризация, ключевые точки и т.д.)
- summarize - Суммаризация текста
- extract_entities - Извлечение сущностей из текста
- answer_with_context - Ответ на вопрос на основе контекста
- classify_query - Классификация запроса пользователя
# Пример запроса к агенту через API
import requests
response = requests.post(
"http://localhost:8000/agent/query",
json={
"query": "Какие основные выводы из отчета по продажам?",
"project_id": "project_123",
"stream": False
},
headers={"Authorization": "Bearer <token>"}
)
print(response.json())# База данных
POSTGRES_DB=Mydatabase123
POSTGRES_HOST=db
POSTGRES_PASSWORD=Mypass123
POSTGRES_USER=Myuser123
# Ollama
OLLAMA_HOST=http://ollama:11434
OLLAMA_EMBEDDING_MODEL=nomic-embed-text
OLLAMA_LLM_MODEL=qwen2.5:7b
# ChromaDB
CHROMA_HOST=chromadb
CHROMA_PORT=8000
# Агент
AGENT_ENABLED=true
AGENT_MAX_STEPS=10
# JWT
JWT_SECRET_KEY=your-secret-key-change-in-production
JWT_ALGORITHM=HS256
ACCESS_TOKEN_EXPIRE_MINUTES=30
# Логирование
LOG_LEVEL=INFOПо умолчанию используются:
- Модель эмбеддингов:
nomic-embed-text(1536 размерность) - LLM модель:
qwen2.5:7b(7 миллиардов параметров)
Для изменения моделей:
- Отредактируйте
OLLAMA_EMBEDDING_MODELиOLLAMA_LLM_MODELв.env - Перезапустите сервис Ollama:
docker-compose restart ollama - Убедитесь, что модель загружена:
docker-compose exec ollama ollama pull <model-name>
curl -X POST "http://localhost:8000/documents/upload" \
-H "Authorization: Bearer <token>" \
-F "file=@/path/to/document.pdf" \
-F "project_id=project_123"curl -X POST "http://localhost:8000/agent/query" \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{
"query": "Обобщите основные идеи из загруженных документов",
"project_id": "project_123"
}'curl -X POST "http://localhost:8000/chat/sessions" \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{
"project_id": "project_123",
"title": "Обсуждение отчетов"
}'cd backend
uv sync # Установка зависимостей
cp .env.example .env # Настройка окружения
alembic upgrade head # Применение миграций
uvicorn src.main:app --reload # Запуск сервераcd frontend
npm install # Установка зависимостей
cp .env.example .env.local # Настройка окружения
npm run dev # Запуск сервера разработки# Backend тесты
cd backend
pytest tests/
# Frontend тесты
cd frontend
npm test# Создание миграции
docker-compose run --rm migrations alembic revision --autogenerate -m "описание изменений"
# Применение миграций
docker-compose up migrations
# Откат последней миграции
docker-compose run --rm migrations alembic downgrade -1
# Просмотр истории
docker-compose run --rm migrations alembic history- Backend: Логи в stdout с уровнем
LOG_LEVELиз .env - Ollama: Логи доступны через
docker-compose logs ollama - Базы данных: Логи доступны через соответствующие контейнеры
- Backend:
GET /health - Agent:
GET /agent/health - ChromaDB: Автоматическая проверка в docker-compose
- PostgreSQL: Автоматическая проверка в docker-compose
Каждый вызов агента записывается в GraphTrace с:
- Входными параметрами
- Выполненными шагами
- Использованными инструментами
- Финальным ответом
- Временными метками
Если Ollama не хватает памяти:
- Увеличьте лимиты памяти в
docker-compose.yml(разделdeploy.resources) - Используйте меньшие модели (например,
llama3.2:3bвместоqwen2.5:7b) - Уменьшите
chunk_sizeв настройках RAG
Если модели не загружаются:
- Проверьте доступность Ollama:
curl http://localhost:11434/api/tags - Загрузите модели вручную:
docker-compose exec ollama ollama pull qwen2.5:7b - Проверьте логи:
docker-compose logs ollama
- Проверьте, что все сервисы запущены:
docker-compose ps - Проверьте логи миграций:
docker-compose logs migrations - Убедитесь, что переменные окружения корректны
| Ошибка | Причина | Решение |
|---|---|---|
Connection refused to db:5432 |
PostgreSQL не запущен | docker-compose up -d db |
Model not found |
Модель не загружена в Ollama | docker-compose exec ollama ollama pull <model> |
JWT token expired |
Токен истек | Обновите токен через /auth/refresh |
Document processing failed |
Неподдерживаемый формат | Проверьте формат файла (PDF, DOCX, TXT) |
- Поддержка большего количества форматов документов (PPTX, XLSX)
- Мультиязычность интерфейса и обработки
- Расширенная аналитика использования
- Интеграция с облачными хранилищами (Google Drive, Dropbox)
- API для сторонних интеграций
- Расширенная система плагинов для агента
- Мобильное приложение
- Кэширование эмбеддингов
- Пакетная обработка документов
- Оптимизация запросов к векторной базе
- Поддержка GPU для инференса
Мы приветствуем вклад в развитие DocuWeave! Пожалуйста, ознакомьтесь с руководством по вкладу перед началом.
- Создайте issue с описанием задачи
- Создайте feature branch
- Реализуйте изменения
- Напишите тесты
- Создайте pull request
- Пройдите code review
- Backend: PEP 8, type hints, docstrings
- Frontend: ESLint, Prettier, TypeScript strict mode
- Коммиты: Conventional Commits
- Тесты: Покрытие ключевой функциональности
- FastAPI документация
- React документация
- LangChain документация
- LangGraph документация
- Ollama документация
- ChromaDB документация
- Docker документация
Проект распространяется под лицензией MIT. Подробнее см. в файле LICENSE.
Примечание: Этот README обновляется по мере развития проекта. Для получения самой актуальной информации обратитесь к документации в соответствующих директориях или создайте issue.