From 18bad93b45d62eedbf6a5d8aabdf3d304bd20645 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9C=D0=B0=D1=80=D0=B8=D1=8F=20=D0=91=D0=B5=D1=80=D0=B4?= =?UTF-8?q?=D0=BD=D0=B8=D0=BA=D0=BE=D0=B2=D0=B0?= Date: Thu, 28 May 2026 16:28:26 +0000 Subject: [PATCH] =?UTF-8?q?=D0=AD=D0=BA=D0=B7=D0=B0=D0=BC=D0=B5=D0=BD:=20?= =?UTF-8?q?=D0=9F=D0=BB=D0=B0=D0=BD=D0=B8=D1=80=D1=83=D1=8E=D1=89=D0=B8?= =?UTF-8?q?=D0=B9=20=D0=B0=D0=B3=D0=B5=D0=BD=D1=82:=20solution.py?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- solution.py | 81 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 solution.py diff --git a/solution.py b/solution.py new file mode 100644 index 0000000..4829c23 --- /dev/null +++ b/solution.py @@ -0,0 +1,81 @@ +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}") \ No newline at end of file