import asyncio from langchain_openai import ChatOpenAI from pydantic import SecretStr from langchain.tools import tool from deepagents import create_deep_agent from deepagents.backends import CompositeBackend, LocalShellBackend, FilesystemBackend from langchain_core.messages import HumanMessage # 1. Подключение к локальной LLM llm = ChatOpenAI( 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_deep_agent( model=llm, tools=[], backend=backend, system_prompt=f"Ты эксперт по ценам в {city}. Дай таблицу с продуктом, ценой и магазином.", ) # Запрос к субагенту response = asyncio.run(sub_agent.ainvoke( {"messages": [HumanMessage(content=f"Сгенерируй таблицу цены для продукта {product} в городе {city}.")]}, {"configurable": {"thread_id": f"price-{product}-{city}"}}, )) # Предполагаем, что последний элемент содержит таблицу return response["messages"][-1].content # 4. Главный агент agent = create_deep_agent( model=llm, tools=[get_price], backend=backend, system_prompt='Ты помощник по планированию покупок.', ) # 5. Запуск async def main(): 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) elif msg.tool_calls: for call in msg.tool_calls: print(f"{call['name']}({call['args']})") if __name__ == "__main__": asyncio.run(main())