add agent.py

This commit is contained in:
2026-05-28 11:10:36 +00:00
parent 4347077186
commit 91bb9a2b7a
+107 -14
View File
@@ -1,18 +1,111 @@
# Placeholder deep agent implementation #!/usr/bin/env python3
import requests, json, os # -*- coding: utf-8 -*-
def search(query): """
# simple Bing API placeholder Пример преобразования неформального описания задания в структурированный объект.
return f"Results for {query}"
def create_virtual_file(name, content): Используем:
with open(name, 'w') as f: * LangChain (core + OpenAI)
f.write(content) * Pydantic для типизации и проверки результата
"""
def main(): import os
q="test" from pathlib import Path
res=search(q)
create_virtual_file('output.txt',res)
if __name__=='__main__': from langchain_core.prompts import PromptTemplate
main() from langchain_openai import ChatOpenAI
from langchain_core.output_parsers import PydanticOutputParser
from pydantic import BaseModel, Field
# ------------------------------------------------------------------
# 1. Модель карточки задания (Pydantic)
# ------------------------------------------------------------------
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(
None,
description="Ключевые критерии оценки (список строк)",
)
# ------------------------------------------------------------------
# 2. Парсер и промпт
# ------------------------------------------------------------------
parser = PydanticOutputParser(pydantic_object=AssignmentCard)
prompt_template = """
Пожалуйста, преобразуйте следующее описание задания в JSON‑объект,
соответствующий схеме:
{format_instructions}
Текст задания:
"{input_text}"
"""
prompt = PromptTemplate(
template=prompt_template,
input_variables=["input_text"],
partial_variables={"format_instructions": parser.get_format_instructions()},
)
# ------------------------------------------------------------------
# 3. Модель LLM
# ------------------------------------------------------------------
llm = ChatOpenAI(temperature=0, model="gpt-4o-mini") # можно поменять модель
# Создаём цепочку: Prompt → LLM → Parser
chain = prompt | llm | parser
# ------------------------------------------------------------------
# 4. Функция «обработки» одной строки
# ------------------------------------------------------------------
def parse_assignment(text: str) -> AssignmentCard:
"""Возвращает валидированную модель из текста."""
return chain.invoke({"input_text": text})
# ------------------------------------------------------------------
# 5. Тестовый пример (можно заменить на любой другой)
# ------------------------------------------------------------------
if __name__ == "__main__":
example = (
"Сдайте к пятнице мини‑отчёт по LangChain: "
"2 страницы, упор на агентов. Оценка: за полноту и за пример кода."
)
card = parse_assignment(example)
# Выводим модель в виде JSON
print("\n=== Валидация ===")
print(card.model_dump(indent=4))
# Краткая человекочитаемая сводка
print("\n=== Сводка ===")
print(f"Тема: {card.subject}")
print(f"Название: {card.title}")
if card.deadline_hint:
print(f"Дедлайн: {card.deadline_hint}")
print(f"Сдача: {card.deliverable_type}")
if card.grading_hints:
print("Критерии оценки:")
for h in card.grading_hints:
print(f"{h}")
# ────────────────────── End of file ─────────────────────