Travel Planner Agent — это интеллектуальный сервис для планирования путешествий.
Он объединяет поиск отелей, прогноз погоды и диалог с чат-агентом в одном API.
Проект реализован на FastAPI и интегрирует современные технологии RAG, LLM и LangGraph, чтобы выдавать полезные ответы в формате «одним кликом».
- 💬 Чат с агентом — задайте вопрос, и агент предложит отели и прогноз погоды.
- 🏨 Поиск отелей — подборка отелей по выбранному городу.
- ☀️ Прогноз погоды — до 7 дней вперёд.
- 🔎 RAG-пайплайн — векторный поиск по данным отелей.
- Python 3.12
- FastAPI — веб-фреймворк для API
- Pydantic v2 — валидация и схемы данных
- Uvicorn — ASGI сервер
- Requests + httpx — HTTP-запросы
- python-dotenv — переменные окружения
- pytest — тестирование
- LangChain (
core,community,text-splitters,openai,huggingface) - LangGraph — агентные графы
- Transformers — HuggingFace модели
- Sentence-Transformers (
all-MiniLM-L6-v2) — эмбеддинги - ChromaDB — векторное хранилище
- OpenRouter API (GPT-4o) — LLM для чата
TravelPlannerAgent/ │── app.py # Точка входа FastAPI │── docs/ # OpenAPI спецификация │── src/ # Исходный код │ ├── agents/ # Агент + инструменты (RAG, погода) │ ├── api/ # Роуты и схемы FastAPI │ ├── graph/ # LangGraph агент │ ├── retrieval/ # Векторный поиск │ ├── utils/ # Конфиги, загрузка данных, промпты │ └── logs/ # Логирование │── tests/ # Unit и integration тесты │── chroma_db/ # Векторная база (ChromaDB) в .gitignore │── models_cache/ # Кэш моделей (SentenceTransformers) в .gitignore │── requirements.txt # Зависимости │── LICENSE # Лицензия │── README.md # Документация проекта
- Клонировать репозиторий:
git clone https://github.com/zachhew/travel-planner-agent.git cd travel-planner-agent - Создать виртуальное окружение:
python3 -m venv .venv source .venv/bin/activate # Linux / Mac .venv\Scripts\activate # Windows
- Установить зависимости:
pip install -r requirements.txt
- Создать файл .env:
USER_CSV_FOLDER=./data/raw/hotels-2.csv EMBEDDING_DEVICE=mps # cuda/cpu EMBEDDING_MODEL_NAME=all-MiniLM-L6-v2 LLM_MODEL_NAME=openai/gpt-4o LLM_API_KEY=sk-xxxxxx LLM_BASE_URL=https://openrouter.ai/api/v1 LOG_LEVEL=INFO # Дополнительные параметры (по умолчанию) TEMPERATURE=0.2 MAX_TOKENS=200 CHUNK_SIZE=800 CHUNK_OVERLAP=50 RETRIEVER_K=5 PERSIST_DIRECTORY=./chroma_db CACHE_FOLDER=./models_cache LOG_FILE=app.log PROMPT_PATH=./src/utils/prompts.json
- Запуск сервера
uvicorn app:app --reload
После запуска Swagger-документация доступна по адресу:
👉 http://127.0.0.1:8000/docs
| Метод | Путь | Описание |
|---|---|---|
| POST | /chat |
Чат с агентом |
| POST | /hotels |
Поиск отелей |
| POST | /weather |
Прогноз погоды |
Подробности смотри в docs/docs.yaml
curl -X POST "http://127.0.0.1:8000/chat" \ -H "Content-Type: application/json" \ -d '{ "question": "Хочу слетать в Сочи на 3 дня" }'
{
"answer": "Прогноз погоды в Сочи на ближайшие три дня:\n
Дата | Tmin | Tmax | Осадки (мм)\n
2025年09月07日 | 18 | 25 | 0.0\n
2025年09月08日 | 19 | 26 | 0.1\n
2025年09月09日 | 20 | 27 | 0.0\n\n
Вот подборка отелей в Сочи:\n
- Hyatt Regency Sochi, *описание*\n
- Radisson Blu Resort & Congress Centre, *описание*\n
- Pullman Sochi Centre, *описание*"
}Запуск unit и integration тестов:
PYTHONPATH=./ pytest -v
Пример интеграционного теста (файл tests/integration/test_routes.py):
@pytest.mark.asyncio async def test_chat_endpoint(monkeypatch): async def fake_invoke(_): return {"recent_messages": [{"role": "assistant", "content": "Hello test!"}]} ...
MIT — свободно используйте и модифицируйте проект.