Ядро агента: рассуждения плюс инструменты — на примере Grok 4.6 и открытых моделей
Модель с рассуждениями и вызовом функций — удобная основа для агента. Собираем минимальный цикл tool-calling на base_url Yenisei и выбираем модель под него.
Никита Барсуков
Ядро агента: рассуждения плюс инструменты
Агент — это модель, которая в цикле решает, что делать дальше, вызывает инструменты и учитывает их результаты. Чтобы это работало, от модели нужны две вещи одновременно: аккуратные рассуждения и надёжный вызов функций. Grok 4.6 от xAI часто приводят как пример такого сочетания.
В каталоге Yenisei Grok нет, но то же сочетание есть у открытых моделей: Kimi K2 Thinking (kimi-k2-thinking), DeepSeek V4 Pro (deepseek-pro), GLM 5.3 (glm-5.3). На них и соберём цикл.
Почему здесь важны рассуждения
У многих агентов слабое место — выбор, какой инструмент и когда вызвать. Модель без нормальных рассуждений хватается за первый попавшийся вызов, зацикливается или бросает задачу на середине. Модель с рассуждениями сначала прикидывает план, потом действует, и цикл сходится быстрее.
Минимальный цикл tool-calling
Определяем инструмент по OpenAI-совместимой схеме и отдаём модели:
from openai import OpenAIimport jsonclient = OpenAI(base_url="https://api.yenisei.ru/v1", api_key="YENISEI_KEY")MODEL = "kimi-k2-thinking"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=MODEL, 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=MODEL, messages=messages, tools=tools) print(final.choices[0].message.content)Что легко сломать
- Слишком много инструментов сразу. Дайте модели 30 функций — и она начнёт путаться. Держите набор минимальным, группируйте похожее.
- Мутные описания.
description— это часть промпта. «Получить данные» — плохо; «Вернуть статус заказа по его номеру» — хорошо. - Нет ограничителя цикла. Всегда ставьте лимит на число итераций, иначе агент на редком случае может крутиться бесконечно и жечь бюджет.
- Игнор ошибок инструмента. Если функция вернула ошибку, положите её текст в
role: tool— хорошая модель, как правило, сама предложит обходной путь.
Какую модель взять
- Kimi K2 Thinking — показывает ход рассуждений и уверенно вызывает функции; хороший выбор для агента с ветвлениями.
- DeepSeek V4 Pro — рассуждения, инструменты и контекст до миллиона токенов: длинная история вызовов помещается в окно целиком.
- GLM 5.3 — сильна на многошаговых агентных сценариях, окно тоже очень длинное.
Если же агент по сути линейный — «принял запрос, вызвал один API, вернул ответ» — флагман с рассуждениями избыточен. Такой цикл дешевле собрать на DeepSeek V4 Flash (deepseek-flash) или GLM 5.3 Flash (glm-5.3-flash) и не платить за размышления там, где выбор очевиден.
Длинный контекст тут ещё и страховка: история диалога с результатами всех вызовов помещается в окно, и агенту не приходится «забывать» первые шаги посреди задачи.