130 lines
5.9 KiB
Markdown
130 lines
5.9 KiB
Markdown
# 🔄 Исправление проблемы с инструментами ИИ
|
||
|
||
## Проблема
|
||
|
||
ИИ (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
|