十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Automatisch 集成 OpenRouter:Create chat completion 动作全解析

Automatisch 集成 OpenRouter:Create chat completion 动作全解析 Automatisch 集成 OpenRouterCreate chat completion 动作全解析【免费下载链接】automatischThe open source Zapier alternative. Build workflow automation without spending time and money.项目地址: https://gitcode.com/GitHub_Trending/au/automatisch本篇技术指南聚焦 Automatisch 开源仓库中 OpenRouter 应用集成模块actions.md所声明的核心能力 ——Create chat completion创建聊天补全动作并结合仓库源码深入拆解其参数定义、底层调用链与认证机制。读完本文你将掌握如何在 Automatisch 流程中配置 OpenRouter 连接、如何正确填写 Messages、Temperature、Top P 等参数以复现可靠的 LLM 调用以及该动作在源码层面是如何构造请求、校验凭据并暴露模型动态数据的。OpenRouter 集成在 Automatisch 中的定位Automatisch 是一个开源的工作流自动化平台项目定位为开源 Zapier 替代品通过应用App 动作Action模型把不同服务串联起来。OpenRouter 是其中的一个 AI 类集成应用它允许你在 Automatisch 流程中直接调用托管在 OpenRouter 上的各类大语言模型而不必为每家模型提供商分别维护一套独立的连接配置。在仓库中该集成的入口位于 packages/backend/src/apps/openrouter/index.js它通过defineApp声明应用元信息import defineApp from ../../helpers/define-app.js; import addAuthHeader from ./common/add-auth-header.js; import auth from ./auth/index.js; import actions from ./actions/index.js; import dynamicData from ./dynamic-data/index.js; export default defineApp({ name: OpenRouter, key: openrouter, baseUrl: https://openrouter.ai, apiBaseUrl: https://openrouter.ai/api, iconUrl: {BASE_URL}/apps/openrouter/assets/favicon.svg, authDocUrl: {DOCS_URL}/apps/openrouter/connection, primaryColor: #71717a, supportsConnections: true, beforeRequest: [addAuthHeader], auth, actions, dynamicData, });从中可以看到几个关键事实该集成的 API 基地址为https://openrouter.ai/api支持连接supportsConnections: true并且在每次请求发出前都会执行addAuthHeader中间件注入鉴权头。整个 OpenRouter 集成对外只暴露了一个动作见 actions/index.js和一个动态数据源见 dynamic-data/index.js这正是文档 frontmatter 中items列表所渲染出的内容 —— 文档页通过 CustomListing.vue 组件把items数组以卡片形式展示出来方便用户在文档站点上快速定位可用动作。前置准备创建 OpenRouter 连接在使用Create chat completion动作之前需要先在 Automatisch 中建立 OpenRouter 连接。官方连接文档位于 packages/docs/pages/apps/openrouter/connection.md流程如下前往 OpenRouter 官网的 API Keys 页面创建一个新的 API Key。在 Automatisch 中添加 OpenRouter 应用连接把该 Key 粘贴到API Key字段。为连接填写一个在 Automatisch 界面中展示的屏幕名称Screen Name。点击保存即可开始在流程中使用 OpenRouter 集成。连接表单的字段定义在 auth/index.js 中screenName必填用于在 UI 中标识该连接与apiKey必填OpenRouter 账户的 API Key官方文档链接指向https://automatisch.io/docs/openrouter#api-key。两个字段都是只读不可复制的普通字符串输入框且均标记为required: true。凭据校验与鉴权注入连接保存时Automatisch 会调用 verify-credentials.js 校验 Key 是否有效const verifyCredentials async ($) { await $.http.get(/v1/models); };它向https://openrouter.ai/api/v1/models发起一次 GET 请求请求成功即认为凭据可用。类似的is-still-verified.js 在连接被复用时也会再次调用该端点确认 Key 仍然有效并返回true。真正把 Key 放进请求头的是 common/add-auth-header.jsconst addAuthHeader ($, requestConfig) { if ($.auth.data?.apiKey) { requestConfig.headers.Authorization Bearer ${$.auth.data.apiKey}; } return requestConfig; };这段代码在每次出站请求前执行只要连接数据中存在apiKey就会以Authorization: Bearer apiKey的标准形式注入请求头这也是 OpenRouter API 所要求的认证方式。Create chat completion 动作详解该动作是 OpenRouter 集成对外提供的唯一动作文档中对其描述为Creates a chat completion.创建一次聊天补全。其完整实现位于 packages/backend/src/apps/openrouter/actions/create-chat-completion/index.js核心行为是读取用户在流程步骤中填写的参数组装成 payload然后向POST https://openrouter.ai/api/v1/chat/completions发起请求并把响应原文存入动作执行结果。参数面板与取值规则Create chat completion在 Automatisch 步骤配置面板中共暴露 8 个参数覆盖了 OpenAI 兼容的 Chat Completions 接口常用入参。下表为各参数的定义要点来源动作定义中的arguments数组参数键名类型必填说明Modelmodeldropdown是目标模型选项由动态数据listModels拉取支持变量引用Messagesmessagesdynamic是对话消息列表每条包含 Role 与 Content 两个子字段Temperaturetemperaturestring否采样温度值越高模型越冒险建议有明确答案的任务用 0创意类任务用 0.9Maximum tokensmaxTokensstring否生成的最大 token 数prompt 与 max_tokens 之和不能超过模型上下文长度Stop sequencesstopSequencesdynamic否动态列表命中其中任意 token 即停止生成Top PtopPstring否核采样概率阈值0.1 表示只考虑概率质量前 10% 的 tokenFrequency PenaltyfrequencyPenaltystring否对高频重复词进行惩罚值越大输出越多样、越少重复Presence PenaltypresencePenaltystring否对已出现过的词进行惩罚值越大用词越丰富、越有创造性各参数解析要点如下Model模型下拉选项来自动态数据源listModels见下文同时variables: true表示该字段支持插入上一步骤的变量输出实现动态选模型。Messages消息列表动态字段默认值为一条{ role: system, body: }消息。每个条目由两个子字段构成role下拉选择可选system、assistant、user三种角色content字符串必填支持变量引用用于填写该角色的消息正文。Temperature / Maximum tokens / Top P / Frequency Penalty / Presence Penalty均为可选字符串且支持变量引用。值得注意的是源码把它们当作浮点数处理 —— 空字符串会被转换为undefined从而在最终 payload 中省略该字段。请求构造与发送的源码实现动作的run函数展示了参数到 API payload 的完整映射过程index.jsasync run($) { const nonEmptyStopSequences $.step.parameters.stopSequences .filter(({ stopSequence }) stopSequence) .map(({ stopSequence }) stopSequence); const messages $.step.parameters.messages.map((message) ({ role: message.role, content: message.content, })); const payload { model: $.step.parameters.model, messages, stop: nonEmptyStopSequences, temperature: castFloatOrUndefined($.step.parameters.temperature), max_tokens: castFloatOrUndefined($.step.parameters.maxTokens), top_p: castFloatOrUndefined($.step.parameters.topP), frequency_penalty: castFloatOrUndefined($.step.parameters.frequencyPenalty), presence_penalty: castFloatOrUndefined($.step.parameters.presencePenalty), }; const { data } await $.http.post(/v1/chat/completions, payload); $.setActionItem({ raw: data, }); }其中有三个值得注意的实现细节停用词过滤stopSequences是动态数组源码会先过滤掉内容为空的条目再展平为字符串数组赋给stop字段避免把空串作为停用 token 传给 API。浮点数转换辅助函数castFloatOrUndefined把空字符串映射为undefined其余值用parseFloat解析。这样JSON.stringify序列化时会自动丢弃值为undefined的键用户不填的可选参数就不会出现在请求体中等价于使用 API 默认值。消息规整messages被映射为{ role, content }结构只保留 UI 层定义的两个字段与 Chat Completions 接口的消息格式一致。动作执行成功后通过$.setActionItem({ raw: data })把 OpenRouter 返回的完整响应包含choices、usage等字段保存为动作输出后续步骤可以直接通过变量引用这些字段例如提取生成文本或 token 消耗量。动态数据模型列表的获取Model下拉框的候选值不是硬编码的而是通过动态数据源在运行时拉取。其实现位于 dynamic-data/list-models/index.jsexport default { name: List models, key: listModels, async run($) { const response await $.http.get(/v1/models); const models response.data.data.map((model) { return { value: model.id, name: model.id, }; }); return { data: models }; }, };它的工作流程是向https://openrouter.ai/api/v1/models发起 GET 请求把返回的模型列表中每个模型的id同时作为下拉框的value提交值与name展示名。这意味着 OpenRouter 上新增的模型会自动出现在 Automatisch 的下拉选项中无需升级 Automatisch 版本同时也意味着可选的模型完全取决于 OpenRouter 平台当前托管的模型。这一动态数据源还被认证流程复用verifyCredentials与isStillVerified调用的正是同一个/v1/models端点因此能拉到模型列表同时充当了凭据有效性校验的判定标准。在流程中使用该动作的实践建议综合文档与源码在 Automatisch 中配置 OpenRouterCreate chat completion动作时可以遵循以下实践先建连接再配动作确保 OpenRouter 连接的 API Key 已通过verifyCredentials校验即能成功访问/v1/models否则动作执行时请求会在鉴权环节被 OpenRouter 拒绝。消息结构按角色组织把系统提示词放在role: system的消息里把用户输入放在role: user的消息里如果上一步骤产生动态文本可直接在content字段引用变量。采样参数二者择一官方参数说明明确指出 Temperature 与 Top P 二者只建议调整一个不要同时大幅修改否则可能得到不可控的采样结果。合理设置停用序列利用Stop sequences动态字段控制生成边界空条目会被源码自动过滤不会影响请求。利用输出做二次加工动作把 OpenRouter 响应原文整体存入执行结果可通过后续步骤如 Formatter 或 Filter 应用解析choices[0].message.content提取最终文本或读取usage.total_tokens做用量统计。小结OpenRouter 集成虽然只暴露了一个Create chat completion动作但其设计是完整且自洽的连接层通过/v1/models校验凭据并在每次请求前注入 Bearer Token参数层覆盖了模型选择、多角色消息、采样与惩罚控制等 Chat Completions 核心入参动态数据层让模型列表与 OpenRouter 平台保持同步动作层则以一个清晰的run函数完成参数映射、请求发送与结果保存。对于需要在 Automatisch 流程中接入 LLM 能力的开发者而言这一集成提供了低成本、可复用的接入路径 —— 你只需要提供 API Key、挑选模型并组织好消息其余交给 Automatisch 的请求管线处理。【免费下载链接】automatischThe open source Zapier alternative. Build workflow automation without spending time and money.项目地址: https://gitcode.com/GitHub_Trending/au/automatisch创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表