From 5e2cd6fa121105f6f1493ca9f2b3304fd9173e28 Mon Sep 17 00:00:00 2001 From: lonpatovaadelina Date: Thu, 21 May 2026 15:41:05 +0000 Subject: [PATCH] =?UTF-8?q?=D0=A0=D0=B5=D1=88=D0=B5=D0=BD=D0=B8=D0=B5=20?= =?UTF-8?q?=D0=B7=D0=B0=D0=B4=D0=B0=D0=BD=D0=B8=D1=8F:=20=D1=81=D1=8B?= =?UTF-8?q?=D1=80=D0=BE=D0=B9=20=D1=82=D0=B5=D0=BA=D1=81=D1=82=20=D0=B7?= =?UTF-8?q?=D0=B0=D0=B4=D0=B0=D0=BD=D0=B8=D1=8F=20=E2=86=92=20=D0=BF=D0=BB?= =?UTF-8?q?=D0=BE=D1=81=D0=BA=D0=B0=D1=8F=20=D0=BA=D0=B0=D1=80=D1=82=D0=BE?= =?UTF-8?q?=D1=87=D0=BA=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../solution.py | 87 +++++++++++++++++++ 1 file changed, 87 insertions(+) create mode 100644 solutions/69dd4221f309a98be0006b2e_сырой_текст_задания___плоская_карточка/solution.py diff --git a/solutions/69dd4221f309a98be0006b2e_сырой_текст_задания___плоская_карточка/solution.py b/solutions/69dd4221f309a98be0006b2e_сырой_текст_задания___плоская_карточка/solution.py new file mode 100644 index 0000000..d00935d --- /dev/null +++ b/solutions/69dd4221f309a98be0006b2e_сырой_текст_задания___плоская_карточка/solution.py @@ -0,0 +1,87 @@ +import os +from typing import List + +from pydantic import BaseModel, Field +from langchain_core.prompts import PromptTemplate +from langchain_openai import ChatOpenAI +from langchain_core.output_parsers import PydanticOutputParser + +class TaskCard(BaseModel): + """Модель карточки задания.""" + + title: str = Field(..., description="Краткое название задачи") + subject: str = Field(..., description="Предмет или область знаний") + deadline_hint: str | None = Field( + None, + description=( + "Указание срока сдачи в свободной форме (например, \"к пятнице\")" + ), + ) + deliverable_type: str = Field( + ..., description="Тип сдаваемого материала (отчёт, код и т.д.)" + ) + grading_hints: List[str] | None = Field( + default_factory=list, + description=( + "Ключевые критерии оценки, упомянутые в тексте задачи (например, \"полнота\", \"пример кода\")" + ), + ) + +def main(): + # Инициализация модели (используем ключ из переменной окружения) + llm = ChatOpenAI( + model="gpt-4o-mini", + temperature=0, + ) + + parser = PydanticOutputParser(pydantic_object=TaskCard) + + prompt_template = PromptTemplate( + template=""" +Ниже приведено неформальное описание задания. Преобразуйте его в +структурированный объект TaskCard, заполнив все поля. + +Текст задания: +{task_text} + +Ответ должен быть строго в формате JSON, соответствующем полям модели. +Используйте только те ключи, которые описаны в модели: title, +subject, deadline_hint, deliverable_type, grading_hints. + +Пример вывода: +{format_instructions} +""", + input_variables=["task_text"], + partial_variables={"format_instructions": parser.get_format_instructions()}, + ) + + chain = prompt_template | llm | parser + + # Пример входного текста + task_input = ( + "Сдайте к пятнице мини-отчёт по LangChain: 2 страницы, упор на агентов. " + "Оценка: за полноту и за пример кода." + ) + + try: + result: TaskCard = chain.invoke({"task_text": task_input}) + except Exception as exc: + print(f"Ошибка при обработке задания: {exc}") + return + + # Вывод валидированного объекта + print("Валидированный объект:") + print(result.model_dump()) + + # Краткая человекочитаемая сводка + summary = ( + f"Задача \"{result.title}\" по предмету {result.subject}. " + f"Срок сдачи: {result.deadline_hint or 'не указан'}. " + f"Тип сдаваемого материала: {result.deliverable_type}. " + f"Критерии оценки: {', '.join(result.grading_hints) if result.grading_hints else 'нет'}." + ) + print("\nСводка:") + print(summary) + +if __name__ == "__main__": + main()