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
cd new_AI2.配置环境变量
创建文件 .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 1. 发送团队 /newbot 1. 按照说明复制收到的代币
- 通知_API_KEY (可选):
1. 转到https://www.notion.so/my-integrations 1. 创建新的集成 1. 内部集成令牌 1. 将集成添加到所需页面/数据库
- PARENT_ID (可选):
- 创建新页面的页面ID或Notion数据库 - 可以在Notion页面的URL中找到 /)
3.通过Docker Compose启动
选项1:使用现成图像
如果您可以访问图像 mrjuise/tg_bot_mvp:latest:
docker-compose up -d选项2:自行构建图像
如果您需要自行制作图像:
- 收集机器人图像:
docker build -t mrjuise/tg_bot_mvp:latest .- 启动服务:
docker compose up -d4.核实工作
启动后,检查日志:
# Логи всех сервисов
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.机器人的使用
- 按您创建时指定的名称在Telegram中找到您的机器人
- 发送团队
/start开始工作 - 使用
/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.txt2.本地运行Ollama
下载并安装Ollama ollama.com,然后:
ollama serve
# В другом терминале:
ollama pull llama3.1:8b
ollama pull nomic-embed-text3.配置环境变量
В .env 修改 :
OLLAMA_BASE_URL=http://localhost:114344.启动机器人
python bot.py故障排除
bot没有回复
- 检查日志:
docker-compose logs telegram-bot - 确保
TELEGRAM_BOT_TOKEN正确地在.env - 检查bot是否已运行:
docker-compose ps
Ollama不加载模型
- 检查日志:
docker-compose logs ollama - 确保有足够的磁盘空间
- 检查Internet连接(模型从Internet下载)
矢量存储错误
- 确保模型
nomic-embed-text下载到Ollama - 检查目录访问权限
/srv/bot_data - 尝试删除并重新创建向量存储
Notion的问题
- 确保
NOTION_API_KEY正确 - 检查是否已将集成添加到Notion中的正确页面
- 确保
PARENT_ID指向现有页面/数据库
技术
- 图表3.22.0 -电报机器人框架
- 奥拉玛 本地LLM服务器
- 色度数据库 矢量数据库
- LangChain -与LLM和Embadding集成
- SQLite -保存聊天历史记录
- Docker&Docker编写 集装箱化
\=====================================================================
总结
指定代理
Telegram的个人AI助理,使用本地LLM模型(Ollama Llama3.1:8b)、知识库向量搜索和通过MCP协议访问外部工具,为用户提供智能答案。代理能够进行上下文对话,同时保留通信历史记录,并根据请求自动在使用知识库和调用工具LLM之间进行选择。
MCP工具
- 天气 (
mcp_weather.py)通过Open Meteo API(地理编码+天气预报)获取任何城市的当前天气 - DuckDuckGo搜索 (
search_duckduckgo.py)在互联网上搜索最新信息,以回答需要最新数据的问题 - 概念 (
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手动将文本添加到知识库 - 异步性:所有向量数据库操作都是异步执行的,以避免阻止事件循环
