AIRI Telegram Bot 部署指南:用 PostgreSQL 向量库与模型服务将 AIRI 接入 Telegram 📅 发布时间:2026/9/11 21:18:27 👁 浏览次数: AIRI Telegram Bot 部署指南用 PostgreSQL 向量库与模型服务将 AIRI 接入 Telegram【免费下载链接】airi Self hosted, you-owned Grok Companion, a container of souls of waifu, cyber livings to bring them into our worlds, wishing to achieve Neuro-samas altitude. Capable of realtime voice chat, Minecraft, Factorio playing. Web / macOS / Windows supported.项目地址: https://gitcode.com/GitHub_Trending/ai/airi本文基于 integrations/telegram-bot 的官方文档与源码系统讲解如何把 AIRI 以 Telegram Bot 的形式部署到自托管环境从获取 Bot Token、配置 LLM / Embedding 模型服务到初始化 pgvecto.rs 向量数据库、从源码启动 Bot 的完整流程。读完本文你将掌握一套可复现的Telegram 聊天机器人 向量记忆 模型工具调用部署方案并理解其 Agent 循环、动作系统与消息持久化的底层实现。一、整体架构一个需要三件套的独立服务AIRI 的 Telegram Bot 位于仓库的 integrations/telegram-bot 目录是一个独立包proj-airi/telegram-bot。它不像许多演示机器人那样开箱即用而是围绕三个基础设施组件构建Telegram Bot Token通过 BotFather 创建机器人后获得是机器人的身份凭证PostgreSQL 向量数据库仓库自带的 Compose 服务运行pgvecto.rs 0.4.0PostgreSQL 17ghcr.io/tensorchord/pgvecto-rs:pg17-v0.4.0并开启pgvector 兼容模式用于存储聊天记录、贴纸、照片与记忆片段的向量化表示模型服务分别需要对话模型chat-model和嵌入模型embedding-model两者都可以是 OpenAI 兼容接口例如 README 中示例的 OpenRouter 与本地 Ollama。官方文档明确指出该 Bot 设计为从源码运行The bot is intended to be run from source因此后续所有步骤都以 pnpm workspace TypeScript 源码启动为前提。二、前置条件安装依赖与准备环境在开始配置之前需要完成以下准备前置条件说明安装依赖在仓库根目录执行pnpm ipnpm workspace 会一并解析 telegram-bot 包及其 catalog 依赖创建 Telegram Bot通过 BotFather 创建并取得 Token可用的 Docker用于启动仓库自带的 PostgreSQL 向量服务模型服务准备 chat-model 与 embedding-model 服务二者通常为 OpenAI 兼容 API凭证安全警告Telegram Bot Token、数据库连接串与模型 API Key 必须只存放在本地的.env.local文件中严禁提交到版本库、截图或分享。文档原文明确要求Do not commit, screenshot, or share these values。三、配置环境变量.env.local全参数解读配置的第一步是生成本地环境文件cp integrations/telegram-bot/.env integrations/telegram-bot/.env.local仓库中的 integrations/telegram-bot/.env 定义了全部环境变量骨架完整参数如下DATABASE_URLpostgres://postgres:123456localhost:5432/postgres TELEGRAM_BOT_TOKEN LLM_API_BASE_URL LLM_API_KEY LLM_MODEL LLM_RESPONSE_LANGUAGE LLM_VISION_API_BASE_URL LLM_VISION_API_KEY LLM_VISION_MODEL EMBEDDING_API_BASE_URL EMBEDDING_API_KEY EMBEDDING_MODEL EMBEDDING_DIMENSION ADMIN_USER_IDS各参数的用途与取值要点参数作用要点DATABASE_URLPostgreSQL 连接串使用仓库 Compose 服务时为postgres://postgres:123456localhost:5433/postgres注意端口是5433见下文TELEGRAM_BOT_TOKENBot 凭证形如Bot ID:Token来自 BotFatherLLM_API_BASE_URL/LLM_API_KEY/LLM_MODEL对话模型服务如 OpenRouterhttps://openrouter.ai/api/v1/模型如deepseek/deepseek-chat-v3-0324:freeLLM_RESPONSE_LANGUAGE回复语言偏好示例值为English会被注入到系统提示词LLM_VISION_API_BASE_URL/LLM_VISION_API_KEY/LLM_VISION_MODEL视觉图片理解模型服务需支持图片输入示例为openai/gpt-4oEMBEDDING_API_BASE_URL/EMBEDDING_API_KEY/EMBEDDING_MODEL嵌入模型服务可用本地 Ollamahttp://localhost:11434/v1/模型如nomic-embed-textEMBEDDING_DIMENSION向量维度必须设置且与嵌入模型输出维度一致支持的值为768、1024、1536ADMIN_USER_IDS管理员用户 ID逗号分隔用于控制/add_sticker_pack等管理命令的权限见源码分析关键约束EMBEDDING_DIMENSION必须与嵌入服务实际输出维度一致。从 src/db/schema.ts 可以看到所有含向量的表都同时预定义了三个维度字段content_vector_1536: vector({ dimensions: 1536 }), content_vector_1024: vector({ dimensions: 1024 }), content_vector_768: vector({ dimensions: 768 }),也就是说数据库结构同时兼容 768 / 1024 / 1536 三种维度具体写入哪一列由EMBEDDING_DIMENSION决定配置不一致会导致向量写入与相似度检索失败。一个可直接对照的完整示例来自 README.mdDATABASE_URLpostgres://postgres:123456localhost:5433/postgres TELEGRAM_BOT_TOKENBot ID:Token # 从 BotFather 获取 LLM_API_BASE_URLhttps://openrouter.ai/api/v1/ LLM_API_KEYsk-or-v1-token LLM_MODELdeepseek/deepseek-chat-v3-0324:free LLM_RESPONSE_LANGUAGEEnglish LLM_VISION_API_BASE_URLhttps://openrouter.ai/api/v1/ LLM_VISION_API_KEYsk-or-v1-token LLM_VISION_MODELopenai/gpt-4o # 只要模型支持图片输入即可 EMBEDDING_API_BASE_URLhttp://localhost:11434/v1/ # ollama EMBEDDING_API_KEY EMBEDDING_MODELnomic-embed-text EMBEDDING_DIMENSION768 # 必须设置如果选择 Ollama 作为嵌入服务还需要先启动并拉取模型ollama start ollama pull nomic-embed-text四、初始化数据库pgvecto.rs 向量服务与 schema 推送4.1 启动 PostgreSQL 向量服务数据库初始化分两步。第一步是启动仓库 Compose 中的pgvector服务cd integrations/telegram-bot docker compose up -d --wait pgvector cd ../.. pnpm -F proj-airi/telegram-bot db:push文档特别强调只启动pgvector服务从而避免连带启动可选的 Grafana、Tempo、Prometheus 与 OpenTelemetry Collector 等观测组件。查看 docker-compose.yaml 可以看到完整服务清单服务镜像端口说明pgvectorpgvecto-rs:pg17-v0.4.05433:5432向量数据库宿主端口5433grafanagrafana/grafana3000指标/链路可视化可选tempografana/tempo:latest3200、9095链路追踪后端可选prometheusprom/prometheus9090指标采集可选otel-collectorotel/opentelemetry-collector4317、4318OTLP 收集器可选otel-tracing-testxk6-client-tracing—压测探针仅在--profile test时启用其中pgvector服务的关键配置包括密码固定为123456、通过 sql/init.sql 做初始化、数据卷挂载在.postgres/data、并带pg_isready健康检查。init.sql 的内容揭示了pgvector 兼容模式的实现方式ALTER SYSTEM SET vectors.pgvector_compatibilityon; DROP EXTENSION IF EXISTS vectors; CREATE EXTENSION vectors;即先开启 pgvecto.rs 的 pgvector 兼容配置再创建vectors扩展让上层代码可以使用标准vector类型。由于仓库 Compose 文件将 PostgreSQL 暴露在宿主端口5433使用该服务时DATABASE_URL必须按文档给出的值设置DATABASE_URLpostgres://postgres:123456localhost:5433/postgres注意与.env模板中的默认5432不同README 示例明确使用5433。4.2 推送 schemadb:push第二步执行pnpm -F proj-airi/telegram-bot db:push该命令在 package.json 中的定义为db:push: dotenvx run -f .env -f .env.local --overload --ignoreMISSING_ENV_FILE -- drizzle-kit push它通过dotenvx以.env.local覆盖.env的方式加载环境变量再调用drizzle-kit push将 src/db/schema.ts 中定义的 drizzle schema 直接推送到数据库而非生成迁移 SQL。drizzle.config.ts同样会加载env.local并读取DATABASE_URL作为目标连接。4.3 数据表结构向量记忆的地基推送到数据库的核心表包括chat_messages跨平台聊天消息记录含发送者、会话、是否回复等信息并保存content_vector_768/1024/1536三套向量列stickers/sticker_packs/recent_sent_stickers贴纸库及其描述向量、贴纸包注册、最近发送贴纸photos照片记录与image_base64、描述向量joined_chatsBot 加入的会话私聊 / 群组 / 频道chat_completions_history对话补全的历史请求 / 响应memory_fragments记忆项基础表working/short_term/long_term/muscle类型重要性 1-10 分、情感影响 -10~10 分、软删除deleted_at等memory_tags/memory_episodic/memory_long_term_goals/memory_short_term_ideas记忆标签、情景记忆、长期目标与梦境/灵感等上层记忆结构。值得注意的实现细节所有向量列都建了HNSW 索引并显式指定余弦距离算子例如index(chat_messages_content_vector_1536_index).using(hnsw, table.content_vector_1536.op(vector_cosine_ops)),这与 pgvecto.rs 在 pgvector 兼容模式下的 API 一致保证相似度检索的高效性。五、启动 Bot从源码运行一切就绪后在仓库根目录启动pnpm -F proj-airi/telegram-bot startstart脚本同样定义在 package.jsonstart: tsx --env-file.env --env-file-if-exists.env.local --max-old-space-size8192 src/index.ts要点解读使用tsx直接运行 TypeScript 源码从源码运行无需预先构建通过--env-file与--env-file-if-exists加载.env与.env.local后者存在才加载作为本地覆盖层--max-old-space-size8192将 Node 堆上限提升到 8 GB为长时间运行的大模型上下文与记忆处理预留内存入口为 src/index.ts。启动时 src/index.ts 会依次完成三件事初始化 OpenTelemetry SDK注册服务名moeru_ai.airi.telegram_bottrace 与 metric 默认发送到http://localhost:4318/v1/traces和/v1/metrics可由OTEL_EXPORTER_OTLP_*环境变量覆盖指标每 5 秒导出一次——这正是 docker-compose 中 otel-collector 端口4318的用途初始化数据库连接initDb()基于DATABASE_URL创建 drizzle 实例src/db/index.ts启动 Telegram BotstartTelegramBot()。README 也给出了最简启动姿势docker compose up -d会一次性拉起全部服务包括可观测性组件docker compose up -d pnpm run -F proj-airi/telegram-bot start六、Bot 工作原理Agent 循环与动作系统了解为什么这样部署有助于排查问题。从 src/bots/telegram/index.ts 可以看到它并非简单的收到消息 → 调 LLM → 回复流水线而是一个自主 Agent 循环消息入队文本、贴纸、图片消息各自注册了处理器message:text、message:sticker、message:photo通过processedIdsSet去重后进入messageQueue贴纸和图片会先经interpretSticker/interpretPhotos调用视觉模型转换成文字描述interpreting → ready状态机落库与投喂每条消息通过recordMessage写入chat_messages含向量并追加到该会话的unreadMessages上限 100 条决策循环handleLoopStep调用imagineAnAction让对话模型基于当前消息、历史动作与未读消息决策下一个动作再由dispatchAction分派执行执行结果作为新的上下文喂回模型形成while (typeof result function)的连续循环周期自驱loopPeriodic每 60 秒主动触发一次决策loopIterationPeriodicForExistingChat/loopIterationPeriodicWithNoChats使 Bot 在无人发言时也能自主行动上下文窗口管理单个会话messages超过 20 条时裁至最近 5 条、actions超过 50 条时裁至最近 20 条并在上下文中注入系统因接近上下文上限而压缩记忆的提示避免模型窗口溢出。dispatchAction中实现的动作集合包括动作行为send_message向指定会话发送文本经 send-message.ts 处理支持多消息拆分与 JSON 结构化解析send_sticker按 file_id 发送贴纸发送前校验文件存在并记录正在发送 XX 贴纸反馈list_stickers列出记忆分区中的贴纸及其描述供模型挑选read_unread_messages读取某会话的未读消息若其中提到 Bot 用户名则重点回应list_chats列出已加入的会话 ID 与名称continue/break/sleep控制循环节奏继续执行、清空本会话上下文、暂停 30 秒此外源码还实现了/add_sticker_pack管理命令回复某条贴纸消息即可把整个贴纸包注册进数据库。该命令受ADMIN_USER_IDS权限保护isChatIdBotAdmin校验发送者 ID 是否在逗号分隔的管理员列表中非管理员会被直接跳过——这就是.env模板中ADMIN_USER_IDS的用途。七、安全与上线前检查文档Notes一节对生产部署提出明确要求本文结合源码再作强调凭证隔离数据库连接串、Bot Token、模型 Key 是敏感信息切勿提交.env.local。它应加入.gitignore只存在于运行主机本地备份与访问控制首次部署前务必确认数据库的备份方案与访问控制例如限制5433端口的暴露范围、为生产环境更换默认密码123456管理命令收敛ADMIN_USER_IDS若未配置isChatIdBotAdmin直接返回false所有管理命令对任何人都不可用——这是默认安全姿态上线时再显式放行受信用户可观测性组件按需启动只启动pgvector服务即可运行核心功能Grafana / Prometheus / Tempo 属于可选增强需配合otel-collector的4318端点接收 src/index.ts 导出的 trace/metric。八、小结至此你已完成一次完整的 AIRI Telegram Bot 部署安装依赖 → 通过 BotFather 取 Token → 配置.env.local对话模型 视觉模型 嵌入模型 向量维度对齐→ 用docker compose up -d --wait pgvector拉起 pgvecto.rs 向量库 →db:push建立含 HNSW 向量索引的 schema →pnpm -F proj-airi/telegram-bot start从源码启动。其底层是一个具备记忆持久化、贴纸/图片理解与自主动作循环的 Agent而不是普通的问答机器人。生产环境请格外注意凭证隔离、数据库备份与管理员权限配置。【免费下载链接】airi Self hosted, you-owned Grok Companion, a container of souls of waifu, cyber livings to bring them into our worlds, wishing to achieve Neuro-samas altitude. Capable of realtime voice chat, Minecraft, Factorio playing. Web / macOS / Windows supported.项目地址: https://gitcode.com/GitHub_Trending/ai/airi创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考