telegram-cli-bot/INSTRUMENTS_FIX.md

130 lines
5.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 🔄 Исправление проблемы с инструментами ИИ
## Проблема
ИИ (Qwen Code / Opencode / GigaChat) **не хотел использовать инструменты** бота, потому что:
1. **Не считал их своими** — пытался работать только через свои встроенные инструменты
2. **Говорил что инструменты недоступны** — хотя AI-агент их вызывал
3. **Пытался вызвать инструменты напрямую** — хотя технически не мог это сделать
## Причина
**Архитектурная проблема:**
- **AI-агент бота** (`bot/ai_agent.py`) — принимает решение об использовании инструментов и вызывает их
- **ИИ (Qwen/другие)** — генерирует текст, но **не имел доступа к результатам инструментов**
ИИ видел в системном промпте описание инструментов, но **не получал результаты их выполнения** — поэтому думал что они недоступны.
## Решение
### 1. Обновлён системный промпт (`system_prompt.md`)
Добавлены явные указания:
```markdown
## 🧠 АРХИТЕКТУРА: КТО ВЫЗЫВАЕТ ИНСТРУМЕНТЫ?
**ВАЖНОЕ РАЗДЕЛЕНИЕ ОТВЕТСТВЕННОСТИ:**
1. **AI-агент бота** (внешняя система) — **принимает решение** об использовании инструментов и **вызывает их**
2. **ТЫ (Qwen/ИИ)** — **получаешь результаты инструментов в контексте** и **анализируешь их**
**ТЫ НЕ ВЫЗЫВАЕШЬ ИНСТРУМЕНТЫ НАПРЯМУЮ!**
```
### 2. Обновлена логика `bot.py`
**До:**
```python
if tool_result.success:
# СРАЗУ формируем ответ из результатов
tool_result_formatted = await format_tool_result(...)
await send_long_message_html(update, tool_result_formatted)
return # Qwen НЕ получает результаты!
```
**После:**
```python
# Сохраняем результат для передачи в 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`
## Что изменилось
| Было | Стало |
|------|-------|
| ИИ не видел результаты инструментов | ИИ получает результаты в контексте |
| ИИ пытался вызвать инструменты сам | ИИ знает что не может вызывать инструменты |
| Прямой ответ из инструментов | ИИ анализирует результаты и формирует ответ |
| Путаница с доступностью | Явное разделение ответственности |
## Тестирование
Проверьте работу с разными инструментами:
```bash
# Поиск в интернете
"Найди информацию про 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