使用说明
电报机器人(LLM+MCP)
Spring Boot Telegram机器人由LLM通过Spring AI提供支持,具有模型上下文协议(MCP)客户端支持,因此助手可以调用外部工具。
概述
该机器人通过长轮询监听Telegram更新,通过Spring AI将用户消息转发给Anthropic(Claude)聊天模型,并在聊天中回复。它维护每次会话的内存,强制每个用户的速率限制,并作为客户端连接到一个或多个MCP服务器-将其工具暴露给模型,以便它能够满足需要外部操作的请求(例如,查询交易API)。
特征
- 电报集成 --使用Telegram长轮询接收和响应消息
- LLM回复 --聊天由Anthropic(克劳德)通过Spring AI提供支持
ChatClient - MCP客户端 --通过可流式HTTP连接到MCP服务器,并将其工具注册为模型的可调用工具
- 每个聊天记忆 --每次聊天都保留对话历史记录,可配置最大消息数和基于TTL的驱逐
- 速率限制 --每用户请求限制(Bucket4j)
- 消息分块和Markdown --长回复被分成电报大小的块,使用Markdown格式和纯文本回退
- 机器人命令 —
/start,/clear(重置对话历史记录),以及/tools(列出可用的MCP工具)
技术栈
- Java 21
- 弹簧靴3.5.10
- Spring AI 1.1.2(人类聊天模型+MCP客户端启动器)
- 电报机器人7.11.0(长轮询+客户端)
- Bucket4j(速率限制)
- 咖啡因(聊天记忆TTL驱逐)
- 龙目
- Gradle(包括包装)
入门指南
先决条件
- Java 21
- Telegram机器人代币(来自 @植物学家)
- 人类API密钥
- (可选)要连接的正在运行的MCP服务器
构建
./gradlew build
跑
./gradlew bootRun
应用程序在端口上启动 8083 默认情况下,开始轮询Telegram。
配置
配置存在于 src/main/resources/application.yml 并从环境变量中读取。设置以下内容(使用您自己的值):
export TELEGRAM_BOT_TOKEN=<your-telegram-bot-token>
export TELEGRAM_BOT_USERNAME=<your-bot-username>
export ANTHROPIC_API_KEY=<your-anthropic-api-key>
export MCP_SERVER_URL=<your-mcp-server-url> # e.g. http://localhost:8082/
关键配置属性:
| 属性 | 描述 |
|---|---|
spring.ai.anthropic.api-key |
无烟煤API键(ANTHROPIC_API_KEY) |
spring.ai.anthropic.chat.options.model |
克劳德型号id |
spring.ai.mcp.client.streamable-http.connections.*.url |
MCP服务器URL(MCP_SERVER_URL) |
telegram.bot.token |
Telegram机器人令牌(TELEGRAM_BOT_TOKEN) |
telegram.bot.username |
Telegram机器人用户名(TELEGRAM_BOT_USERNAME) |
chat.context.max-messages |
每次聊天保留的最大消息数 |
chat.context.ttl-minutes |
对话TTL(分钟) |
rate-limit.requests-per-minute |
每用户请求限制 |
server.port |
HTTP端口(默认 8083) |
项目结构
src/main/java/com/navneet/telegrambot/
├── TelegramBotApplication.java
├── config/ # LLM/ChatClient, chat memory, rate limit, and Telegram bot configuration
├── handler/ # Telegram update handler (commands, rate limiting, dispatch)
├── service/ # LlmService — chat, history, and tool integration
├── dto/ # ChatMessage model
└── util/ # Telegram response formatting helpers
免责声明
这个项目是供教育和个人使用的。将API密钥和机器人程序令牌置于源代码管理之外。
