Экзамен: Планирующий агент: README.md
This commit is contained in:
@@ -1,23 +1,19 @@
|
|||||||
# Планирующий агент – экзаменационный проект
|
# Планирующий агент – экзаменационный проект
|
||||||
|
|
||||||
## Описание проекта
|
## Описание проекта
|
||||||
Проект реализует **планировочный агент** на основе LLM (Large Language Model) из библиотеки `langchain`.
|
В этом репозитории реализован **планировщик задач** на основе LLM (Large Language Model).
|
||||||
Агент принимает список целей и генерирует последовательность действий, которые необходимо выполнить для их достижения.
|
Агент принимает целевое задание и генерирует список шагов, которые необходимо выполнить для достижения цели.
|
||||||
|
|
||||||
> ⚠️ Весь код находится в одном файле `solution.py`.
|
Ключевые технологии:
|
||||||
> Для работы требуется ключ OpenAI – переменная окружения `OPENAI_API_KEY`.
|
- `langgraph` – библиотека для построения графов состояний с использованием LLM.
|
||||||
|
- `langchain-openai` – обёртка над OpenAI API (можно заменить на `langchain-ollama`, если хотите использовать локальный LLM).
|
||||||
---
|
|
||||||
|
|
||||||
## Структура проекта
|
## Структура проекта
|
||||||
```
|
```
|
||||||
.
|
├── solution.py # Основной скрипт, реализующий планировщик
|
||||||
├── solution.py # Основной скрипт с реализацией агента
|
└── README.md # Текущий файл
|
||||||
└── README.md # Это файл
|
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Установка зависимостей
|
## Установка зависимостей
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
@@ -25,111 +21,65 @@
|
|||||||
python -m venv .venv
|
python -m venv .venv
|
||||||
source .venv/bin/activate # Windows: .venv\Scripts\activate
|
source .venv/bin/activate # Windows: .venv\Scripts\activate
|
||||||
|
|
||||||
# Установите зависимости из requirements.txt (или вручную)
|
# Установите зависимости из requirements.txt (если есть) или вручную:
|
||||||
pip install langchain fastapi pydantic rich openai
|
pip install langgraph langchain-openai openai # для OpenAI API
|
||||||
```
|
```
|
||||||
|
|
||||||
> **Важно**
|
> **Важно**
|
||||||
> `langchain` автоматически установит `openai`, но иногда требуется явно установить пакет `openai`.
|
> Для работы с `ChatOpenAI` необходимо иметь переменную окружения `OPENAI_API_KEY`.
|
||||||
|
> ```bash
|
||||||
|
> export OPENAI_API_KEY="sk-..."
|
||||||
|
> ```
|
||||||
|
|
||||||
---
|
Если вы хотите использовать Ollama вместо OpenAI, замените импорт и вызов LLM:
|
||||||
|
|
||||||
## Настройка переменной окружения
|
```python
|
||||||
|
from langchain_ollama import ChatOllama
|
||||||
|
|
||||||
```bash
|
# ...
|
||||||
export OPENAI_API_KEY="sk-XXXXXXXXXXXXXXXXXXXX"
|
llm = ChatOllama(model="llama3.1", temperature=0.2)
|
||||||
# Windows:
|
|
||||||
set OPENAI_API_KEY=sk-XXXXXXXXXXXXXXXXXXXX
|
|
||||||
```
|
```
|
||||||
|
|
||||||
Если ключ не задан, скрипт завершится с ошибкой.
|
## Запуск скрипта
|
||||||
|
|
||||||
---
|
`solution.py` – это самодостаточный скрипт, который можно запустить напрямую:
|
||||||
|
|
||||||
## Запуск
|
|
||||||
|
|
||||||
### 1. Простой запуск из командной строки
|
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
python solution.py
|
python solution.py
|
||||||
```
|
```
|
||||||
|
|
||||||
Скрипт запустит интерактивный режим:
|
При запуске будет предложено ввести цель (goal). После ввода агент сгенерирует список шагов и выведет их на экран.
|
||||||
пользователь вводит список целей (через запятую), после чего агент выводит план действий.
|
|
||||||
|
|
||||||
> **Пример**
|
### Пример запуска
|
||||||
> ```
|
|
||||||
> Введите цели, разделённые запятыми:
|
|
||||||
> Купить хлеб, купить молоко
|
|
||||||
> План действий:
|
|
||||||
> 1. Посетить ближайший супермаркет.
|
|
||||||
> 2. Составить список необходимых продуктов: хлеб, молоко.
|
|
||||||
> 3. Проверить наличие скидок на продукты.
|
|
||||||
> ...
|
|
||||||
> ```
|
|
||||||
|
|
||||||
### 2. Использование как модуля
|
|
||||||
|
|
||||||
```python
|
|
||||||
from solution import PlanningAgent
|
|
||||||
|
|
||||||
agent = PlanningAgent()
|
|
||||||
goals = ["построить дом", "обучиться Python"]
|
|
||||||
plan = agent.generate_plan(goals)
|
|
||||||
print(plan)
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Пример использования в коде
|
|
||||||
|
|
||||||
```python
|
|
||||||
# example.py
|
|
||||||
from solution import PlanningAgent
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
agent = PlanningAgent()
|
|
||||||
goals = ["построить дом", "обучиться Python"]
|
|
||||||
plan_text = agent.generate_plan(goals)
|
|
||||||
print("Сгенерированный план:")
|
|
||||||
print(plan_text)
|
|
||||||
```
|
|
||||||
|
|
||||||
Запуск:
|
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
python example.py
|
$ python solution.py
|
||||||
|
Введите цель: Создать веб‑страницу для портфолио разработчика.
|
||||||
|
Генерация плана...
|
||||||
|
Шаги:
|
||||||
|
1. Составить структуру HTML (header, main, footer).
|
||||||
|
2. Подобрать цветовую схему и шрифты.
|
||||||
|
3. Реализовать адаптивный дизайн с CSS Grid/Flexbox.
|
||||||
|
4. Добавить интерактивные элементы на JavaScript.
|
||||||
|
5. Оптимизировать загрузку ресурсов и проверить SEO.
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
## Как использовать в другом коде
|
||||||
|
|
||||||
## Что делает класс `PlanningAgent`
|
|
||||||
|
|
||||||
| Метод | Описание |
|
|
||||||
|-------|----------|
|
|
||||||
| `__init__(self, model_name="gpt-3.5-turbo")` | Инициализация LLM и шаблона Prompt. |
|
|
||||||
| `generate_plan(self, goals: List[str]) -> str` | Принимает список целей, формирует запрос к модели и возвращает текст плана действий. |
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Тесты
|
|
||||||
|
|
||||||
> В проекте нет автоматических тестов – это учебный скрипт.
|
|
||||||
> Для проверки можно написать простые unit‑тесты, например:
|
|
||||||
|
|
||||||
```python
|
```python
|
||||||
def test_generate_plan():
|
from solution import plan_steps, PlannerState
|
||||||
agent = PlanningAgent()
|
|
||||||
plan = agent.generate_plan(["построить дом"])
|
state = {"goal": "Написать научную статью по машинному обучению"}
|
||||||
assert isinstance(plan, str)
|
new_state = plan_steps(state)
|
||||||
assert "дом" in plan.lower()
|
print(new_state["steps"])
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
## Возможные улучшения
|
||||||
|
|
||||||
|
- Добавить сохранение истории планов в файл.
|
||||||
|
- Интегрировать с `langgraph` для более сложных цепочек действий (например, проверка корректности шагов).
|
||||||
|
- Подключить к UI (Streamlit/Gradio) для интерактивного взаимодействия.
|
||||||
|
|
||||||
## Лицензия
|
## Лицензия
|
||||||
|
|
||||||
MIT © 2026.
|
MIT © 2026
|
||||||
(Добавьте свой собственный текст лицензии при необходимости.)
|
|
||||||
|
|
||||||
---
|
|
||||||
Reference in New Issue
Block a user