Files
task-69dd4221f309a98be0006b2e/main.py
T
2026-05-26 12:11:07 +00:00

47 lines
2.2 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import os
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 = Field(..., description="Краткая подсказка о сроке выполнения")
deliverable_type: str = Field(..., description="Тип сдачи: отчёт, код, презентация и т.п.")
grading_hints: list[str] = Field(..., description="Список ключевых критериев оценки")
# LLM configuration BroJS
llm = ChatOpenAI(
model="openai/gpt-oss-20b:free",
base_url="https://platform.brojs.ru/jrnl-bh/api/inference/v1",
api_key=os.getenv("JOURNAL_MCP_PAT"),
temperature=0.5,
)
parser = PydanticOutputParser(pydantic_object=TaskCard)
prompt = PromptTemplate(
template="""
Ниже приведено описание задания от преподавателя. Нужно извлечь из него структуру задачи в виде JSON, соответствующую модели TaskCard.
{format_instructions}
Описание задания:
{task_description}
""",
input_variables=["task_description"],
partial_variables={"format_instructions": parser.get_format_instructions()},
)
chain = prompt | llm | parser
if __name__ == "__main__":
# Пример входа
example = "Сдайте к пятнице мини-отчёт по LangChain: 2 страницы, упор на агентов. Оценка: за полноту и за пример кода."
result: TaskCard = chain.invoke({"task_description": example})
print("\n--- Валидированный объект ---")
print(result.model_dump())
print("\n--- Человекочитаемая сводка ---")
print(f"Задача: {result.title}\nТема: {result.subject}\nСрок: {result.deadline_hint}\nТип сдачи: {result.deliverable_type}\nКритерии оценки: {', '.join(result.grading_hints)}")