From a91c1da02e53d6e0955746111213c5f726fe7a55 Mon Sep 17 00:00:00 2001 From: Danil Parunin 5f1b81b8-4f5d-11e8-9c2d-fa7ae01bbebc Date: Tue, 16 Jun 2026 16:16:47 +0000 Subject: [PATCH] =?UTF-8?q?fix(needs=5Ffixes):=202=20=D0=B8=D1=81=D0=BF?= =?UTF-8?q?=D1=80=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8=D0=B9,=200=20=D0=BE?= =?UTF-8?q?=D1=82=D1=81=D1=82=D0=BE=D1=8F=D0=BD=D0=BE=20=E2=80=94=20main.p?= =?UTF-8?q?y?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- main.py | 55 +++++++++++++++++++++++++++++++++++-------------------- 1 file changed, 35 insertions(+), 20 deletions(-) diff --git a/main.py b/main.py index eeaaed5..5f361f6 100644 --- a/main.py +++ b/main.py @@ -1,47 +1,62 @@ -import os import asyncio from langchain_openai import ChatOpenAI +from pydantic import SecretStr from langchain.tools import tool -from langchain.agents import create_agent +from deepagents import create_deep_agent +from deepagents.backends import CompositeBackend, LocalShellBackend, FilesystemBackend from langchain_core.messages import HumanMessage -# Настройка LLM через OpenRouter +# 1. Подключение к локальной LLM llm = ChatOpenAI( - model="openai/gpt-oss-20b:free", - base_url="https://openrouter.ai/api/v1", - api_key=os.getenv("OPENAI_API_KEY"), + model='llama3.1-8b', + base_url='http://localhost:1234/v1', + api_key=SecretStr('fake'), temperature=0.7, ) -# Инструмент, который вызывает субагент для получения цены +# 2. Backend для deepagents +backend = CompositeBackend([ + LocalShellBackend(workspace_dir='./workspace'), + FilesystemBackend(), +]) + +# 3. Субагент, генерирующий цену @tool def get_price(product: str, city: str) -> str: """Получить примерную цену продукта в указанном городе. Возвращает таблицу в формате Markdown. """ - # Создаём субагент, который генерирует таблицу - sub_agent = create_agent( + # Создаём субагент, который просто генерирует реалистичную цену + sub_agent = create_deep_agent( model=llm, tools=[], - system_prompt=f"Ты эксперт по ценам в {city}.\n\nДай таблицу: | Продукт | Цена (руб.) | Магазин |", # простая подсказка + backend=backend, + system_prompt=f"Ты эксперт по ценам в {city}. Дай таблицу с продуктом, ценой и магазином.", ) - # Запускаем субагент с запросом - sub_prompt = f"Какова примерная цена на {product} в {city}?" - result = sub_agent.invoke({"messages": [HumanMessage(content=sub_prompt)]}) - # Извлекаем последний текстовый ответ - return result["messages"][-1].content + # Запрос к субагенту + response = asyncio.run(sub_agent.ainvoke( + {"messages": [HumanMessage(content=f"Сгенерируй таблицу цены для продукта {product} в городе {city}.")]}, + {"configurable": {"thread_id": f"price-{product}-{city}"}}, + )) + # Предполагаем, что последний элемент содержит таблицу + return response["messages"][-1].content -# Главный агент -agent = create_agent( +# 4. Главный агент +agent = create_deep_agent( model=llm, tools=[get_price], - system_prompt="Ты помощник по планированию покупок.", + backend=backend, + system_prompt='Ты помощник по планированию покупок.', ) +# 5. Запуск async def main(): user_query = "Помоги составить список покупок: молоко, хлеб, яблоки. Я нахожусь в Казани." - result = await agent.ainvoke({"messages": [HumanMessage(content=user_query)]}) - # Печатаем все сообщения, включая вызовы инструментов + result = await agent.ainvoke( + {"messages": [HumanMessage(content=user_query)]}, + {"configurable": {"thread_id": "shopping-session"}}, + ) + # Вывод всех сообщений for msg in result["messages"]: if msg.content: print(msg.content)