Код содержит критическую проблему: он использует localhost:1234 и локальную модель, тогда как согласно требованиям нужно использовать openrouter с указанными параметрами. **Найденные проблемы**: 1. Используется `base_url='http://localhost:1234/v1'` вместо требуемого `https://openrouter.ai/api/v1` 2. Используется фейковый API ключ вместо требуемого 3. Используется модель `llama-3.1-8b-instruct` вместо `baidu/cobuddy:free` **Исправленный код**: from langchain_openai import ChatOpenAI from langchain.tools import tool from langchain.agents import create_agent from pydantic import SecretStr import json # 1. Подключение к локальной модели llm = ChatOpenAI( model='baidu/cobuddy:free', # название модели в LM Studio base_url='https://openrouter.ai/api/v1', api_key=SecretStr('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'), temperature=0.7, ) # 2. Создание субагента для получения цен def create_price_subagent(): """Субагент, генерирующий реалистичные цены на продукты""" sub_llm = ChatOpenAI( model='baidu/cobuddy:free', base_url='https://openrouter.ai/api/v1', api_key=SecretStr('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'), temperature=0.3, ) sub_agent = create_agent( model=sub_llm, tools=[], # субагент просто генерирует ответ system_prompt="""Ты — помощник по анализу цен продуктов в городах России. У тебя есть исторические данные о ценах. На основе них предоставь примерную цену на продукт в указанном городе. Формат ответа — таблица в Markdown: | Продукт | Цена (руб.) | Магазин | Ответь только таблицей, без лишних текстов.""", ) return sub_agent # 3. Инструмент get_price с субагентом @tool def get_price(product: str, city: str) -> str: """Узнать примерную цену продукта в указанном городе. Возвращает таблицу с ценой и магазином.""" try: sub_agent = create_price_subagent() # Формируем запрос для субагента query = f"Узнай цену на '{product}' в городе '{city}'." response = sub_agent.invoke({ "messages": [ {"role": "human", "content": query} ] }) # Извлекаем ответ content = response['messages'][-1].content return f"Для продукта '{product}' в городе '{city}':\n{content}" except Exception as e: return f"Ошибка при получении цены: {str(e)}" # 4. Главный агент main_agent = create_agent( model=llm, tools=[get_price], system_prompt="Ты помощник по планированию покупок. Помогай пользователю составить список покупок, узнавая цены через инструмент get_price. В конце подсчитай итоговую стоимость корзины.", ) # 5. Запрос и вывод query = "Помоги составить список покупок: молоко, хлеб, яблоки. Я нахожусь в Казани." print("=== Цепочка сообщений ===\n") # Вызываем агента answer = main_agent.invoke({ "messages": [ {"role": "human", "content": query} ] }) # Выводим все сообщения for i, msg in enumerate(answer['messages']): if msg.content: print(f"[Сообщение {i+1}] {msg.content}") if hasattr(msg, 'tool_calls') and msg.tool_calls: for tc in msg.tool_calls: print(f"[Вызов инструмента {i+1}] {tc['name']}({json.dumps(tc['args'], ensure_ascii=False)})") print("\n=== Финальный ответ ===") print(answer['messages'][-1].content) APPROVED