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)