135 lines
4.1 KiB
Markdown
135 lines
4.1 KiB
Markdown
# Планирующий агент – экзаменационный проект
|
|
|
|
## Описание проекта
|
|
Проект реализует **планировочный агент** на основе LLM (Large Language Model) из библиотеки `langchain`.
|
|
Агент принимает список целей и генерирует последовательность действий, которые необходимо выполнить для их достижения.
|
|
|
|
> ⚠️ Весь код находится в одном файле `solution.py`.
|
|
> Для работы требуется ключ OpenAI – переменная окружения `OPENAI_API_KEY`.
|
|
|
|
---
|
|
|
|
## Структура проекта
|
|
```
|
|
.
|
|
├── solution.py # Основной скрипт с реализацией агента
|
|
└── README.md # Это файл
|
|
```
|
|
|
|
---
|
|
|
|
## Установка зависимостей
|
|
|
|
```bash
|
|
# Создайте виртуальное окружение (рекомендуется)
|
|
python -m venv .venv
|
|
source .venv/bin/activate # Windows: .venv\Scripts\activate
|
|
|
|
# Установите зависимости из requirements.txt (или вручную)
|
|
pip install langchain fastapi pydantic rich openai
|
|
```
|
|
|
|
> **Важно**
|
|
> `langchain` автоматически установит `openai`, но иногда требуется явно установить пакет `openai`.
|
|
|
|
---
|
|
|
|
## Настройка переменной окружения
|
|
|
|
```bash
|
|
export OPENAI_API_KEY="sk-XXXXXXXXXXXXXXXXXXXX"
|
|
# Windows:
|
|
set OPENAI_API_KEY=sk-XXXXXXXXXXXXXXXXXXXX
|
|
```
|
|
|
|
Если ключ не задан, скрипт завершится с ошибкой.
|
|
|
|
---
|
|
|
|
## Запуск
|
|
|
|
### 1. Простой запуск из командной строки
|
|
|
|
```bash
|
|
python solution.py
|
|
```
|
|
|
|
Скрипт запустит интерактивный режим:
|
|
пользователь вводит список целей (через запятую), после чего агент выводит план действий.
|
|
|
|
> **Пример**
|
|
> ```
|
|
> Введите цели, разделённые запятыми:
|
|
> Купить хлеб, купить молоко
|
|
> План действий:
|
|
> 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
|
|
python example.py
|
|
```
|
|
|
|
---
|
|
|
|
## Что делает класс `PlanningAgent`
|
|
|
|
| Метод | Описание |
|
|
|-------|----------|
|
|
| `__init__(self, model_name="gpt-3.5-turbo")` | Инициализация LLM и шаблона Prompt. |
|
|
| `generate_plan(self, goals: List[str]) -> str` | Принимает список целей, формирует запрос к модели и возвращает текст плана действий. |
|
|
|
|
---
|
|
|
|
## Тесты
|
|
|
|
> В проекте нет автоматических тестов – это учебный скрипт.
|
|
> Для проверки можно написать простые unit‑тесты, например:
|
|
|
|
```python
|
|
def test_generate_plan():
|
|
agent = PlanningAgent()
|
|
plan = agent.generate_plan(["построить дом"])
|
|
assert isinstance(plan, str)
|
|
assert "дом" in plan.lower()
|
|
```
|
|
|
|
---
|
|
|
|
## Лицензия
|
|
|
|
MIT © 2026.
|
|
(Добавьте свой собственный текст лицензии при необходимости.)
|
|
|
|
--- |