@formio/uag-engines (英语)
运行Form.io UAG的引擎包在他们自己的进程,在远程引擎协议后. UAG以内置方式到达他们 remote 引擎类型。 型号API密钥和型号流量随后会停留在这个容器内,而UAG则不持有型号证书. 任何引擎包都在这里工作,没有改变.
引擎服务器没有Form.io证书. UAG从不发送一个:每个请求只携带引擎服务器密钥. 对于研究,UAG增加了一个寿命很短的可测值符,而引擎服务器使用它来称呼UAG的 /mcp。该令牌只允许任务只读工具,带有呼叫者的身份.
运行它
这个 formio/uag-engines 图像包括官方引擎 : jev, (中文(简体) ), claude, (中文(简体) ), openai, (中文(简体) ), grok 财务报告和审定财务报表 gemini。 。 。 .
services:
formio-uag:
image: formio/uag
environment:
UAG_ENGINES: jev:remote,claude:remote
UAG_ENGINE_JEV_URL: http://uag-engines:3300
UAG_ENGINE_JEV_KEY: ${UAG_ENGINE_SERVER_KEY}
UAG_ENGINE_CLAUDE_URL: http://uag-engines:3300
UAG_ENGINE_CLAUDE_KEY: ${UAG_ENGINE_SERVER_KEY}
JWT_SECRET: ${JWT_SECRET} # signs the scoped tokens for research
# ... PROJECT, keys and the rest of the UAG's settings
depends_on:
uag-engines:
condition: service_healthy
uag-engines:
image: formio/uag-engines
environment:
UAG_ENGINES: jev,claude
TYPESAFE_API_KEY: ${TYPESAFE_API_KEY}
CLAUDE_API_KEY: ${CLAUDE_API_KEY}
UAG_ENGINE_SERVER_KEY: ${UAG_ENGINE_SERVER_KEY}
UAG_SERVER: http://formio-uag:3200 # where research calls /mcp
# No published port: only the UAG, on the same private network, reaches it.
在UAG上, <name>:remote 是这里托管的实例;默认情况下,它会在引擎服务器上使用同名的引擎(UAG_ENGINE_<NAME>_ENGINE 名称另一个)。 任何组合工作 : UAG_ENGINES=jev,claude:remote 保留 jev 在UAG, 和它的钥匙在那里, 移动只克劳德.
没有多克 : npm install @formio/uag-engines @formio/uag-claude运行 npx uag-engines 与相同的变量.
设置
| 变量 | 含义 | 默认 |
|---|---|---|
UAG_ENGINE_SERVER_KEY | 要求. 每个请求必须携带的密钥,至少32个字符. 无人机 remote 实例作为 UAG_ENGINE_<NAME>_KEY。 。 。 . | |
UAG_ENGINES | 要主机的引擎实例, 如 UAG : jev,fast:claude,local:openai至少一个. | |
UAG_ENGINE_<NAME>_<SETTING> 和每个引擎自己的变量 | 每个实例的设置, 解决在UAG上。 见每个引擎的README,或 官方发动机。 。 。 . | |
UAG_SERVER | UAG的URL,用于研究. 研究电话到 ${UAG_SERVER}/mcp,从不从请求中取出URL。 一定是这样 http 或者说 https没有它,研究摘要就被拒绝. | |
UAG_ENGINE_PATH | 安装了更多引擎包的绝对目录,例如挂载音量. | |
PORT, (中文(简体) ), HOST | 其所听处. 这个 formio/uag-engines 图像集 HOST=0.0.0.0。 。 。 . | 3300, (中文(简体) ), 127.0.0.1 |
SHUTDOWN_TIMEOUT | 在SIGTERM或SIGINT上,在起飞前让飞行中的请求完成多长时间,以毫秒为单位. | 10000 |
DEBUG | formio:uag:engine-server 还记录每个引擎故障堆栈。 没有它,每个失败都是stderr上的一行:请求id,路径,以及错误的名称,状态和消息,永远不要请求. |
引擎服务器拒绝启动, 打印 [uag-engines] Failed to start: 和原因,何时 UAG_ENGINE_SERVER_KEY 未设置或短于32个字符,当 UAG_ENGINES 无引擎名称, 当 UAG_SERVER 不是一个 http 或者说 https URL,或者当一个引擎无法被加载或创建时(例如缺失的软件包或需要的没有值的设置).
引擎在UAG上解决: UAG_ENGINES 被视为 @formio/uag-<type>,则 uag-engine-<type>从 node_modules 和上面的目录,然后从 <dir>/node_modules 每个目录在 UAG_ENGINE_PATH从工作目录上看, NODE_PATH 或节点的全局文件夹.
警卫
- 每条路线,包括
/health,需求Authorization: Bearer <UAG_ENGINE_SERVER_KEY>。在读取请求体之前,按恒定时间对密钥进行比较. - 将引擎服务器保留在只有UAG到达的私人网络上,而不发布其端口. 它会在启动时发出警告 当它听到一个公开的演讲.
- 研究只使用请求所要求的工具和UAG的
/mcp范围符号列表。 每一个电话都被记录下来,这个服务器所拨打的电话都是它回报的,不管引擎怎么说. 没有模型可以写出:令牌只允许只读工具. - 当UAG放弃一个请求(它的路由超时)时,引擎被中止,研究停止(还在连接时),MCP连接关闭.
- 发动机错误只有在发动机标记它们可以安全显示时才传递(
EngineError; 其它的都报告为"引擎失败(参见引擎服务器日志)". 每一个失败都用一行记录在这里,与错误的訊息:一个提供者SDK的訊息可以给一个账户或一个URL取名,所以将这些日志当作私用.
议定书
GET /health, (中文(简体) ), GET /v1/engines, (中文(简体) ), POST /v1/engines/:name/decide, (中文(简体) ), POST /v1/engines/:name/extract 财务报告和审定财务报表 POST /v1/engines/:name/generate (为生成代理引擎,在所附文档上免费提供文本),所有JSON protocol: 1 每一个身体。 见 @formio/uag-sdk/protocol 用于形状,和 引擎服务器 详细参考.
决定、提取和生成电话可能携带代理API请求 X-Request-Id。引擎服务器发送它与 每一个研究请求 /mcp 并把它放入它的日志,所以一个伐木代理可以分组一个运行的每个腿. 只有一个很短的符号(最多128个字母,数字, ., (中文(简体) ), _, (中文(简体) ), : 或者说 -)被传递;标题是任意选择的,协议版本不变.
构建图像
从寄存器根 :
docker build -f packages/engine-server/Dockerfile -t formio/uag-engines .
要添加一个引擎包, 要么生成图像( 图像运行于 node,所以切换到 USER root 页:1 RUN npm install --prefix /engines uag-engine-acme,然后回到 USER node,与 ENV UAG_ENGINE_PATH=/engines),或挂载包含 node_modules/uag-engine-acme 并列出在 UAG_ENGINE_PATH。 。 。 .
驾照:麻省理工.