telegram-cli-bot/INSTRUMENTS_FIX.md

5.9 KiB
Raw Blame History

🔄 Исправление проблемы с инструментами ИИ

Проблема

ИИ (Qwen Code / Opencode / GigaChat) не хотел использовать инструменты бота, потому что:

  1. Не считал их своими — пытался работать только через свои встроенные инструменты
  2. Говорил что инструменты недоступны — хотя AI-агент их вызывал
  3. Пытался вызвать инструменты напрямую — хотя технически не мог это сделать

Причина

Архитектурная проблема:

  • AI-агент бота (bot/ai_agent.py) — принимает решение об использовании инструментов и вызывает их
  • ИИ (Qwen/другие) — генерирует текст, но не имел доступа к результатам инструментов

ИИ видел в системном промпте описание инструментов, но не получал результаты их выполнения — поэтому думал что они недоступны.

Решение

1. Обновлён системный промпт (system_prompt.md)

Добавлены явные указания:

## 🧠 АРХИТЕКТУРА: КТО ВЫЗЫВАЕТ ИНСТРУМЕНТЫ?

**ВАЖНОЕ РАЗДЕЛЕНИЕ ОТВЕТСТВЕННОСТИ:**

1. **AI-агент бота** (внешняя система) — **принимает решение** об использовании инструментов и **вызывает их**
2. **ТЫ (Qwen/ИИ)** — **получаешь результаты инструментов в контексте** и **анализируешь их**

**ТЫ НЕ ВЫЗЫВАЕШЬ ИНСТРУМЕНТЫ НАПРЯМУЮ!**

2. Обновлена логика bot.py

До:

if tool_result.success:
    # СРАЗУ формируем ответ из результатов
    tool_result_formatted = await format_tool_result(...)
    await send_long_message_html(update, tool_result_formatted)
    return  # Qwen НЕ получает результаты!

После:

# Сохраняем результат для передачи в Qwen
tool_result_for_context = {
    'tool_name': agent_decision.tool_name,
    'result': tool_result,
    'args': agent_decision.tool_args
}

# Формируем блок с результатами инструментов
if tool_result_for_context:
    tool_result_block = f"=== РЕЗУЛЬТАТЫ ИНСТРУМЕНТА ===\n{result.data}"

# Добавляем в полный промпт для Qwen
full_task = f"{system_prompt}\n\n{tool_result_block}\n\n=== ЗАПРОС ===\n{text}"

3. Поддержка всех провайдеров

Обновлены все AI-провайдеры:

  • Qwen Code — получает результаты в full_task
  • GigaChat — получает результаты в context_messages
  • Opencode — получает результаты в context_messages

Что изменилось

Было Стало
ИИ не видел результаты инструментов ИИ получает результаты в контексте
ИИ пытался вызвать инструменты сам ИИ знает что не может вызывать инструменты
Прямой ответ из инструментов ИИ анализирует результаты и формирует ответ
Путаница с доступностью Явное разделение ответственности

Тестирование

Проверьте работу с разными инструментами:

# Поиск в интернете
"Найди информацию про Python asyncio"

# RSS новости
"Почитай новости Linux"

# SSH команды
"Проверь нагрузку на сервере"

# Cron задачи
"Напомни каждый день делать бэкап"

# Файловая система
"Покажи содержимое /home/mirivlad/git"

Ожидаемое поведение:

  1. AI-агент распознаёт запрос и решает использовать инструмент
  2. Инструмент выполняется
  3. Результаты передаются в ИИ
  4. ИИ анализирует результаты и формирует понятный ответ
  5. ИИ не пытается вызвать инструмент повторно

Файлы изменены

  • system_prompt.md — добавлено явное разделение ответственности
  • bot.py — передача результатов инструментов в ИИ
    • handle_ai_task() — сохранение результатов в tool_result_for_context
    • Формирование tool_result_block для разных провайдеров
    • GigaChat и Opencode — поддержка результатов инструментов

Следующие шаги

Если проблема сохранится:

  1. Проверить логи — посмотреть что видит ИИ в контексте
  2. Добавить больше примеров в системный промпт
  3. Настроить temperature — возможно ИИ слишком "креативный"
  4. Добавить few-shot примеры — показать как правильно отвечать

Дата исправления: 2026-03-09
Версия бота: 0.9.0