一个基于 Telegram Bot 的 AI 对话项目,支持:
- 单用户(白名单)访问控制
- 多对话管理(新建、切换、删除、历史)
- 角色提示词(系统提示词)管理
- 每个对话固定角色,不可切换
- 请求超时与简单速率限制
- 本地运行与 Docker 部署
/new [标题]:新建对话,先展示角色列表,再通过回复编号/名称选择角色/list:查看对话列表/switch <ID>:切换对话/delete <ID>:删除对话(至少保留一个)/history [ID]:查看历史记录/roles:查看角色列表与当前对话角色
.
├─ chat.py
├─ requirements.txt
├─ Dockerfile
├─ docker-compose.yml
├─ .env.example
└─ data/
├─ roles/ # 角色提示词,*.txt(文件名即角色名)
└─ sessions/ # 每个用户的会话数据,<user_id>.json
复制模板并填写:
cp .env.example .envWindows PowerShell:
Copy-Item .env.example .env关键配置:
TELEGRAM_BOT_TOKEN:BotFather 生成的机器人 TokenLLM_API_KEY:你的模型平台 API KeyLLM_BASE_URL:模型平台 OpenAI 兼容接口地址LLM_MODEL:模型名称LLM_REQUEST_TIMEOUT_SECONDS:单次请求超时(秒)RATE_LIMIT_SECONDS:同一用户最小请求间隔(秒)ALLOWED_TELEGRAM_USER_IDS:允许访问的 Telegram 用户 ID(逗号分隔)
在 data/roles/ 下放置至少一个 .txt 文件,例如:
data/roles/助手.txtdata/roles/程序员.txt
文件内容就是该角色的系统提示词。
pip install -r requirements.txtpython chat.pydocker compose up -d --builddocker compose logs -fdocker compose down- 不要提交
.env到仓库 - 仅在
ALLOWED_TELEGRAM_USER_IDS中保留你自己的用户 ID - 定期轮换
TELEGRAM_BOT_TOKEN与LLM_API_KEY - 服务器部署时建议用普通用户运行容器/进程,不使用 root
请确认 data/roles/ 下至少有一个 .txt 文件。
请检查:
TELEGRAM_BOT_TOKEN是否正确ALLOWED_TELEGRAM_USER_IDS是否包含你的 Telegram IDLLM_BASE_URL与LLM_MODEL是否可用- 日志中是否有超时/鉴权错误