Grok 4.6 как ядро агента: рассуждения плюс инструменты
Reasoning-модель, которая умеет вызывать функции — удобная основа для агента. Собираем минимальный цикл tool-calling на base_url Yenisei.
Никита Барсуков
Grok 4.6 как ядро агента: рассуждения плюс инструменты
Агент — это модель, которая в цикле решает, что делать дальше, дёргает инструменты и учитывает их результаты. Чтобы это работало, от модели нужны две вещи одновременно: аккуратные рассуждения и надёжный вызов функций. Grok 4.6 совмещает и то и другое, поэтому на роль ядра агента подходит хорошо.
Почему reasoning здесь важен
Слабое место многих агентов — не сами инструменты, а решение, какой инструмент и когда вызвать. Модель без нормальных рассуждений хватается за первый попавшийся вызов, зацикливается или бросает задачу на середине. Reasoning-модель сначала прикидывает план, потом действует — и цикл сходится быстрее.
Минимальный цикл tool-calling
Определяем инструмент по OpenAI-совместимой схеме и отдаём модели:
from openai import OpenAIimport jsonclient = OpenAI(base_url="https://api.yenisei.ru/v1", api_key="YENISEI_KEY")tools = [{ "type": "function", "function": { "name": "get_order_status", "description": "Вернуть статус заказа по его номеру", "parameters": { "type": "object", "properties": {"order_id": {"type": "string"}}, "required": ["order_id"], }, },}]messages = [{"role": "user", "content": "Что с моим заказом A-4417?"}]resp = client.chat.completions.create( model="grok-4", messages=messages, tools=tools,)msg = resp.choices[0].messageif msg.tool_calls: call = msg.tool_calls[0] args = json.loads(call.function.arguments) result = lookup_order(args["order_id"]) # ваша функция messages.append(msg) messages.append({ "role": "tool", "tool_call_id": call.id, "content": json.dumps(result, ensure_ascii=False), }) final = client.chat.completions.create(model="grok-4", messages=messages, tools=tools) print(final.choices[0].message.content)Что легко сломать
- Слишком много инструментов сразу. Дайте модели 30 функций — и она начнёт путаться. Держите набор минимальным, группируйте похожее.
- Мутные описания.
description— это часть промпта. «Получить данные» — плохо; «Вернуть статус заказа по его номеру» — хорошо. - Нет ограничителя цикла. Всегда ставьте лимит на число итераций, иначе агент на редком кейсе может крутиться бесконечно и жечь бюджет.
- Игнор ошибок инструмента. Если функция вернула ошибку, положите её текст в
role: tool— Grok, как правило, сам предложит обходной путь.
Когда Grok, а когда полегче
Grok оправдан, когда решения нетривиальны: несколько инструментов, ветвления, необходимость планировать. Если же агент по сути линейный — «принял запрос, дёрнул один API, вернул ответ» — reasoning-флагман избыточен, дешевле собрать это на модели попроще и не платить за размышления там, где выбор очевиден.
Контекст в 500K тут ещё и страховка: история длинного диалога с результатами всех вызовов помещается в окно, и агенту не приходится «забывать» первые шаги посреди задачи.