云原生后端运维【免费下载链接】TerminusOpen-Source Personal Cloud OS for Always-On Agents项目地址https://gitcode.com/gh_mirrors/terminus2/Terminus点击查看免费下载本文围绕 OlaresTerminus 开源个人云操作系统中olares-cli router call translate这一翻译调用命令展开它覆盖translate、--detect、--languages、--transcript四条数据面路由的完整用法与参数语义并结合 翻译命令源码、transcript 路由实现 与对应测试用例讲清“按段翻译”和“整段对话翻译”的本质差异、64 轮上限、id 对齐契约和失败回合的在位返回机制。读完后你可以直接从命令行完成单句翻译、语言识别、语言对核查以及把 diarizer 或会议工具产出的整份对话记录翻译成分回合、可追溯的结果。前提调用契约与版本要求translate是router call家族的一员所有调用动词共享同一份调用契约凭证、--model的取值规则、如何判读拒绝信息完整说明见 olares-router-calling.md。对翻译来说有三点与契约文档直接相关不需要 API key。Router 的/v1数据面按顺序读取三种身份sk-*Bearer 凭证、调用应用的x-caller-appid、个人的X-BFL-USER。后两种由 Olares 边缘写入因此不带任何凭证的调用会以“当前 profile”的身份到达 Router而不是匿名。脚本中希望把密钥移出进程列表时可以传--api-key sk-...或环境变量OLARES_ROUTER_API_KEY。translate是全部call动词中唯一没有--model旗标的。从 call.go 源码注释 看翻译路由本身不携带model字段Router 会按调用解析翻译默认模型default-translate这一默认类别存在于 Router 的注册表中但没有任何调用者可以指定它所以 CLI 干脆不提供--model——“请求里根本放不下的值做成旗标只会静默地什么都不做”见 call_translate.go 头部注释。适用前提router全部动词要求 Olares 1.12.7Router 以 Market 列表中的router应用形式提供且为管理员可见应用技能入口 olares-router/SKILL.md 明确给出该版本下限。想知道当前部署里翻译默认类别由谁承接用olares-cli router route list --kind default四个入口翻译、识别、语言对清单、整段对话技能文档 olares-router-call-translate.md 给出的四条基础命令是olares-cli router call translate hello --to zh olares-cli router call translate --detect ¿dónde está? olares-cli router call translate --languages olares-cli router call translate --transcript meeting.json --to en它们分别对应四个上游路由见 endpoints.go 中的定义命令形态路由请求方法语义translate text/v1/translatePOST单条文本翻译文本为位置参数或 stdintranslate --per-line/v1/translate/batchPOST逐行批量翻译按输入顺序一行一个结果translate --languages/v1/languagesGET列出当前模型服务的语言与语言对不翻译任何东西translate --detect/v1/detectPOST仅报告文本语言附置信度不翻译translate --transcript file/v1/translate/transcriptPOST整段对话翻译逐回合按 id 返回结果参数上的核心规则只有一条--to在翻译时必填--from可省——省略时由模型自行检测源语言。源码 call_translate.go 中请求结构体把这一点写得很直白From是omitempty并附注释说明“短文本上检测最不可靠值得显式命名源语言”。若未提供--to命令会在本地直接报错并提示先跑--languages查看该模型能服务哪些语言对。--languages先于一切翻译动作的检查--languages是面对陌生部署时应当第一个跑的命令。一个模型能服务的语言对是该模型的属性不是“翻译”这件事的属性模型没被构建来处理的语言对会被拒绝而不是绕道英语近似见 call_translate.go 头部注释。响应结构为languages语言列表加pairsfrom/to对renderLanguages 渲染时会按源语言分组、以FROM/INTO两列表格输出——因为“某个语言能翻成哪些语言”才是使用者真正要问的问题。--detect带置信度的语言识别--detect读取一条文本并报告其语言不翻译。响应结构 detectResponse 携带language和可选的confidenceCLI 默认输出形如es 93% sure的一行-o json则原样输出上游响应。注意--languages与--detect互斥同时传入会被本地拒绝call_translate.go#L125-L126。单条与逐行翻译--per-line 与批量上限不带--per-line时位置参数或以空格拼接后的参数整体作为一条文本走/v1/translate没有参数时读 stdin但 stdin 是交互终端时会被直接拒绝——“终端里没有文本是一个错误而不是悬停邀请”见 readPromptArgs 的注释。--per-line走/v1/translate/batch一次请求翻译整个字符串文件且“哪一行是哪一行”不丢失。translateLines 中有两个值得注意的本地约束批量上限 64 行。常量translateBatchLimit 64是上游自己的上限在本地先检查是为了让管道进长文件的调用者收到“用split -l 64之类方式拆分输入”的提示而不是整批被拒、一行都没翻出来。空行丢弃、保持顺序。readLines 按行读取并去掉空行扫描缓冲区上限放大到 4 MiB“这里的一行可能是整份文档”。输出逐行打印顺序与输入一致因此结果可以直接粘贴回输入文件对应的位置。--html旗标声明文本是 HTML保留标记、只翻译标记之间的内容请求结构体中的HTML字段会原样带给上游。典型的管道用法来自命令自身的帮助文本cat strings.txt | olares-cli router call translate --to de --per-line olares-cli router call translate --to en --from ja notes.txt--transcript把对话当“一段”而不是“一行一行”来翻译--transcript file是第四条路线也是唯一不是逐条文本处理的路由它把整段对话作为一个 stretch 翻译模型在翻译每一行之前会先读该行前后的回合然后按发送时携带的 id、每回合一条结果作答——响应从不比请求更短因此不会有任何一条译文错位到错误的回合上call_translate_transcript.go 头部注释。凡是 diarizer 或会议工具产出的东西都该走这条路。对比 [--per-line](https://link.gitcode.com/i/c6335e7c46cfe3f929abbfa17de7e9b1#L15-L18 的文档表述)同一份文件用--per-line翻译时每个回合在“周围没有任何东西”的状态下被独立翻译——这正是两词回复被译成 yes 而本意是 right 的原因。两条路线的差异就是这条路由存在的理由所以只有当各行确实互不相关时才用--per-line事实上 CLI 也强制二者互斥同时传入--transcript和--per-line会在本地报错。输入文件两种形态都接受readTranscript 接受两种 JSON 形态判断依据是文件首个非空白字符是否为[裸segments数组——diarizer/会议工具直接产出的机器文件[ {id: 1, speaker: A, text: 对}, {id: 2, speaker: B, text: 我们下周二上线} ]携带segments的对象可另附context、background、glossary{ from: zh, to: en, segments: [ {id: 1, speaker: B, text: ready?}, {id: 2, speaker: A, text: 对} ], context: {before: [{speaker: B, text: ready?}]}, background: sprint review, glossary: [{source: 沉浸式, target: immersive}] }要求调用者先编辑机器产出的文件才能翻译被实现者明确视为反模式——两种形态都读测试 TestATranscriptIsReadWhicheverShapeItArrivedIn 锁定该行为。几个字段语义上的细节值得注意segments里每回合的id是调用者自己的命名原样返回因此必须在一次请求内唯一speaker可选只用于渲染输出。context.before是模型只读不译的行——transcriptLine 刻意没有id“不能被命名的行就不应被期望返回”这正是上下文不会混进答案的机制。路径传-时从 stdin 读取。64 轮上限与拆分策略transcriptSegmentLimit 64与批量翻译的上限一致checkTranscript 在发送前本地校验。超限时命令会拒绝请求并直接给出拆分方法把转录拆开、把每一部分的尾部带进下一部分的context。这是文档中“64 turns is the ceiling, and splitting means carrying the tail of each part into the next onescontext”的源码出处——TestATranscriptLongerThanOneRequestSaysHowToSplitIt 断言拒绝信息必须包含拆分指引。本地校验另外拒绝两类请求空segments“没有任何可翻译的回合”和缺失/重复的id。重复 id 在上游是一次针对整个请求的 400在本地则能精确说出“第 1 回合和第 3 回合共用了 ida”TestTwoTurnsCannotShareAnId。--background 与 --term命令行注入上下文--background和可重复的--term sourcetarget从命令行向请求注入background与glossary两个字段call_translate.go#L176-L179olares-cli router call translate --to en --transcript meeting.json \ --background sprint review \ --term 沉浸式immersive --term 灰度canaryparseGlossary 用切割每个词对两侧去空白后都必须非空否则报--term takes sourcetarget, and … is not that。这两个旗标只属于--transcript不带--transcript使用会被本地拒绝“--background和--term描述的是对话而只有--transcript翻译对话”因为单条翻译路由的请求结构里根本没有这些字段。输出对齐才是重点非 JSON 模式下renderTranscript 打印TURN/SPEAKER/TRANSLATION三列表格把答案印在它回答的回合旁边——“这条路由的要点就是对齐裸的译文列表表现不出任何对齐”。某回合翻译失败时该结果携带error字段并在原位打印为(failed: reason)随后在表格末尾汇总2 of 60 turns failed and are marked above. The rest are translated and in place; re-send only the failed ids.即失败的回合带着失败原因留在原位整页其余部分仍然可用修复方式是只重发失败的那些 id而不是整份重译。测试 TestAFailedTurnIsPrintedInPlaceRatherThanDropped 锁定“原位打印而非丢弃”的行为。-o json则直接输出上游的{segments:[...]}响应适合需要程序化处理对齐结果的场景。超时与长请求transcript 路由经由 prepareLongRequest 准备客户端整段对话可能包含几十回合这条调用使用“无客户端超时”的 HTTP 配置longRequest档位与短请求档位的默认超时区分开避免长转录在网关侧被客户端先掐断。判读失败与调用契约的交集翻译路由的失败大多落在 调用契约 的通用判读表里对翻译最相关的是两类no_default_model翻译默认类别default-translate背后没有任何模型。这是新安装环境的典型失败——Router 拒绝一个没有模型承接的类别而不是近似处理。用olares-cli router route list --kind default确认该类别现状因为translate没有--model旗标你无法通过换模型绕过它只能让部署侧让某个模型承接翻译默认类别。5xx 且响应体为空Router 背后没有任何应答者翻译模型应用已停止或仍在加载权重此时应转入 诊断层 判断是哪一层的问题。每次被接受的调用都会落成一条 usage 记录包括上游失败的所以失败后olares-cli router usage list --limit 5能立刻看到 Router 记下了什么没有 usage 行则说明调用在 Router 路由之前就被拒了。小结选哪条路线场景命令单句/文档级翻译源语言未知olares-cli router call translate --to zh … --from ja短文本建议显式给--from翻译一整份字符串文件cat strings.txt \| olares-cli router call translate --to en --per-line≤64 行空行丢弃顺序保真不确定该用什么语言对olares-cli router call translate --languages只要识别语言olares-cli router call translate --detect ¿dónde está?diarizer/会议工具产出的整份对话olares-cli router call translate --transcript meeting.json --to en --background … --term srctgt≤64 回合超限拆分并带尾进context实现层面的关键保证都可以从仓库验证端点常量见 endpoints.go本地校验、glossary 解析与原位失败渲染见 call_translate_transcript.go行为契约由 call_translate_transcript_test.go 逐条锁定而translate作为“唯一没有--model的调用动词”这一特殊地位也由 TestEveryCallVerbFallsBackToACategory 显式声明为刻意的例外。赞分享云原生后端运维【免费下载链接】TerminusOpen-Source Personal Cloud OS for Always-On Agents项目地址https://gitcode.com/gh_mirrors/terminus2/Terminus点击查看免费下载相关推荐Olares Router 调用实战Terminus 中 router call 的文本、嵌入、重排与网络能力全解Olares Router 调用实战Terminus 中 router call 的文本、嵌入、重排与网络能力全解 在 TerminusOpen Sourc云原生后端运维Terminus Olares Publish 技能实战Market Manifest 本地化、四个文案字段与多语言规范Terminus Olares Publish 技能实战Market Manifest 本地化、四个文案字段与多语言规范 本篇围绕 Terminus 仓库中云原生后端运维Bifrost三星固件下载与解密的一站式跨平台解决方案 Bifrost三星固件下载与解密的一站式跨平台解决方案 还在为三星设备刷机而烦恼吗面对复杂的固件下载、繁琐的解密流程你是否感到无从下手Bifros桌面应用上一篇OpenSeeD核心架构解析Transformer在开放词汇分割中的应用下一篇EssentialsX注册表工具枚举类型与字符串映射创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考