139 lines
5.2 KiB
Markdown
139 lines
5.2 KiB
Markdown
# Повторный экзамен: Исследовательский бриф (plan → steps → summary)
|
|
|
|
## 📖 Описание
|
|
|
|
`solution.py` реализует LangGraph‑агента, который по заданной теме генерирует **короткий исследовательский бриф** (½–1 страница).
|
|
Поток работы:
|
|
|
|
1. **Outline** – LLM создаёт план из 4–5 пунктов по теме.
|
|
2. **Research step** – по каждому пункту выполняется один запрос в веб‑поиск (Tavily) и формируется краткая заметка (5–8 предложений).
|
|
3. **Synthesize** – все заметки объединяются в связный бриф с заголовками.
|
|
|
|
Итоговый бриф сохраняется в поле `final_brief` и выводится в консоль.
|
|
|
|
> ⚠️ Для работы требуется ключ Tavily и доступ к OpenAI (или Ollama).
|
|
|
|
## 🛠️ Установка зависимостей
|
|
|
|
```bash
|
|
# Создайте виртуальное окружение (рекомендуется)
|
|
python -m venv .venv
|
|
source .venv/bin/activate # Windows: .venv\Scripts\activate
|
|
|
|
# Установите зависимости
|
|
pip install langgraph langchain-openai langchain-tavily tavily-python python-dotenv
|
|
```
|
|
|
|
## ⚙️ Конфигурация
|
|
|
|
Создайте файл `.env` в корне проекта и добавьте:
|
|
|
|
```dotenv
|
|
TAVILY_API_KEY=YOUR_TAVILY_KEY
|
|
OPENAI_API_KEY=YOUR_OPENAI_KEY # если используете OpenAI
|
|
# или
|
|
OLLAMA_BASE_URL=http://localhost:11434 # если используете Ollama
|
|
```
|
|
|
|
> **Важно**: ключи не должны попадать в репозиторий. Добавьте `.env` в `.gitignore`.
|
|
|
|
## ▶️ Запуск
|
|
|
|
```bash
|
|
python solution.py
|
|
```
|
|
|
|
После запуска скрипт запросит у вас тему исследования, затем последовательно выполнит все шаги и выведет финальный бриф.
|
|
|
|
### Запуск отдельных частей
|
|
|
|
Если вы хотите протестировать отдельный узел вручную, можно импортировать его из `solution.py` и вызвать напрямую:
|
|
|
|
```python
|
|
from solution import outline_node, research_step, synthesize, BriefState
|
|
|
|
state = BriefState(
|
|
topic="Artificial Intelligence in Healthcare",
|
|
outline=None,
|
|
step_index=0,
|
|
notes=[],
|
|
final_brief=None
|
|
)
|
|
|
|
# 1. Outline
|
|
state = outline_node(state)
|
|
print(state["outline"])
|
|
|
|
# 2. Research step (первый пункт)
|
|
state = research_step(state)
|
|
print(state["notes"][-1])
|
|
|
|
# 3. Synthesize
|
|
state = synthesize(state)
|
|
print(state["final_brief"])
|
|
```
|
|
|
|
## 📄 Пример использования
|
|
|
|
```bash
|
|
$ python solution.py
|
|
Введите тему исследования: Искусственный интеллект в здравоохранении
|
|
|
|
=== План исследования ===
|
|
1. История и развитие ИИ в медицине
|
|
2. Текущие применения: диагностика, лечение, управление данными
|
|
3. Этические и юридические вопросы
|
|
4. Будущие перспективы и вызовы
|
|
|
|
=== Шаг 1/4: История и развитие ИИ в медицине ===
|
|
Заметка: ИИ в медицине появился в 1950‑х годах, когда...
|
|
...
|
|
|
|
=== Финальный бриф ===
|
|
# Искусственный интеллект в здравоохранении
|
|
|
|
## 1. История и развитие ИИ в медицине
|
|
ИИ в медицине появился в 1950‑х годах, когда...
|
|
|
|
## 2. Текущие применения
|
|
...
|
|
|
|
## 3. Этические и юридические вопросы
|
|
...
|
|
|
|
## 4. Будущие перспективы и вызовы
|
|
...
|
|
```
|
|
|
|
> В реальном запуске каждая заметка будет содержать 5–8 предложений, а финальный бриф – около ½–1 страницы текста.
|
|
|
|
## 📦 Структура проекта
|
|
|
|
```
|
|
.
|
|
├── solution.py # Основной скрипт с реализацией LangGraph
|
|
├── .env # Переменные окружения (не коммитить)
|
|
├── README.md # Это файл
|
|
└── requirements.txt # (опционально) список зависимостей
|
|
```
|
|
|
|
## 🧪 Тестирование
|
|
|
|
Для быстрой проверки можно использовать `pytest`:
|
|
|
|
```bash
|
|
pip install pytest
|
|
pytest
|
|
```
|
|
|
|
> В проекте пока нет тестов, но вы можете добавить их, проверяя корректность выходных данных узлов.
|
|
|
|
## 📚 Полезные ссылки
|
|
|
|
- [LangGraph documentation](https://langgraph.org/)
|
|
- [LangChain Tavily integration](https://github.com/langchain-ai/langchain/tree/main/libs/langchain-tavily)
|
|
- [Tavily API docs](https://tavily.com/docs)
|
|
|
|
---
|
|
|
|
**Happy coding!** |