Files
task-6a1864fd-ekzamen-plani…/solution.py
T

81 lines
3.5 KiB
Python

import os
from typing import List, Dict, Any
# Библиотеки, которые должны быть установлены в окружении:
# - langchain
# - fastapi (если понадобится)
# - pydantic
# - rich (для красивого вывода)
try:
from langchain.llms import OpenAI
from langchain.prompts import PromptTemplate
from langchain.chains import LLMChain
except ImportError as exc:
raise RuntimeError(
"Не удалось импортировать необходимые библиотеки. "
"Убедитесь, что установлены langchain и его зависимости."
) from exc
# Конфигурация модели (можно заменить на другую)
OPENAI_API_KEY = os.getenv("OPENAI_API_KEY")
if not OPENAI_API_KEY:
raise RuntimeError(
"Переменная окружения OPENAI_API_KEY не задана. "
"Пожалуйста, установите ключ API для OpenAI."
)
# Основной класс планирующего агента
class PlanningAgent:
"""
Простая реализация планировщика задач на основе LLM.
Принимает список целей и генерирует последовательность действий,
которые необходимо выполнить для достижения каждой цели.
"""
def __init__(self, llm_model: str = "gpt-3.5-turbo"):
self.llm = OpenAI(model=llm_model, temperature=0.7)
# Шаблон запроса к LLM
self.prompt_template = PromptTemplate(
input_variables=["goal"],
template=(
"Ты планировщик задач. Для цели: '{goal}' "
"предложи пошаговый план действий в виде списка.\n"
"Ответ должен быть коротким и конкретным, каждый шаг на одной строке."
),
)
self.chain = LLMChain(llm=self.llm, prompt=self.prompt_template)
def plan_for_goal(self, goal: str) -> List[str]:
"""
Генерирует план действий для одной цели.
Возвращает список строк – шагов плана.
"""
raw_output = self.chain.run({"goal": goal})
# Разделяем вывод по строкам и убираем пустые
steps = [step.strip() for step in raw_output.splitlines() if step.strip()]
return steps
def plan_for_goals(self, goals: List[str]) -> Dict[str, List[str]]:
"""
Генерирует планы для списка целей.
Возвращает словарь: цель → список шагов.
"""
plans = {}
for goal in goals:
plans[goal] = self.plan_for_goal(goal)
return plans
# Тестовый пример использования
if __name__ == "__main__":
agent = PlanningAgent()
sample_goals = [
"Запустить новый веб-сайт",
"Оптимизировать производительность базы данных",
"Подготовить презентацию для инвесторов"
]
plans = agent.plan_for_goals(sample_goals)
for goal, steps in plans.items():
print(f"\nЦель: {goal}")
for i, step in enumerate(steps, 1):
print(f" Шаг {i}: {step}")