import os import asyncio from langchain_openai import ChatOpenAI from langchain.tools import tool from langchain.agents import create_agent from langchain_core.messages import HumanMessage # Настройка LLM через OpenRouter llm = ChatOpenAI( model="openai/gpt-oss-20b:free", base_url="https://openrouter.ai/api/v1", api_key=os.getenv("OPENAI_API_KEY"), temperature=0.7, ) # Инструмент, который вызывает субагент для получения цены @tool def get_price(product: str, city: str) -> str: """Получить примерную цену продукта в указанном городе. Возвращает таблицу в формате Markdown. """ # Создаём субагент, который генерирует таблицу sub_agent = create_agent( model=llm, tools=[], system_prompt=f"Ты эксперт по ценам в {city}.\n\nДай таблицу: | Продукт | Цена (руб.) | Магазин |", # простая подсказка ) # Запускаем субагент с запросом sub_prompt = f"Какова примерная цена на {product} в {city}?" result = sub_agent.invoke({"messages": [HumanMessage(content=sub_prompt)]}) # Извлекаем последний текстовый ответ return result["messages"][-1].content # Главный агент agent = create_agent( model=llm, tools=[get_price], system_prompt="Ты помощник по планированию покупок.", ) async def main(): user_query = "Помоги составить список покупок: молоко, хлеб, яблоки. Я нахожусь в Казани." result = await agent.ainvoke({"messages": [HumanMessage(content=user_query)]}) # Печатаем все сообщения, включая вызовы инструментов 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())