如何将OpenTag部署到Railway:双服务生产架构完整教程
【免费下载链接】OpenTagOpenTag: The Channels SDK starter application, a self-hosted AI on-call triage bot for Slack and Microsoft Teams, built with AG-UI and LangGraph. Fork it and ship your own.项目地址https://gitcode.com/gh_mirrors/open/OpenTag点击查看免费下载OpenTag 是一个可自托管的 Slack 和 Microsoft Teams AI 知识库工作机器人基于 AG-UI 与 LangGraph 构建。本文将带你完成 OpenTag 部署到 Railway 平台的完整流程理解它的 agent runtime 双服务架构、配置环境变量、执行部署并验证上线最终在聊天频道里拥有一个真正可用的 AI 助手。一、先认识 OpenTag部署前你需要知道什么OpenTag 不是一个单体应用而是由两个职责明确的服务组成。部署前理解这个边界能避免绝大多数配置错误服务语言职责端口健康检查agentPython LangGraphAI 大脑推理、工具调用、联网研究8123/healthruntimeNode.js CopilotRuntime频道接入层连接 Slack/Teams、渲染原生 UI3000/api/copilotkit/info消息流向是Slack/Teams → CopilotKit Intelligence托管连接→runtime→ AG-UI 协议 →agent。runtime 通过 Railway 内网访问 agent不需要任何公网隧道或 Socket Mode。部署完成后它会这样工作二、部署前准备5 分钟清单 ✅在动手之前确认你已具备CopilotKit 账号一个 Intelligence 项目和 API KeyINTELLIGENCE_API_KEY免费方案即可OpenAI API Keyagent服务必需Slack 工作区能安装应用且已完成 Channel 创建务必先创建 Channel 再建 Slack 应用详见 README.md 的 Quick startRailway 账号已连接你的代码仓库⚠️ 一个关键提醒Channel 名称是认领制的。如果你 fork 了 OpenTag请给你的部署分配独立的 Intelligence 项目、API Key 和 Channel 名称否则多个 runtime 会为同一条消息互相竞争投递。三、OpenTag 部署步骤Railway 双服务上线 1. 克隆仓库并检查依赖git clone https://gitcode.com/gh_mirrors/open/OpenTag cd OpenTag pnpm install2. 阅读部署拓扑定义文件整个 Railway 拓扑以代码形式声明在.railway/railway.ts中只有两个服务、约 100 行agent 服务源目录agent/启动命令uvicorn main:app --host --port ${PORT:-8123}健康检查/health失败重启最多 5 次runtime 服务仓库根目录构建时执行pnpm exec playwright install chromium富 UI 渲染需要 Chromium启动命令pnpm runtime内网联动runtime 的AGENT_URL指向 agent 的 Railway 私有域名跨服务通信不出公网如果你想部署到自己的仓库或分支只需修改该文件中的REPO和BRANCH常量。3. 本地验证部署配置部署前先在本地评估配置确认两个服务的变量声明无误node node_modules/railway/dist/iac/bin.js仓库自带一份针对这份部署图的契约测试 app/railway.test.ts它会严格断言每个服务携带哪些环境变量、健康检查超时300 秒、重启策略甚至启动命令引用的脚本在 package.json 里真实存在。4. 执行 Railway 部署安装 Railway CLI 后执行railway init railway upIaC 文件会自动在 Railway 上创建agent和runtime两个服务并触发构建。5. 为每个服务配置环境变量这是最容易出错的一步。两份服务的变量不是随便放的设计逻辑是凭证跟着用它的服务走。agent 服务必填变量说明OPENAI_API_KEY唯一必填项模型访问凭证INTELLIGENCE_CHANNEL_NAME固定为open-tag同时是共享工具的默认 user_idLINEAR_API_KEY、GITHUB_PERSONAL_ACCESS_TOKEN等可选按需开启对应数据源runtime 服务必填变量说明INTELLIGENCE_API_KEYIntelligence 连接凭证AGENT_AUTH_HEADER与 agent 服务完全一致的共享密钥INTELLIGENCE_CHANNEL_NAME同样固定为open-tag⚠️两个高频坑AGENT_AUTH_HEADER必须在两个服务上手动设置成相同的非空值——Railway 不会替你同步不一致会导致所有 runtime 请求 agent 时返回 401Slack 应用务必关闭 Socket Mode并在 OAuth 页执行 Reinstall to Workspace否则会出现安装成功但收不到任何消息的假象完整的环境变量契约参考 setup.md 的 Railway 章节。四、部署验证三步确认真的上线了 服务全绿只是第一步真正可用要过这三关用真实人类账号发送机器人提问OpenTag what changed in the last deploy?—— 应收到有内容的回复同线程不 追问—— 应继续回复 即订阅了该线程新对话不 发消息—— 应该没有回复若回复了说明触发规则配错了最后把机器人拉进频道/invite OpenTagSlack 不会向机器人不存在的频道发送 mention 事件。上传一份 CSV它还会直接在 Slack 里渲染成原生图表并给出结论如果验证失败按顺序排查npx --yes copilotkitlatest channels status --json LOG_LEVELdebug pnpm runtime更严格的验证方式是用仓库自带的 Slack 实时测试框架说明见 e2e/README.md。五、常见问题与故障速查症状原因解法Slack 装好了但毫无反应Socket Mode 开着或没 Reinstall关掉 Socket ModeReinstall 并更新 Signing Secretruntime 请求 agent 返回 401两端AGENT_AUTH_HEADER不一致两边设为相同非空值收到终端没见过的回复Channel 名称冲突别处 runtime 抢走了投递为部署分配独立的 Channel 名称部署反复重启启动命令与脚本对不上参考 app/railway.test.ts 的断言核对渲染图表/图片失败runtime 缺少 Chromium 或系统库确认RAILPACK_DEPLOY_APT_PACKAGES构建变量生效六、延伸阅读部署拓扑源码.railway/railway.ts完整环境变量契约与 Railway 说明setup.md运行时入口与生命周期server.ts环境默认值如 Intelligence 端点app/env.ts频道行为与触发规则app/channel.tsx协作开发约定AGENTS.mdAWS 部署替代方案ECS Fargate Secrets Managerdeployment/aws/README.md双服务架构 声明式 IaC 契约测试让 OpenTag 的 Railway 部署既清晰又可审计。Fork 它换上你自己的 agent 与工具就能拥有专属的 AI 值班助手。赞分享【免费下载链接】OpenTagOpenTag: The Channels SDK starter application, a self-hosted AI on-call triage bot for Slack and Microsoft Teams, built with AG-UI and LangGraph. Fork it and ship your own.项目地址https://gitcode.com/gh_mirrors/open/OpenTag点击查看免费下载相关推荐终极指南:trackerslist 一键解决 BT 下载速度慢、连接不稳定的完整方案终极指南:trackerslist 一键解决 BT 下载速度慢、连接不稳定的完整方案 是不是常遇到这种场景:BT 下载速度只有几百 KB,连接数死活上不去,进度从零到生产Text2Video-Zero零样本视频生成模型部署全指南从零到生产Text2Video Zero零样本视频生成模型部署全指南 Text2Video Zero是ICCV 2023 Oral收录的创新项目它突破性地将CloudForestGo语言中的高性能随机森林库完全指南CloudForestGo语言中的高性能随机森林库完全指南 CloudForest是Go语言中一个功能强大的高性能随机森林库专为机器学习任务设计。这个库实现机器学习创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

广东工业大学数据结构课设与实验:可运行、可调试、可教学的完整工程包

广东工业大学数据结构课设与实验:可运行、可调试、可教学的完整工程包

简介:本资源是广东工业大学《数据结构》课程设计与实验的完整工程实践包,面向计算机类专业本科生及自学数据结构的学习者,聚焦B树实现与池塘降雨模拟两大典型课设课题,有效支撑课程设计、毕业设计、大作业及工程实训等场景。压缩包…

2026/10/14 15:59:05 阅读更多 →
Akka.NET Akka.Hosting 健康检查深度解析:集成 Microsoft.Extensions.Diagnostics.HealthChecks 的实战指南

Akka.NET Akka.Hosting 健康检查深度解析:集成 Microsoft.Extensions.Diagnostics.HealthChecks 的实战指南

后端微服务 【免费下载链接】akka.net Canonical actor model implementation for .NET with local distributed actors in C# and F#. 项目地址: https://gitcode.com/gh_mirrors/ak/akka.net 点击查看 免费下载 本文以 Akka.NET 仓库中 health-checks.md 文档为…

2026/10/14 15:59:05 阅读更多 →
手把手拆解CoolWeather:Android新手必做的天气项目实战

手把手拆解CoolWeather:Android新手必做的天气项目实战

如果你学 Android 学到一定程度,整天对着 TextView、Button 打转,想找个完整项目练手,那 CoolWeather 这个名字多半听过。它是《第一行代码》里贯穿后半本的重头戏,一个联网的天气应用——启动之后先选城市,然后展示当…

2026/10/14 15:58:04 阅读更多 →

最新新闻

AI Agent状态清理:超时重试背后的系统性风险与四维治理

AI Agent状态清理:超时重试背后的系统性风险与四维治理

1. 这不是超时和重试的问题,是状态管理的系统性溃败“给 AI Agent 加超时和重试后,我才发现真正的坑在状态清理”——这句话刚在内部技术群刷出来时,我正盯着一个跑了37分钟、卡在waiting_for_tool_execution状态、内存占用飙升到4.2GB却毫无…

2026/10/14 16:41:53 阅读更多 →
嵌入式Qt记事本开发全链路:从交叉编译到中文文件IO

嵌入式Qt记事本开发全链路:从交叉编译到中文文件IO

简介:这是一份基于Qt6开发的跨平台记事本项目源码,面向嵌入式与桌面应用开发初学者及Qt进阶学习者,聚焦GUI界面构建、文件编码处理与轻量级文本编辑功能实现。项目完整呈现了现代C在Qt框架下的典型工程实践,涵盖主窗口&#xff08…

2026/10/14 16:41:53 阅读更多 →
计算机系统概论第一章答案精讲:ISA、微架构与算法性质

计算机系统概论第一章答案精讲:ISA、微架构与算法性质

简介:计算机系统概论(原书第二版)第一章习题答案以PDF形式提供,面向计算机专业学生、考研读者和自学入门者,用于对照教材习题检验对计算机系统基础概念的掌握。内容选自原书附录的精选解答,覆盖冯诺依曼通用…

2026/10/14 16:41:53 阅读更多 →
远视储备与近视防控:从原理到实操的家长指南

远视储备与近视防控:从原理到实操的家长指南

1. 远视储备不是“储备”,而是一笔会不断消耗的视力存款1. 远视储备不是“储备”,而是一笔会不断消耗的视力存款1.1 远视储备到底是什么很多家长第一次听到“远视储备”这个词,是在幼儿园体检或者眼科门诊的报告单上。医生指着上面的数字说&a…

2026/10/14 16:41:53 阅读更多 →
Python数据挖掘实战:K均值聚类从原理到应用

Python数据挖掘实战:K均值聚类从原理到应用

1. 从一个真实需求说起:为什么K均值聚类值得你花时间搞懂做数据挖掘这些年,我越来越觉得,K均值聚类是那种“看起来简单、用起来真香、但踩坑也真不少”的算法。很多刚入门的朋友一听到“无监督学习”四个字就头大,觉得没有标签怎么…

2026/10/14 16:41:53 阅读更多 →
MinGW-w64离线安装包:断网Windows下C/C++工具链部署指南

MinGW-w64离线安装包:断网Windows下C/C++工具链部署指南

简介:MinGW-w64是为64位Windows系统打造的GCC工具链离线安装包,面向需要在Windows环境下学习或开展C语言开发的程序员。压缩包约2000个文件、133.98MB,主要由h头文件、Python脚本、a静态库、pyc编译文件、exe可执行程序、dll动态库及少量c源文…

2026/10/14 16:40:52 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起:它到底想解决什么问题第一次看到"AnyPS5"这个标题,我脑子里冒出来的第一个念头是:这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述:Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师,我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性,实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景,也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间,确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中,这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/14 16:30:29 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 22:01:27 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 7:53:34 阅读更多 →