Репозиторий создан как финальный проект для курса на Stepik - LLM для Python-разработчиков: от RAG до агентов
AI-ассистент для автоматической генерации и семантического поиска документации API с использованием RAG (Retrieval-Augmented Generation) и CrewAI.
AI Docs Assistant — это веб-сервис на базе FastAPI, который позволяет:
- Генерировать документацию API автоматически с помощью AI-агентов (CrewAI)
- Искать существующую документацию с помощью семантического поиска (RAG)
- Валидировать сгенерированную документацию на соответствие строгому формату
Проект использует:
- Qdrant — векторная база данных для хранения эмбеддингов документации
- Ollama — локальная LLM для генерации текста и создания эмбеддингов
- CrewAI — фреймворк для создания AI-агентов с ролями и задачами
- LangChain — интеграция с векторными хранилищами и эмбеддингами
- 🤖 Автоматическая генерация документации через двухэтапный процесс (генерация + валидация)
- 🔍 Семантический поиск по существующей документации
- ✅ Проверка дубликатов — система предупреждает, если документ уже существует
- 📝 Автоматическое именование файлов на основе содержимого запроса
- 🏥 Расширенный health-check с проверкой всех зависимостей
- 🐳 Docker-поддержка для простого развёртывания
ai-docs-assistant/
├── app/
│ ├── __init__.py
│ ├── main.py # FastAPI приложение и эндпоинты
│ ├── agents.py # CrewAI агенты для генерации и валидации
│ ├── rag.py # RAG-функциональность (Qdrant, эмбеддинги)
│ ├── storage.py # Сохранение документов в файловую систему
│ ├── health.py # Health-check эндпоинты
│ ├── logger.py # Настройка логирования
│ ├── schemas.py # Pydantic схемы для API
│ └── settings.py # Конфигурация через переменные окружения
├── docs/ # Хранилище сгенерированной документации
├── logs/ # Логи приложения
├── tests/ # Тесты
├── Dockerfile
├── docker-compose.yml
├── requirements.txt
└── README.md
- Python 3.12+
- Docker и Docker Compose (для контейнеризации)
- Ollama с установленной моделью для LLM и эмбеддингов
git clone https://github.com/1337Tema/ai-docs-assistant.git
cd ai-docs-assistantpython -m venv .venv
.venv/Scripts/activate
pip install -r requirements.txtСоздайте файл .env в корне проекта:
# Qdrant настройки
QDRANT_HOST=qdrant
QDRANT_PORT=6333
QDRANT_COLLECTION_NAME=api_docs
# Ollama настройки
OLLAMA_HOST=localhost
OLLAMA_PORT=11434
OLLAMA_MODEL=ollama/my-api-docs # дообученная модель, которая использовалась на курсе
# Эмбеддинги
EMBEDDING_MODEL_NAME=nomic-embed-text # или другая модель для эмбеддингов
VECTOR_SIZE=768 # Размерность вектора эмбеддинговУбедитесь, что Ollama запущен и у вас установлены необходимые модели:
# Установка модели для LLM
ollama pull my-api-docs
# Установка модели для эмбеддингов
ollama pull nomic-embed-textdocker-compose up --buildСервис будет доступен по адресу: http://localhost:8000
Если вы запускаете локально (без Docker), убедитесь, что Qdrant запущен:
# Запуск Qdrant через Docker
docker run -p 6333:6333 qdrant/qdrant
# В другом терминале запустите приложение
uvicorn app.main:app --reloadПроверка состояния сервиса и всех зависимостей.
Ответ:
{
"status": "healthy",
"checks": {
"qdrant": true,
"ollama": true,
"docs": true,
"rag_canary": true
}
}Семантический поиск по существующей документации.
Запрос:
{
"query": "эндпоинт для получения профиля пользователя"
}Ответ (найдено):
{
"found": true,
"content": "### GET /api/v1/profile\n**Описание**: ..."
}Ответ (не найдено):
{
"found": false,
"message": "Документация не найдена. Используйте /generate для создания новой."
}Генерация новой документации API.
Запрос:
{
"query": "создать эндпоинт для получения списка задач"
}Ответ (успех):
{
"success": true,
"message": "Документ успешно создан и сохранён.",
"content": "### GET /api/v1/tasks\n...",
"file_path": "docs/get_task.md"
}Ответ (ошибка):
{
"success": false,
"message": "Документ уже существует. Используйте /search."
}Все документы генерируются в строгом формате:
### МЕТОД /путь
**Описание**: Описание эндпоинта
**Параметры**: Параметры запроса (если есть)
**Ответ**:
```json
{
"example": "response"
}- Проверка дубликатов: Система проверяет, не существует ли уже похожая документация
- Генерация: AI-агент (API-документатор) создаёт документацию на основе запроса
- Валидация: Второй AI-агент (валидатор) проверяет соответствие формату
- Сохранение: Валидный документ сохраняется в
docs/с автоматическим именованием - Обновление RAG: Векторная база обновляется новым документом
- Запрос преобразуется в эмбеддинг через Ollama
- Выполняется поиск похожих документов в Qdrant
- Возвращается наиболее релевантный документ (если score > threshold)
Логи сохраняются в директории logs/:
app.log— все логи приложенияerrors.log— только ошибки
pytest tests/Для улучшения автоматического именования файлов отредактируйте словари в app/storage.py:
ACTION_KEYWORDS = {
'get': [...],
'create': [...],
# добавьте новые действия
}
ENTITY_KEYWORDS = {
'user': [...],
'task': [...],
# добавьте новые сущности
}Параметры агентов (роли, цели, backstory) можно изменить в app/agents.py.
Параметры поиска (threshold, количество результатов) настраиваются в app/rag.py.
- Убедитесь, что Ollama запущен:
ollama serve - Проверьте, что модели установлены:
ollama list - Проверьте настройки
OLLAMA_HOSTиOLLAMA_PORTв.env
- Проверьте, что контейнер Qdrant запущен:
docker ps - Проверьте настройки
QDRANT_HOSTиQDRANT_PORTв.env
- Убедитесь, что в
docs/есть.mdфайлы - Проверьте, что RAG инициализирован (см. логи при старте)
- Попробуйте снизить
similarity_thresholdв запросе