From 9752dcc156bc5feadd79091cdc21a93fc74f681d 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: Wed, 27 May 2026 07:34:05 +0000 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D1=82?= =?UTF-8?q?=D1=8C=20solutions/=D1=81=D1=8B=D1=80=D0=BE=D0=B9=20=D1=82?= =?UTF-8?q?=D0=B5=D0=BA=D1=81=D1=82=20=D0=B7=D0=B0=D0=B4=D0=B0=D0=BD=D0=B8?= =?UTF-8?q?=D1=8F=20=E2=86=92=20=D0=BF=D0=BB=D0=BE=D1=81=D0=BA=D0=B0=D1=8F?= =?UTF-8?q?=20=D0=BA=D0=B0=D1=80=D1=82=D0=BE=D1=87=D0=BA=D0=B0/solution.py?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../solution.py | 65 +++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 solutions/сырой текст задания → плоская карточка/solution.py diff --git a/solutions/сырой текст задания → плоская карточка/solution.py b/solutions/сырой текст задания → плоская карточка/solution.py new file mode 100644 index 0000000..50b1bfd --- /dev/null +++ b/solutions/сырой текст задания → плоская карточка/solution.py @@ -0,0 +1,65 @@ +from typing import List +from pydantic import BaseModel, Field +from langchain_core.prompts import PromptTemplate +from langchain_core.output_parsers import PydanticOutputParser +from langchain_openai import ChatOpenAI + + +class AssignmentCard(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() -> None: + output_parser = PydanticOutputParser(pydantic_object=AssignmentCard) + + template = PromptTemplate( + template=( + "Прочитай описание учебного задания и заполни все поля карточки.\n\n" + "Описание:\n{raw_text}\n\n" + "Верни ответ строго в JSON без лишних пояснений.\n" + "{format_instructions}" + ), + input_variables=["raw_text"], + partial_variables={ + "format_instructions": output_parser.get_format_instructions() + }, + ) + + model = ChatOpenAI(model="gpt-4o-mini", temperature=0) + + chain = template | model | output_parser + + sample = ( + "Сдайте к пятнице мини-отчёт по LangChain: 2 страницы, упор на агентов. " + "Оценка: за полноту и за пример кода." + ) + + card: AssignmentCard = chain.invoke({"raw_text": sample}) + + print("Валидированный объект:") + print(card.model_dump()) + + print("\nСводка:") + print( + f"Задание «{card.title}» по теме «{card.subject}». " + f"Сдать: {card.deliverable_type}. " + f"Дедлайн: {card.deadline_hint or 'не указан'}. " + f"Оценивается: {', '.join(card.grading_hints) if card.grading_hints else 'критерии не указаны'}." + ) + + +if __name__ == "__main__": + main() \ No newline at end of file