Telegram AI聊天机器人

一个基于Telegram的AI聊天机器人,集成Ollama进行LLM处理,ChromaDB进行向量搜索,并提供天气查询、互联网搜索和Notion集成等功能。

  • by MrJuise
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 MrJuise/ai_bot

使用说明

Telegram AI机器人与Ollama和矢量搜索

Telegram是一个基于Aiogram的机器人,集成了LLM的OLLAMA、用于向量搜索的Chromadb和MCP工具(天气、互联网搜索、Notion)。

机会

  • 💬 智能聊天机器人 基于Ollama的对话记忆(Llama3.1:8b)
  • 🔍 向量搜索 基于Chromadb和Nomic Embed Text的知识库
  • 🌤️ 天气 -获取任何城市的当前天气
  • 🌐 在线搜索 通过DuckDuckGo获取最新信息
  • 📝 与 Notion 集成 搜索、阅读和创建页面
  • 🧠 聊天存储器 -在SQLite中保存对话历史记录
  • 🐳 Docker-部署 通过Docker Compose轻松部署

要求

  • DockerиDocker作曲
  • Telegram Bot Token(英语:Telegram Bot Token) @植物学家)
  • (可选)Notion API Key for Notion

安装和启动

1.克隆存储库

git clone <repository-url>
cd new_AI

2.配置环境变量

创建文件 .env 在项目的根:

# Обязательные переменные
TELEGRAM_BOT_TOKEN=your_telegram_bot_token_here

# Опциональные переменные
OLLAMA_MODEL=llama3.1:8b
OLLAMA_BASE_URL=http://ollama:11434

# Для работы с Notion (опционально)
NOTION_API_KEY=your_notion_api_key_here
PARENT_ID=your_notion_parent_page_id_here

如何获取token:

  • TELEGRAM_BOT_TOKEN:

    1. 打开 @植物学家 在Telegram
    2. 发送团队 /newbot
    3. 按照说明复制收到的代币
  • 通知_API_KEY (可选):

    1. 转到https://www.notion.so/my-integrations
    2. 创建新的集成
    3. 内部集成令牌
    4. 将集成添加到所需页面/数据库
  • PARENT_ID (可选):

    • 创建新页面的页面ID或Notion数据库
    • 可以在Notion页面的URL中找到 /)

3.通过Docker Compose启动

选项1:使用现成图像

如果您可以访问图像 mrjuise/tg_bot_mvp:latest:

docker-compose up -d

选项2:自行构建图像

如果您需要自行制作图像:

  1. 收集机器人图像:
docker build -t mrjuise/tg_bot_mvp:latest .
  1. 启动服务:
docker compose up -d

4.核实工作

启动后,检查日志:

# Логи всех сервисов
docker compose logs -f

# Логи только бота
docker compose logs -f telegram-bot

# Логи только Ollama
docker compose logs -f ollama

预期行为:

  • Ollama 模特下载 llama3.1:8b 和 nomic-embed-text 第一次启动(可能需要几分钟)
  • 机器人将连接到Telegram并开始回复消息

5.机器人的使用

  1. 按您创建时指定的名称在Telegram中找到您的机器人
  2. 发送团队 /start 开始工作
  3. 使用 /help 查看可用命令

可用命令:

  • /start -欢迎
  • /help -团队和功能帮助
  • /health -检查服务状态
  • /new_chat 清除对话历史记录
  • /add_to_vector -将文本添加到矢量知识库
  • /cancel -取消当前操作

项目结构

new_AI/
├── bot.py                 # Основной файл бота
├── memory.py              # Управление памятью чатов (SQLite)
├── vector_store.py        # Векторное хранилище (ChromaDB)
├── mcp_tools/             # MCP инструменты
│   ├── mcp_weather.py     # Получение погоды
│   ├── mcp_notion.py      # Работа с Notion
│   └── search_duckduckgo.py  # Поиск в интернете
├── Dockerfile             # Образ для бота
├── docker-compose.yml     # Конфигурация Docker Compose
├── requirements.txt       # Python зависимости
└── .env                   # Переменные окружения (создать самостоятельно)

数据与持久性

数据存储在主机上的以下目录中:

  • /srv/ollama_models -Ollama模型(在重新启动之间保存)
  • /srv/bot_data -机器人数据:
    • chat_memory.db -聊天历史数据库
    • vectorstore/ Chromadb矢量存储

重要的是: 确保这些目录存在并具有正确的访问权限:

sudo mkdir -p /srv/ollama_models /srv/bot_data
udo chown -R 1000:1000 /srv/ollama_models /srv/bot_data

或者改变你的方式 docker-compose.yml 本地目录。

停止和重新启动

# Остановка сервисов
docker compose down

# Остановка с удалением данных (осторожно!)
docker compose down -v

# Перезапуск
docker compose restart

# Перезапуск с пересборкой образа
docker compose up -d --build

本地开发(无Docker)

如果您想在没有Docker的情况下在本地运行机器人:

1.建立依赖关系

python -m venv venv
source venv/bin/activate  # На Windows: venv\Scripts\activate
pip install -r requirements.txt

2.本地运行Ollama

下载并安装Ollama ollama.com,然后:

ollama serve
# В другом терминале:
ollama pull llama3.1:8b
ollama pull nomic-embed-text

3.配置环境变量

В .env 修改 :

OLLAMA_BASE_URL=http://localhost:11434

4.启动机器人

python bot.py

故障排除

bot没有回复

  1. 检查日志: docker-compose logs telegram-bot
  2. 确保 TELEGRAM_BOT_TOKEN 正确地在 .env
  3. 检查bot是否已运行: docker-compose ps

Ollama不加载模型

  1. 检查日志: docker-compose logs ollama
  2. 确保有足够的磁盘空间
  3. 检查Internet连接(模型从Internet下载)

矢量存储错误

  1. 确保模型 nomic-embed-text 下载到Ollama
  2. 检查目录访问权限 /srv/bot_data
  3. 尝试删除并重新创建向量存储

Notion的问题

  1. 确保 NOTION_API_KEY 正确
  2. 检查是否已将集成添加到Notion中的正确页面
  3. 确保 PARENT_ID 指向现有页面/数据库

技术

  • 图表3.22.0 -电报机器人框架
  • 奥拉玛 本地LLM服务器
  • 色度数据库 矢量数据库
  • LangChain -与LLM和Embadding集成
  • SQLite -保存聊天历史记录
  • Docker&Docker编写 集装箱化

=====================================================================

总结

指定代理

Telegram的个人AI助理,使用本地LLM模型(Ollama Llama3.1:8b)、知识库向量搜索和通过MCP协议访问外部工具,为用户提供智能答案。代理能够进行上下文对话,同时保留通信历史记录,并根据请求自动在使用知识库和调用工具LLM之间进行选择。

MCP工具

  1. 天气 (mcp_weather.py)通过Open Meteo API(地理编码+天气预报)获取任何城市的当前天气
  2. DuckDuckGo搜索 (search_duckduckgo.py)在互联网上搜索最新信息,以回答需要最新数据的问题
  3. 概念 (mcp_notion.pyNotion API集成到:
    • 查询页面(notion_search)
    • 检索网页内容(notion_get_page)
    • 创建新页面(notion_create_page)

内存实现

通过SQLite数据库实现的内存(memory.py):

  • 为每个用户单独存储对话历史记录
  • 基于令牌限制的上下文管理(默认为6000令牌)
  • 使用 tiktoken 精确计算代币
  • 优先保存最新消息超过限制
  • 团队 /new_chat 清理特定用户的历史记录

实现知识库

使用Chromadb(vector_store.py):

  • 向量存储:持久磁盘存储Chromadb
  • 安贝丁吉:模型 nomic-embed-text 从Ollama到文本向量转换
  • 搜索余弦搜索(cosine similarity)
  • 相关阈值:0.7(如果找到的文档相似≥0.7,则使用它而不是调用LLM)
  • 添加数据团队: /add_to_vector 手动将文本添加到知识库
  • 异步性:所有向量数据库操作都是异步执行的,以避免阻止事件循环