{"id":"785cd016-64e0-44b7-9946-f03be159130c","entityType":"agent","slug":"clawhub-knixie-mongolian-llm","name":"mongolian-llm","canonicalUrl":"https://www.xpersona.co/agent/clawhub-knixie-mongolian-llm","canonicalPath":"/agent/clawhub-knixie-mongolian-llm","generatedAt":"2026-10-09T22:49:38.290Z","source":"CLAWHUB","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"editorial-content","verified":true,"confidence":"high","updatedAt":"2026-10-09T17:13:02.430Z","emptyReason":null},"description":"须在 OpenClaw 配置 MONGOL_AI_SKILL_API_KEY（https://mongol.open-idea.net「API Key」）；调用 https://mongol.open-idea.net/api/v1。中文与传统/西里尔蒙古文互译、蒙语对话与创作、TTS、ASR、OCR、Word/... Skill: mongolian-llm Owner: knixie Summary: 须在 OpenClaw 配置 MONGOL_AI_SKILL_API_KEY（https://mongol.open-idea.net「API Key」）；调用 https://mongol.open-idea.net/api/v1。中文与传统/西里尔蒙古文互译、蒙语对话与创作、TTS、ASR、OCR、Word/... Tags: latest:1.0.36 Version history: v1.0.36 | 2026-05-18T02:10:39.312Z | user - Major documentation revision: modernized and greatly condensed SKILL.md for clarity and maintainability - Added references for TTS and","descriptionLabel":"Technical summary","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. 2.2K downloads reported by the source. Last updated 10/9/2026.","installCommand":"clawhub skill install s1725sj0g7eqaz0cnh9j3eqfp9851n2v:mongolian-llm","sourceUrl":"https://clawhub.ai/knixie/mongolian-llm","homepage":"https://clawhub.ai/knixie/skills/mongolian-llm","primaryLinks":[{"label":"View on ClawHub","url":"https://clawhub.ai/knixie/mongolian-llm","kind":"source"},{"label":"Homepage","url":"https://clawhub.ai/knixie/skills/mongolian-llm","kind":"homepage"}],"safetyScore":84,"overallRank":62,"popularityScore":67,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"须在 OpenClaw 配置 MONGOL_AI_SKILL_API_KEY（https://mongol.open-idea.net「API Key」）；调用 https://mongol.open-idea.net/api/v1。中文与传统/西里尔蒙古文互译、蒙语对话与创作、TTS、ASR、OCR、Word/..."},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-10-09T17:13:02.430Z","emptyReason":null},"protocols":[{"protocol":"OPENCLEW","label":"OpenClaw","status":"self-declared","notes":"Declared in the public agent profile."}],"capabilities":[],"verifiedCount":0,"selfDeclaredCount":1,"capabilityMatrix":{"rows":[{"key":"OPENCLEW","type":"protocol","support":"unknown","confidenceSource":"profile","notes":"Listed on profile"}],"flattenedTokens":"protocol:OPENCLEW|unknown|profile"}},"adoption":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-09T17:13:02.430Z","emptyReason":null},"stars":null,"forks":null,"downloads":2235,"packageName":null,"latestVersion":"1.0.36","tractionLabel":"2.2K downloads"},"release":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-09T17:13:02.430Z","emptyReason":null},"lastUpdatedAt":"2026-10-09T17:13:02.430Z","lastCrawledAt":"2026-10-09T17:13:02.430Z","lastIndexedAt":null,"nextCrawlAt":"2026-10-10T17:13:02.430Z","lastVerifiedAt":null,"highlights":[{"version":"1.0.36","createdAt":"2026-05-18T02:10:39.312Z","changelog":"- Major documentation revision: modernized and greatly condensed SKILL.md for clarity and maintainability - Added references for TTS and document translation (new files: references/TTS.md, references/DOCUMENT-TRANSLATION.md) - Removed legacy files: README.md, manifest.json, package.json - Updated requirements, usage flow, and routing priority explanations for API endpoints - Output, billing, and routing rules now refer to dedicated reference documents for details","fileCount":13,"zipByteSize":13799},{"version":"1.0.35","createdAt":"2026-05-16T23:34:14.365Z","changelog":"- 环境变量名称从 MONGOL_OPEN_IDEA_API_KEY 更新为 MONGOL_AI_SKILL_API_KEY，须在 OpenClaw 中重新配置。 - metadata 字段同步更新 primaryEnv 为 MONGOL_AI_SKILL_API_KEY，以匹配新的变量名。 - 中文技能描述内涉及环境变量名称均已修订，其他功能保持不变。","fileCount":13,"zipByteSize":35901},{"version":"1.0.34","createdAt":"2026-05-16T11:20:49.013Z","changelog":"- 调用接口所需环境变量由 MENGGUYU_API_KEY 更名为 MONGOL_OPEN_IDEA_API_KEY，并需前往 mongol.open-idea.net 个人中心页面创建。 - 相关文档与描述同步更新，强调环境变量获取流程，确保与实际接口认证方式一致。 - 其余接口调用方式、输出规则、计费字段检查与模板无更动。","fileCount":13,"zipByteSize":35912},{"version":"1.0.33","createdAt":"2026-05-16T04:11:37.487Z","changelog":"- 明确规定 chat/completions 接口的 max_tokens 必须根据本轮 user.content 的真实码点字数自动估算，查表选取，禁止主观填写宽泛数值。 - max_tokens 推荐值与档位区间更新：超短问答 256，一般问答 768，中长文本 3072/4096，长文 6144/8192，并详细解释计算 L（码点数）的方法。 - 相关调用模板根据新规则示例，确保 max_tokens 写死为查表结果，不可凭感觉指定。 - 其它核心输出/计费等规则不变。","fileCount":13,"zipByteSize":35458},{"version":"1.0.32","createdAt":"2026-05-16T04:02:23.443Z","changelog":"- 增加了对对话（chat/completions）接口 max_tokens 具体选择范围的说明，短答、一般对话和长文分别推荐 512～8192。 - 对对话接口调用模板进行了调整，max_tokens 取值由原 8192 改为默认推荐 4096。 - 说明引用了 CHAT-COMPLETIONS.md 文档以帮助选择合适的 max_tokens 值。 - 其他内容与上版一致，无影响使用的逻辑变动。","fileCount":13,"zipByteSize":34005},{"version":"1.0.31","createdAt":"2026-05-16T02:06:12.574Z","changelog":"No functional or documentation changes in this version. - Version updated to 1.0.31. - No files were added, removed, or modified.","fileCount":13,"zipByteSize":33332},{"version":"1.0.30","createdAt":"2026-05-16T01:57:25.446Z","changelog":"No visible changes detected in this version. - No file changes were detected for version 1.0.30. - Behavior and documentation remain unchanged.","fileCount":13,"zipByteSize":32405},{"version":"1.0.29","createdAt":"2026-05-16T00:25:02.296Z","changelog":"**Changelog for version 1.0.29:** - 明确规定每次接口调用如发现计费字段，必须在业务回复后逐行转述本次扣费与余额，不可省略，多步链路需多行按顺序输出。 - 修订了输出模板与流程，统一“业务正文+计费转述”两段式答复。 - 新增自检清单，确保每次调用均检查并输出所有计费信息，严禁编造或遗漏金额。 - 细化计费读取来源和币种说明，避免漏查响应头或 JSON 字段的计费信息。 - 其他规则表述和场景示例更为细致，便于开发调试实施。","fileCount":13,"zipByteSize":32167}]},"execution":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":"clawhub skill install s1725sj0g7eqaz0cnh9j3eqfp9851n2v:mongolian-llm","setupComplexity":"low","setupSteps":["Setup complexity is classified as HIGH. You must provision dedicated cloud infrastructure or an isolated VM. Do not run this directly on your local workstation.","Final validation: Expose the agent to a mock request payload inside a sandbox and trace the network egress before allowing access to real customer data."],"contract":{"contractStatus":"missing","authModes":[],"requires":[],"forbidden":[],"supportsMcp":false,"supportsA2a":false,"supportsStreaming":false,"inputSchemaRef":null,"outputSchemaRef":null,"dataRegion":null,"contractUpdatedAt":null,"sourceUpdatedAt":null,"freshnessSeconds":null},"invocationGuide":{"preferredApi":{"snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-knixie-mongolian-llm/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-knixie-mongolian-llm/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-knixie-mongolian-llm/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-knixie-mongolian-llm/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-knixie-mongolian-llm/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-knixie-mongolian-llm/trust\""],"jsonRequestTemplate":{"query":"summarize this repo","constraints":{"maxLatencyMs":2000,"protocolPreference":["OPENCLEW"]}},"jsonResponseTemplate":{"ok":true,"result":{"summary":"...","confidence":0.9},"meta":{"source":"CLAWHUB","generatedAt":"2026-10-09T22:49:38.283Z"}},"retryPolicy":{"maxAttempts":3,"backoffMs":[500,1500,3500],"retryableConditions":["HTTP_429","HTTP_503","NETWORK_TIMEOUT"]}},"endpoints":{"dossierUrl":"https://www.xpersona.co/api/v1/agents/clawhub-knixie-mongolian-llm/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-knixie-mongolian-llm/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-knixie-mongolian-llm/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-knixie-mongolian-llm/trust"}},"reliability":{"evidence":{"source":"runtime-metrics","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No trust, reliability, or runtime telemetry is available."},"trust":{"status":"unavailable","handshakeStatus":"UNKNOWN","verificationFreshnessHours":null,"reputationScore":null,"p95LatencyMs":null,"successRate30d":null,"fallbackRate":null,"attempts30d":null,"trustUpdatedAt":null,"trustConfidence":"unknown","sourceUpdatedAt":null,"freshnessSeconds":null},"decisionGuardrails":{"doNotUseIf":["Contract metadata is missing or unavailable for deterministic execution."],"safeUseWhen":[],"riskFlags":["missing_or_unavailable_contract","trust_data_unavailable","schema_references_missing"],"operationalConfidence":"low"},"executionMetrics":{"observedLatencyMsP50":null,"observedLatencyMsP95":null,"estimatedCostUsd":null,"uptime30d":null,"rateLimitRpm":null,"rateLimitBurst":null,"lastVerifiedAt":null,"verificationSource":null},"runtimeMetrics":{"successRate":null,"avgLatencyMs":null,"avgCostUsd":null,"hallucinationRate":null,"retryRate":null,"disputeRate":null,"p50Latency":null,"p95Latency":null,"lastUpdated":null}},"benchmarks":{"evidence":{"source":"no-benchmark-data","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No benchmark suites or observed failure patterns are available."},"suites":[],"failurePatterns":[]},"artifacts":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"high","updatedAt":"2026-10-09T17:13:02.430Z","emptyReason":null},"readme":"Skill: mongolian-llm\n\nOwner: knixie\n\nSummary: 须在 OpenClaw 配置 MONGOL_AI_SKILL_API_KEY（https://mongol.open-idea.net「API Key」）；调用 https://mongol.open-idea.net/api/v1。中文与传统/西里尔蒙古文互译、蒙语对话与创作、TTS、ASR、OCR、Word/...\n\nTags: latest:1.0.36\n\nVersion history:\n\nv1.0.36 | 2026-05-18T02:10:39.312Z | user\n\n- Major documentation revision: modernized and greatly condensed SKILL.md for clarity and maintainability\n- Added references for TTS and document translation (new files: references/TTS.md, references/DOCUMENT-TRANSLATION.md)\n- Removed legacy files: README.md, manifest.json, package.json\n- Updated requirements, usage flow, and routing priority explanations for API endpoints\n- Output, billing, and routing rules now refer to dedicated reference documents for details\n\nv1.0.35 | 2026-05-16T23:34:14.365Z | user\n\n- 环境变量名称从 MONGOL_OPEN_IDEA_API_KEY 更新为 MONGOL_AI_SKILL_API_KEY，须在 OpenClaw 中重新配置。\n- metadata 字段同步更新 primaryEnv 为 MONGOL_AI_SKILL_API_KEY，以匹配新的变量名。\n- 中文技能描述内涉及环境变量名称均已修订，其他功能保持不变。\n\nv1.0.34 | 2026-05-16T11:20:49.013Z | user\n\n- 调用接口所需环境变量由 MENGGUYU_API_KEY 更名为 MONGOL_OPEN_IDEA_API_KEY，并需前往 mongol.open-idea.net 个人中心页面创建。\n- 相关文档与描述同步更新，强调环境变量获取流程，确保与实际接口认证方式一致。\n- 其余接口调用方式、输出规则、计费字段检查与模板无更动。\n\nv1.0.33 | 2026-05-16T04:11:37.487Z | user\n\n- 明确规定 chat/completions 接口的 max_tokens 必须根据本轮 user.content 的真实码点字数自动估算，查表选取，禁止主观填写宽泛数值。\n- max_tokens 推荐值与档位区间更新：超短问答 256，一般问答 768，中长文本 3072/4096，长文 6144/8192，并详细解释计算 L（码点数）的方法。\n- 相关调用模板根据新规则示例，确保 max_tokens 写死为查表结果，不可凭感觉指定。\n- 其它核心输出/计费等规则不变。\n\nv1.0.32 | 2026-05-16T04:02:23.443Z | user\n\n- 增加了对对话（chat/completions）接口 max_tokens 具体选择范围的说明，短答、一般对话和长文分别推荐 512～8192。\n- 对对话接口调用模板进行了调整，max_tokens 取值由原 8192 改为默认推荐 4096。\n- 说明引用了 CHAT-COMPLETIONS.md 文档以帮助选择合适的 max_tokens 值。\n- 其他内容与上版一致，无影响使用的逻辑变动。\n\nv1.0.31 | 2026-05-16T02:06:12.574Z | user\n\nNo functional or documentation changes in this version.\n\n- Version updated to 1.0.31.\n- No files were added, removed, or modified.\n\nv1.0.30 | 2026-05-16T01:57:25.446Z | user\n\nNo visible changes detected in this version.\n\n- No file changes were detected for version 1.0.30.\n- Behavior and documentation remain unchanged.\n\nv1.0.29 | 2026-05-16T00:25:02.296Z | user\n\n**Changelog for version 1.0.29:**\n\n- 明确规定每次接口调用如发现计费字段，必须在业务回复后逐行转述本次扣费与余额，不可省略，多步链路需多行按顺序输出。\n- 修订了输出模板与流程，统一“业务正文+计费转述”两段式答复。\n- 新增自检清单，确保每次调用均检查并输出所有计费信息，严禁编造或遗漏金额。\n- 细化计费读取来源和币种说明，避免漏查响应头或 JSON 字段的计费信息。\n- 其他规则表述和场景示例更为细致，便于开发调试实施。\n\nv1.0.28 | 2026-05-15T16:25:52.642Z | user\n\n**Audio ASR (语音识别) 增强及计费抓取规范升级**\n\n- 新增全面支持异步音频识别接口（POST /audio/async），确保长音频不超时，并补充异步轮询说明。\n- 计费/余额抓取方式强化，明确必须同时读取 HTTP 响应头和 JSON 正文，避免遗漏计费字段。\n- 增加 OCR → 翻译联动时禁止手动转录、转录只传递变量的强约束，保证准确流传。\n- ASR、TTS、轮询、计费各环节调整为更完善模板和连接策略，避免响应信息丢失。\n- 文档结构和说明同步优化，使接口使用和调用规范更为清晰。\n\nv1.0.27 | 2026-05-15T03:49:38.093Z | user\n\n**新增异步 TTS 轮询接口，全面升级文字转语音体验。**\n\n- TTS 合成：优先采用异步接口 POST /tts/async + 轮询 GET /tts/async/{jobId}，支持长文本朗读与更稳健处理。\n- 详细音色选择：朗读前必须完整列出 12 种音色，用户未选明确建议自动映射；语速仅需自然语言询问，无需复述数值。\n- 输出字段与路由说明同步更新：加入异步 TTS 输出规则，对长文本校核步骤等作出细致要求。\n- 调用与计费说明补充，明确 POST /tts/stream (SSE) 已移除，不再使用。\n- 其余接口与调用习惯保持不变。\n\nv1.0.26 | 2026-05-15T03:24:12.416Z | user\n\n- No file changes detected in this version.\n- No visible updates or feature changes for users.\n\nv1.0.25 | 2026-05-15T00:19:18.553Z | user\n\n- 支持 TTS 流式（SSE）端点，调用前必须询问或自动选择播音风格\n- TTS 更新为 POST /tts/stream/，响应音频需用 base64 解码，计费信息在事件 data 中转述\n- 文档和调用示例同步更新，明确 voice 选项及调用新流程\n- 语音合成部分旧描述已移除或替换为最新规则\n\nv1.0.24 | 2026-05-14T12:48:47.676Z | user\n\n- Updated SKILL.md and bundle contents.\n\nv1.0.23 | 2026-05-12T23:09:57.719Z | user\n\n- 精简与优化了文档结构，对接口路由、调用模板、输出规则进行归纳和明确分区。\n- 明确补充了 TTS（文字转语音）功能及路由，覆盖音频合成等新场景。\n- 输出约束更严格，所有接口回复仅允许目标字段原文，不得有任何说明、代码块、注释或修饰。\n- 更新了 API Key 配置说明，增加防止用户在对话框中泄漏 Key 的强提醒与操作建议。\n- 统一接口调用示例与参数格式，便于快速落地集成和开发者查阅。\n- 新增了各类任务（翻译、对话、TTS、OCR/ASR）输入路由判别简表。\n\nv1.0.22 | 2026-05-12T03:34:32.875Z | user\n\n- 新增蒙文/中文/西里尔文字转语音（TTS）能力，支持将文本直接合成为音频（POST /tts）。\n- 路由规则中加入TTS调用场景：如用户请求朗读、播放或合成音频时，优先使用TTS接口。\n- 统一计费表，明确TTS按输入字符数计费。\n- 更新调用模板和目标字段说明，TTS返回音频流，需保存为音频文件后播放。\n- 优化API key缺失时的用户提示内容。\n\nv1.0.21 | 2026-05-11T03:31:21.957Z | user\n\nNo code or documentation changes detected in this version.\n\n- No changes were made to the skill files or documentation.\n\nv1.0.20 | 2026-05-07T02:41:03.973Z | user\n\nVersion 1.0.20\n\n- 增加图片 OCR（/ocr）和语音 ASR（/audio）专用路由至接口优先级，以及相关判定规则\n- 在无 API Key 时的中文提示内容更新，强调不要在对话中直接粘贴密钥，推荐在终端配置\n- 明确图片、音频等情景需先OCR/ASR后再对内容路由，优化激活场景优先级\n- 其它细节补充与表述优化，细化接口路由及参数说明\n- 未涉及功能性代码变更（文档更新）\n\nv1.0.19 | 2026-05-07T00:29:27.572Z | user\n\nmongolian-llm 1.0.19\n\n- No file changes detected in this version.\n- No user-facing updates or functional changes.\n\nv1.0.18 | 2026-05-06T23:55:12.292Z | user\n\n**Changelog 1.0.18**\n\n- 移除了本地 Node.js 脚本 `scripts/mongolian-api.js` 和 `scripts/image-to-base64.js`，改为通用的 HTTPS 请求调用方式。\n- 新增参考文档 [references/HTTP-REQUESTS.md]，指导如何用平台无关的 HTTP 请求模板对接 API。\n- SKILL 文档大幅更新，删除脚本调用相关内容，所有 API 调用示例与流程均统一指向 HTTP 请求模板和 references 文档。\n- 计费摘要说明由依赖脚本输出调整为依据 HTTP 响应头处理。\n- 明确了环境不再强依赖 Node.js，兼容 OpenClaw/Gateway/HTTPS 客户端等多种调用方式。\n\nv1.0.17 | 2026-05-06T12:35:43.688Z | user\n\n- Clarified“调用前确认”规则，短文本可直接调用，长文/批量及高费用场景需用户确认后再调用。\n- 优化部分表述，细化计费与调用流程说明，未涉及功能变更。\n- 无文件更改，内容细节微调，保持原有使用和输出规范不变。\n\nv1.0.16 | 2026-05-06T12:26:33.584Z | user\n\n- 更新 ASR（语音识别）说明：明确音频由服务端转 PCM，Skill 不再本机执行 ffmpeg 等命令。\n- 文档结构和部分描述微调，提升接口行为描述准确性。\n- 其他规则和输出规范保持不变。\n\nv1.0.15 | 2026-05-06T11:34:31.376Z | user\n\n- 新增蒙古语语音识别（ASR）能力，支持音频转写为蒙文文本，参考场景和命令已补充于文档及触发词。\n- 扩展 description 和 triggers，支持 “语音识别”、“音频转写”等蒙语 ASR 场景自动激活。\n- 增加脚本和接口说明，统一 ASR 使用方式与输出约束（输出仅为文本，无修饰）。\n- 新增 references/ASR.md 文件，收录蒙古语语音识别相关说明。\n- 其余翻译与对话功能无实质调整，继续严格执行零输出泄漏与接口分流规则。\n\nv1.0.14 | 2026-05-06T10:36:17.733Z | user\n\n- 明确要求 Agent 调用 mongolian-api.js 脚本时必须保留计费行，不得添加 --no-billing 参数。\n- 补充“例外（账户人民币余额）”描述，强调 Agent 必须完整转述脚本输出的计费摘要，且不能改写金额或省略。\n- 删除原说明中关于通过参数 --no-billing 过滤计费信息的建议，改为全程显示计费信息。\n- 其他输出零泄漏和使用场景规则保持不变。\n\nv1.0.13 | 2026-05-06T09:43:47.037Z | user\n\n**Summary:**  \nThis version adds support for Word (.docx) and PDF document翻译 via the mongolian-api.js script.\n\n- 新增对 Word（.docx）和 PDF 文档翻译的脚本调用支持（分别为 `word-translate` 和 `pdf-translate`）。\n- 示例命令行和正文输出规则更新，介绍文档翻译的使用方式。\n- 其余输出约束、调用路由和零泄漏规则保持不变。\n\nv1.0.12 | 2026-05-06T03:01:55.760Z | user\n\n**Changelog v1.0.12**\n\n- 新增对 API 账户计费响应的规范化支持：允许在 API 目标正文后额外输出以 `[MENGGUYU_BILLING]` 开头的扣费摘要，且必须完整转述给用户，不得改写。\n- 明确脚本 `mongolian-api.js` 支持 `--no-billing` 参数，适用于管道只要纯正文、不要计费行的场景。\n- 完善输出约束说明：除上述计费摘要外，仍严格禁止任何非目标字段内容混入回复。\n- 不涉及其他功能或逻辑变动。\n\nv1.0.11 | 2026-04-30T13:30:54.873Z | user\n\n- No functional or documentation changes detected in this version.\n- Internal version increment for consistency or maintenance; behavior remains unchanged.\n\nv1.0.10 | 2026-04-30T12:45:37.318Z | user\n\n- 支持中文、传统蒙古文、西里尔蒙古文之间的互译，新增西里尔蒙文支持及相关触发词。\n- `/translation` API 现覆盖三文互译场景，包括蒙蒙互译（后台经中文中转）。\n- 文档和调用模板已同步扩展为支持 `from/to: zh|mw|mn` 参数。\n- skill 触发词和场景描述更新，全面涵盖西里尔蒙古文相关操作。\n- 其它调用流程和零泄漏机制保持不变。\n\nv1.0.9 | 2026-04-30T07:29:58.632Z | user\n\n- 移除了 PDF 文本提取脚本：`scripts/pdf-text-extract.py` 不再包含在技能包中。\n- 文档部分同步更新，删除了相关 PDF 提取脚本的指引和说明。\n- 技能今后仅支持 API 方式和现有 mongolian-api.js 脚本进行中文⇄传统蒙古文翻译、对话及图片 OCR。\n- 其它技能规则、调用模板和计费说明无变动。\n\nv1.0.8 | 2026-04-29T14:01:59.539Z | auto\n\n- 新增 PDF 文本提取支持，附带 Python 脚本 pdf-text-extract.py，可从本地或飞书链接自动提取 PDF 内容用于后续翻译或处理。\n- 文档中明确 PDF 提取场景，脚本调用示例增补对 PDF 的操作方法。\n- SKILL.md 相关接口说明与脚本用法同步更新，包含新的 PDF 预处理能力。\n- 其它文档细节与引用小幅修正、整理。\n\nv1.0.7 | 2026-04-29T10:11:36.257Z | user\n\nNo changes in code or documentation detected for this version.\n\n- No file modifications or updates.\n- Skill behavior and usage remain unchanged.\n\nv1.0.6 | 2026-04-29T09:35:21.735Z | user\n\n# mongolian-llm 1.0.6 Changelog\n\n- Relaxed API Key requirements：API Key 不再作为技能安装/发现阶段的强依赖，仅在业务调用前检查。\n- metadata: 移除了 `requires.env` 字段，精简为只配置 `primaryEnv`。\n- 触发与前置检查相关文本同步优化，明确“业务调用前”必须检查 API Key。\n- 其余接口规范、路由规则、调用流程无变动。\n\nv1.0.5 | 2026-04-29T06:12:12.102Z | user\n\nMongolian-llm 1.0.5\n\n- 新增支持图片文字识别（OCR），默认 `language=mn`，补充调用规范与脚本调用方式。\n- 增加文档 [references/OCR.md]，说明 OCR API 用法。\n- 新增脚本 [scripts/image-to-base64.js]，用于图片转 base64，辅助 OCR 场景。\n- SKILL.md 完善接口路由，明确中文/蒙文回复判别优先级，补充 OCR 脚本用法说明。\n\nv1.0.4 | 2026-04-28T03:24:13.964Z | auto\n\n**本版本是一次重要升级，全面强化了高安全输出和接口调用规范，新增自动脚本调用能力：**\n\n- 新增脚本 `scripts/mongolian-api.js`，支持用 Node.js 稳定调用 API 并自动提取目标正文，避免输出 JSON。\n- 强制“零泄漏”：用户可见回复只能是 API 目标字段原文，禁止带路由判断、调用日志、JSON、token 信息等任何修饰说明。\n- 明确要求每轮请求重新路由，禁止沿用上一轮的接口选择，确保出错概率最小化。\n- 详细更新了前置检查、调用前确认、错误处理策略；完善了“批量、定时、远程”分工边界说明。\n- references 文档内全面修订接口说明内容，与 SKILL.md 严格同步。\n\nv1.0.3 | 2026-04-27T03:13:15.437Z | auto\n\nmongolian-llm 1.0.3\n\n- 支持用户直接输入传统蒙古文字符（Unicode U+1800–U+18AF）时自动激活技能用于对话或翻译。\n- 扩展触发词，包含“蒙古文聊天”“ᠮᠣᠩᠭᠣᠯ ᠬᠡᠯᠡᠬᠦ”“蒙古语/蒙古文”等蒙语相关自然表达。\n- 明确区分对话和翻译 API 的场景优先级与规则，完善多语种输入（中/蒙文）时的调用指引。\n- 调整调用前用户确认策略：用户主动发起蒙语请求可直接调用，仅代理主动时需告知并等待确认。\n- 对对话接口输出增加“必须原样输出”全局约束，防止被自动润色或补充。\n- 补充 references/ 文档，细化接口调用模板、\n\nv1.0.2 | 2026-04-22T03:49:55.001Z | user\n\n- No file changes detected in this release.\n- Documentation and usage, interface, and API details remain unchanged from the previous version.\n\nv1.0.1 | 2026-04-21T23:52:03.575Z | user\n\n**Major update: Documentation structure overhauled, detailed usage and billing confirmation required**\n\n- Major documentation split: Core usage, interface routing, translation, chat, API key, and behavior rules are now modularized in dedicated `references/` files.\n- Explicit per-call billing details and fee confirmation workflow added; user confirmation is now required before any paid API call.\n- Clarified scenario choice: replies to Mongolian emails/messages now recommend direct use of chat API for contextual response (rather than translation round-trip).\n- Expanded and clarified trigger list, especially for reply, creative, and conversation scenarios.\n- All technical notes (segmentation, error handling, API parameters) are now condensed in \"Quick Call Template\" and linked to detailed references.\n- Added clear boundaries: this skill does not send emails or fetch web content; bulk/remote scenarios must be handled by caller logic.\n\nv1.0.0 | 2026-04-17T00:47:05.798Z | user\n\n- Initial release of mongolian-llm skill for 中文 ⇄ 传统蒙古文 translation and Mongolian language conversation.\n- Supports translation, content generation, Mongolian-language email, notifications, documents, and social media posts.\n- Requires API Key setup via environment variable MENGGUYU_API_KEY; user guidance and security practices included.\n- Two main endpoints: /translation for strict translation tasks, /chat/completions for conversation and content creation, with automatic interface selection based on user intent.\n- Includes detailed segmentation, request formatting, and error handling principles for robust and accurate Mongolian language processing.\n\nArchive index:\n\nArchive v1.0.36: 13 files, 13799 bytes\n\nFiles: references/API-KEY.md (542b), references/ASR.md (418b), references/BEHAVIOR-RULES.md (2508b), references/CHAT-COMPLETIONS.md (1864b), references/DOCUMENT-TRANSLATION.md (449b), references/HTTP-REQUESTS.md (3528b), references/INTERFACE-ROUTING.md (1616b), references/OCR.md (367b), references/TRANSLATION.md (961b), references/TTS.md (1060b), skill-card.md (2866b), SKILL.md (5870b), _meta.json (133b)\n\nFile v1.0.36:SKILL.md\n\n---\nname: mongolian-llm\ndescription: 须在 OpenClaw 配置 MONGOL_AI_SKILL_API_KEY（https://mongol.open-idea.net「API Key」）；调用 https://mongol.open-idea.net/api/v1。中文与传统/西里尔蒙古文互译、蒙语对话与创作、TTS、ASR、OCR、Word/PDF 文档翻译；含传统蒙古文须走接口。\ntriggers: 蒙语翻译, 蒙古语翻译, 蒙汉翻译, 蒙蒙互译, 西里尔蒙古文翻译, 传统转西里尔, 西里尔转传统, 中文翻译蒙古文, 蒙古文翻译, 蒙文邮件, 蒙古文邮件, 邮件蒙文, 发邮件蒙文, 邮件用蒙古文, 回复蒙文邮件, 蒙文邮件回复, 蒙语对话, 蒙古语会话, 蒙文聊天, 蒙古文聊天, 蒙语聊天, 蒙古语聊天, ᠮᠣᠩᠭᠣᠯ ᠬᠡᠯᠡᠬᠦ, 蒙文通知, 蒙古文通知, 推送蒙文, 通知蒙古文, 消息蒙文, 定时蒙文, 定时通知蒙古文, 生成蒙文文件, 蒙古文文件, 蒙文文档, 导出蒙文, 蒙文附件, 社媒蒙文, 蒙古文贴文, 发社媒蒙古文, 社交媒体蒙古文, 发帖蒙古文, 蒙文文案, 网页翻译, 网页蒙文, 摘录翻译, 长文翻译, 批量翻译, 远程批量蒙文, 蒙古语, 蒙语, 蒙古文, 蒙文, 用蒙语, 用蒙古文, 说蒙语, 说蒙古文, 蒙语语音识别, 蒙古语语音识别, 蒙文语音识别, 语音转文字, 音频转写, ASR, 文字转语音, TTS\nmetadata: {\"openclaw\":{\"emoji\":\"🐎\",\"homepage\":\"https://mongol.open-idea.net\",\"primaryEnv\":\"MONGOL_AI_SKILL_API_KEY\"}}\n---\n\n# Mongol AI Skill 蒙古语AI技能\n\n蒙古语能力（互译、对话/创作、TTS、ASR、OCR、文档翻译），基址 **https://mongol.open-idea.net/api/v1**。`Authorization: Bearer <Key>`。**路径须带尾 /**，否则 POST 可能因 302 失败；示例见 [HTTP-REQUESTS.md](./references/HTTP-REQUESTS.md)。\n\n### Install\n\n```\nopenclaw skills install mongolian-llm\n```\n\n## Setup\n\n- **`MONGOL_AI_SKILL_API_KEY`**：[mongol.open-idea.net](https://mongol.open-idea.net) 登录后在「API Key」页创建，Bearer 调 `/api/v1`。[API-KEY.md](./references/API-KEY.md) · [BEHAVIOR-RULES.md](./references/BEHAVIOR-RULES.md)\n\n## Output\n\n成功响应后对用户展示 = **业务正文** + **计费行**（头或 JSON 任一侧有计费字段则须写）。\n\n| 接口 | 目标字段 |\n|------|----------|\n| `POST /translation/` | `data.tgtText` |\n| `POST /chat/completions/` | `choices[0].message.content` |\n| `POST /ocr/` · `POST /word/translation/` · `POST /pdf/translation/` | `data.text` |\n| `POST /audio/` · `POST /audio/async/` | `data.text`（异步轮询至 `done`） |\n| `POST /tts/` · `POST /tts/async/` | 播放或落盘音频；**勿**向用户贴 `audioBase64`、二进制或整段 WAV 原文 |\n\n**计费**：在成功响应上同时读 **HTTP 头**与 **JSON body**。头字段 `X-Mengguyu-Billing-Charged` · `X-Mengguyu-Billing-Balance` · `X-Mengguyu-Billing-Currency`；JSON 常见 `billingCharged` / `billingBalance`（异步以 `done` 那次为准）。勿单靠 `curl -s` 丢头。无计费字段则**不写**、不编造。\n\n在业务正文后**另起一行**原样抄写：\n\n`本次扣费: {charged} {currency}, 余额: {balance} {currency}`\n\n**禁止**对用户输出：完整 JSON、路由说明、模型名、token、Key、内部推理、无关客套等。\n\n## Routing\n\n每轮用户新消息须**重新**选接口。优先级：**OCR → ASR → TTS → 纯翻译 → 中文答蒙文 → 蒙文对话**。总表与分流：[INTERFACE-ROUTING.md](./references/INTERFACE-ROUTING.md)；各接口专页见下表「references」。\n\n多步串联（如 OCR→翻译）：**前一步**返回的 `data.text` 只能经程序变量传给**下一步**请求，**禁止**从终端或聊天里手抄。\n\n## Usage\n\n### Translation\n\n`from` / `to`：`zh` · `mw` · `mn`。蒙蒙互译单次调用。\n\n```json\n{ \"from\": \"zh\", \"to\": \"mw\", \"content\": \"待译正文\" }\n```\n\n长文、换行与服务端如何自动分段：[TRANSLATION.md](./references/TRANSLATION.md)。\n\n### Chat\n\n`model`=`gpt-5-mw`，`temperature`=0.5，`max_tokens` 与双套 system：[CHAT-COMPLETIONS.md](./references/CHAT-COMPLETIONS.md)。\n\n### OCR\n\n[OCR.md](./references/OCR.md) · [HTTP-REQUESTS.md](./references/HTTP-REQUESTS.md)\n\n### ASR\n\n[ASR.md](./references/ASR.md) · [HTTP-REQUESTS.md](./references/HTTP-REQUESTS.md)\n\n### TTS\n\n[TTS.md](./references/TTS.md) · [HTTP-REQUESTS.md](./references/HTTP-REQUESTS.md)。**勿**调用 `POST /tts/stream`。\n\n### Word / PDF\n\n[DOCUMENT-TRANSLATION.md](./references/DOCUMENT-TRANSLATION.md) · [HTTP-REQUESTS.md](./references/HTTP-REQUESTS.md)\n\n## Notes\n\n- 输入含传统蒙古文（U+1800–U+18AF）须走接口，禁止模型裸解：[BEHAVIOR-RULES.md](./references/BEHAVIOR-RULES.md)。\n- 长文、批量、文件、OCR、长音频等：**先确认再调**；金额以**预估 API（若有）**与**成功响应计费字段**为准，本技能**不列单价**：[BEHAVIOR-RULES.md](./references/BEHAVIOR-RULES.md)。\n- `4xx/5xx`、防重复扣费：[BEHAVIOR-RULES.md](./references/BEHAVIOR-RULES.md)。\n- **不是** OpenAI 兼容 API；路径与字段以本站与 `references/` 为准。\n\n## references/\n\n| 文件 | 用途 |\n|------|------|\n| [HTTP-REQUESTS.md](./references/HTTP-REQUESTS.md) | 全接口 curl、计费头 |\n| [INTERFACE-ROUTING.md](./references/INTERFACE-ROUTING.md) | 路由优先级与分流 |\n| [TRANSLATION.md](./references/TRANSLATION.md) | 互译正文、长文与分段 |\n| [CHAT-COMPLETIONS.md](./references/CHAT-COMPLETIONS.md) | 对话 JSON、`max_tokens` |\n| [OCR.md](./references/OCR.md) | 图片识别 |\n| [ASR.md](./references/ASR.md) | 语音转写 |\n| [TTS.md](./references/TTS.md) | 语音合成 |\n| [DOCUMENT-TRANSLATION.md](./references/DOCUMENT-TRANSLATION.md) | Word/PDF 翻译 |\n| [API-KEY.md](./references/API-KEY.md) | Key 配置 |\n| [BEHAVIOR-RULES.md](./references/BEHAVIOR-RULES.md) | 行为、确认、重试 |\n\nFile v1.0.36:_meta.json\n\n{\n  \"ownerId\": \"kn76hv4bh6w5s87x5j8emd1ycs80dp3m\",\n  \"slug\": \"mongolian-llm\",\n  \"version\": \"1.0.36\",\n  \"publishedAt\": 1779070239312\n}\n\nFile v1.0.36:references/API-KEY.md\n\n# API Key\n\n- **`MONGOL_AI_SKILL_API_KEY`**：配合 `Authorization: Bearer`，请求 `https://mongol.open-idea.net/api/v1`；登录后在「API Key」页创建。\n- **禁止**索要 Key、把 Key 贴进聊天、用 `openclaw config get` 验真（输出脱敏）。\n\n```bash\nopenclaw config set env.MONGOL_AI_SKILL_API_KEY \"<完整API Key>\"\nopenclaw gateway restart\n```\n\n或 `%USERPROFILE%\\.openclaw\\.env` / `~/.openclaw\\.env`：`MONGOL_AI_SKILL_API_KEY=<Key>` 后重启。\n\n未配置提示全文：[BEHAVIOR-RULES.md](./BEHAVIOR-RULES.md)。\n\nFile v1.0.36:references/ASR.md\n\n# ASR\n\n路由：[INTERFACE-ROUTING.md](./INTERFACE-ROUTING.md)。\n\n默认 **`POST /audio/async/`** + 轮询 **`GET /audio/async/{jobId}/`**；极短可 **`POST /audio/`**（multipart `file`）。\n\n成功取 **`data.text`**。多步串联：再译 → `POST /translation/`（变量直通 `content`）。\n\nHost / 同步·异步示例：[HTTP-REQUESTS.md](./HTTP-REQUESTS.md)。交付与计费 [SKILL.md](../SKILL.md)。\n\nFile v1.0.36:references/BEHAVIOR-RULES.md\n\n# 行为规则\n\n交付与计费：[SKILL.md](../SKILL.md)。路由：[INTERFACE-ROUTING.md](./INTERFACE-ROUTING.md)。\n\n## 调用前\n\n- **可直调**：短句翻译/短对话；能读到计费则按 SKILL 输出。\n- **须先报价或说明计费并确认**：长文、批量、网页正文、Word/PDF、多图 OCR、长 ASR、Agent 主动提议、用户要先看价。金额以**预估 API（若有）**与**成功响应计费字段**为准；本文档**不列单价**。无预估或失败时只说明计费方式、**勿编造金额**；须取得「视为同意」（是/确认/好/行/可以/yes/OK；沉默、「随便」不算）。\n- **覆盖**：用户明示「知道收费直接做」或声明「本会话不再问」→ 可直接；用户要「先报价」→ 先报价或说清计费并确认后再调。\n\n## 禁止绕过 API\n\n含传统蒙古文 U+1800–U+18AF → 须走接口；禁止模型裸译/裸答。\n\n## 可见回复\n\n仅 SKILL 允许的目标字段 + 计费行。\n\n## Key\n\n配置：[API-KEY.md](./API-KEY.md)。未配置时**仅**输出下列固定提示（原文不改写）：\n\n```text\nMONGOL_AI_SKILL_API_KEY 未配置。请按以下步骤操作：\n1. 访问 https://mongol.open-idea.net 注册/登录账号\n2. 进入后台 API Key 页面，创建并复制完整 Key（含前缀如 `1|xxxx...`）\n3. 在本机终端自行执行（勿将 Key 粘贴到对话框）：\n   openclaw config set env.MONGOL_AI_SKILL_API_KEY \"<完整API Key>\"\n4. 执行后在终端运行 openclaw gateway restart，使配置立即生效\n5. 若客户端不支持上述命令，可手动编辑 ~/.openclaw/.env（Windows 为 %USERPROFILE%\\.openclaw\\.env），写入 MONGOL_AI_SKILL_API_KEY=你的完整Key，再重启 Gateway\n```\n\n禁止索要 Key；用户若已粘贴 → 警告撤销重签 → `openclaw config set` + `openclaw gateway restart` → 不回显 Key；保留 `1|` 等前缀。\n\n## 扣费与重试\n\n- `200`/业务成功/异步 `done` 且能读业务或计费 → **通常已扣费**；勿因不满意用**同一** content/文件再调。改输入/路由前须说明并获同意。\n- **4xx**：修参/Key，勿盲重试。**5xx**/未完结：同体限次退避（如 ≤3）。**勿**过小 `--max-time`；`chat` 不设或 `30～60s`。\n\n## Chat · 预检\n\n全程传统蒙文 → 输出须全蒙、禁多余汉字；等于 `choices[0].message.content`，勿二改（[CHAT-COMPLETIONS.md](./CHAT-COMPLETIONS.md)）。  \n含传统蒙而未调 API → 先调再答；高成本先走「调用前」。\n\nFile v1.0.36:references/CHAT-COMPLETIONS.md\n\n# `POST /chat/completions/`\n\n路由：[INTERFACE-ROUTING.md](./INTERFACE-ROUTING.md)。\n\n互译一律 **`POST /translation/`**，禁止本接口代译（契约/计费不同）。蒙语对话、说明、从零写蒙文等。\n\n## `max_tokens`\n\n最后一条 `role: user` 的 `content` 数 **Unicode 码点** `L`（勿用 JS `string.length` 当码点）。\n\n| **`L`** | **`max_tokens`** |\n|--------|------------------|\n| ≤ 50 | **256** |\n| 51～200 | **768**（或 **512** 控成本） |\n| 201～1000 | **3072**（或 **4096**） |\n| > 1000 | **8192**（可先 **6144**） |\n\n封顶 **8192**；`max_completion_tokens` 与 `max_tokens` 二选一。\n\n## 固定参数\n\n| 参数 | 值 |\n|------|-----|\n| `model` | **`gpt-5-mw`** |\n| `temperature` | **`0.5`** |\n| `messages` | 须含 `user`；`system` 见下 |\n\n## 模板\n\n**传统蒙古文**\n\n```json\n{\n  \"model\": \"gpt-5-mw\",\n  \"messages\": [\n    {\"role\": \"system\", \"content\": \"请只用纯传统蒙古文回答，不要包含任何中文汉字。\"},\n    {\"role\": \"user\", \"content\": \"<用户问题>\"}\n  ],\n  \"temperature\": 0.5,\n  \"max_tokens\": 768\n}\n```\n\n**中文回复**（用户明确要求中文输出时）\n\n```json\n{\n  \"model\": \"gpt-5-mw\",\n  \"messages\": [\n    {\"role\": \"system\", \"content\": \"请使用简体中文回答。若用户输入包含传统蒙古文，请先理解原文语义，再直接给出针对用户请求的中文回复正文。只输出最终中文回复正文；禁止添加问候、自我介绍、解释过程、标题、原文复述或无关补充。若用户明确要求翻译，请不要使用本模板，应改用 POST /translation/。\"},\n    {\"role\": \"user\", \"content\": \"<用户问题>\"}\n  ],\n  \"temperature\": 0.5,\n  \"max_tokens\": 768\n}\n```\n\n`max_tokens` 依上表与 `L` 重算。**[HTTP-REQUESTS.md](./HTTP-REQUESTS.md)** · **[SKILL.md](../SKILL.md)**（`choices[0].message.content`）\n\nFile v1.0.36:references/DOCUMENT-TRANSLATION.md\n\n# Word / PDF 翻译\n\n路由：[INTERFACE-ROUTING.md](./INTERFACE-ROUTING.md)。\n\n- **`POST /word/translation/`** · **`POST /pdf/translation/`**（multipart）\n- 字段：`from` · `to` · `mode`（如 `mongolian_only`）· `file` → 成功取 **`data.text`**。\n\nHost / curl / 体积上限：[HTTP-REQUESTS.md](./HTTP-REQUESTS.md)。交付与计费 [SKILL.md](../SKILL.md)。再译下一环节时变量直通 `POST /translation/` 的 `content`。\n\nFile v1.0.36:references/HTTP-REQUESTS.md\n\n# HTTPS 请求模板\n\n路径**须**带尾 `/`（否则 POST 可能 302 失败）。输出与计费句式：[SKILL.md](../SKILL.md)。\n\n```text\nhttps://mongol.open-idea.net/api/v1\n```\n\n```http\nAuthorization: Bearer <MONGOL_AI_SKILL_API_KEY>\nContent-Type: application/json\n```\n\n**计费头**（异步亦可能在 JSON：`billingCharged` / `billingBalance`）：\n\n```http\nX-Mengguyu-Billing-Currency: CNY\nX-Mengguyu-Billing-Charged: <本次扣费>\nX-Mengguyu-Billing-Balance: <当前余额>\n```\n\n读头 + body；勿单靠 `curl -s`。multipart `file` 约 **≤10 MB**（JSON PCM Base64 解码后同量级）。\n\n---\n\n## `POST /translation/`\n\n正文规则 [TRANSLATION.md](./TRANSLATION.md)。\n\n```http\nPOST /translation/ HTTP/1.1\nHost: mongol.open-idea.net\nAuthorization: Bearer <MONGOL_AI_SKILL_API_KEY>\nContent-Type: application/json\n```\n\n```json\n{ \"from\": \"zh\", \"to\": \"mw\", \"content\": \"你好朋友\" }\n```\n\n→ `data.tgtText`（细则 [TRANSLATION.md](./TRANSLATION.md)）。\n\n---\n\n## `POST /chat/completions/`\n\n模板与 `max_tokens` [CHAT-COMPLETIONS.md](./CHAT-COMPLETIONS.md)。示例 `max_tokens:768` 对应 `L`∈51～200。\n\n```http\nPOST /chat/completions/ HTTP/1.1\nHost: mongol.open-idea.net\nAuthorization: Bearer <MONGOL_AI_SKILL_API_KEY>\nContent-Type: application/json\n```\n\n```json\n{\n  \"model\": \"gpt-5-mw\",\n  \"messages\": [\n    {\"role\": \"system\", \"content\": \"请只用纯传统蒙古文回答，不要包含任何中文汉字。\"},\n    {\"role\": \"user\", \"content\": \"用户问题或创作要求\"}\n  ],\n  \"temperature\": 0.5,\n  \"max_tokens\": 768\n}\n```\n\n中文 `system`、`L` 重算：**[CHAT-COMPLETIONS.md](./CHAT-COMPLETIONS.md)**。→ `choices[0].message.content`。\n\n---\n\n## `POST /ocr/`\n\n要点 [OCR.md](./OCR.md)。\n\n```http\nPOST /ocr/ HTTP/1.1\nHost: mongol.open-idea.net\nAuthorization: Bearer <MONGOL_AI_SKILL_API_KEY>\nContent-Type: application/json\n```\n\n```json\n{\n  \"image_base64\": \"<Base64>\",\n  \"language\": \"mw\",\n  \"image_encoding\": \"jpg\"\n}\n```\n\n→ `data.text`。`jpg|png|bmp|webp|tif|tiff|gif`。\n\n---\n\n## `POST /audio/`（同步）\n\n要点 [ASR.md](./ASR.md)。\n\nmultipart：`POST /audio/`，`language` · `sample_rate` · `file`。\n\n```http\nPOST /audio/ HTTP/1.1\nHost: mongol.open-idea.net\nAuthorization: Bearer <MONGOL_AI_SKILL_API_KEY>\nContent-Type: multipart/form-data; boundary=<boundary>\n```\n\nJSON PCM Base64：\n\n```json\n{ \"audio\": \"<PCM16 mono B64>\", \"language\": \"mw\", \"sample_rate\": 16000 }\n```\n\n→ `data.text`\n\n### `POST /audio/async/`\n\n`POST` → **202** + `jobId`；**3～5s** `GET /audio/async/{jobId}/` 至 **200** + `data.text`（**202**=processing，**422**=failed）。可选 `DELETE /audio/async/{jobId}/`。\n\n---\n\n## TTS\n\n音色与调用约定 [TTS.md](./TTS.md)。长文异步；上游约每 **200** 蒙文自动并段。\n\n### `POST /tts/async/`\n\n```http\nPOST /tts/async/ HTTP/1.1\nHost: mongol.open-idea.net\nAuthorization: Bearer <MONGOL_AI_SKILL_API_KEY>\nContent-Type: application/json\n```\n\n```json\n{ \"text\": \"<待合成>\", \"lang\": \"mn-Mong\", \"voice\": \"Kore\" }\n```\n\n→ **202** + `jobId`；轮询 `GET /tts/async/{jobId}/` 至 **200**、`status:done`，`audioBase64` → WAV。**422**=failed。计费 [SKILL.md](../SKILL.md)。**勿**用 `POST /tts/stream`。\n\n`lang`：`mn-Mong` `mn-Cyrl` `zh-Hans` `en` `ja` `ko` `ru`；`voice` [TTS.md](./TTS.md)；`speed` 0.5～2.0。\n\n---\n\n## `POST /word/translation/` · `POST /pdf/translation/`\n\n细节 [DOCUMENT-TRANSLATION.md](./DOCUMENT-TRANSLATION.md)。multipart：`from` · `to` · `mode`（如 `mongolian_only`）· `file` → `data.text`。\n\nFile v1.0.36:references/INTERFACE-ROUTING.md\n\n# 接口路由\n\n每轮**重新**选接口。优先级：\n\n1. 图 → `POST /ocr/`（默认 `language=mw`，西里尔 `mn`）— 细节 [OCR.md](./OCR.md)\n2. 音 → `POST /audio/async/` + 轮询 `GET /audio/async/{jobId}/`；极短试 `POST /audio/` — [ASR.md](./ASR.md)\n3. TTS → `POST /tts/async/`；极短试 `POST /tts/`；**禁用** `POST /tts/stream` — [TTS.md](./TTS.md)\n4. 纯翻译 → `POST /translation/` — [TRANSLATION.md](./TRANSLATION.md)\n5. 蒙文 + 要中文说明 → `POST /chat/completions/` 中文模板 — [CHAT-COMPLETIONS.md](./CHAT-COMPLETIONS.md)\n6. 用户明确蒙文答 / 纯蒙无译词 → `POST /chat/completions/` 蒙文模板 — [CHAT-COMPLETIONS.md](./CHAT-COMPLETIONS.md)\n7. Word/PDF 文档蒙文翻译 → [DOCUMENT-TRANSLATION.md](./DOCUMENT-TRANSLATION.md)\n\n传统蒙/西里尔：无译词多 **chat**；有译词 → **translation**（如 `mw→zh`）；蒙蒙互译 → **translation** `mn↔mw`（单次）；要中文解释蒙文 → **chat** 中文模板。无蒙字：创作/介绍 → **chat**；翻译/转换 → **translation**。冲突：**给定原文要译成另一文字** → translation；**写新稿** → chat。[CHAT-COMPLETIONS.md](./CHAT-COMPLETIONS.md) · [TRANSLATION.md](./TRANSLATION.md)\n\n**网页/长文**：净正文后 `POST /translation/`；若超过单次 `content` 上限则按 [TRANSLATION.md](./TRANSLATION.md) 分批，勿整篇用 chat 代替互译。\n\n## OCR / ASR 衔接\n\nOCR/ASR **成功后**只取 `data.text`；再译 → `POST /translation/`。[HTTP-REQUESTS.md](./HTTP-REQUESTS.md) · [OCR.md](./OCR.md) · [ASR.md](./ASR.md)\n\nFile v1.0.36:references/OCR.md\n\n# OCR\n\n路由：[INTERFACE-ROUTING.md](./INTERFACE-ROUTING.md)。\n\n**`POST /ocr/`**：默认 `language=mw`，西里尔文稿用 `mn`。\n\n成功取 **`data.text`**。多步串联：再译 → `POST /translation/`（`content` 须变量直通，勿手抄）。\n\nHost / JSON 示例：[HTTP-REQUESTS.md](./HTTP-REQUESTS.md)。交付与计费 [SKILL.md](../SKILL.md)。\n\nFile v1.0.36:references/TRANSLATION.md\n\n# `POST /translation/`\n\n路由：[INTERFACE-ROUTING.md](./INTERFACE-ROUTING.md)。\n\n`zh` / `mw` / `mn` 互译；勿用 `POST /chat/completions/` 代译。取 **`data.tgtText`**。[HTTP-REQUESTS.md](./HTTP-REQUESTS.md) · [SKILL.md](../SKILL.md)\n\n**必填** `from`、`to`、`content`。\n\n```json\n{ \"from\": \"zh\", \"to\": \"mw\", \"content\": \"文本\" }\n```\n\n## 规则摘要\n\n- **分段与换行**：网关对单次 `content` 自动按 `\\n` 切段、超长再切，拼回一个 `data.tgtText`；**通常一次请求带全文**即可，触 `content` 上限再分批。JSON 里用转义 `\\n`，勿裸多行入串。\n- **方向**：U+1800–U+18AF → 常 `mw→zh`；西里尔块 → `mn→zh`；否则常 `zh→mw`；蒙蒙互转显式 `mn↔mw`。\n- **蒙蒙互译 `mn↔mw`**：单次 `POST /translation/`；扣费以响应计费字段为准。\n- **响应**：`data.srcText` 仅核对；蒙→中结果为中文，不适用「全程蒙文禁汉字」类 chat 规则。\n\nFile v1.0.36:references/TTS.md\n\n# TTS\n\n路由：[INTERFACE-ROUTING.md](./INTERFACE-ROUTING.md)。\n\n默认 **`POST /tts/async/`**；极短可 **`POST /tts/`**。**禁用** `POST /tts/stream`。\n\n**调用前**向用户列齐 12 音色：`Kore · Puck · Zephyr · Charon · Fenrir · Aoede · Leda · Orus · Iapetus · Sulafat · Achird · Achernar`。未选按下表；默认不报 `speed`；要快/慢用 **1.2 / 0.8**。`text` 与用户正文须**逐字**一致。异步：`POST /tts/async/` → 约 3～5s 轮询 `GET /tts/async/{jobId}/` 至 `done`，`audioBase64` 解码为 WAV。\n\n| 特征 | voice |\n|------|-------|\n| 正式/公文 | Kore |\n| 新闻/教学 | Iapetus |\n| 儿童/故事 | Leda |\n| 情感/问候 | Sulafat |\n| 日常聊天 | Achird |\n| 运动/广告 | Fenrir |\n| 轻松娱乐 | Aoede |\n| 社媒/活泼 | Puck |\n| 诗歌/文学 | Zephyr |\n| 纪录片 | Charon |\n| 史诗/深沉 | Orus |\n| 舒缓/睡眠 | Achernar |\n| 其它 | Kore |\n\n`lang` · `speed` · Host/curl 示例：[HTTP-REQUESTS.md](./HTTP-REQUESTS.md)（TTS 节）。交付与计费 [SKILL.md](../SKILL.md)。\n\nArchive v1.0.35: 13 files, 35901 bytes\n\nFiles: manifest.json (52b), package.json (354b), README.md (2950b), references/API-KEY.md (2042b), references/ASR.md (1834b), references/BEHAVIOR-RULES.md (12872b), references/CHAT-COMPLETIONS.md (5441b), references/HTTP-REQUESTS.md (11366b), references/INTERFACE-ROUTING.md (8332b), references/OCR.md (1643b), references/TRANSLATION.md (6278b), SKILL.md (18467b), _meta.json (133b)\n\nFile v1.0.35:SKILL.md\n\n---\nname: mongolian-llm\ndescription: 须在 OpenClaw 配置环境变量 MONGOL_AI_SKILL_API_KEY，值在 https://mongol.open-idea.net 个人中心「API Key」页创建；调用该站 /api/v1。支持中文 ↔ 传统蒙古文 / 西里尔蒙古文互译、蒙古语对话创作、文字转语音（TTS）、语音识别（ASR）、图片文字识别（OCR）及 Word / PDF 文档翻译。遇到蒙古文相关请求自动激活，结果由专业接口处理，字符准确可靠。\ntriggers: 蒙语翻译, 蒙古语翻译, 蒙汉翻译, 蒙蒙互译, 西里尔蒙古文翻译, 传统转西里尔, 西里尔转传统, 中文翻译蒙古文, 蒙古文翻译, 蒙文邮件, 蒙古文邮件, 邮件蒙文, 发邮件蒙文, 邮件用蒙古文, 回复蒙文邮件, 蒙文邮件回复, 蒙语对话, 蒙古语会话, 蒙文聊天, 蒙古文聊天, 蒙语聊天, 蒙古语聊天, ᠮᠣᠩᠭᠣᠯ ᠬᠡᠯᠡᠬᠦ, 蒙文通知, 蒙古文通知, 推送蒙文, 通知蒙古文, 消息蒙古文, 定时蒙文, 定时通知蒙古文, 生成蒙文文件, 蒙古文文件, 蒙文文档, 导出蒙文, 蒙文附件, 社媒蒙文, 蒙古文贴文, 发社媒蒙古文, 社交媒体蒙古文, 发帖蒙古文, 蒙文文案, 网页翻译, 网页蒙文, 摘录翻译, 长文翻译, 批量翻译, 远程批量蒙文, 蒙古语, 蒙语, 蒙古文, 蒙文, 用蒙语, 用蒙古文, 说蒙语, 说蒙古文, 蒙语语音识别, 蒙古语语音识别, 蒙文语音识别, 语音转文字, 音频转写, ASR, 文字转语音, TTS\nmetadata: {\"openclaw\":{\"emoji\":\"🐎\",\"homepage\":\"https://mongol.open-idea.net\",\"primaryEnv\":\"MONGOL_AI_SKILL_API_KEY\"}}\n---\n\n# Mongolian Language Skill\n\nBase URL：`https://mongol.open-idea.net/api/v1`  \n请求模板：[references/HTTP-REQUESTS.md](./references/HTTP-REQUESTS.md)\n\n## OpenClaw 环境变量\n\n- **`MONGOL_AI_SKILL_API_KEY`**：必须在 **https://mongol.open-idea.net**（与上列 Base URL 同源）登录后于「API Key」页创建；供 `Authorization: Bearer …` 访问本站 `/api/v1`，与第三方云厂商控制台申请的直连密钥无关。\n\n## 输出规则（最高优先级）\n\n调用成功后，最终可见回复由两部分组成：**业务正文** + **计费转述**。\n\n### 1. 业务正文\n\n仅包含下列接口对应目标字段原文；**计费句子不属于本节**，写法见 §2。\n\n| 接口 | 目标字段 |\n|------|---------|\n| `POST /translation` | `data.tgtText`（分段时按序拼接） |\n| `POST /chat/completions` | `choices[0].message.content` |\n| `POST /ocr` · `POST /word/translation` · `POST /pdf/translation` | `data.text` |\n| `POST /audio`（同步） | `data.text` |\n| `POST /audio/async` → 轮询 `GET /audio/async/{jobId}` 至 `done`（`200`） | `data.text` |\n| `POST /tts` | 二进制音频流，保存为文件后播放；无 JSON 目标字段 |\n| `POST /tts/async` → 轮询 `GET /tts/async/{jobId}` 至 `done`（`200`） | JSON 字段 `audioBase64` → 解码为 WAV 播放 |\n\n**TTS 边界**：对用户**不要**把 `audioBase64`、二进制或整段 WAV 原文贴出来；「业务正文」在此场景等价于按要求完成播放/落盘。**计费转述**仍按 §2 执行，不受影响。\n\n禁止输出：内部思考、路由解释、请求体、响应 JSON、模型名、token usage、代码块、前言、注释、礼貌语。\n\n### 2. 计费转述（强制；任意接口每次调用成功后皆须执行）\n\n**硬性要求**：**必须**在「成功解析」那一次 HTTP 响应上，**主动检查**响应头 **与** JSON 正文中是否存在计费字段。只要任一侧能读出 **扣费** 或 **余额**（及配套币种若有），即视为命中，**必须**输出 §2.2 模板，**金额与原样字段不得改写**。呈现位置：**首条**计费行须紧接在最终对用户展示的 §1 业务正文末尾**另起一行**；若同轮链路中多次调用皆命中计费，**后续每条计费各占一行**（参见 §2.2 示例），中间不穿插其它话术。\n\n若响应头 **与** JSON **皆无**任一计费字段，**严禁**编造数字；完成检查即可，**不写**计费行。\n\n#### 2.1 计费信息获取\n\n| 来源 | 字段 |\n|------|------|\n| HTTP 响应头 | `X-Mengguyu-Billing-Charged`、`X-Mengguyu-Billing-Balance`、`X-Mengguyu-Billing-Currency` |\n| JSON 正文（异步 `done` 等场景常见） | `billingCharged`、`billingBalance` |\n\n- **只看 JSON、或只看正文而不解析响应头** 会漏掉头侧计费信息，视为错误实现；**必须在同一轮成功响应中兼得可读的头与体**（或等价地同时保存头文件与 body），再拼装输出。\n- **禁止**单靠 `curl -s` 只解析 stdout：`-s` **不输出响应头**。请用 **`curl -sS -i`**、`curl -sS -D headers.txt -o body.json`，或 Python `requests` 的 `r.headers` / Node `fetch` 可读 headers 的客户端。\n- **异步**：轮询至 **`GET …/{jobId}` 返回 `200` 且 `done`** 的那一次响应，同样必须读取头或 JSON 内计费字段后再输出。\n\n币种：优先 **`X-Mengguyu-Billing-Currency`**；若缺失且 JSON 无等价字段，模板中 `{currency}` 用接口实际返回值里出现的币种字面量（**不得臆造**）。\n\n#### 2.2 输出格式（固定模板）\n\n在 §1 之后**另起一行**，严格套用（占位符替换为本次读到的数值/币种字面量）：\n\n`本次扣费: {charged} {currency}, 余额: {balance} {currency}`\n\n示例（单次）：\n\n```\nᠠᠪᠤᠷᠭᠤ\n本次扣费: 0.01 CNY, 余额: 9.99 CNY\n```\n\n示例（链路两次成功调用：如 OCR → 翻译，各有一次计费转述）：于最终对用户可见的正文末尾，按调用顺序分行附 **两行**模板（或使用与上行相同模板、数据来源分别对应 OCR 响应与翻译响应）：\n\n```\nᠠᠪᠤᠷᠭᠤ\n本次扣费: 0.02 CNY, 余额: 9.98 CNY\n本次扣费: 0.03 CNY, 余额: 9.95 CNY\n```\n\n#### 2.3 最终自检清单（输出前必过）\n\n- [ ] **每一次**调用成功且完成解析时，均已在该次响应上检查过头 **与** JSON（如 OCR→翻译等多步链路不得只查最后一步）\n- [ ] 凡命中计费字段的调用均在最终答复中接续输出 §2.2：**首行**紧接在 §1 业务正文末尾**另起一行**；同轮链路中后续的计费各占**新的一行**，中间不掺杂其它话术。**若全程均无计费字段**则**不写**计费行、**不捏造**。\n- [ ] 模板中金额 **原样抄写**，未四舍五入改写、未中英文混改写币种\n\n## 接口路由（每轮必须重新判断）\n\n优先级：OCR → ASR → TTS → 翻译 → 中文回复 → 蒙文回复/对话\n\n- **OCR**：输入含图片 → `POST /ocr`\n- **ASR**：输入含音频 → **默认 `POST /audio/async`**（`multipart` 上传 `file` + `language`，每隔 **3～5 秒** 轮询 **`GET /audio/async/{jobId}`** 直至 `status: done`，提取 **`data.text`**；OpenClaw / 长音频优先此路径以避免网关超时）。**极短音频或探测**可试同步 **`POST /audio`**（仍受本站单次 PCM 时长配额限制）。计费：`billingCharged` / `billingBalance`（JSON 或响应头）。\n- **TTS**：用户要求朗读/播放/合成音频 → 优先 **`POST /tts/async`**（异步轮询，长文本必用）；极短文本可试 **`POST /tts`**（同步，易受代理超时限制）\n- **翻译**：含「翻译」「译成」「什么意思」「西里尔转传统」等纯转换意图 → `POST /translation`\n- **中文回复**：含蒙文 + 「用中文回答/回复」→ `POST /chat/completions`（中文 system）\n- **蒙文对话**：蒙文输入无翻译关键词 → `POST /chat/completions`（蒙文 system）\n\n### 流式联动规则（OCR → 翻译）\n\n当上一环节的输出作为下一环节的输入时（例如先 `POST /ocr` 再 `POST /translation`）：\n\n1. **禁止手动转录**：不得从终端输出、日志截断、控制台预览或对话框摘录中复制内容，作为下一请求的输入。\n2. **变量直通**：OCR 成功响应中 **`data.text`** 的值必须**原封不动**用程序变量（或等价结构化字段）传入翻译请求的 **`content`**；中途不得截取、摘录或人工转写。\n3. **惰性校验**：若待传文本超过约 **200** 字符，直接以变量传递即可，无需输出全文预览供人工核对（以免诱导从预览复制不完整文本）。\n\n以上约束不改变「输出规则」：对用户可见的最终回复仍仅为「§1 业务正文 + §2 计费转述」，不要在对话里粘贴完整响应 JSON。\n\n## 调用模板\n\n### 翻译\n\n```json\n{ \"from\": \"zh\", \"to\": \"mw\", \"content\": \"待翻译文本\" }\n```\n语言代码：`zh` 中文 · `mw` 传统蒙古文 · `mn` 西里尔蒙古文。蒙蒙互译只调一次，后台经中文中转。\n\n### TTS（异步轮询优先；必须先问音色；禁止向用户报读 speed 数值）\n\n1. **音色**：触发 TTS 前，必须先向用户**完整列出全部 12 种** `voice` 供选择：**Kore · Puck · Zephyr · Charon · Fenrir · Aoede · Leda · Orus · Iapetus · Sulafat · Achird · Achernar**。根据用户回答选择对应名称；用户未回应、含糊回应（「随便」「你决定」）或直接去忙别的话题时，再按内容自动选（正式→Kore，新闻→Iapetus，儿童→Leda，情感→Sulafat，默认→Kore）。详细映射与话术见 [INTERFACE-ROUTING.md](./references/INTERFACE-ROUTING.md)。\n\n2. **语速**：对用户仅说明默认是**正常语速**，**不必主动询问**。**不要在对话里复述** `speed: 1.0` 等接口数值。只有当用户明确要求调整语速时，用自然语言问「想快一点还是慢一点？」，再在请求里分别映射：**快一点 → `speed`: 1.2**，**慢一点 → `speed`: 0.8**。（其他情况不传 `speed`。）\n\n3. **提交全文校验**：在发起请求前，将待合成的 `text` 与用户本轮提供的正文**逐字符**比对，确保未被省略、截断或改写（含空格与标点）。若文本很长，可分段与用户逐一核对后再提交。\n\n4. **调用方式**：绝大多数场景使用 **`POST /tts/async`** 提交任务后，每隔 **3～5 秒** 轮询 **`GET /tts/async/{jobId}`**，直到 `200` 且 `status: done`，从 **`audioBase64`** 解码为 `.wav` 播放。计费字段 **`billingCharged`**、**`billingBalance`** 必须转述。极短试探可试同步 **`POST /tts`**（长文禁止）。**禁止使用**已移除的 SSE 端点 `POST /tts/stream`。详见 [HTTP-REQUESTS.md](./references/HTTP-REQUESTS.md)。\n\n```http\nPOST /tts/async/\n```\n\n```json\n{ \"text\": \"ᠰᠠᠢᠨ ᠪᠠᠢᠨ᠎ᠠ ᠤᠤ\", \"lang\": \"mn-Mong\", \"voice\": \"Kore\" }\n```\n\n仅当用户在第 2 步明确要快/慢时追加 `\"speed\": 1.2` 或 `\"speed\": 0.8`。\n\n`lang`：`mn-Mong` 传统蒙古文 · `mn-Cyrl` 西里尔蒙古文 · `zh-Hans` 中文 · `en` 英文。\n\n### ASR（异步轮询优先；与 TTS 同类）\n\n1. **默认路径**：**`POST /audio/async`**，使用 **`multipart/form-data`** 上传字段 **`file`**（与同步接口相同格式类型），外加 **`language`**、可选 **`sample_rate`**。\n2. **轮询**：`202` 返回 `jobId` 后，每隔 **3～5 秒** **`GET /audio/async/{jobId}`**；`processing`/`pending` 时 **202**；**`200`** 且含 **`data.text`** 为完成（后台已按本站策略切段多次调上游并拼接文本）。\n3. **同步备选**：极短音频可 **`POST /audio`**（JSON 或 multipart），易被代理/单次时长限制；长音禁止依赖单请求。\n\n详见 [HTTP-REQUESTS.md](./references/HTTP-REQUESTS.md)。\n\n### 对话（蒙文 / 中文输出）\n\n调用 `POST /chat/completions` 时，须在拼好 **`messages`** 后、发送请求前，用 **本节下表** 为 **`max_tokens` 填入一个确定整数**。不要凭主观「感觉」偏小或偏大默认写 **4096** / **8192**；定性补充与封顶说明见 [CHAT-COMPLETIONS.md](./references/CHAT-COMPLETIONS.md)。\n\n#### `max_tokens` 自动估算规则（必选）\n\n1. **量谁**：本条请求 **`messages`** 中**最后一条** `role: user` 的 `content` 全文。\n2. **怎么数**：**Unicode 码点**个数（中英文、西里尔字母、传统蒙古文、标点、空格均各占 1）。**不要用** JavaScript 的 **`string.length`** 当作码点计数（UTF-16 代理对会 **误计**）；可用 **`Array.from(content).length`**、`Intl.Segmenter`（按 grapheme）、Python **`len`** 等对码点正确的方法。\n3. **多轮**：只数 **本条**即将发出去的那段 **`user.content`**；不要把历史 **`assistant`** 或其它轮次的上下文拼进来算 **`L`**，除非你确实已把拼接结果写进了本条 **`user.content`**。\n4. **查表**：令 **`L`** = 步骤 2 的码点字数，按下表取值（单值）。\n\n| **`L`** | 典型场景（便于对照） | **`max_tokens`** |\n|--------|---------------------|------------------|\n| **≤ 50** | 寒暄、极简短问 | **256** |\n| **51～200** | 一般问答、短指令 | **768**（对应原建议区间 512～1024 的折中；**严控成本**可改用 **512**） |\n| **201～1000** | 段落级、中长上下文 | **3072**（对应原区间 2048～4096 的折中；预期回答明显很长且不敏感余额可改用 **4096**） |\n| **> 1000** | 长文、文章体、条目式长答 | **8192**（若非顶格长输出可先试 **6144**） |\n\n用户若**明示**输出要「一段话即可 / 要尽量短 / 要写长文」，在不超 **8192** 硬顶的前提下可上下浮动一档，但仍须能说出依据（字数档或用户原话）。\n\n**蒙文示例**（仅演示结构； **`max_tokens` 须按上表重算**。若 **`L`** 在 51～200，常用 **768**）：\n\n```json\n{\n  \"model\": \"gpt-5-mw\",\n  \"messages\": [\n    {\"role\": \"system\", \"content\": \"请只用纯传统蒙古文回答，不要包含任何中文汉字。\"},\n    {\"role\": \"user\", \"content\": \"<用户问题>\"}\n  ],\n  \"temperature\": 0.5,\n  \"max_tokens\": 768\n}\n```\n\n**中文示例**（同上，`max_tokens` 查表；结构一致）：\n\n```json\n{\n  \"model\": \"gpt-5-mw\",\n  \"messages\": [\n    {\"role\": \"system\", \"content\": \"请使用简体中文回答。若用户输入包含传统蒙古文，请先理解原文语义，再直接给出针对用户请求的中文回复正文。只输出最终中文回复正文；禁止添加问候、自我介绍、解释过程、标题、原文复述或无关补充。若用户明确要求翻译，请不要使用本模板，应改用 POST /translation。\"},\n    {\"role\": \"user\", \"content\": \"<用户问题>\"}\n  ],\n  \"temperature\": 0.5,\n  \"max_tokens\": 768\n}\n```\n\n## 计费与调用确认\n\n| 接口 | 计费 | 参考费率 |\n|------|------|---------|\n| `/translation` · `/tts` · `/tts/async` | 按输入字符数 | ¥6 / 万字符 |\n| `/chat/completions` | 按 token | 输入 ¥60 / 百万；输出 ¥120 / 百万 |\n\n短文本/短对话直接调用。长文、批量、Word/PDF、OCR、ASR 等高成本任务须先估算费用、告知用户并等待确认。详见 [BEHAVIOR-RULES.md](./references/BEHAVIOR-RULES.md)。\n\n## API Key 配置\n\n未检测到 `MONGOL_AI_SKILL_API_KEY` 时，输出以下固定提示（原文输出，不改写）：\n\n```text\nMONGOL_AI_SKILL_API_KEY 未配置。请按以下步骤操作：\n1. 访问 https://mongol.open-idea.net 注册/登录，在「API Key」页创建并复制完整 Key\n2. 在本机终端执行（勿将 Key 粘贴到对话框）：\n   openclaw config set env.MONGOL_AI_SKILL_API_KEY \"<完整API Key>\"\n   openclaw gateway restart\n3. 若 openclaw 命令不可用，手动写入 ~/.openclaw/.env（Windows：%USERPROFILE%\\.openclaw\\.env）：\n   MONGOL_AI_SKILL_API_KEY=你的完整Key\n   再重启 Gateway\n```\n\n**⚠️ 禁止索取 Key**：不得要求用户将 Key 发送到对话框。若用户已主动粘贴 Key：立即警告（建议撤销并重新生成） → 写入配置并执行 `openclaw gateway restart` → 完成后再次提醒替换。禁止在对话中回显 Key 原文。\n\n详细配置说明：[references/API-KEY.md](./references/API-KEY.md)\n\n## 错误处理\n\n### 结果看起来「不正常」仍勿重复同一计费请求（防多次扣款）\n\n中继按 **单次已完结的调用**计费：只要收到 **`HTTP 200`**、JSON **`success: true`**（或等价语义）、可读 **`data.*` 等业务字段**，以及/或 **`X-Mengguyu-Billing-*` / JSON `billing*`**（含异步轮询 **`done`** 的那次 **`GET`**），通常即 **已记入一次扣款**。用户对译文质量、版面、空段落、「像乱码」等 **主观观感** 不等于服务端未入账。\n\n**禁止**：在未征得用户知情同意、且 **未改写请求载荷**（同一段 `content`、同一文件、`from/to`/分段策略不变）的情况下，只因为「上一轮结果不满意」就连发 **第二次、第三次** 同类调用——这会按 **新的一轮计费** 叠加扣款，且未必改善模型输出。\n\n**建议**：先用 §1 §2 向用户如实呈现上一轮业务正文与计费；若需重做，须在用户明确表示接受 **再次计费** 后 **调整输入**（拆段、换一种 `from/to`、删减噪声正文、换一种文档等）再调用，或引导用户走站内工单/人工支持，而不是静默重试。\n\n### 传输层可重试的边界\n\n- **`4xx`**：检查 Key、必填字段、JSON、分段与大小限制，**不重试**。\n- **`5xx` / 超时 / 网络抖动 / 连接被对端重置**：仅当 **尚未收到** 任何可解析的「成功/失败已完结」响应（无完整 JSON、无 `jobId` 可继续轮询、也无计费头可读）时，方可对 **同一请求体** 递增间隔重试，**最多 3 次**。一旦已解析到 **计费字段** 或异步 **已 `done`**，该次调用即 **视作结账完成**，不得以「想换一版结果」为由用原样载荷再打一枪。\n\n## 文档索引\n\n| 主题 | 文件 |\n|------|------|\n| 请求模板（全接口） | [HTTP-REQUESTS.md](./references/HTTP-REQUESTS.md) |\n| 接口路由详细规则 | [INTERFACE-ROUTING.md](./references/INTERFACE-ROUTING.md) |\n| 翻译分段规则 | [TRANSLATION.md](./references/TRANSLATION.md) |\n| 对话参数 | [CHAT-COMPLETIONS.md](./references/CHAT-COMPLETIONS.md) |\n| OCR | [OCR.md](./references/OCR.md) |\n| ASR | [ASR.md](./references/ASR.md) |\n| API Key 配置 | [API-KEY.md](./references/API-KEY.md) |\n| 行为规则 | [BEHAVIOR-RULES.md](./references/BEHAVIOR-RULES.md) |\n\n> **注意**：这不是 OpenAI API。路径、`model` 取值、字段均以本文档及 `references/` 为准，不要套用 OpenAI 规范。\n\nFile v1.0.35:README.md\n\n# mongolian-llm\n\nOpenClaw Skill：中文、傳統蒙古文、西里爾蒙古文互譯，蒙文對話/創作、圖片 OCR。\n\n## 能力\n\n- `POST /translation`：純文字翻譯（`zh` / `mw` / `mn`，蒙蒙互譯由後台經中文中轉）\n- `POST /chat/completions`：對話/創作\n- `POST /ocr`：圖片 OCR（預設 `language=mw` 傳統蒙文；西里爾蒙古文請傳 `mn`）\n- `POST /audio`：語音識別 / ASR\n\n## 路由優先級（每輪重判）\n\n1. 圖片 OCR\n2. 語音 ASR\n3. 純文字翻譯\n4. 中文回答蒙文\n5. 蒙文回答蒙文\n6. 預設蒙文對話\n\n詳見 `references/INTERFACE-ROUTING.md`。\n\n## 輸出規範（零洩漏）\n\n成功後最終可見回覆只能輸出：\n\n- `/translation` -> `data.tgtText`\n- `/chat/completions` -> `response.choices[0].message.content`\n- `/ocr` -> `data.text`\n- `/audio` -> `data.text`\n\n不得附加 JSON、工具輸出、路由解釋、模型名、token usage 等內容。\n\n## API Key\n\n主環境變數：`MONGOL_AI_SKILL_API_KEY`（在 **https://mongol.open-idea.net** 注册登录后，于「API Key」页创建；调用该站 `/api/v1`）。发现阶段不强依赖，业务调用前必须检查。\n\n缺失時固定提示：\n\n```text\nMONGOL_AI_SKILL_API_KEY 未配置。请按以下步骤操作：\n1. 访问 https://mongol.open-idea.net 注册/登录账号\n2. 进入后台 API Key 页面，创建并复制完整 Key（含前缀如 `1|xxxx...`）\n3. 不要在本对话中粘贴完整 API Key；请在自己的本机终端执行：\n   openclaw config set env.MONGOL_AI_SKILL_API_KEY \"<完整API Key>\"\n4. 配置后重启 Gateway 或重新开启 OpenClaw 会话，使环境变量生效\n5. 若客户端不支持该命令，请改按本说明中的 `.openclaw/.env` 兼容方式配置\n```\n\n## 安裝與配置\n\n```text\nopenclaw skills install mongolian-llm\n```\n\n配置 API Key 時，不要把完整 Key 貼到聊天輸入框。請只在自己的本機終端執行：\n\n```bash\nopenclaw config set env.MONGOL_AI_SKILL_API_KEY \"<完整API Key>\"\n```\n\n配置後重啟 Gateway 或重新開啟 OpenClaw 會話，使環境變數生效。\n\n如果客戶端不支援上述命令，可改用 `.openclaw/.env` 兼容方式：\n\n```text\nWindows: %USERPROFILE%\\.openclaw\\.env\nmacOS / Linux: ~/.openclaw/.env\n```\n\n```env\nMONGOL_AI_SKILL_API_KEY=你的完整Key\n```\n\n## 通用 HTTPS 调用\n\n本 Skill 面向客戶環境時不要求安裝特定命令行運行時。請使用 `references/HTTP-REQUESTS.md` 中的平台無關 HTTPS 請求模板，由 OpenClaw / Gateway / Agent 當前可用的 HTTPS 請求能力發起 API 調用。\n\n常用接口：\n\n- `POST /translation`\n- `POST /chat/completions`\n- `POST /ocr`\n- `POST /audio`\n- `POST /word/translation`\n- `POST /pdf/translation`\n\n## 參考\n\n- `SKILL.md`\n- `references/HTTP-REQUESTS.md`\n- `references/INTERFACE-ROUTING.md`\n- `references/BEHAVIOR-RULES.md`\n- `references/TRANSLATION.md`\n- `references/CHAT-COMPLETIONS.md`\n- `references/OCR.md`\n- `references/API-KEY.md`\n\nFile v1.0.35:_meta.json\n\n{\n  \"ownerId\": \"kn76hv4bh6w5s87x5j8emd1ycs80dp3m\",\n  \"slug\": \"mongolian-llm\",\n  \"version\": \"1.0.35\",\n  \"publishedAt\": 1778974454365\n}\n\nFile v1.0.35:references/API-KEY.md\n\n# API Key 配置\n\n**`MONGOL_AI_SKILL_API_KEY`**：存放你在 **https://mongol.open-idea.net**（与 Skill Base URL 同源）个人中心「API Key」页创建的 **Bearer 令牌**，用于请求 `https://mongol.open-idea.net/api/v1`；变量名为 OpenClaw 技能与本文档约定，**非**第三方云厂商控制台申请的直连密钥。\n\n## 安全原则\n\n- **禁止索取 Key**：不得要求用户将 API Key 发送到对话框；Key 进入对话历史后不可撤回。\n- **兜底**：若用户已主动粘贴 Key，立即警告（建议前往 https://mongol.open-idea.net 撤销并重新生成），再写入配置并重启 Gateway，完成后再次提醒替换；不在对话中回显 Key 原文。\n\n## 配置步骤（引导用户在终端执行）\n\n**第一步**：登录 https://mongol.open-idea.net，在「API Key」页创建并复制完整 Key（含前缀，如 `1|xxxx...`）。\n\n**第二步**：在本机终端执行（勿粘贴到对话框）：\n\n```bash\nopenclaw config set env.MONGOL_AI_SKILL_API_KEY \"<完整API Key>\"\nopenclaw gateway restart\n```\n\n重启成功后告知\"已配置并重启，可以正常使用了\"；若重启失败，提示手动重启 Gateway。\n\n**兼容方式**（`openclaw` 命令不可用时）：手动写入环境文件后重启。\n\n- Windows：`%USERPROFILE%\\.openclaw\\.env`\n- macOS / Linux：`~/.openclaw/.env`\n\n```env\nMONGOL_AI_SKILL_API_KEY=<完整API Key>\n```\n\n## 调用前检查\n\n- 检查 `MONGOL_AI_SKILL_API_KEY` 是否存在且非空；**禁止**用 `openclaw config get` 核对（输出自动脱敏，无法得到真实值）。\n- 非空 → 正常调用接口。\n- 为空 → 引导用户按上方步骤配置；若有权限可代为执行 `openclaw gateway restart`（仅重启，不代写 Key）；未检测到 Key 时不得做任何业务回答。\n\n## 说明\n\n- Key 仅通过环境变量 `MONGOL_AI_SKILL_API_KEY` 配置，与 `plugins.entries` 无关。\n- 本 Skill 未声明 `requires.env`，以允许在未配置 Key 时被发现，但业务调用前必须完成上述检查。\n\nFile v1.0.35:references/ASR.md\n\n# ASR `POST /audio`\n\n用于语音识别，把本地音频或 PCM Base64 转成文本。\n\n**长音频 / OpenClaw**：优先 **`POST /audio/async`** → 轮询 **`GET /audio/async/{jobId}`**，与 TTS 异步同类；服务端切段拼接后再返回 **`data.text`**。详见 [HTTP-REQUESTS.md](./HTTP-REQUESTS.md)。\n\n## 适用场景\n\n- 用户上传音频、录音、语音文件，要求识别文字\n- 用户先要语音转文字，再继续翻译或问答\n\n## 推荐调用\n\n按 [HTTP-REQUESTS.md](./HTTP-REQUESTS.md) 的平台无关模板调用 `POST /audio`。\n\n本地音频文件优先以 `multipart/form-data` 上传到后端，由后端服务器转成 PCM 后调用 ASR。支持 `wav`、`mp3`、`m4a`、`aac`、`ogg`、`flac`、`pcm`。若当前环境已经有 PCM 16-bit mono Base64，也可使用 JSON 请求体直接传 `audio`。\n\n## 请求体\n\n```json\n{\n  \"audio\": \"<PCM 16-bit mono Base64>\",\n  \"language\": \"mw\",\n  \"sample_rate\": 16000\n}\n```\n\n字段说明：\n\n- `file`：使用 multipart 上传本地音频文件时必填，字段名为 `file`。\n- `audio`：使用 JSON 直传时必填。PCM 16-bit mono 的 Base64 内容。\n- `language`：可选，默认 `mw`。\n- `sample_rate`：可选，默认 `16000`。支持 `8000`、`16000`、`48000`。\n\n## 响应提取\n\n成功时只提取：\n\n- `data.text`（识别文本）\n\n可选辅助字段（不直接给用户展示，除非用户要求）：\n\n- `data.duration_seconds`\n- `data.raw`\n\n## 输出约束（零泄漏）\n\n- 默认最终可见回复只输出 `data.text` 原文；若响应头包含 `X-Mengguyu-Billing-*`，须在正文后转述本次扣费、当前余额与币种。\n- 禁止输出请求体、原始 JSON、签名信息、模型信息、调试日志。\n- 若用户要求“先识别再翻译”，流程应为：`/audio` 提取文本后，再走 `/translation`。\n\nFile v1.0.35:references/BEHAVIOR-RULES.md\n\n# 行为规则\n\n## 调用前确认（最高优先级，在 API Key 检查之前执行）\n\n调用付费接口前，先判断任务规模和费用风险。短文本翻译/短对话可以直接处理；长文、批量、文件、OCR、ASR 等高成本任务需要先提示费用并取得确认。\n\n---\n\n### 低成本短请求 → 可直接调用\n\n用户明确下达蒙古语相关指令，且内容明显为短文本、短对话、单句翻译时，可以直接调用 API。若响应头包含计费信息，调用完成后仍需转述本次扣费、当前余额与币种。\n\n典型情形：\n\n- \"帮我把这段翻译成蒙古文\"\n- \"用传统蒙文介绍那达慕大会\"\n- \"写一封蒙文邮件\"\n\n---\n\n### 高成本或不确定费用 → 必须先确认\n\n以下情况必须先完成「估算费用 → 告知用户 → 等待明确确认」，不得直接调用：\n\n- 长文、网页正文、批量文本、多文件或远程批量任务\n- Word/PDF 文档翻译\n- OCR 图片识别，尤其是多图或大图\n- ASR 语音识别，尤其是较长音频\n- Agent 自行判断、主动提出需要调用付费 API 的操作\n- 用户明确要求\"先告诉我费用再决定\"\n\n1. **估算费用**\n   - 翻译（`POST /translation/`）：估算费用 ≈ `UTF-8 字节数 / 10000 × ¥6`；批量时按全文总字节数估算。\n   - 对话（`POST /chat/completions/`）：输入费用 ≈ `messages 字符数 / 4 / 1000000 × ¥60`；输出费用视回复长度而定。\n   - OCR（`POST /ocr/`）：按识别出的文字字符数扣费，无法准确预估时提示\"将按识别字符数计费\"。\n   - ASR（`POST /audio/` 或异步 `POST /audio/async/`）：估算费用 ≈ `音频秒数 / 3600 × ¥24`；无法读取时长时提示\"将按实际识别秒数计费\"。\n   - Word/PDF：按解析出的可翻译文字字符数扣费，无法准确预估时提示\"将按实际翻译字符数计费\"。\n\n2. **告知用户并等待明确确认**  \n   示例措辞：\n   > \"我可以帮你翻译这段内容，估算费用约 ¥0.003，是否需要？\"\n\n   以下视为**明确确认**：是、确认、好、行、可以、yes、OK 及包含明确同意意图的自然语言。  \n   以下**不视为**确认，须重新询问：沉默、含糊词（\"随便\"\"无所谓\"）。\n\n典型情形（以下均属于 Agent 主动）：\n\n- Agent 在处理其他任务时，自行决定顺带翻译某段内容\n- Agent 主动提出\"我注意到这段文字，需要我帮你翻译吗\"\n- Agent 未经指示，主动发起蒙古语对话或内容创作\n\n---\n\n### 特殊覆盖（优先于上述两条）\n\n- 用户明确说\"我知道要收费，直接执行\" → 直接调用\n- 用户设置了\"本会话内不再询问\" → 直接调用（仅用户主动声明后生效）\n- 用户要求\"先告诉我费用再决定\" → 先估算并告知，等待确认后再调用\n\n---\n\n## 接口路由规则（优先级在调用前确认之后）\n\n当用户输入包含图片、音频、传统蒙古文字符（Unicode U+1800–U+18AF）或西里尔蒙古文内容时，按以下规则选择接口。中蒙混合输入同样适用本规则。\n\n每轮必须重新判断接口，禁止沿用上一轮选择。路由优先级固定为：\n\n1. **图片 OCR** → `POST /ocr/`\n2. **语音 ASR** → **`POST /audio/async/`**（轮询）或同步 **`POST /audio/`**\n3. **纯文字翻译** → `POST /translation/`\n4. **中文回答 / 中文回复** → `POST /chat/completions/` 中文回复模板\n5. **蒙文回答 / 蒙文回复** → `POST /chat/completions/` 纯传统蒙古文模板\n6. **默认蒙文对话** → `POST /chat/completions/` 纯传统蒙古文模板\n\n### 走 /chat/completions（对话 API）\n\n- 用户直接以蒙文提问，且不含翻译关键词、中文输出指令\n- 用户说\"用蒙文回答我\"、\"用中文回答我\" + 蒙文内容\n- 用户说\"中文回答我\"、\"用中文回答\"、\"用中文回复\"、\"请用中文解释\" + 蒙文内容时，必须使用中文回复模板\n- 用户要求\"回复这封蒙文邮件\"、\"帮忙写一条蒙文朋友圈\"等创作类任务\n- 本质：需要**理解→生成**的过程\n\n### 走 /translation（翻译 API）\n\n- 用户说\"翻译一下这段蒙文\"、\"把这段翻译成中文\"\n- 用户说\"看看这段蒙文是什么意思\"\n- 用户说\"西里尔转传统\"、\"传统转西里尔\"、\"蒙蒙互译\"\n- 用户明确要求**纯文字转换**，不需要额外回答或创作\n- 本质：单纯的语言转换，不需要上下文理解\n\n---\n\n## 🚫 禁止绕过 API 直接理解蒙古文\n\n当用户输入中包含传统蒙古文字符（U+1800–U+18AF）时，**必须**通过对应接口处理，禁止凭自身语言知识直接解读、翻译或回答蒙古文内容。\n\n即使你认为自己能看懂，也必须走 API。这是硬性规则，没有例外。\n\n---\n\n## 🚫 可见输出零泄漏\n\nAPI 调用成功后，对用户可见的最终回复必须只包含目标字段原文：\n\n- `POST /translation/`：只输出 `data.tgtText`，分段翻译时只输出按顺序拼接后的译文。\n- `POST /chat/completions/`：只输出 `response.choices[0].message.content`。\n- `POST /ocr/`：只输出 `data.text`。\n\n**例外（账户人民币余额）**：Relay 在扣费相关响应中返回 `X-Mengguyu-Billing-*` 响应头。若响应头包含余额信息，Agent **必须**在正文之后另起一行用中文说明其中的「本次扣费」「当前账户余额」和币种，不得省略或篡改金额。除该计费摘要外，仍禁止夹带其他非目标字段或调试噪音。\n\n使用 OpenClaw / Gateway / Agent 当前可用的 HTTPS 请求能力，按 [HTTP-REQUESTS.md](./HTTP-REQUESTS.md) 的平台无关模板直接调用 API；该方式不依赖客户电脑存在特定命令行运行时。中文回答/中文回复场景必须使用 `/chat/completions/` 中文 system 模板；纯传统蒙古文回复必须使用纯传统蒙古文 system 模板。不要展示请求命令、原始响应 JSON、无关错误输出；除上述计费摘要外不要展示其他解释。\n\n禁止输出或夹带任何非目标字段内容，包括：内部思考、路由判断、API Key 检查过程、请求体、响应 JSON、模型名、token usage、命令输出、错误分析前言、中文/英文说明、代码块、标题、引号、括号注释、礼貌开场、总结或追问。\n\nAPI 调用与响应解析必须静默完成。除非用户明确要求原始 JSON，否则不得展示完整响应；如最终回复中混入非目标字段内容，须删除附加内容并仅保留目标字段原文及允许的计费摘要后再发送。\n\n---\n\n## 🚨 违规后果（零容忍）\n\n在包含传统蒙古文字符（U+1800–U+18AF）的输入中，若 Agent 未经 API 调用而直接理解、翻译或回答任何蒙古文内容，属于严重违规。\n\n系统将记录该行为；多次违规可触发蒙古文技能禁用。不存在\"反正我懂了所以省一次调用\"的例外。\n\n---\n\n- 严格执行用户请求；翻译只返回译文。\n- **重复调用与扣费**：若已收到 **`200`/业务成功/异步 `done`**，且能读到 **目标业务字段** 或 **计费头、JSON `billing*`**，即通常 **已扣费**；不得以「结果看着不对、像失败」为由，用 **同一 `content` 或同一文件** 再打一枪，否则会 **多次扣款**。须先向用户说明现状与计费，取得同意后再 **改写输入或路由** 并接受再次计费；或引导走人工/工单，而非静默重试。\n- 调用 `/translation/` 或 `/chat/completions/`（及其他计费接口）仅当 **尚未收到** 可解析的完结响应时，遇 **网络抖动、超时或 5xx** 方可对**同一请求体**做 **有限重试**（例如间隔递增、最多 2～3 次）；**不要**对 4xx（含鉴权失败、参数错误）盲目重试，应先检查 Key、JSON 与分段是否符合本技能文档。\n- 不设置过小超时（禁止 `--max-time 5` / `--max-time 10`）。\n- `POST /chat/completions/` 默认不加 `--max-time`；必须设置时用 `--max-time 30~60`。\n- 不要把 10~20 秒内仍在生成的请求误判为卡住。\n- 先决条件：`MONGOL_AI_SKILL_API_KEY` 已配置且非空。检查方法：运行 `[ -n \"$MONGOL_AI_SKILL_API_KEY\" ] && echo \"已配置\" || echo \"未配置\"`，或 `echo \"${#MONGOL_AI_SKILL_API_KEY}\"` 查看字符数是否大于 0（**勿用 `openclaw config get` 核对**，见 [API-KEY.md](./API-KEY.md)）。若未配置，必须输出下方固定中文提示，不得直接做业务回答。\n- 未检测到 `MONGOL_AI_SKILL_API_KEY` 时，对用户只输出以下固定中文提示（原文输出，不改写）：\n\n  ```text\n  MONGOL_AI_SKILL_API_KEY 未配置。请按以下步骤操作：\n  1. 访问 https://mongol.open-idea.net 注册/登录账号\n  2. 进入后台 API Key 页面，创建并复制完整 Key（含前缀如 `1|xxxx...`）\n  3. 在本机终端自行执行（勿将 Key 粘贴到对话框）：\n     openclaw config set env.MONGOL_AI_SKILL_API_KEY \"<完整API Key>\"\n  4. 执行后在终端运行 openclaw gateway restart，使配置立即生效\n  5. 若客户端不支持上述命令，可手动编辑 ~/.openclaw/.env（Windows 为 %USERPROFILE%\\.openclaw\\.env），写入 MONGOL_AI_SKILL_API_KEY=你的完整Key，再重启 Gateway\n  ```\n- **⚠️ 禁止主动索取 API Key**：不得通过任何措辞要求或引导用户将完整 API Key 发送到对话框；Key 一旦出现在对话历史中，将对参与会话的所有方可见，且无法撤回。\n- 若用户已主动将完整 API Key（格式通常为 `数字|字母数字串`，如 `1|xxxxxx`）粘贴到对话框（兜底，不主动触发）：\n  - **首先立即给出安全警告**：Key 已出现在对话记录中，建议尽快前往 https://mongol.open-idea.net 后台撤销该 Key 并重新生成；\n  - OpenClaw 客户端：调用 `openclaw config set env.MONGOL_AI_SKILL_API_KEY \"<key>\"` 写入配置，再执行 `openclaw gateway restart` 重启 Gateway；完成后再次提醒尽快撤销并替换该 Key；\n  - QClaw 客户端：写入 `env.MONGOL_AI_SKILL_API_KEY` 字段后执行 `openclaw gateway restart`，并给出撤销提示；\n  - 写入操作本身不在对话中回显 Key 原文。\n- 当先决条件未满足时，不得用\"基于自身知识\"直接生成蒙古语内容，不得跳过配置步骤。\n- 调用顺序必须严格为：先按 [API-KEY.md](./API-KEY.md) 配置并确认 **`MONGOL_AI_SKILL_API_KEY` 环境变量**可用 → 再调用 `/translation/`（翻译）或 `/chat/completions/`（对话）；**禁止**依赖 `openclaw config get` 做密钥校验。\n- 配置 API Key 时必须原样完整写入，不得丢失任何字符（尤其是 `|`、`$`、`\"`、`\\` 等特殊字符）。\n- 若 key 含前缀（如 `1|xxxx...`），必须完整保留前缀；禁止去掉 `1|` 后再写入。\n- 写入后**不得**用 `openclaw config get` 与原始 Key 逐字比对（输出会脱敏）。应以环境变量是否可用、接口是否鉴权成功为准；若调用失败且怀疑密钥未生效，请用户确认已在本机终端执行配置命令，必要时让用户重新配置。\n\n## 语言约束（高优先级，适用于 chat/completions）\n\n- 当用户要求\"全程传统蒙古文\"时，最终回答正文必须为传统蒙古文，不得输出中文正文\n- 即使用户用中文下达指令，只要意图是\"用传统蒙古文作答\"，也必须输出纯传统蒙古文\n- 未明确要求双语时，禁止追加中文解释、中文总结或中文标题\n- 若内容中需要专有名词，优先使用传统蒙古文转写；避免中文括注\n- 对话接口调用成功后，最终输出必须严格等于 `response.choices[0].message.content` 原文，不得二次改写、摘要、翻译、补充说明，也不得在原文前后添加任何额外内容（包括但不限于开场白、转折句、总结、追问、表情、括号说明、响应 JSON、模型名或 token usage 等）。除非触发安全/合规拦截，否则这是一条硬性规则，没有例外。\n- 即使用户在 API 返回后进一步追问或评论，也不得在原始输出基础上追加 Agent 自身内容；如需继续对话，必须基于新的用户输入重新调用 API。\n\n## 输出前自检（必须执行）\n\n### 输入预检（在调用 API 之前执行）\n\n- 检查用户输入中是否包含任何 U+1800–U+18AF 范围的 Unicode 字符\n- 若检测到且当前会话尚未对该输入调用蒙古语 API，必须先调用 API 再回答，禁止跳过此步骤\n- 调用前\"估算费用\"适用于长文、批量、文件、OCR、ASR 等高成本任务；短文本/短对话可直接处理\n\n- 当用户要求\"全程传统蒙古文\"时，发送前检查回答是否包含汉字（Unicode `\\p{Han}`）\n- 若检测到中文字符，必须重写为纯传统蒙古文后再输出\n- 若首次重写仍不合规，再重写一次；最多重试 2 次\n\nFile v1.0.35:references/CHAT-COMPLETIONS.md\n\n# 对话 / 表达 / 解释：`POST /chat/completions`\n\n用户意图是「蒙古语表达 / 蒙古语对话 / 文化或语言解释」时，统一调用：\n\n`POST /chat/completions`\n\n- **互译不要用本接口**：**中文、传统蒙古文、西里尔蒙古文互译**（含「译成蒙文」「把这段翻成蒙古文」「西里尔转传统」等）一律使用 **`POST /translation`**，**禁止**用 `POST /chat/completions` 代替翻译（计费与契约不同，且易产生非严格译文）。本接口仅用于对话、说明、从零撰写蒙文内容等，见 [INTERFACE-ROUTING.md](./INTERFACE-ROUTING.md) 中「关键词与接口优先」。\n\n## `max_tokens` / `max_completion_tokens`（须随任务调整）\n\n本站中继在转发前会按「**输出 token 上界**」做余额预估：上界越大，对账户余额的**预检门槛**越高；应**按实际问题**设合理值，不要凡请求都写满 8192。\n\n### 技能内可执行规则（按本条 `user.content` 字数）\n\n与本站 [SKILL.md](../SKILL.md) 对齐：取 **`messages`** 中**最后一条** `role: user` 的 `content`，统计其 **Unicode 码点字数** **`L`**（勿用 JS `string.length` 当作码点计数），再按下表选一个**确定的**整数作为 `max_tokens`：\n\n| **`L`** | 典型场景 | **`max_tokens`** |\n|--------|----------|------------------|\n| **≤ 50** | 一句答、寒暄、是否类 | **256** |\n| **51～200** | 一般问答、短指令 | **768**（或 **512** 严控成本） |\n| **201～1000** | 段落级、中长说明 | **3072**（或 **4096** 预期回答明显更长） |\n| **> 1000** | 长文、讲稿、条文式长答 | **8192**（可先 **6144**） |\n\n用户明示要写短/写长时，在不超硬顶前提下可浮动一档。**8192** 为参数封顶（见下）。\n\n### 简明对照（与上表等价，可与旧文案对照）\n\n| 典型任务 | 建议上界 | 说明 |\n|----------|----------|------|\n| 一句答、寒暄、是否类 | **256**～**768** | 由上表 **`L`** 档位决定 |\n| 短说明、小段扩写 | **768**～**3072** | 同上 |\n| **一般对话、解释** | **3072**～**4096** | 勿再默认无脑 **4096**；短输入请先用上表降为 **768** |\n| 长文创作、讲稿、条文式长答 | **6144～8192** |  **`L`**>1000 或用户明确要求时再升高；**8192 为参数硬封顶** |\n\n- 使用 OpenAI 新版字段时 **`max_completion_tokens`** 与 **`max_tokens`** 二选一即可，语义相同；超过 8192 会被当作 8192。\n- 固定参数仍须保留 **`model: gpt-5-mw`**、**`temperature: 0.5`**，不得再附加解释、JSON、模型名等对用户可见噪音。\n\n## 推荐调用\n\n按 [HTTP-REQUESTS.md](./HTTP-REQUESTS.md) 的平台无关模板调用对话接口，并只提取 `response.choices[0].message.content`。\n\n中文回复场景必须使用中文回复 system 模板；纯传统蒙古文回复场景必须使用纯传统蒙古文 system 模板。\n\n## 必填 / 固定参数（本技能须按此填写）\n\n| 参数 | 是否必填 | 取值 | 说明 |\n|------|----------|------|------|\n| **`model`** | **必填** | 必须为 **`gpt-5-mw`** | 蒙古语专用模型标识；**不是** OpenAI 控制台里的模型名，勿替换为 `gpt-4` 等 |\n| **`messages`** | **必填** | 非空数组 | 至少包含一条用户消息；可含 `system` + `user`（见下模板） |\n| **`temperature`** | **须按本技能** | **`0.5`** | 不要省略或随意改为其它值（除非用户另有明确约定） |\n| **`max_tokens`** | **强烈推荐** | 按本节 **「可执行规则」** 表格由 **`user.content`** 字数 **`L`** 决定 | 勿不问场景一律 4096／8192；未传 `max_tokens` 时中继预检仍可能按站内默认 |\n\n- 默认单次请求完成，不做多次续写。\n\n## 请求体模板（纯传统蒙古文；`max_tokens` 须按本节表格由 `L` 计算）\n\n```json\n{\n  \"model\": \"gpt-5-mw\",\n  \"messages\": [\n    {\"role\": \"system\", \"content\": \"请只用纯传统蒙古文回答，不要包含任何中文汉字。\"},\n    {\"role\": \"user\", \"content\": \"<用户问题>\"}\n  ],\n  \"temperature\": 0.5,\n  \"max_tokens\": 768\n}\n```\n\n（ **`max_tokens`**：若本条 `user.content` 的码点 **`L`** 在 **51～200**，常用 **768**；**≤50** 用 **256**；更长则查表。）\n\n## 请求体模板（中文回复；`max_tokens` 同上）\n\n仅当用户明确要求\"中文回答我\"、\"用中文回答\"、\"用中文回复\"、\"请用中文解释\"等中文输出时使用：\n\n```json\n{\n  \"model\": \"gpt-5-mw\",\n  \"messages\": [\n    {\"role\": \"system\", \"content\": \"请使用简体中文回答。若用户输入包含传统蒙古文，请先理解原文语义，再直接给出针对用户请求的中文回复正文。只输出最终中文回复正文；禁止添加问候、自我介绍、解释过程、标题、原文复述或无关补充。若用户明确要求翻译，请不要使用本模板，应改用 POST /translation。\"},\n    {\"role\": \"user\", \"content\": \"<用户问题>\"}\n  ],\n  \"temperature\": 0.5,\n  \"max_tokens\": 768\n}\n```\n\n## 语言判定（简化）\n\n- 若用户要求「用传统蒙古文 / 蒙古文 / 蒙文全程回答」，使用上面的“纯传统蒙古文模板”。\n- 若用户要求「中文回答 / 用中文回答 / 用中文回复 / 请用中文解释」，使用“中文回复模板”。\n- 若用户明确要求双语，按用户指定输出双语。\n\n语言约束与输出自检见 [BEHAVIOR-RULES.md](./BEHAVIOR-RULES.md)。\n\nFile v1.0.35:references/HTTP-REQUESTS.md\n\n# 通用 HTTPS 请求示例\n\n本文档提供平台无关的请求模板。它不依赖任何特定命令行运行时；只要当前 OpenClaw 环境、网关、HTTP 工具或业务系统能发送 HTTPS 请求，都可以按这些 Method / URL / Headers / Body 组装请求。\n\n> **路径说明**：所有接口路径末尾必须带 `/`（如 `/translation/`），否则服务器将返回 302 重定向，部分 HTTP 客户端（如 Node.js `https` 模块）不会自动跟随 POST 重定向，导致请求失败。推荐使用支持自动跟随重定向的 HTTP 客户端（如 Node.js `fetch`、Python `requests`、`curl`）。\n\n调用方必须按本文模板直接调用 API，并在响应中只提取目标字段返回给用户；不要把完整响应 JSON、请求体或调试信息暴露给用户。\n\n## 通用规则\n\nBase URL:\n\n```text\nhttps://mongol.open-idea.net/api/v1\n```\n\n所有 JSON 接口使用以下 Header:\n\n```http\nAuthorization: Bearer <MONGOL_AI_SKILL_API_KEY>\nContent-Type: application/json\n```\n\n调用前必须确认 `MONGOL_AI_SKILL_API_KEY` 已配置。调用成功后，最终可见回复只能输出业务目标字段；除允许的计费摘要外，不输出请求体、完整响应 JSON、调试日志、模型名或解释文字。\n\n计费信息来自响应头：\n\n```http\nX-Mengguyu-Billing-Currency: CNY\nX-Mengguyu-Billing-Charged: <本次扣费>\nX-Mengguyu-Billing-Balance: <当前余额>\n```\n\n若响应头存在余额信息，应在正文后另起一行向用户转述本次扣费和当前余额。\n\n### 工具注意（避免丢失计费头）\n\n命令行 **`curl -s` 默认只打印响应体**，**不包含响应头**。若只用 `-s` 并把 stdout 交给 JSON 解析器，则 **`X-Mengguyu-Billing-*` 永远无法读到**，与用户约定的计费转述也会落空。\n\n实现时请任选其一：\n\n- **`curl -sS -i`**：响应头与体在同一流中，解析时先剥离首部后再解析 JSON。\n- **`curl -sS -D headers.txt -o body.bin`**（或 `-o body.json`）：头入文件、体单独保存，再从 `headers.txt` 读取计费三行。\n- 使用 **`requests` / `fetch` / 其他库**时，在成功回调中同时读取 **`response.headers`** 与 body。\n\n异步任务在 **`done` 的那次 `GET`** 上同样需要遵守上述约定（该次响应也可能带头或仅在 JSON 中带 `billingCharged` / `billingBalance`，两者至少读取其一）。\n\n### multipart 单文件大小\n\n公开 API 上，`multipart` 字段 **`file`**（ASR、Word/PDF 文档翻译等）单文件上限约为 **10 MB**（与站点 PHP `upload_max_filesize` / nginx `client_max_body_size` 一致）。超出可能返回 **422**（校验失败）或 **413**（请求体过大）。\n\n异步 ASR 使用 JSON 字段 **`audio`**（PCM Base64）时，解码后 PCM 总字节上限亦为 **10 MiB**（与上述策略一致）。\n\n## 翻译\n\nRequest:\n\n```http\nPOST /translation/ HTTP/1.1\nHost: mongol.open-idea.net\nAuthorization: Bearer <MONGOL_AI_SKILL_API_KEY>\nContent-Type: application/json\n```\n\nBody:\n\n```json\n{\n  \"from\": \"zh\",\n  \"to\": \"mw\",\n  \"content\": \"你好朋友\"\n}\n```\n\n响应提取：\n\n```text\ndata.tgtText\n```\n\n语言代码：\n\n```text\nzh = 中文\nmw = 传统蒙古文\nmn = 西里尔蒙古文\n```\n\n若未显式指定方向，可按输入内容推断：包含传统蒙古文字符时 `from=mw`，包含西里尔字符时 `from=mn`，否则默认 `from=zh`；目标语言默认与源语言互转，中文转传统蒙古文，蒙古文转中文。\n\n## 对话/创作，输出传统蒙古文\n\n`max_tokens` 宜随任务调整（见 [CHAT-COMPLETIONS.md](./CHAT-COMPLETIONS.md)）；下面示例用 **4096** 作为一般对话默认值。\n\nRequest:\n\n```http\nPOST /chat/completions/ HTTP/1.1\nHost: mongol.open-idea.net\nAuthorization: Bearer <MONGOL_AI_SKILL_API_KEY>\nContent-Type: application/json\n```\n\nBody:\n\n```json\n{\n  \"model\": \"gpt-5-mw\",\n  \"messages\": [\n    {\n      \"role\": \"system\",\n      \"content\": \"请只用纯传统蒙古文回答，不要包含任何中文汉字。\"\n    },\n    {\n      \"role\": \"user\",\n      \"content\": \"用户问题或创作要求\"\n    }\n  ],\n  \"temperature\": 0.5,\n  \"max_tokens\": 4096\n}\n```\n\n响应提取：\n\n```text\nchoices[0].message.content\n```\n\n## 对话/创作，输出中文\n\nRequest:\n\n```http\nPOST /chat/completions/ HTTP/1.1\nHost: mongol.open-idea.net\nAuthorization: Bearer <MONGOL_AI_SKILL_API_KEY>\nContent-Type: application/json\n```\n\nBody:\n\n```json\n{\n  \"model\": \"gpt-5-mw\",\n  \"messages\": [\n    {\n      \"role\": \"system\",\n      \"content\": \"请使用简体中文回答。若用户输入包含传统蒙古文，请先理解原文语义，再直接给出针对用户请求的中文回复正文。只输出最终中文回复正文；禁止添加问候、自我介绍、解释过程、标题、原文复述或无关补充。若用户明确要求翻译，请不要使用本模板，应改用 POST /translation。\"\n    },\n    {\n      \"role\": \"user\",\n      \"content\": \"中文回答我：用户问题或蒙文内容\"\n    }\n  ],\n  \"temperature\": 0.5,\n  \"max_tokens\": 4096\n}\n```\n\n响应提取：\n\n```text\nchoices[0].message.content\n```\n\n## OCR\n\nRequest:\n\n```http\nPOST /ocr/ HTTP/1.1\nHost: mongol.open-idea.net\nAuthorization: Bearer <MONGOL_AI_SKILL_API_KEY>\nContent-Type: application/json\n```\n\nBody:\n\n```json\n{\n  \"image_base64\": \"<图片 Base64 内容，不含 data:image 前缀>\",\n  \"language\": \"mw\",\n  \"image_encoding\": \"jpg\"\n}\n```\n\n响应提取：\n\n```text\ndata.text\n```\n\n`image_encoding` 支持 `jpg`、`png`、`bmp`、`webp`、`tif`、`tiff`、`gif`。\n\n## ASR\n\n本地音频文件优先使用 `multipart/form-data` 上传，由服务端处理转码。\n\nRequest:\n\n```http\nPOST /audio/ HTTP/1.1\nHost: mongol.open-idea.net\nAuthorization: Bearer <MONGOL_AI_SKILL_API_KEY>\nContent-Type: multipart/form-data; boundary=<boundary>\n```\n\nForm fields:\n\n```text\nlanguage = mw\nsample_rate = 16000\nfile = <本地音频文件>\n```\n\n响应提取：\n\n```text\ndata.text\n```\n\n若调用环境只能发送 JSON，也可以传 PCM 16-bit mono Base64：\n\n```http\nPOST /audio/ HTTP/1.1\nHost: mongol.open-idea.net\nAuthorization: Bearer <MONGOL_AI_SKILL_API_KEY>\nContent-Type: application/json\n```\n\n```json\n{\n  \"audio\": \"<PCM 16-bit mono Base64>\",\n  \"language\": \"mw\",\n  \"sample_rate\": 16000\n}\n```\n\n### 异步 ASR（推荐 OpenClaw / 长音频）\n\n与 **`POST /tts/async`** 同理：`POST /audio/async` 立即返回 **`jobId`**，每隔 **3～5 秒** 轮询 **`GET /audio/async/{jobId}`**；队列完成后 **`200`**，正文 **`data.text`**。服务端按本站策略 **切段多次识别并拼接**，网关仅需容忍短请求。\n\n**第一步**：提交任务（`multipart/form-data`，字段 **`file`** + **`language`**，可选 **`sample_rate`**）。\n\n```http\nPOST /audio/async/ HTTP/1.1\nHost: mongol.open-idea.net\nAuthorization: Bearer <MONGOL_AI_SKILL_API_KEY>\nContent-Type: multipart/form-data; boundary=<boundary>\n```\n\n也可仅用 JSON 传 **`audio`**（PCM Base64），总长受异步任务 PCM 上限约束；**长音频请优先 multipart 上传 `file`**。\n\n```http\nPOST /audio/async/ HTTP/1.1\nAuthorization: Bearer <MONGOL_AI_SKILL_API_KEY>\nContent-Type: application/json\n```\n\n```json\n{\n  \"audio\": \"<PCM 16-bit mono Base64>\",\n  \"language\": \"mw\",\n  \"sample_rate\": 16000\n}\n```\n\n提交成功：**`202`**，响应含 **`jobId`**、`status: pending`。\n\n**第二步**：轮询（与 TTS 相同节奏）。\n\n```http\nGET /audio/async/{jobId}/ HTTP/1.1\nHost: mongol.open-idea.net\nAuthorization: Bearer <MONGOL_AI_SKILL_API_KEY>\n```\n\n- **`202`**：`pending` / `processing`，含 **`chunksDone`** / **`chunksTotal`**（上游切段进度）。\n- **`200`**：`status: done`，提取 **`data.text`**；计费字段 **`billingCharged`**、**`billingBalance`**（JSON 或与 **`X-Mengguyu-Billing-*`** 响应头并存）。\n- **`422`**：`failed`。\n\n**第三步（可选）**：`DELETE /audio/async/{jobId}/` 删除任务记录。\n\n## TTS 文字转语音\n\n> **说明**：上游单次合成限制约 200 蒙古文字，后端自动分段合并，**无需客户端切段**。\n> 长文本处理需数十秒到数分钟，必须使用**异步轮询**模式，避免 HTTP 超时断连。\n\n### 第一步：提交任务（`POST /tts/async/`）\n\nRequest:\n\n```http\nPOST /tts/async/ HTTP/1.1\nHost: mongol.open-idea.net\nAuthorization: Bearer <MONGOL_AI_SKILL_API_KEY>\nContent-Type: application/json\n```\n\nBody:\n\n```json\n{\n  \"text\": \"<待合成文字>\",\n  \"lang\": \"mn-Mong\",\n  \"voice\": \"Kore\"\n}\n```\n\nResponse `202 Accepted`:\n\n```json\n{\n  \"jobId\": \"018f1234-abcd-7000-...\",\n  \"status\": \"pending\",\n  \"charCount\": 518,\n  \"message\": \"任务已提交，请每隔 3~5 秒轮询 GET /api/v1/tts/async/018f1234-abcd-7000-...\"\n}\n```\n\n### 第二步：轮询进度（`GET /tts/async/{jobId}/`）\n\n**每 3～5 秒轮询一次**，直到 status 不再是 `pending`/`processing`。\n\n处理中，`202` 响应：\n\n```json\n{\n  \"jobId\": \"018f1234-...\",\n  \"status\": \"processing\",\n  \"percent\": 33,\n  \"chunksDone\": 1,\n  \"chunksTotal\": 3,\n  \"message\": \"正在合成第 1/3 段...\"\n}\n```\n\n完成，`200` 响应（取到音频后停止轮询）：\n\n```json\n{\n  \"jobId\": \"018f1234-...\",\n  \"status\": \"done\",\n  \"percent\": 100,\n  \"audioBase64\": \"<base64编码的WAV>\",\n  \"mimeType\": \"audio/wav\",\n  \"audioBytes\": 1234567,\n  \"durationMs\": 42300,\n  \"charCount\": 518,\n  \"totalChunks\": 3,\n  \"billingCharged\": \"0.000311\",\n  \"billingBalance\": \"9956.10\"\n}\n```\n\n失败，`422` 响应（`error` 为对象，与人类可读文案一致）：\n\n```json\n{\n  \"jobId\": \"018f1234-...\",\n  \"status\": \"failed\",\n  \"error\": {\n    \"message\": \"分段 2/3 合成失败：cURL error: ...\",\n    \"type\": \"upstream_error\",\n    \"code\": \"tts_failed\"\n  }\n}\n```\n\n**处理完整音频**：`audioBase64` 即合并后完整 WAV，base64 解码后即可播放。\n\n**计费转述**：收到 `done` 后，须向用户转述 `billingCharged`（本次扣费）和 `billingBalance`（当前余额）。\n\n### 第三步（可选）：删除任务（`DELETE /tts/async/{jobId}/`）\n\n任务完成取回音频后可主动删除以释放存储，响应 `200 {\"message\":\"任务已删除\"}`。\n\n---\n\n### 语言代码（`lang` 字段）\n\n```text\nmn-Mong  = 传统蒙古文（竖写蒙文）\nmn-Cyrl  = 西里尔蒙古文\nzh-Hans  = 简体中文\nen       = 英文\nja       = 日文\nko       = 韩文\nru       = 俄文\n```\n\n### 可选参数\n\n```text\nvoice      = 音色：Kore / Puck / Zephyr / Charon / Fenrir / Aoede / Leda / Orus / Iapetus / Sulafat / Achird / Achernar\nspeed      = 语速，可选，0.5～2.0；不传时服务端视同默认（约 1.0）。对用户说明时用「正常/快一点/慢一点」映射（见 SKILL.md），勿在对话中报读数值。\nsampleRate = 采样率（Hz）：8000 / 16000 / 22050 / 44100 / 48000\n```\n\n## Word 文档翻译\n\nRequest:\n\n```http\nPOST /word/translation/ HTTP/1.1\nHost: mongol.open-idea.net\nAuthorization: Bearer <MONGOL_AI_SKILL_API_KEY>\nContent-Type: multipart/form-data; boundary=<boundary>\n```\n\nForm fields:\n\n```text\nfrom = auto\nto = zh\nmode = mongolian_only\nfile = <本地 .docx 文件>\n```\n\n响应提取：\n\n```text\ndata.text\n```\n\n## PDF 文档翻译\n\nRequest:\n\n```http\nPOST /pdf/translation/ HTTP/1.1\nHost: mongol.open-idea.net\nAuthorization: Bearer <MONGOL_AI_SKILL_API_KEY>\nContent-Type: multipart/form-data; boundary=<boundary>\n```\n\nForm fields:\n\n```text\nfrom = auto\nto = zh\nmode = mongolian_only\nfile = <本地 .pdf 文件>\n```\n\n响应提取：\n\n```text\ndata.text\n```\n\nFile v1.0.35:references/INTERFACE-ROUTING.md\n\n# 接口选择\n\n根据用户意图选择接口：\n\n## 路由优先级（必须每轮重判）\n\n每一轮用户新消息都必须重新判断接口，禁止沿用上一轮选择。优先级固定为：\n\n1. **图片文字识别**：用户上传图片、截图、拍照或明确要求“识别图片文字/提取图中文字” → 先使用 `POST /ocr`（默认 `language=mw` 传统蒙古文；西里尔蒙文显式 `mn`）。\n2. **语音识别**：用户上传音频/录音/语音文件，或明确要求“识别语音/转写音频/ASR” → **默认 `POST /audio/async`**（轮询）；极短音频可试同步 **`POST /audio`**。\n3. **纯文字翻译**：出现\"翻译\"、\"译为\"、\"译成\"、\"翻成\"、\"转换\"、\"什么意思\"、\"西里尔转传统\"、\"传统转西里尔\"、\"蒙蒙互译\"等纯转换意图 → 使用 `POST /translation`。\n4. **中文回答 / 中文回复**：消息同时包含传统蒙古文字符和\"中文回答我\"、\"用中文回答\"、\"用中文回复\"、\"请用中文解释\"、\"中文回复\"等中文输出指令 → 使用 `POST /chat/completions` 的中文回复模板。\n5. **蒙文回答 / 蒙文回复**：用户明确要求用传统蒙古文回答或回复 → 使用 `POST /chat/completions` 的纯传统蒙古文模板。\n6. **默认蒙文对话**：纯蒙文输入且没有翻译关键词、没有中文输出指令 → 使用 `POST /chat/completions` 的纯传统蒙古文模板。\n\n---\n\n## 用户消息本身为蒙古文时的处理（触发后优先判断）\n\n技能已被激活后，若用户消息本身主要由传统蒙古文字符（U+1800–U+18AF）或西里尔字符（U+0400–U+04FF）构成：\n\n- **不含翻译类关键词**（翻译、转换、译成、译为、翻成等）  \n  → 用户是在用蒙古语交流，使用 **`POST /chat/completions`** 直接以蒙古语回复。\n\n- **含翻译类关键词**  \n  → 用户想把蒙文转成中文，使用 **`POST /translation`**，方向 `mw → zh`。\n\n- **明确要求传统蒙古文与西里尔蒙古文互转**（如“西里尔转传统”“传统转西里尔”“蒙蒙互译”）  \n  → 使用 **`POST /translation`**，显式指定 `mn → mw` 或 `mw → mn`。OpenClaw 只调用一次本站接口，后台负责经中文中转。\n\n- **含中文输出指令且不含翻译类关键词**（中文回答、用中文回答、用中文回复、请用中文解释等）  \n  → 用户想让系统理解蒙文后用中文作答，使用 **`POST /chat/completions`** 的中文回复模板。\n\n消息不含蒙古文字符时，按下方关键词规则判断。\n\n---\n\n## 关键词与接口优先（高优先级）\n\n- 用户请求中出现 **介绍、生成、写一份、创建** 等（说明、创作、从零产出类意图）时，**优先**使用 **`POST /chat/completions`**（会话接口）。详见 [CHAT-COMPLETIONS.md](./CHAT-COMPLETIONS.md)。\n- 用户请求中出现 **翻译、转换、译成** 等（明确互译、语种转换意图）时，使用 **`POST /translation`**（翻译接口）。详见 [TRANSLATION.md](./TRANSLATION.md)。\n- 若两类关键词同时出现：以用户核心意图为准——明确要求将**给定原文**译为另一种文字 → 用 **`POST /translation`**；以撰写新稿、介绍、生成内容为主 → 用 **`POST /chat/completions`**。\n\n## 网页与长文（衔接提示）\n\n- **网页翻译**：用户未直接粘贴正文时，**先**用粘贴、浏览/摘录工具或其它技能得到 **可译正文**（尽量去掉导航、页脚等噪声），**再**对全文判定方向并调用 **`POST /translation`**；总长度超过单段上限时，**必须**按 [TRANSLATION.md](./TRANSLATION.md) 中「分段翻译」执行，不得省略。\n- **长材料**：默认按 [TRANSLATION.md](./TRANSLATION.md) 中「分段翻译」规则在 **边界与字节限制** 上切分并逐段请求；译文按段顺序拼接。若用户**额外**要求先用通用模型做摘要或语义切块，可在代理侧自行编排，但 **各块译文仍须通过 `POST /translation` 产出**，不得以会话接口替代整段互译。\n\n## 图片 OCR（新增）\n\n- 当输入包含图片/截图时，先调用 `POST /ocr`，请求体至少包含：\n  - `image_base64`：图片 Base64（可不含 data:image 前缀）\n  - `language`：默认 `mw`（传统蒙古文）；西里尔蒙文（西里尔字母）用 `mn`\n- OCR 成功后：\n  - 若用户只要识别结果：直接输出 OCR 文本\n  - 若用户还要求翻译：将 OCR 文本再走 `POST /translation`\n- 详细请求体/字段提取规范见 [OCR.md](./OCR.md)\n\n## 语音 ASR\n\n- 当输入包含音频、录音、语音文件，或用户明确要求语音转文字时：**默认 `POST /audio/async`** → 轮询 **`GET /audio/async/{jobId}`** 直至 **`data.text`**（与 [HTTP-REQUESTS.md](./HTTP-REQUESTS.md)「异步 ASR」一致）。极短音频可试同步 **`POST /audio`**。\n- 推荐 **`multipart/form-data`** 上传 **`file`**（长音频）；同步与异步均可参见 [HTTP-REQUESTS.md](./HTTP-REQUESTS.md)。\n- ASR 成功后：\n  - 若用户只要识别结果：直接输出识别文本\n  - 若用户还要求翻译：将识别文本再走 `POST /translation`\n- 字段细节见 [ASR.md](./ASR.md)\n\n## TTS 文字转语音\n\n### 第一步：列举全部音色并询问播音风格（调用前必做）\n\n触发 TTS 前，必须先向用户**完整列出全部 12 种** `voice`，再请其选择——勿只列出 4 条示例让人误以为仅此几种：\n\n```text\nKore · Puck · Zephyr · Charon · Fenrir · Aoede · Leda · Orus · Iapetus · Sulafat · Achird · Achernar\n```\n\n话术示例：\n\n> 请从下列音色中选一种（或直接说英文名）：Kore · Puck · Zephyr · …（如上 12 个）。也可说风格我再帮您对应；若没有偏好我会在合成时自动选。\n\n### 第二步：根据回应决定音色\n\n**用户明确指定**（说出风格描述或上述音色名其一）→ 映射到对应 `voice` 后调用。\n\n**用户未回应 / 回答含糊**（「随便」「你决定」「无所谓」，或直接改写话题）→ 按下表自动选择（括号内四类为最常见启发式 shortcut，表中仍覆盖全部 12 音色）：\n\n| 内容特征 | 自动选音色 | 音色风格 |\n|----------|-----------|---------|\n| 正式/商务/公文/演讲 | **Kore** | 沉稳权威 |\n| 新闻/播报/解说/教学 | **Iapetus** | 清晰明瞭 |\n| 儿童/故事/绘本 | **Leda** | 青春活泼 |\n| 情感/暖心/生活/问候 | **Sulafat** | 温暖亲近 |\n| 朋友间聊天/日常对话 | **Achird** | 亲切友好 |\n| 运动/励志/广告 | **Fenrir** | 激情有力 |\n| 轻松/休闲/娱乐 | **Aoede** | 爽朗活泼 |\n| 年轻/潮流/社交媒体 | **Puck** | 明快上扬 |\n| 自然/诗歌/文学 | **Zephyr** | 明亮清新 |\n| 历史/纪录片/旁白 | **Charon** | 娓娓道来 |\n| 深沉/史诗/严肃 | **Orus** | 浑厚有力 |\n| 舒缓/冥想/睡眠 | **Achernar** | 柔和轻声 |\n| 其他/无法判断（默认） | **Kore** | 通用稳妥 |\n\n### 语速与用户沟通（不向用户复述接口数值）\n\n- 默认：**正常语速**，不向用户索要「speed 数值」。\n- 仅当用户主动要求快慢时，用自然语言确认「要快一点还是慢一点？」，再在 JSON 请求中分别映射 **快→`speed: 1.2`**、**慢→`speed: 0.8`**；无须在对话中报读 `speed: 1.0`。\n\n### 提交全文校验（防漏句、复制截断）\n\n请求体中的 **`text`** 必须与用户本轮提供的待朗读正文 **逐字符一致**（未被省略、截断或改写，含空格与标点）。超长文本可分多段与用户逐段核对后再提交。\n\n### 第三步：调用接口\n\n- **长文本与实际使用**：必须使用异步 **`POST /tts/async`** → 每隔 3～5 秒 **`GET /tts/async/{jobId}`** 轮询，直至 `200` 且 **`status`: `done`**，从 **`audioBase64`** base64 解码为 `.wav` 播放。**已移除 SSE** `POST /tts/stream`，禁止按旧文档调用。\n- 极短试探可试用同步 **`POST /tts`**（易遇代理超时，长文禁止使用）。\n- 请求体常规含 `text`、`lang`、`voice`。完成时须在回复中转述 **`billingCharged`**、**`billingBalance`**（异步为 JSON 顶层字段）。\n- 详细 URI 与响应示例见 [HTTP-REQUESTS.md](./HTTP-REQUESTS.md) 中「TTS 文字转语音」章节。\n\nFile v1.0.35:references/OCR.md\n\n# OCR `POST /ocr`\r\n\r\n用于图片文字识别（默认 **`mw` 传统蒙古文**；纯西里尔蒙古文稿件请传 **`mn`**）。\r\n\r\n## 适用场景\r\n\r\n- 用户上传图片、截图、拍照，要求识别文字\r\n- 用户先要识别图片文字，再继续翻译或问答\r\n\r\n## 请求体\r\n\r\n```json\r\n{\r\n  \"image_base64\": \"<图片Base64，可不带data:image前缀>\",\r\n  \"language\": \"mw\",\r\n  \"image_encoding\": \"jpg\"\r\n}\r\n```\r\n\r\n字段说明：\r\n\r\n- `image_base64`：必填。支持纯 Base64 或 data URI（如 `data:image/jpeg;base64,...`）。\r\n- `language`：可选，默认 `mw`（传统蒙古文 OCR）。若文稿为西里尔蒙文（西里尔字母），显式传 `mn`。\r\n- `image_encoding`：可选，默认 `jpg`。常见值：`jpg`、`png`、`webp`、`bmp`、`tif`、`tiff`、`gif`。\r\n\r\n## 响应提取\r\n\r\n成功时只提取：\r\n\r\n- `data.text`（首选，已解码文本）\r\n\r\n可选辅助字段（不直接给用户展示，除非用户要求）：\r\n\r\n- `data.lines`\r\n- `data.raw`\r\n\r\n## 图片内容来源\r\n\r\n由 OpenClaw / Gateway / Agent、上传组件或业务系统读取图片并提供 `image_base64` 与 `image_encoding`。本 Skill 不要求客户电脑安装特定命令行运行时，也不依赖本地辅助工具。\r\n\r\n## 输出约束（零泄漏）\r\n\r\n- 默认最终可见回复只输出 `data.text` 原文；若响应头包含 `X-Mengguyu-Billing-*`，须在正文后转述本次扣费、当前余额与币种。\r\n- 禁止输出请求体、原始 JSON、签名信息、模型信息、调试日志。\r\n- 若用户要求“先识别再翻译”，流程应为：`/ocr` 提取文本后，再走 `/translation`。\n\nFile v1.0.35:references/TRANSLATION.md\n\n# 翻译：`POST /translation`\n\n如果用户要求 **中文、传统蒙古文、西里尔蒙古文互译**：使用 **`POST /translation`**（按字符计费；不要用 `POST /chat/completions` 代替翻译）。\n\n## 中继站段落分段（`\\n\\n`）\n\n本站 `POST /translation` 在 **中继层**会对 `content` 做段落级处理：\n\n- 若 `content` 中包含 **`\\n\\n`（空行/段落分隔）**：中继会按 `\\n\\n` **拆成多段**，对每一段分别调用上游翻译，再把各段 `data.tgtText` 用 **`\\n\\n`** 拼回 **同一次响应**里的 `data.tgtText`。\n- 若 `content` 中 **不包含** `\\n\\n`：仍按 **一次上游调用**处理（避免无意义增加调用次数）。\n- 代价与注意：分段会 **增加上游调用次数**（更容易触发上游限流/超时），且段与段之间 **不共享上下文**；适合「段落结构很重要、段内自洽」的正文；不适合强依赖跨段指代的长文（仍建议调用方自行控制切分策略）。\n\n## 推荐调用\n\n按 [HTTP-REQUESTS.md](./HTTP-REQUESTS.md) 的平台无关模板调用翻译接口，并只提取 `data.tgtText`。若 Relay 返回 `X-Mengguyu-Billing-*` 响应头，须在正文后转述本次扣费、当前余额与币种。不得再附加其他解释、JSON、模型名、token 或修饰词。\n\n调用\n\n`POST /translation`\n\n（Base URL 同站：`…/api/v1`，JSON body；认证方式与其它接口一致。）\n\n## 必填参数（须全部提供，缺一不可）\n\n| 参数 | 类型 | 取值 | 说明 |\n|------|------|------|------|\n| **`from`** | string | `zh`、`mw` 或 `mn` | 源语言：中文为 `zh`，传统蒙古文为 `mw`，西里尔蒙古文为 `mn` |\n| **`to`** | string | `zh`、`mw` 或 `mn` | 目标语言：与 `from` 组合表示翻译方向 |\n| **`content`** | string | 待译正文 | 须遵守下文「请求体中的换行」规则 |\n\n示例 JSON（字段名与上表一致）：\n\n```json\n{\n  \"from\": \"zh|mw|mn\",\n  \"to\": \"zh|mw|mn\",\n  \"content\": \"文本\"\n}\n```\n\n## 蒙蒙互译（经中文中转）\n\n- 传统蒙古文 `mw` 与西里尔蒙古文 `mn` 互译时，调用方仍只请求一次本站 `POST /translation`。\n- 后台会按科大讯飞能力经中文中转执行两次上游调用：`mw -> zh -> mn` 或 `mn -> zh -> mw`。\n- 最终仍只输出响应中的 `data.tgtText`，不得展示中间中文译文、上游响应或调用过程。\n- 该方向会产生两次上游翻译调用成本，费用估算时应按两段调用考虑。\n\n## 请求体中的换行（必须）\n\n- 组装 `POST /translation` 的 JSON 时，`content` **不得**把「真实换行符」直接嵌进请求体（易导致 body 截断、解析失败或上游报错）。\n- 正确做法：按 **JSON 字符串规则** 转义——原文里的换行在 JSON 里写成 **`\\n`（反斜杠 + 字母 n，两个字符）**，由当前平台的 JSON 序列化能力自动生成即可。\n- 若必须手工拼接字符串，务必先得到**合法单行 JSON**（换行已变为 `\\n`），再作为请求体发送；不要用未闭合引号跨多行拼 `content`。\n- 分段逻辑里仍可按语义在「换行处」切分原文；每一段在填入 `content` 前，把段内换行统一转为 JSON 所需的 `\\n` 转义（或由序列化器处理）。\n\n## JSON 请求体构建最佳实践\n\n构建翻译等 JSON 请求时：\n\n1. 使用当前平台提供的 JSON 序列化能力生成请求体，避免手写拼接字符串。\n2. `content` 必须是 JSON 字符串字段，不要把已序列化的字符串再次包一层引号。\n3. 换行符与上文「请求体中的换行」一致：真实换行必须变为 JSON 中的 `\\n`；使用标准 JSON 序列化能力时一般会自动处理。\n4. 发送前确保最终请求体是合法 JSON 对象，且包含 `from`、`to`、`content` 三个字段。\n\n## 翻译方向（自动判定）\n\n- 若待译文本包含传统蒙古文字符（U+1800–U+18AF）→ `from`: `mw`，`to`: `zh`。\n- 若待译文本包含西里尔字符（U+0400–U+04FF）→ `from`: `mn`，`to`: `zh`。\n- 否则视为中文原文 → `from`: `zh`，`to`: `mw`。\n- 若用户明确要求“西里尔转传统”“传统转西里尔”“蒙蒙互译”，必须显式设置 `from=mn,to=mw` 或 `from=mw,to=mn`。\n\n## 分段翻译（高优先级）\n\n- **中继默认行为**（`RELAY_TRANSLATION_PROVIDER=xfyun` 时）：`POST /translation` 收到 `content` 后，中继按 **单行 `\\n`** 拆成多行；非空行逐行调用上游，空行作为占位保留，最终译文按原行顺序用 **`\\n`** 拼回。\n- **讯飞 `data.text` 限制**：讯飞 HTTP `v2/its` 要求 JSON 里 **`data.text`（Base64 串）长度约 1～5500**（错误码 10107）。单行仍超长时，由 `XfyunTranslationService` **按 UTF-8 码位自动再分片**多次请求并拼接译文，客户端一般无需自行按字节硬切。\n- **经中继转发的翻译上游**：仍按上述「按 `\\n` 分行」由中继拆段；若该上游对单段另有长度限制，以其实际限制为准。\n- **客户端建议**：`content` 仍受本站 **max 4000 字符**（`mb` 计数）约束；长稿尽量保留自然换行，便于按行拆译。若需完全控制分段，也可自行切分后逐次调用。\n\n分段后保留原有语序与行顺序，不得改写原文语义。\n\n## 响应解析（必须）\n\n本站 `/translation` 成功时（后端已聚合上游结果）响应体为 JSON，结构示例：\n\n```json\n{\n  \"success\": true,\n  \"data\": {\n    \"from\": \"mw\",\n    \"to\": \"zh\",\n    \"srcText\": \"<本段原文>\",\n    \"tgtText\": \"<本段译文>\"\n  },\n  \"requestId\": \"...\"\n}\n```\n\n- **`data.tgtText`**：本段**译文**；分段时对每一段取 `tgtText`，再按段顺序拼接为最终结果。\n- **`data.srcText`**：本段原文回显（应与该段请求的 `content` 一致），用于核对；不要把它当成译文输出。\n\n返回 **译文即可**（最终输出为合并后的译文字符串，除非用户明确要求原始 JSON）。\n\n说明：蒙古文 → 中文的译文为**中文**，不适用 [BEHAVIOR-RULES.md](./BEHAVIOR-RULES.md) 中「全程传统蒙古文 / 禁止汉字」类自检；中文 → 传统蒙古文或西里尔蒙古文时，每段 `tgtText` 须符合目标文字体系；`mn <-> mw` 互译时只输出最终目标文字。\n\nFile v1.0.35:manifest.json\n\n{\n  \"skills\": {\n    \"mongolian-llm\": \"1.0.33\"\n  }\n}\n\nArchive v1.0.34: 13 files, 35912 bytes\n\nFiles: manifest.json (52b), package.json (354b), README.md (2955b), references/API-KEY.md (2031b), references/ASR.md (1834b), references/BEHAVIOR-RULES.md (12882b), references/CHAT-COMPLETIONS.md (5441b), references/HTTP-REQUESTS.md (11380b), references/INTERFACE-ROUTING.md (8332b), references/OCR.md (1643b), references/TRANSLATION.md (6278b), SKILL.md (18477b), _meta.json (133b)\n\nFile v1.0.34:SKILL.md\n\n---\nname: mongolian-llm\ndescription: 须在 OpenClaw 配置环境变量 MONGOL_OPEN_IDEA_API_KEY，值在 https://mongol.open-idea.net 个人中心「API Key」页创建；调用该站 /api/v1。支持中文 ↔ 传统蒙古文 / 西里尔蒙古文互译、蒙古语对话创作、文字转语音（TTS）、语音识别（ASR）、图片文字识别（OCR）及 Word / PDF 文档翻译。遇到蒙古文相关请求自动激活，结果由专业接口处理，字符准确可靠。\ntriggers: 蒙语翻译, 蒙古语翻译, 蒙汉翻译, 蒙蒙互译, 西里尔蒙古文翻译, 传统转西里尔, 西里尔转传统, 中文翻译蒙古文, 蒙古文翻译, 蒙文邮件, 蒙古文邮件, 邮件蒙文, 发邮件蒙文, 邮件用蒙古文, 回复蒙文邮件, 蒙文邮件回复, 蒙语对话, 蒙古语会话, 蒙文聊天, 蒙古文聊天, 蒙语聊天, 蒙古语聊天, ᠮᠣᠩᠭᠣᠯ ᠬᠡᠯᠡᠬᠦ, 蒙文通知, 蒙古文通知, 推送蒙文, 通知蒙古文, 消息蒙古文, 定时蒙文, 定时通知蒙古文, 生成蒙文文件, 蒙古文文件, 蒙文文档, 导出蒙文, 蒙文附件, 社媒蒙文, 蒙古文贴文, 发社媒蒙古文, 社交媒体蒙古文, 发帖蒙古文, 蒙文文案, 网页翻译, 网页蒙文, 摘录翻译, 长文翻译, 批量翻译, 远程批量蒙文, 蒙古语, 蒙语, 蒙古文, 蒙文, 用蒙语, 用蒙古文, 说蒙语, 说蒙古文, 蒙语语音识别, 蒙古语语音识别, 蒙文语音识别, 语音转文字, 音频转写, ASR, 文字转语音, TTS\nmetadata: {\"openclaw\":{\"emoji\":\"🐎\",\"homepage\":\"https://mongol.open-idea.net\",\"primaryEnv\":\"MONGOL_OPEN_IDEA_API_KEY\"}}\n---\n\n# Mongolian Language Skill\n\nBase URL：`https://mongol.open-idea.net/api/v1`  \n请求模板：[references/HTTP-REQUESTS.md](./references/HTTP-REQUESTS.md)\n\n## OpenClaw 环境变量\n\n- **`MONGOL_OPEN_IDEA_API_KEY`**：必须在 **https://mongol.open-idea.net**（与上列 Base URL 同源）登录后于「API Key」页创建；供 `Authorization: Bearer …` 访问本站 `/api/v1`，与第三方云厂商控制台申请的直连密钥无关。\n\n## 输出规则（最高优先级）\n\n调用成功后，最终可见回复由两部分组成：**业务正文** + **计费转述**。\n\n### 1. 业务正文\n\n仅包含下列接口对应目标字段原文；**计费句子不属于本节**，写法见 §2。\n\n| 接口 | 目标字段 |\n|------|---------|\n| `POST /translation` | `data.tgtText`（分段时按序拼接） |\n| `POST /chat/completions` | `choices[0].message.content` |\n| `POST /ocr` · `POST /word/translation` · `POST /pdf/translation` | `data.text` |\n| `POST /audio`（同步） | `data.text` |\n| `POST /audio/async` → 轮询 `GET /audio/async/{jobId}` 至 `done`（`200`） | `data.text` |\n| `POST /tts` | 二进制音频流，保存为文件后播放；无 JSON 目标字段 |\n| `POST /tts/async` → 轮询 `GET /tts/async/{jobId}` 至 `done`（`200`） | JSON 字段 `audioBase64` → 解码为 WAV 播放 |\n\n**TTS 边界**：对用户**不要**把 `audioBase64`、二进制或整段 WAV 原文贴出来；「业务正文」在此场景等价于按要求完成播放/落盘。**计费转述**仍按 §2 执行，不受影响。\n\n禁止输出：内部思考、路由解释、请求体、响应 JSON、模型名、token usage、代码块、前言、注释、礼貌语。\n\n### 2. 计费转述（强制；任意接口每次调用成功后皆须执行）\n\n**硬性要求**：**必须**在「成功解析」那一次 HTTP 响应上，**主动检查**响应头 **与** JSON 正文中是否存在计费字段。只要任一侧能读出 **扣费** 或 **余额**（及配套币种若有），即视为命中，**必须**输出 §2.2 模板，**金额与原样字段不得改写**。呈现位置：**首条**计费行须紧接在最终对用户展示的 §1 业务正文末尾**另起一行**；若同轮链路中多次调用皆命中计费，**后续每条计费各占一行**（参见 §2.2 示例），中间不穿插其它话术。\n\n若响应头 **与** JSON **皆无**任一计费字段，**严禁**编造数字；完成检查即可，**不写**计费行。\n\n#### 2.1 计费信息获取\n\n| 来源 | 字段 |\n|------|------|\n| HTTP 响应头 | `X-Mengguyu-Billing-Charged`、`X-Mengguyu-Billing-Balance`、`X-Mengguyu-Billing-Currency` |\n| JSON 正文（异步 `done` 等场景常见） | `billingCharged`、`billingBalance` |\n\n- **只看 JSON、或只看正文而不解析响应头** 会漏掉头侧计费信息，视为错误实现；**必须在同一轮成功响应中兼得可读的头与体**（或等价地同时保存头文件与 body），再拼装输出。\n- **禁止**单靠 `curl -s` 只解析 stdout：`-s` **不输出响应头**。请用 **`curl -sS -i`**、`curl -sS -D headers.txt -o body.json`，或 Python `requests` 的 `r.headers` / Node `fetch` 可读 headers 的客户端。\n- **异步**：轮询至 **`GET …/{jobId}` 返回 `200` 且 `done`** 的那一次响应，同样必须读取头或 JSON 内计费字段后再输出。\n\n币种：优先 **`X-Mengguyu-Billing-Currency`**；若缺失且 JSON 无等价字段，模板中 `{currency}` 用接口实际返回值里出现的币种字面量（**不得臆造**）。\n\n#### 2.2 输出格式（固定模板）\n\n在 §1 之后**另起一行**，严格套用（占位符替换为本次读到的数值/币种字面量）：\n\n`本次扣费: {charged} {currency}, 余额: {balance} {currency}`\n\n示例（单次）：\n\n```\nᠠᠪᠤᠷᠭᠤ\n本次扣费: 0.01 CNY, 余额: 9.99 CNY\n```\n\n示例（链路两次成功调用：如 OCR → 翻译，各有一次计费转述）：于最终对用户可见的正文末尾，按调用顺序分行附 **两行**模板（或使用与上行相同模板、数据来源分别对应 OCR 响应与翻译响应）：\n\n```\nᠠᠪᠤᠷᠭᠤ\n本次扣费: 0.02 CNY, 余额: 9.98 CNY\n本次扣费: 0.03 CNY, 余额: 9.95 CNY\n```\n\n#### 2.3 最终自检清单（输出前必过）\n\n- [ ] **每一次**调用成功且完成解析时，均已在该次响应上检查过头 **与** JSON（如 OCR→翻译等多步链路不得只查最后一步）\n- [ ] 凡命中计费字段的调用均在最终答复中接续输出 §2.2：**首行**紧接在 §1 业务正文末尾**另起一行**；同轮链路中后续的计费各占**新的一行**，中间不掺杂其它话术。**若全程均无计费字段**则**不写**计费行、**不捏造**。\n- [ ] 模板中金额 **原样抄写**，未四舍五入改写、未中英文混改写币种\n\n## 接口路由（每轮必须重新判断）\n\n优先级：OCR → ASR → TTS → 翻译 → 中文回复 → 蒙文回复/对话\n\n- **OCR**：输入含图片 → `POST /ocr`\n- **ASR**：输入含音频 → **默认 `POST /audio/async`**（`multipart` 上传 `file` + `language`，每隔 **3～5 秒** 轮询 **`GET /audio/async/{jobId}`** 直至 `status: done`，提取 **`data.text`**；OpenClaw / 长音频优先此路径以避免网关超时）。**极短音频或探测**可试同步 **`POST /audio`**（仍受本站单次 PCM 时长配额限制）。计费：`billingCharged` / `billingBalance`（JSON 或响应头）。\n- **TTS**：用户要求朗读/播放/合成音频 → 优先 **`POST /tts/async`**（异步轮询，长文本必用）；极短文本可试 **`POST /tts`**（同步，易受代理超时限制）\n- **翻译**：含「翻译」「译成」「什么意思」「西里尔转传统」等纯转换意图 → `POST /translation`\n- **中文回复**：含蒙文 + 「用中文回答/回复」→ `POST /chat/completions`（中文 system）\n- **蒙文对话**：蒙文输入无翻译关键词 → `POST /chat/completions`（蒙文 system）\n\n### 流式联动规则（OCR → 翻译）\n\n当上一环节的输出作为下一环节的输入时（例如先 `POST /ocr` 再 `POST /translation`）：\n\n1. **禁止手动转录**：不得从终端输出、日志截断、控制台预览或对话框摘录中复制内容，作为下一请求的输入。\n2. **变量直通**：OCR 成功响应中 **`data.text`** 的值必须**原封不动**用程序变量（或等价结构化字段）传入翻译请求的 **`content`**；中途不得截取、摘录或人工转写。\n3. **惰性校验**：若待传文本超过约 **200** 字符，直接以变量传递即可，无需输出全文预览供人工核对（以免诱导从预览复制不完整文本）。\n\n以上约束不改变「输出规则」：对用户可见的最终回复仍仅为「§1 业务正文 + §2 计费转述」，不要在对话里粘贴完整响应 JSON。\n\n## 调用模板\n\n### 翻译\n\n```json\n{ \"from\": \"zh\", \"to\": \"mw\", \"content\": \"待翻译文本\" }\n```\n语言代码：`zh` 中文 · `mw` 传统蒙古文 · `mn` 西里尔蒙古文。蒙蒙互译只调一次，后台经中文中转。\n\n### TTS（异步轮询优先；必须先问音色；禁止向用户报读 speed 数值）\n\n1. **音色**：触发 TTS 前，必须先向用户**完整列出全部 12 种** `voice` 供选择：**Kore · Puck · Zephyr · Charon · Fenrir · Aoede · Leda · Orus · Iapetus · Sulafat · Achird · Achernar**。根据用户回答选择对应名称；用户未回应、含糊回应（「随便」「你决定」）或直接去忙别的话题时，再按内容自动选（正式→Kore，新闻→Iapetus，儿童→Leda，情感→Sulafat，默认→Kore）。详细映射与话术见 [INTERFACE-ROUTING.md](./references/INTERFACE-ROUTING.md)。\n\n2. **语速**：对用户仅说明默认是**正常语速**，**不必主动询问**。**不要在对话里复述** `speed: 1.0` 等接口数值。只有当用户明确要求调整语速时，用自然语言问「想快一点还是慢一点？」，再在请求里分别映射：**快一点 → `speed`: 1.2**，**慢一点 → `speed`: 0.8**。（其他情况不传 `speed`。）\n\n3. **提交全文校验**：在发起请求前，将待合成的 `text` 与用户本轮提供的正文**逐字符**比对，确保未被省略、截断或改写（含空格与标点）。若文本很长，可分段与用户逐一核对后再提交。\n\n4. **调用方式**：绝大多数场景使用 **`POST /tts/async`** 提交任务后，每隔 **3～5 秒** 轮询 **`GET /tts/async/{jobId}`**，直到 `200` 且 `status: done`，从 **`audioBase64`** 解码为 `.wav` 播放。计费字段 **`billingCharged`**、**`billingBalance`** 必须转述。极短试探可试同步 **`POST /tts`**（长文禁止）。**禁止使用**已移除的 SSE 端点 `POST /tts/stream`。详见 [HTTP-REQUESTS.md](./references/HTTP-REQUESTS.md)。\n\n```http\nPOST /tts/async/\n```\n\n```json\n{ \"text\": \"ᠰᠠᠢᠨ ᠪᠠᠢᠨ᠎ᠠ ᠤᠤ\", \"lang\": \"mn-Mong\", \"voice\": \"Kore\" }\n```\n\n仅当用户在第 2 步明确要快/慢时追加 `\"speed\": 1.2` 或 `\"speed\": 0.8`。\n\n`lang`：`mn-Mong` 传统蒙古文 · `mn-Cyrl` 西里尔蒙古文 · `zh-Hans` 中文 · `en` 英文。\n\n### ASR（异步轮询优先；与 TTS 同类）\n\n1. **默认路径**：**`POST /audio/async`**，使用 **`multipart/form-data`** 上传字段 **`file`**（与同步接口相同格式类型），外加 **`language`**、可选 **`sample_rate`**。\n2. **轮询**：`202` 返回 `jobId` 后，每隔 **3～5 秒** **`GET /audio/async/{jobId}`**；`processing`/`pending` 时 **202**；**`200`** 且含 **`data.text`** 为完成（后台已按本站策略切段多次调上游并拼接文本）。\n3. **同步备选**：极短音频可 **`POST /audio`**（JSON 或 multipart），易被代理/单次时长限制；长音禁止依赖单请求。\n\n详见 [HTTP-REQUESTS.md](./references/HTTP-REQUESTS.md)。\n\n### 对话（蒙文 / 中文输出）\n\n调用 `POST /chat/completions` 时，须在拼好 **`messages`** 后、发送请求前，用 **本节下表** 为 **`max_tokens` 填入一个确定整数**。不要凭主观「感觉」偏小或偏大默认写 **4096** / **8192**；定性补充与封顶说明见 [CHAT-COMPLETIONS.md](./references/CHAT-COMPLETIONS.md)。\n\n#### `max_tokens` 自动估算规则（必选）\n\n1. **量谁**：本条请求 **`messages`** 中**最后一条** `role: user` 的 `content` 全文。\n2. **怎么数**：**Unicode 码点**个数（中英文、西里尔字母、传统蒙古文、标点、空格均各占 1）。**不要用** JavaScript 的 **`string.length`** 当作码点计数（UTF-16 代理对会 **误计**）；可用 **`Array.from(content).length`**、`Intl.Segmenter`（按 grapheme）、Python **`len`** 等对码点正确的方法。\n3. **多轮**：只数 **本条**即将发出去的那段 **`user.content`**；不要把历史 **`assistant`** 或其它轮次的上下文拼进来算 **`L`**，除非你确实已把拼接结果写进了本条 **`user.content`**。\n4. **查表**：令 **`L`** = 步骤 2 的码点字数，按下表取值（单值）。\n\n| **`L`** | 典型场景（便于对照） | **`max_tokens`** |\n|--------|---------------------|------------------|\n| **≤ 50** | 寒暄、极简短问 | **256** |\n| **51～200** | 一般问答、短指令 | **768**（对应原建议区间 512～1024 的折中；**严控成本**可改用 **512**） |\n| **201～1000** | 段落级、中长上下文 | **3072**（对应原区间 2048～4096 的折中；预期回答明显很长且不敏感余额可改用 **4096**） |\n| **> 1000** | 长文、文章体、条目式长答 | **8192**（若非顶格长输出可先试 **6144**） |\n\n用户若**明示**输出要「一段话即可 / 要尽量短 / 要写长文」，在不超 **8192** 硬顶的前提下可上下浮动一档，但仍须能说出依据（字数档或用户原话）。\n\n**蒙文示例**（仅演示结构； **`max_tokens` 须按上表重算**。若 **`L`** 在 51～200，常用 **768**）：\n\n```json\n{\n  \"model\": \"gpt-5-mw\",\n  \"messages\": [\n    {\"role\": \"system\", \"content\": \"请只用纯传统蒙古文回答，不要包含任何中文汉字。\"},\n    {\"role\": \"user\", \"content\": \"<用户问题>\"}\n  ],\n  \"temperature\": 0.5,\n  \"max_tokens\": 768\n}\n```\n\n**中文示例**（同上，`max_tokens` 查表；结构一致）：\n\n```json\n{\n  \"model\": \"gpt-5-mw\",\n  \"messages\": [\n    {\"role\": \"system\", \"content\": \"请使用简体中文回答。若用户输入包含传统蒙古文，请先理解原文语义，再直接给出针对用户请求的中文回复正文。只输出最终中文回复正文；禁止添加问候、自我介绍、解释过程、标题、原文复述或无关补充。若用户明确要求翻译，请不要使用本模板，应改用 POST /translation。\"},\n    {\"role\": \"user\", \"content\": \"<用户问题>\"}\n  ],\n  \"temperature\": 0.5,\n  \"max_tokens\": 768\n}\n```\n\n## 计费与调用确认\n\n| 接口 | 计费 | 参考费率 |\n|------|------|---------|\n| `/translation` · `/tts` · `/tts/async` | 按输入字符数 | ¥6 / 万字符 |\n| `/chat/completions` | 按 token | 输入 ¥60 / 百万；输出 ¥120 / 百万 |\n\n短文本/短对话直接调用。长文、批量、Word/PDF、OCR、ASR 等高成本任务须先估算费用、告知用户并等待确认。详见 [BEHAVIOR-RULES.md](./references/BEHAVIOR-RULES.md)。\n\n## API Key 配置\n\n未检测到 `MONGOL_OPEN_IDEA_API_KEY` 时，输出以下固定提示（原文输出，不改写）：\n\n```text\nMONGOL_OPEN_IDEA_API_KEY 未配置。请按以下步骤操作：\n1. 访问 https://mongol.open-idea.net 注册/登录，在「API Key」页创建并复制完整 Key\n2. 在本机终端执行（勿将 Key 粘贴到对话框）：\n   openclaw config set env.MONGOL_OPEN_IDEA_API_KEY \"<完整API Key>\"\n   openclaw gateway restart\n3. 若 openclaw 命令不可用，手动写入 ~/.openclaw/.env（Windows：%USERPROFILE%\\.openclaw\\.env）：\n   MONGOL_OPEN_IDEA_API_KEY=你的完整Key\n   再重启 Gateway\n```\n\n**⚠️ 禁止索取 Key**：不得要求用户将 Key 发送到对话框。若用户已主动粘贴 Key：立即警告（建议撤销并重新生成） → 写入配置并执行 `openclaw gateway restart` → 完成后再次提醒替换。禁止在对话中回显 Key 原文。\n\n详细配置说明：[references/API-KEY.md](./references/API-KEY.md)\n\n## 错误处理\n\n### 结果看起来「不正常」仍勿重复同一计费请求（防多次扣款）\n\n中继按 **单次已完结的调用**计费：只要收到 **`HTTP 200`**、JSON **`success: true`**（或等价语义）、可读 **`data.*` 等业务字段**，以及/或 **`X-Mengguyu-Billing-*` / JSON `billing*`**（含异步轮询 **`done`** 的那次 **`GET`**），通常即 **已记入一次扣款**。用户对译文质量、版面、空段落、「像乱码」等 **主观观感** 不等于服务端未入账。\n\n**禁止**：在未征得用户知情同意、且 **未改写请求载荷**（同一段 `content`、同一文件、`from/to`/分段策略不变）的情况下，只因为「上一轮结果不满意」就连发 **第二次、第三次** 同类调用——这会按 **新的一轮计费** 叠加扣款，且未必改善模型输出。\n\n**建议**：先用 §1 §2 向用户如实呈现上一轮业务正文与计费；若需重做，须在用户明确表示接受 **再次计费** 后 **调整输入**（拆段、换一种 `from/to`、删减噪声正文、换一种文档等）再调用，或引导用户走站内工单/人工支持，而不是静默重试。\n\n### 传输层可重试的边界\n\n- **`4xx`**：检查 Key、必填字段、JSON、分段与大小限制，**不重试**。\n- **`5xx` / 超时 / 网络抖动 / 连接被对端重置**：仅当 **尚未收到** 任何可解析的「成功/失败已完结」响应（无完整 JSON、无 `jobId` 可继续轮询、也无计费头可读）时，方可对 **同一请求体** 递增间隔重试，**最多 3 次**。一旦已解析到 **计费字段** 或异步 **已 `done`**，该次调用即 **视作结账完成**，不得以「想换一版结果」为由用原样载荷再打一枪。\n\n## 文档索引\n\n| 主题 | 文件 |\n|------|------|\n| 请求模板（全接口） | [HTTP-REQUESTS.md](./references/HTTP-REQUESTS.md) |\n| 接口路由详细规则 | [INTERFACE-ROUTING.md](./references/INTERFACE-ROUTING.md) |\n| 翻译分段规则 | [TRANSLATION.md](./references/TRANSLATION.md) |\n| 对话参数 | [CHAT-COMPLETIONS.md](./references/CHAT-COMPLETIONS.md) |\n| OCR | [OCR.md](./references/OCR.md) |\n| ASR | [ASR.md](./references/ASR.md) |\n| API Key 配置 | [API-KEY.md](./references/API-KEY.md) |\n| 行为规则 | [BEHAVIOR-RULES.md](./references/BEHAVIOR-RULES.md) |\n\n> **注意**：这不是 OpenAI API。路径、`model` 取值、字段均以本文档及 `references/` 为准，不要套用 OpenAI 规范。\n\nFile v1.0.34:README.md\n\n# mongolian-llm\n\nOpenClaw Skill：中文、傳統蒙古文、西里爾蒙古文互譯，蒙文對話/創作、圖片 OCR。\n\n## 能力\n\n- `POST /translation`：純文字翻譯（`zh` / `mw` / `mn`，蒙蒙互譯由後台經中文中轉）\n- `POST /chat/completions`：對話/創作\n- `POST /ocr`：圖片 OCR（預設 `language=mw` 傳統蒙文；西里爾蒙古文請傳 `mn`）\n- `POST /audio`：語音識別 / ASR\n\n## 路由優先級（每輪重判）\n\n1. 圖片 OCR\n2. 語音 ASR\n3. 純文字翻譯\n4. 中文回答蒙文\n5. 蒙文回答蒙文\n6. 預設蒙文對話\n\n詳見 `references/INTERFACE-ROUTING.md`。\n\n## 輸出規範（零洩漏）\n\n成功後最終可見回覆只能輸出：\n\n- `/translation` -> `data.tgtText`\n- `/chat/completions` -> `response.choices[0].message.content`\n- `/ocr` -> `data.text`\n- `/audio` -> `data.text`\n\n不得附加 JSON、工具輸出、路由解釋、模型名、token usage 等內容。\n\n## API Key\n\n主環境變數：`MONGOL_OPEN_IDEA_API_KEY`（在 **https://mongol.open-idea.net** 注册登录后，于「API Key」页创建；调用该站 `/api/v1`）。发现阶段不强依赖，业务调用前必须检查。\n\n缺失時固定提示：\n\n```text\nMONGOL_OPEN_IDEA_API_KEY 未配置。请按以下步骤操作：\n1. 访问 https://mongol.open-idea.net 注册/登录账号\n2. 进入后台 API Key 页面，创建并复制完整 Key（含前缀如 `1|xxxx...`）\n3. 不要在本对话中粘贴完整 API Key；请在自己的本机终端执行：\n   openclaw config set env.MONGOL_OPEN_IDEA_API_KEY \"<完整API Key>\"\n4. 配置后重启 Gateway 或重新开启 OpenClaw 会话，使环境变量生效\n5. 若客户端不支持该命令，请改按本说明中的 `.openclaw/.env` 兼容方式配置\n```\n\n## 安裝與配置\n\n```text\nopenclaw skills install mongolian-llm\n```\n\n配置 API Key 時，不要把完整 Key 貼到聊天輸入框。請只在自己的本機終端執行：\n\n```bash\nopenclaw config set env.MONGOL_OPEN_IDEA_API_KEY \"<完整API Key>\"\n```\n\n配置後重啟 Gateway 或重新開啟 OpenClaw 會話，使環境變數生效。\n\n如果客戶端不支援上述命令，可改用 `.openclaw/.env` 兼容方式：\n\n```text\nWindows: %USERPROFILE%\\.openclaw\\.env\nmacOS / Linux: ~/.openclaw/.env\n```\n\n```env\nMONGOL_OPEN_IDEA_API_KEY=你的完整Key\n```\n\n## 通用 HTTPS 调用\n\n本 Skill 面向客戶環境時不要求安裝特定命令行運行時。請使用 `references/HTTP-REQUESTS.md` 中的平台無關 HTTPS 請求模板，由 OpenClaw / Gateway / Agent 當前可用的 HTTPS 請求能力發起 API 調用。\n\n常用接口：\n\n- `POST /translation`\n- `POST /chat/completions`\n- `POST /ocr`\n- `POST /audio`\n- `POST /word/translation`\n- `POST /pdf/translation`\n\n## 參考\n\n- `SKILL.md`\n- `references/HTTP-REQUESTS.md`\n- `references/INTERFACE-ROUTING.md`\n- `references/BEHAVIOR-RULES.md`\n- `references/TRANSLATION.md`\n- `references/CHAT-COMPLETIONS.md`\n- `references/OCR.md`\n- `references/API-KEY.md`\n\nFile v1.0.34:_meta.json\n\n{\n  \"ownerId\": \"kn76hv4bh6w5s87x5j8emd1ycs80dp3m\",\n  \"slug\": \"mongolian-llm\",\n  \"version\": \"1.0.34\",\n  \"publishedAt\": 1778930449013\n}\n\nFile v1.0.34:references/API-KEY.md\n\n# API Key 配置\n\n**`MONGOL_OPEN_IDEA_API_KEY`**：存放你在 **https://mongol.open-idea.net**（与 Skill Base URL 同源）个人中心「API Key」页创建的 **Bearer 令牌**，用于请求 `https://mongol.open-idea.net/api/v1`；变量名与站点域名对应，**非**第三方云厂商控制台申请的直连密钥。\n\n## 安全原则\n\n- **禁止索取 Key**：不得要求用户将 API Key 发送到对话框；Key 进入对话历史后不可撤回。\n- **兜底**：若用户已主动粘贴 Key，立即警告（建议前往 https://mongol.open-idea.net 撤销并重新生成），再写入配置并重启 Gateway，完成后再次提醒替换；不在对话中回显 Key 原文。\n\n## 配置步骤（引导用户在终端执行）\n\n**第一步**：登录 https://mongol.open-idea.net，在「API Key」页创建并复制完整 Key（含前缀，如 `1|xxxx...`）。\n\n**第二步**：在本机终端执行（勿粘贴到对话框）：\n\n```bash\nopenclaw config set env.MONGOL_OPEN_IDEA_API_KEY \"<完整API Key>\"\nopenclaw gateway restart\n```\n\n重启成功后告知\"已配置并重启，可以正常使用了\"；若重启失败，提示手动重启 Gateway。\n\n**兼容方式**（`openclaw` 命令不可用时）：手动写入环境文件后重启。\n\n- Windows：`%USERPROFILE%\\.openclaw\\.env`\n- macOS / Linux：`~/.openclaw/.env`\n\n```env\nMONGOL_OPEN_IDEA_API_KEY=<完整API Key>\n```\n\n## 调用前检查\n\n- 检查 `MONGOL_OPEN_IDEA_API_KEY` 是否存在且非空；**禁止**用 `openclaw config get` 核对（输出自动脱敏，无法得到真实值）。\n- 非空 → 正常调用接口。\n- 为空 → 引导用户按上方步骤配置；若有权限可代为执行 `openclaw gateway restart`（仅重启，不代写 Key）；未检测到 Key 时不得做任何业务回答。\n\n## 说明\n\n- Key 仅通过环境变量 `MONGOL_OPEN_IDEA_API_KEY` 配置，与 `plugins.entries` 无关。\n- 本 Skill 未声明 `requires.env`，以允许在未配置 Key 时被发现，但业务调用前必须完成上述检查。\n\nFile v1.0.34:references/ASR.md\n\n# ASR `POST /audio`\n\n用于语音识别，把本地音频或 PCM Base64 转成文本。\n\n**长音频 / OpenClaw**：优先 **`POST /audio/async`** → 轮询 **`GET /audio/async/{jobId}`**，与 TTS 异步同类；服务端切段拼接后再返回 **`data.text`**。详见 [HTTP-REQUESTS.md](./HTTP-REQUESTS.md)。\n\n## 适用场景\n\n- 用户上传音频、录音、语音文件，要求识别文字\n- 用户先要语音转文字，再继续翻译或问答\n\n## 推荐调用\n\n按 [HTTP-REQUESTS.md](./HTTP-REQUESTS.md) 的平台无关模板调用 `POST /audio`。\n\n本地音频文件优先以 `multipart/form-data` 上传到后端，由后端服务器转成 PCM 后调用 ASR。支持 `wav`、`mp3`、`m4a`、`aac`、`ogg`、`flac`、`pcm`。若当前环境已经有 PCM 16-bit mono Base64，也可使用 JSON 请求体直接传 `audio`。\n\n## 请求体\n\n```json\n{\n  \"audio\": \"<PCM 16-bit mono Base64>\",\n  \"language\": \"mw\",\n  \"sample_rate\": 16000\n}\n```\n\n字段说明：\n\n- `file`：使用 multipart 上传本地音频文件时必填，字段名为 `file`。\n- `audio`：使用 JSON 直传时必填。PCM 16-bit mono 的 Base64 内容。\n- `language`：可选，默认 `mw`。\n- `sample_rate`：可选，默认 `16000`。支持 `8000`、`16000`、`48000`。\n\n## 响应提取\n\n成功时只提取：\n\n- `data.text`（识别文本）\n\n可选辅助字段（不直接给用户展示，除非用户要求）：\n\n- `data.duration_seconds`\n- `data.raw`\n\n## 输出约束（零泄漏）\n\n- 默认最终可见回复只输出 `data.text` 原文；若响应头包含 `X-Mengguyu-Billing-*`，须在正文后转述本次扣费、当前余额与币种。\n- 禁止输出请求体、原始 JSON、签名信息、模型信息、调试日志。\n- 若用户要求“先识别再翻译”，流程应为：`/audio` 提取文本后，再走 `/translation`。\n\nFile v1.0.34:references/BEHAVIOR-RULES.md\n\n# 行为规则\n\n## 调用前确认（最高优先级，在 API Key 检查之前执行）\n\n调用付费接口前，先判断任务规模和费用风险。短文本翻译/短对话可以直接处理；长文、批量、文件、OCR、ASR 等高成本任务需要先提示费用并取得确认。\n\n---\n\n### 低成本短请求 → 可直接调用\n\n用户明确下达蒙古语相关指令，且内容明显为短文本、短对话、单句翻译时，可以直接调用 API。若响应头包含计费信息，调用完成后仍需转述本次扣费、当前余额与币种。\n\n典型情形：\n\n- \"帮我把这段翻译成蒙古文\"\n- \"用传统蒙文介绍那达慕大会\"\n- \"写一封蒙文邮件\"\n\n---\n\n### 高成本或不确定费用 → 必须先确认\n\n以下情况必须先完成「估算费用 → 告知用户 → 等待明确确认」，不得直接调用：\n\n- 长文、网页正文、批量文本、多文件或远程批量任务\n- Word/PDF 文档翻译\n- OCR 图片识别，尤其是多图或大图\n- ASR 语音识别，尤其是较长音频\n- Agent 自行判断、主动提出需要调用付费 API 的操作\n- 用户明确要求\"先告诉我费用再决定\"\n\n1. **估算费用**\n   - 翻译（`POST /translation/`）：估算费用 ≈ `UTF-8 字节数 / 10000 × ¥6`；批量时按全文总字节数估算。\n   - 对话（`POST /chat/completions/`）：输入费用 ≈ `messages 字符数 / 4 / 1000000 × ¥60`；输出费用视回复长度而定。\n   - OCR（`POST /ocr/`）：按识别出的文字字符数扣费，无法准确预估时提示\"将按识别字符数计费\"。\n   - ASR（`POST /audio/` 或异步 `POST /audio/async/`）：估算费用 ≈ `音频秒数 / 3600 × ¥24`；无法读取时长时提示\"将按实际识别秒数计费\"。\n   - Word/PDF：按解析出的可翻译文字字符数扣费，无法准确预估时提示\"将按实际翻译字符数计费\"。\n\n2. **告知用户并等待明确确认**  \n   示例措辞：\n   > \"我可以帮你翻译这段内容，估算费用约 ¥0.003，是否需要？\"\n\n   以下视为**明确确认**：是、确认、好、行、可以、yes、OK 及包含明确同意意图的自然语言。  \n   以下**不视为**确认，须重新询问：沉默、含糊词（\"随便\"\"无所谓\"）。\n\n典型情形（以下均属于 Agent 主动）：\n\n- Agent 在处理其他任务时，自行决定顺带翻译某段内容\n- Agent 主动提出\"我注意到这段文字，需要我帮你翻译吗\"\n- Agent 未经指示，主动发起蒙古语对话或内容创作\n\n---\n\n### 特殊覆盖（优先于上述两条）\n\n- 用户明确说\"我知道要收费，直接执行\" → 直接调用\n- 用户设置了\"本会话内不再询问\" → 直接调用（仅用户主动声明后生效）\n- 用户要求\"先告诉我费用再决定\" → 先估算并告知，等待确认后再调用\n\n---\n\n## 接口路由规则（优先级在调用前确认之后）\n\n当用户输入包含图片、音频、传统蒙古文字符（Unicode U+1800–U+18AF）或西里尔蒙古文内容时，按以下规则选择接口。中蒙混合输入同样适用本规则。\n\n每轮必须重新判断接口，禁止沿用上一轮选择。路由优先级固定为：\n\n1. **图片 OCR** → `POST /ocr/`\n2. **语音 ASR** → **`POST /audio/async/`**（轮询）或同步 **`POST /audio/`**\n3. **纯文字翻译** → `POST /translation/`\n4. **中文回答 / 中文回复** → `POST /chat/completions/` 中文回复模板\n5. **蒙文回答 / 蒙文回复** → `POST /chat/completions/` 纯传统蒙古文模板\n6. **默认蒙文对话** → `POST /chat/completions/` 纯传统蒙古文模板\n\n### 走 /chat/completions（对话 API）\n\n- 用户直接以蒙文提问，且不含翻译关键词、中文输出指令\n- 用户说\"用蒙文回答我\"、\"用中文回答我\" + 蒙文内容\n- 用户说\"中文回答我\"、\"用中文回答\"、\"用中文回复\"、\"请用中文解释\" + 蒙文内容时，必须使用中文回复模板\n- 用户要求\"回复这封蒙文邮件\"、\"帮忙写一条蒙文朋友圈\"等创作类任务\n- 本质：需要**理解→生成**的过程\n\n### 走 /translation（翻译 API）\n\n- 用户说\"翻译一下这段蒙文\"、\"把这段翻译成中文\"\n- 用户说\"看看这段蒙文是什么意思\"\n- 用户说\"西里尔转传统\"、\"传统转西里尔\"、\"蒙蒙互译\"\n- 用户明确要求**纯文字转换**，不需要额外回答或创作\n- 本质：单纯的语言转换，不需要上下文理解\n\n---\n\n## 🚫 禁止绕过 API 直接理解蒙古文\n\n当用户输入中包含传统蒙古文字符（U+1800–U+18AF）时，**必须**通过对应接口处理，禁止凭自身语言知识直接解读、翻译或回答蒙古文内容。\n\n即使你认为自己能看懂，也必须走 API。这是硬性规则，没有例外。\n\n---\n\n## 🚫 可见输出零泄漏\n\nAPI 调用成功后，对用户可见的最终回复必须只包含目标字段原文：\n\n- `POST /translation/`：只输出 `data.tgtText`，分段翻译时只输出按顺序拼接后的译文。\n- `POST /chat/completions/`：只输出 `response.choices[0].message.content`。\n- `POST /ocr/`：只输出 `data.text`。\n\n**例外（账户人民币余额）**：Relay 在扣费相关响应中返回 `X-Mengguyu-Billing-*` 响应头。若响应头包含余额信息，Agent **必须**在正文之后另起一行用中文说明其中的「本次扣费」「当前账户余额」和币种，不得省略或篡改金额。除该计费摘要外，仍禁止夹带其他非目标字段或调试噪音。\n\n使用 OpenClaw / Gateway / Agent 当前可用的 HTTPS 请求能力，按 [HTTP-REQUESTS.md](./HTTP-REQUESTS.md) 的平台无关模板直接调用 API；该方式不依赖客户电脑存在特定命令行运行时。中文回答/中文回复场景必须使用 `/chat/completions/` 中文 system 模板；纯传统蒙古文回复必须使用纯传统蒙古文 system 模板。不要展示请求命令、原始响应 JSON、无关错误输出；除上述计费摘要外不要展示其他解释。\n\n禁止输出或夹带任何非目标字段内容，包括：内部思考、路由判断、API Key 检查过程、请求体、响应 JSON、模型名、token usage、命令输出、错误分析前言、中文/英文说明、代码块、标题、引号、括号注释、礼貌开场、总结或追问。\n\nAPI 调用与响应解析必须静默完成。除非用户明确要求原始 JSON，否则不得展示完整响应；如最终回复中混入非目标字段内容，须删除附加内容并仅保留目标字段原文及允许的计费摘要后再发送。\n\n---\n\n## 🚨 违规后果（零容忍）\n\n在包含传统蒙古文字符（U+1800–U+18AF）的输入中，若 Agent 未经 API 调用而直接理解、翻译或回答任何蒙古文内容，属于严重违规。\n\n系统将记录该行为；多次违规可触发蒙古文技能禁用。不存在\"反正我懂了所以省一次调用\"的例外。\n\n---\n\n- 严格执行用户请求；翻译只返回译文。\n- **重复调用与扣费**：若已收到 **`200`/业务成功/异步 `done`**，且能读到 **目标业务字段** 或 **计费头、JSON `billing*`**，即通常 **已扣费**；不得以「结果看着不对、像失败」为由，用 **同一 `content` 或同一文件** 再打一枪，否则会 **多次扣款**。须先向用户说明现状与计费，取得同意后再 **改写输入或路由** 并接受再次计费；或引导走人工/工单，而非静默重试。\n- 调用 `/translation/` 或 `/chat/completions/`（及其他计费接口）仅当 **尚未收到** 可解析的完结响应时，遇 **网络抖动、超时或 5xx** 方可对**同一请求体**做 **有限重试**（例如间隔递增、最多 2～3 次）；**不要**对 4xx（含鉴权失败、参数错误）盲目重试，应先检查 Key、JSON 与分段是否符合本技能文档。\n- 不设置过小超时（禁止 `--max-time 5` / `--max-time 10`）。\n- `POST /chat/completions/` 默认不加 `--max-time`；必须设置时用 `--max-time 30~60`。\n- 不要把 10~20 秒内仍在生成的请求误判为卡住。\n- 先决条件：`MONGOL_OPEN_IDEA_API_KEY` 已配置且非空。检查方法：运行 `[ -n \"$MONGOL_OPEN_IDEA_API_KEY\" ] && echo \"已配置\" || echo \"未配置\"`，或 `echo \"${#MONGOL_OPEN_IDEA_API_KEY}\"` 查看字符数是否大于 0（**勿用 `openclaw config get` 核对**，见 [API-KEY.md](./API-KEY.md)）。若未配置，必须输出下方固定中文提示，不得直接做业务回答。\n- 未检测到 `MONGOL_OPEN_IDEA_API_KEY` 时，对用户只输出以下固定中文提示（原文输出，不改写）：\n\n  ```text\n  MONGOL_OPEN_IDEA_API_KEY 未配置。请按以下步骤操作：\n  1. 访问 https://mongol.open-idea.net 注册/登录账号\n  2. 进入后台 API Key 页面，创建并复制完整 Key（含前缀如 `1|xxxx...`）\n  3. 在本机终端自行执行（勿将 Key 粘贴到对话框）：\n     openclaw config set env.MONGOL_OPEN_IDEA_API_KEY \"<完整API Key>\"\n  4. 执行后在终端运行 openclaw gateway restart，使配置立即生效\n  5. 若客户端不支持上述命令，可手动编辑 ~/.openclaw/.env（Windows 为 %USERPROFILE%\\.openclaw\\.env），写入 MONGOL_OPEN_IDEA_API_KEY=你的完整Key，再重启 Gateway\n  ```\n- **⚠️ 禁止主动索取 API Key**：不得通过任何措辞要求或引导用户将完整 API Key 发送到对话框；Key 一旦出现在对话历史中，将对参与会话的所有方可见，且无法撤回。\n- 若用户已主动将完整 API Key（格式通常为 `数字|字母数字串`，如 `1|xxxxxx`）粘贴到对话框（兜底，不主动触发）：\n  - **首先立即给出安全警告**：Key 已出现在对话记录中，建议尽快前往 https://mongol.open-idea.net 后台撤销该 Key 并重新生成；\n  - OpenClaw 客户端：调用 `openclaw config set env.MONGOL_OPEN_IDEA_API_KEY \"<key>\"` 写入配置，再执行 `openclaw gateway restart` 重启 Gateway；完成后再次提醒尽快撤销并替换该 Key；\n  - QClaw 客户端：写入 `env.MONGOL_OPEN_IDEA_API_KEY` 字段后执行 `openclaw gateway restart`，并给出撤销提示；\n  - 写入操作本身不在对话中回显 Key 原文。\n- 当先决条件未满足时，不得用\"基于自身知识\"直接生成蒙古语内容，不得跳过配置步骤。\n- 调用顺序必须严格为：先按 [API-KEY.md](./API-KEY.md) 配置并确认 **`MONGOL_OPEN_IDEA_API_KEY` 环境变量**可用 → 再调用 `/translation/`（翻译）或 `/chat/completions/`（对话）；**禁止**依赖 `openclaw config get` 做密钥校验。\n- 配置 API Key 时必须原样完整写入，不得丢失任何字符（尤其是 `|`、`$`、`\"`、`\\` 等特殊字符）。\n- 若 key 含前缀（如 `1|xxxx...`），必须完整保留前缀；禁止去掉 `1|` 后再写入。\n- 写入后**不得**用 `openclaw config get` 与原始 Key 逐字比对（输出会脱敏）。应以环境变量是否可用、接口是否鉴权成功为准；若调用失败且怀疑密钥未生效，请用户确认已在本机终端执行配置命令，必要时让用户重新配置。\n\n## 语言约束（高优先级，适用于 chat/completions）\n\n- 当用户要求\"全程传统蒙古文\"时，最终回答正文必须为传统蒙古文，不得输出中文正文\n- 即使用户用中文下达指令，只要意图是\"用传统蒙古文作答\"，也必须输出纯传统蒙古文\n- 未明确要求双语时，禁止追加中文解释、中文总结或中文标题\n- 若内容中需要专有名词，优先使用传统蒙古文转写；避免中文括注\n- 对话接口调用成功后，最终输出必须严格等于 `response.choices[0].message.content` 原文，不得二次改写、摘要、翻译、补充说明，也不得在原文前后添加任何额外内容（包括但不限于开场白、转折句、总结、追问、表情、括号说明、响应 JSON、模型名或 token usage 等）。除非触发安全/合规拦截，否则这是一条硬性规则，没有例外。\n- 即使用户在 API 返回后进一步追问或评论，也不得在原始输出基础上追加 Agent 自身内容；如需继续对话，必须基于新的用户输入重新调用 API。\n\n## 输出前自检（必须执行）\n\n### 输入预检（在调用 API 之前执行）\n\n- 检查用户输入中是否包含任何 U+1800–U+18AF 范围的 Unicode 字符\n- 若检测到且当前会话尚未对该输入调用蒙古语 API，必须先调用 API 再回答，禁止跳过此步骤\n- 调用前\"估算费用\"适用于长文、批量、文件、OCR、ASR 等高成本任务；短文本/短对话可直接处理\n\n- 当用户要求\"全程传统蒙古文\"时，发送前检查回答是否包含汉字（Unicode `\\p{Han}`）\n- 若检测到中文字符，必须重写为纯传统蒙古文后再输出\n- 若首次重写仍不合规，再重写一次；最多重试 2 次\n\nFile v1.0.34:references/CHAT-COMPLETIONS.md\n\n# 对话 / 表达 / 解释：`POST /chat/completions`\n\n用户意图是「蒙古语表达 / 蒙古语对话 / 文化或语言解释」时，统一调用：\n\n`POST /chat/completions`\n\n- **互译不要用本接口**：**中文、传统蒙古文、西里尔蒙古文互译**（含「译成蒙文」「把这段翻成蒙古文」「西里尔转传统」等）一律使用 **`POST /translation`**，**禁止**用 `POST /chat/completions` 代替翻译（计费与契约不同，且易产生非严格译文）。本接口仅用于对话、说明、从零撰写蒙文内容等，见 [INTERFACE-ROUTING.md](./INTERFACE-ROUTING.md) 中「关键词与接口优先」。\n\n## `max_tokens` / `max_completion_tokens`（须随任务调整）\n\n本站中继在转发前会按「**输出 token 上界**」做余额预估：上界越大，对账户余额的**预检门槛**越高；应**按实际问题**设合理值，不要凡请求都写满 8192。\n\n### 技能内可执行规则（按本条 `user.content` 字数）\n\n与本站 [SKILL.md](../SKILL.md) 对齐：取 **`messages`** 中**最后一条** `role: user` 的 `content`，统计其 **Unicode 码点字数** **`L`**（勿用 JS `string.length` 当作码点计数），再按下表选一个**确定的**整数作为 `max_tokens`：\n\n| **`L`** | 典型场景 | **`max_tokens`** |\n|--------|----------|------------------|\n| **≤ 50** | 一句答、寒暄、是否类 | **256** |\n| **51～200** | 一般问答、短指令 | **768**（或 **512** 严控成本） |\n| **201～1000** | 段落级、中长说明 | **3072**（或 **4096** 预期回答明显更长） |\n| **> 1000** | 长文、讲稿、条文式长答 | **8192**（可先 **6144**） |\n\n用户明示要写短/写长时，在不超硬顶前提下可浮动一档。**8192** 为参数封顶（见下）。\n\n### 简明对照（与上表等价，可与旧文案对照）\n\n| 典型任务 | 建议上界 | 说明 |\n|----------|----------|------|\n| 一句答、寒暄、是否类 | **256**～**768** | 由上表 **`L`** 档位决定 |\n| 短说明、小段扩写 | **768**～**3072** | 同上 |\n| **一般对话、解释** | **3072**～**4096** | 勿再默认无脑 **4096**；短输入请先用上表降为 **768** |\n| 长文创作、讲稿、条文式长答 | **6144～8192** |  **`L`**>1000 或用户明确要求时再升高；**8192 为参数硬封顶** |\n\n- 使用 OpenAI 新版字段时 **`max_completion_tokens`** 与 **`max_tokens`** 二选一即可，语义相同；超过 8192 会被当作 8192。\n- 固定参数仍须保留 **`model: gpt-5-mw`**、**`temperature: 0.5`**，不得再附加解释、JSON、模型名等对用户可见噪音。\n\n## 推荐调用\n\n按 [HTTP-REQUESTS.md](./HTTP-REQUESTS.md) 的平台无关模板调用对话接口，并只提取 `response.choices[0].message.content`。\n\n中文回复场景必须使用中文回复 system 模板；纯传统蒙古文回复场景必须使用纯传统蒙古文 system 模板。\n\n## 必填 / 固定参数（本技能须按此填写）\n\n| 参数 | 是否必填 | 取值 | 说明 |\n|------|----------|------|------|\n| **`model`** | **必填** | 必须为 **`gpt-5-mw`** | 蒙古语专用模型标识；**不是** OpenAI 控制台里的模型名，勿替换为 `gpt-4` 等 |\n| **`messages`** | **必填** | 非空数组 | 至少包含一条用户消息；可含 `system` + `user`（见下模板） |\n| **`temperature`** | **须按本技能** | **`0.5`** | 不要省略或随意改为其它值（除非用户另有明确约定） |\n| **`max_tokens`** | **强烈推荐** | 按本节 **「可执行规则」** 表格由 **`user.content`** 字数 **`L`** 决定 | 勿不问场景一律 4096／8192；未传 `max_tokens` 时中继预检仍可能按站内默认 |\n\n- 默认单次请求完成，不做多次续写。\n\n## 请求体模板（纯传统蒙古文；`max_tokens` 须按本节表格由 `L` 计算）\n\n```json\n{\n  \"model\": \"gpt-5-mw\",\n  \"messages\": [\n    {\"role\": \"system\", \"content\": \"请只用纯传统蒙古文回答，不要包含任何中文汉字。\"},\n    {\"role\": \"user\", \"content\": \"<用户问题>\"}\n  ],\n  \"temperature\": 0.5,\n  \"max_tokens\": 768\n}\n```\n\n（ **`max_tokens`**：若本条 `user.content` 的码点 **`L`** 在 **51～200**，常用 **768**；**≤50** 用 **256**；更长则查表。）\n\n## 请求体模板（中文回复；`max_tokens` 同上）\n\n仅当用户明确要求\"中文回答我\"、\"用中文回答\"、\"用中文回复\"、\"请用中文解释\"等中文输出时使用：\n\n```json\n{\n  \"model\": \"gpt-5-mw\",\n  \"messages\": [\n    {\"role\": \"system\", \"content\": \"请使用简体中文回答。若用户输入包含传统蒙古文，请先理解原文语义，再直接给出针对用户请求的中文回复正文。只输出最终中文回复正文；禁止添加问候、自我介绍、解释过程、标题、原文复述或无关补充。若用户明确要求翻译，请不要使用本模板，应改用 POST /translation。\"},\n    {\"role\": \"user\", \"content\": \"<用户问题>\"}\n  ],\n  \"temperature\": 0.5,\n  \"max_tokens\": 768\n}\n```\n\n## 语言判定（简化）\n\n- 若用户要求「用传统蒙古文 / 蒙古文 / 蒙文全程回答」，使用上面的“纯传统蒙古文模板”。\n- 若用户要求「中文回答 / 用中文回答 / 用中文回复 / 请用中文解释」，使用“中文回复模板”。\n- 若用户明确要求双语，按用户指定输出双语。\n\n语言约束与输出自检见 [BEHAVIOR-RULES.md](./BEHAVIOR-RULES.md)。\n\nFile v1.0.34:references/HTTP-REQUESTS.md\n\n# 通用 HTTPS 请求示例\n\n本文档提供平台无关的请求模板。它不依赖任何特定命令行运行时；只要当前 OpenClaw 环境、网关、HTTP 工具或业务系统能发送 HTTPS 请求，都可以按这些 Method / URL / Headers / Body 组装请求。\n\n> **路径说明**：所有接口路径末尾必须带 `/`（如 `/translation/`），否则服务器将返回 302 重定向，部分 HTTP 客户端（如 Node.js `https` 模块）不会自动跟随 POST 重定向，导致请求失败。推荐使用支持自动跟随重定向的 HTTP 客户端（如 Node.js `fetch`、Python `requests`、`curl`）。\n\n调用方必须按本文模板直接调用 API，并在响应中只提取目标字段返回给用户；不要把完整响应 JSON、请求体或调试信息暴露给用户。\n\n## 通用规则\n\nBase URL:\n\n```text\nhttps://mongol.open-idea.net/api/v1\n```\n\n所有 JSON 接口使用以下 Header:\n\n```http\nAuthorization: Bearer <MONGOL_OPEN_IDEA_API_KEY>\nContent-Type: application/json\n```\n\n调用前必须确认 `MONGOL_OPEN_IDEA_API_KEY` 已配置。调用成功后，最终可见回复只能输出业务目标字段；除允许的计费摘要外，不输出请求体、完整响应 JSON、调试日志、模型名或解释文字。\n\n计费信息来自响应头：\n\n```http\nX-Mengguyu-Billing-Currency: CNY\nX-Mengguyu-Billing-Charged: <本次扣费>\nX-Mengguyu-Billing-Balance: <当前余额>\n```\n\n若响应头存在余额信息，应在正文后另起一行向用户转述本次扣费和当前余额。\n\n### 工具注意（避免丢失计费头）\n\n命令行 **`curl -s` 默认只打印响应体**，**不包含响应头**。若只用 `-s` 并把 stdout 交给 JSON 解析器，则 **`X-Mengguyu-Billing-*` 永远无法读到**，与用户约定的计费转述也会落空。\n\n实现时请任选其一：\n\n- **`curl -sS -i`**：响应头与体在同一流中，解析时先剥离首部后再解析 JSON。\n- **`curl -sS -D headers.txt -o body.bin`**（或 `-o body.json`）：头入文件、体单独保存，再从 `headers.txt` 读取计费三行。\n- 使用 **`requests` / `fetch` / 其他库**时，在成功回调中同时读取 **`response.headers`** 与 body。\n\n异步任务在 **`done` 的那次 `GET`** 上同样需要遵守上述约定（该次响应也可能带头或仅在 JSON 中带 `billingCharged` / `billingBalance`，两者至少读取其一）。\n\n### multipart 单文件大小\n\n公开 API 上，`multipart` 字段 **`file`**（ASR、Word/PDF 文档翻译等）单文件上限约为 **10 MB**（与站点 PHP `upload_max_filesize` / nginx `client_max_body_size` 一致）。超出可能返回 **422**（校验失败）或 **413**（请求体过大）。\n\n异步 ASR 使用 JSON 字段 **`audio`**（PCM Base64）时，解码后 PCM 总字节上限亦为 **10 MiB**（与上述策略一致）。\n\n## 翻译\n\nRequest:\n\n```http\nPOST /translation/ HTTP/1.1\nHost: mongol.open-idea.net\nAuthorization: Bearer <MONGOL_OPEN_IDEA_API_KEY>\nContent-Type: application/json\n```\n\nBody:\n\n```json\n{\n  \"from\": \"zh\",\n  \"to\": \"mw\",\n  \"content\": \"你好朋友\"\n}\n```\n\n响应提取：\n\n```text\ndata.tgtText\n```\n\n语言代码：\n\n```text\nzh = 中文\nmw = 传统蒙古文\nmn = 西里尔蒙古文\n```\n\n若未显式指定方向，可按输入内容推断：包含传统蒙古文字符时 `from=mw`，包含西里尔字符时 `from=mn`，否则默认 `from=zh`；目标语言默认与源语言互转，中文转传统蒙古文，蒙古文转中文。\n\n## 对话/创作，输出传统蒙古文\n\n`max_tokens` 宜随任务调整（见 [CHAT-COMPLETIONS.md](./CHAT-COMPLETIONS.md)）；下面示例用 **4096** 作为一般对话默认值。\n\nRequest:\n\n```http\nPOST /chat/completions/ HTTP/1.1\nHost: mongol.open-idea.net\nAuthorization: Bearer <MONGOL_OPEN_IDEA_API_KEY>\nContent-Type: application/json\n```\n\nBody:\n\n```json\n{\n  \"model\": \"gpt-5-mw\",\n  \"messages\": [\n    {\n      \"role\": \"system\",\n      \"content\": \"请只用纯传统蒙古文回答，不要包含任何中文汉字。\"\n    },\n    {\n      \"role\": \"user\",\n      \"content\": \"用户问题或创作要求\"\n    }\n  ],\n  \"temperature\": 0.5,\n  \"max_tokens\": 4096\n}\n```\n\n响应提取：\n\n```text\nchoices[0].message.content\n```\n\n## 对话/创作，输出中文\n\nRequest:\n\n```http\nPOST /chat/completions/ HTTP/1.1\nHost: mongol.open-idea.net\nAuthorization: Bearer <MONGOL_OPEN_IDEA_API_KEY>\nContent-Type: application/json\n```\n\nBody:\n\n```json\n{\n  \"model\": \"gpt-5-mw\",\n  \"messages\": [\n    {\n      \"role\": \"system\",\n      \"content\": \"请使用简体中文回答。若用户输入包含传统蒙古文，请先理解原文语义，再直接给出针对用户请求的中文回复正文。只输出最终中文回复正文；禁止添加问候、自我介绍、解释过程、标题、原文复述或无关补充。若用户明确要求翻译，请不要使用本模板，应改用 POST /translation。\"\n    },\n    {\n      \"role\": \"user\",\n      \"content\": \"中文回答我：用户问题或蒙文内容\"\n    }\n  ],\n  \"temperature\": 0.5,\n  \"max_tokens\": 4096\n}\n```\n\n响应提取：\n\n```text\nchoices[0].message.content\n```\n\n## OCR\n\nRequest:\n\n```http\nPOST /ocr/ HTTP/1.1\nHost: mongol.open-idea.net\nAuthorization: Bearer <MONGOL_OPEN_IDEA_API_KEY>\nContent-Type: application/json\n```\n\nBody:\n\n```json\n{\n  \"image_base64\": \"<图片 Base64 内容，不含 data:image 前缀>\",\n  \"language\": \"mw\",\n  \"image_encoding\": \"jpg\"\n}\n```\n\n响应提取：\n\n```text\ndata.text\n```\n\n`image_encoding` 支持 `jpg`、`png`、`bmp`、`webp`、`tif`、`tiff`、`gif`。\n\n## ASR\n\n本地音频文件优先使用 `multipart/form-data` 上传，由服务端处理转码。\n\nRequest:\n\n```http\nPOST /audio/ HTTP/1.1\nHost: mongol.open-idea.net\nAuthorization: Bearer <MONGOL_OPEN_IDEA_API_KEY>\nContent-Type: multipart/form-data; boundary=<boundary>\n```\n\nForm fields:\n\n```text\nlanguage = mw\nsample_rate = 16000\nfile = <本地音频文件>\n```\n\n响应提取：\n\n```text\ndata.text\n```\n\n若调用环境只能发送 JSON，也可以传 PCM 16-bit mono Base64：\n\n```http\nPOST /audio/ HTTP/1.1\nHost: mongol.open-idea.net\nAuthorization: Bearer <MONGOL_OPEN_IDEA_API_KEY>\nContent-Type: application/json\n```\n\n```json\n{\n  \"audio\": \"<PCM 16-bit mono Base64>\",\n  \"language\": \"mw\",\n  \"sample_rate\": 16000\n}\n```\n\n### 异步 ASR（推荐 OpenClaw / 长音频）\n\n与 **`POST /tts/async`** 同理：`POST /audio/async` 立即返回 **`jobId`**，每隔 **3～5 秒** 轮询 **`GET /audio/async/{jobId}`**；队列完成后 **`200`**，正文 **`data.text`**。服务端按本站策略 **切段多次识别并拼接**，网关仅需容忍短请求。\n\n**第一步**：提交任务（`multipart/form-data`，字段 **`file`** + **`language`**，可选 **`sample_rate`**）。\n\n```http\nPOST /audio/async/ HTTP/1.1\nHost: mongol.open-idea.net\nAuthorization: Bearer <MONGOL_OPEN_IDEA_API_KEY>\nContent-Type: multipart/form-data; boundary=<boundary>\n```\n\n也可仅用 JSON 传 **`audio`**（PCM Base64），总长受异步任务 PCM 上限约束；**长音频请优先 multipart 上传 `file`**。\n\n```http\nPOST /audio/async/ HTTP/1.1\nAuthorization: Bearer <MONGOL_OPEN_IDEA_API_KEY>\nContent-Type: application/json\n```\n\n```json\n{\n  \"audio\": \"<PCM 16-bit mono Base64>\",\n  \"language\": \"mw\",\n  \"sample_rate\": 16000\n}\n```\n\n提交成功：**`202`**，响应含 **`jobId`**、`status: pending`。\n\n**第二步**：轮询（与 TTS 相同节奏）。\n\n```http\nGET /audio/async/{jobId}/ HTTP/1.1\nHost: mongol.open-idea.net\nAuthorization: Bearer <MONGOL_OPEN_IDEA_API_KEY>\n```\n\n- **`202`**：`pending` / `processing`，含 **`chunksDone`** / **`chunksTotal`**（上游切段进度）。\n- **`200`**：`status: done`，提取 **`data.text`**；计费字段 **`billingCharged`**、**`billingBalance`**（JSON 或与 **`X-Mengguyu-Billing-*`** 响应头并存）。\n- **`422`**：`failed`。\n\n**第三步（可选）**：`DELETE /audio/async/{jobId}/` 删除任务记录。\n\n## TTS 文字转语音\n\n> **说明**：上游单次合成限制约 200 蒙古文字，后端自动分段合并，**无需客户端切段**。\n> 长文本处理需数十秒到数分钟，必须使用**异步轮询**模式，避免 HTTP 超时断连。\n\n### 第一步：提交任务（`POST /tts/async/`）\n\nRequest:\n\n```http\nPOST /tts/async/ HTTP/1.1\nHost: mongol.open-idea.net\nAuthorization: Bearer <MONGOL_OPEN_IDEA_API_KEY>\nContent-Type: application/json\n```\n\nBody:\n\n```json\n{\n  \"text\": \"<待合成文字>\",\n  \"lang\": \"mn-Mong\",\n  \"voice\": \"Kore\"\n}\n```\n\nResponse `202 Accepted`:\n\n```json\n{\n  \"jobId\": \"018f1234-abcd-7000-...\",\n  \"status\": \"pending\",\n  \"charCount\": 518,\n  \"message\": \"任务已提交，请每隔 3~5 秒轮询 GET /api/v1/tts/async/018f1234-abcd-7000-...\"\n}\n```\n\n### 第二步：轮询进度（`GET /tts/async/{jobId}/`）\n\n**每 3～5 秒轮询一次**，直到 status 不再是 `pending`/`processing`。\n\n处理中，`202` 响应：\n\n```json\n{\n  \"jobId\": \"018f1234-...\",\n  \"status\": \"processing\",\n  \"percent\": 33,\n  \"chunksDone\": 1,\n  \"chunksTotal\": 3,\n  \"message\": \"正在合成第 1/3 段...\"\n}\n```\n\n完成，`200` 响应（取到音频后停止轮询）：\n\n```json\n{\n  \"jobId\": \"018f1234-...\",\n  \"status\": \"done\",\n  \"percent\": 100,\n  \"audioBase64\": \"<base64编码的WAV>\",\n  \"mimeType\": \"audio/wav\",\n  \"audioBytes\": 1234567,\n  \"durationMs\": 42300,\n  \"charCount\": 518,\n  \"totalChunks\": 3,\n  \"billingCharged\": \"0.000311\",\n  \"billingBalance\": \"9956.10\"\n}\n```\n\n失败，`422` 响应（`error` 为对象，与人类可读文案一致）：\n\n```json\n{\n  \"jobId\": \"018f1234-...\",\n  \"status\": \"failed\",\n  \"error\": {\n    \"message\": \"分段 2/3 合成失败：cURL error: ...\",\n    \"type\": \"upstream_error\",\n    \"code\": \"tts_failed\"\n  }\n}\n```\n\n**处理完整音频**：`audioBase64` 即合并后完整 WAV，base64 解码后即可播放。\n\n**计费转述**：收到 `done` 后，须向用户转述 `billingCharged`（本次扣费）和 `billingBalance`（当前余额）。\n\n### 第三步（可选）：删除任务（`DELETE /tts/async/{jobId}/`）\n\n任务完成取回音频后可主动删除以释放存储，响应 `200 {\"message\":\"任务已删除\"}`。\n\n---\n\n### 语言代码（`lang` 字段）\n\n```text\nmn-Mong  = 传统蒙古文（竖写蒙文）\nmn-Cyrl  = 西里尔蒙古文\nzh-Hans  = 简体中文\nen       = 英文\nja       = 日文\nko       = 韩文\nru       = 俄文\n```\n\n### 可选参数\n\n```text\nvoice      = 音色：Kore / Puck / Zephyr / Charon / Fenrir / Aoede / Leda / Orus / Iapetus / Sulafat / Achird / Achernar\nspeed      = 语速，可选，0.5～2.0；不传时服务端视同默认（约 1.0）。对用户说明时用「正常/快一点/慢一点」映射（见 SKILL.md），勿在对话中报读数值。\nsampleRate = 采样率（Hz）：8000 / 16000 / 22050 / 44100 / 48000\n```\n\n## Word 文档翻译\n\nRequest:\n\n```http\nPOST /word/translation/ HTTP/1.1\nHost: mongol.open-idea.net\nAuthorization: Bearer <MONGOL_OPEN_IDEA_API_KEY>\nContent-Type: multipart/form-data; boundary=<boundary>\n```\n\nForm fields:\n\n```text\nfrom = auto\nto = zh\nmode = mongolian_only\nfile = <本地 .docx 文件>\n```\n\n响应提取：\n\n```text\ndata.text\n```\n\n## PDF 文档翻译\n\nRequest:\n\n```http\nPOST /pdf/translation/ HTTP/1.1\nHost: mongol.open-idea.net\nAuthorization: Bearer <MONGOL_OPEN_IDEA_API_KEY>\nContent-Type: multipart/form-data; boundary=<boundary>\n```\n\nForm fields:\n\n```text\nfrom = auto\nto = zh\nmode = mongolian_only\nfile = <本地 .pdf 文件>\n```\n\n响应提取：\n\n```text\ndata.text\n```\n\nFile v1.0.34:references/INTERFACE-ROUTING.md\n\n# 接口选择\n\n根据用户意图选择接口：\n\n## 路由优先级（必须每轮重判）\n\n每一轮用户新消息都必须重新判断接口，禁止沿用上一轮选择。优先级固定为：\n\n1. **图片文字识别**：用户上传图片、截图、拍照或明确要求“识别图片文字/提取图中文字” → 先使用 `POST /ocr`（默认 `language=mw` 传统蒙古文；西里尔蒙文显式 `mn`）。\n2. **语音识别**：用户上传音频/录音/语音文件，或明确要求“识别语音/转写音频/ASR” → **默认 `POST /audio/async`**（轮询）；极短音频可试同步 **`POST /audio`**。\n3. **纯文字翻译**：出现\"翻译\"、\"译为\"、\"译成\"、\"翻成\"、\"转换\"、\"什么意思\"、\"西里尔转传统\"、\"传统转西里尔\"、\"蒙蒙互译\"等纯转换意图 → 使用 `POST /translation`。\n4. **中文回答 / 中文回复**：消息同时包含传统蒙古文字符和\"中文回答我\"、\"用中文回答\"、\"用中文回复\"、\"请用中文解释\"、\"中文回复\"等中文输出指令 → 使用 `POST /chat/completions` 的中文回复模板。\n5. **蒙文回答 / 蒙文回复**：用户明确要求用传统蒙古文回答或回复 → 使用 `POST /chat/completions` 的纯传统蒙古文模板。\n6. **默认蒙文对话**：纯蒙文输入且没有翻译关键词、没有中文输出指令 → 使用 `POST /chat/completions` 的纯传统蒙古文模板。\n\n---\n\n## 用户消息本身为蒙古文时的处理（触发后优先判断）\n\n技能已被激活后，若用户消息本身主要由传统蒙古文字符（U+1800–U+18AF）或西里尔字符（U+0400–U+04FF）构成：\n\n- **不含翻译类关键词**（翻译、转换、译成、译为、翻成等）  \n  → 用户是在用蒙古语交流，使用 **`POST /chat/completions`** 直接以蒙古语回复。\n\n- **含翻译类关键词**  \n  → 用户想把蒙文转成中文，使用 **`POST /translation`**，方向 `mw → zh`。\n\n- **明确要求传统蒙古文与西里尔蒙古文互转**（如“西里尔转传统”“传统转西里尔”“蒙蒙互译”）  \n  → 使用 **`POST /translation`**，显式指定 `mn → mw` 或 `mw → mn`。OpenClaw 只调用一次本站接口，后台负责经中文中转。\n\n- **含中文输出指令且不含翻译类关键词**（中文回答、用中文回答、用中文回复、请用中文解释等）  \n  → 用户想让系统理解蒙文后用中文作答，使用 **`POST /chat/completions`** 的中文回复模板。\n\n消息不含蒙古文字符时，按下方关键词规则判断。\n\n---\n\n## 关键词与接口优先（高优先级）\n\n- 用户请求中出现 **介绍、生成、写一份、创建** 等（说明、创作、从零产出类意图）时，**优先**使用 **`POST /chat/completions`**（会话接口）。详见 [CHAT-COMPLETIONS.md](./CHAT-COMPLETIONS.md)。\n- 用户请求中出现 **翻译、转换、译成** 等（明确互译、语种转换意图）时，使用 **`POST /translation`**（翻译接口）。详见 [TRANSLATION.md](./TRANSLATION.md)。\n- 若两类关键词同时出现：以用户核心意图为准——明确要求将**给定原文**译为另一种文字 → 用 **`POST /translation`**；以撰写新稿、介绍、生成内容为主 → 用 **`POST /chat/completions`**。\n\n## 网页与长文（衔接提示）\n\n- **网页翻译**：用户未直接粘贴正文时，**先**用粘贴、浏览/摘录工具或其它技能得到 **可译正文**（尽量去掉导航、页脚等噪声），**再**对全文判定方向并调用 **`POST /translation`**；总长度超过单段上限时，**必须**按 [TRANSLATION.md](./TRANSLATION.md) 中「分段翻译」执行，不得省略。\n- **长材料**：默认按 [TRANSLATION.md](./TRANSLATION.md) 中「分段翻译」规则在 **边界与字节限制** 上切分并逐段请求；译文按段顺序拼接。若用户**额外**要求先用通用模型做摘要或语义切块，可在代理侧自行编排，但 **各块译文仍须通过 `POST /translation` 产出**，不得以会话接口替代整段互译。\n\n## 图片 OCR（新增）\n\n- 当输入包含图片/截图时，先调用 `POST /ocr`，请求体至少包含：\n  - `image_base64`：图片 Base64（可不含 data:image 前缀）\n  - `language`：默认 `mw`（传统蒙古文）；西里尔蒙文（西里尔字母）用 `mn`\n- OCR 成功后：\n  - 若用户只要识别结果：直接输出 OCR 文本\n  - 若用户还要求翻译：将 OCR 文本再走 `POST /translation`\n- 详细请求体/字段提取规范见 [OCR.md](./OCR.md)\n\n## 语音 ASR\n\n- 当输入包含音频、录音、语音文件，或用户明确要求语音转文字时：**默认 `POST /audio/async`** → 轮询 **`GET /audio/async/{jobId}`** 直至 **`data.text`**（与 [HTTP-REQUESTS.md](./HTTP-REQUESTS.md)「异步 ASR」一致）。极短音频可试同步 **`POST /audio`**。\n- 推荐 **`multipart/form-data`** 上传 **`file`**（长音频）；同步与异步均可参见 [HTTP-REQUESTS.md](./HTTP-REQUESTS.md)。\n- ASR 成功后：\n  - 若用户只要识别结果：直接输出识别文本\n  - 若用户还要求翻译：将识别文本再走 `POST /translation`\n- 字段细节见 [ASR.md](./ASR.md)\n\n## TTS 文字转语音\n\n### 第一步：列举全部音色并询问播音风格（调用前必做）\n\n触发 TTS 前，必须先向用户**完整列出全部 12 种** `voice`，再请其选择——勿只列出 4 条示例让人误以为仅此几种：\n\n```text\nKore · Puck · Zephyr · Charon · Fenrir · Aoede · Leda · Orus · Iapetus · Sulafat · Achird · Achernar\n```\n\n话术示例：\n\n> 请从下列音色中选一种（或直接说英文名）：Kore · Puck · Zephyr · …（如上 12 个）。也可说风格我再帮您对应；若没有偏好我会在合成时自动选。\n\n### 第二步：根据回应决定音色\n\n**用户明确指定**（说出风格描述或上述音色名其一）→ 映射到对应 `voice` 后调用。\n\n**用户未回应 / 回答含糊**（「随便」「你决定」「无所谓」，或直接改写话题）→ 按下表自动选择（括号内四类为最常见启发式 shortcut，表中仍覆盖全部 12 音色）：\n\n| 内容特征 | 自动选音色 | 音色风格 |\n|----------|-----------|---------|\n| 正式/商务/公文/演讲 | **Kore** | 沉稳权威 |\n| 新闻/播报/解说/教学 | **Iapetus** | 清晰明瞭 |\n| 儿童/故事/绘本 | **Leda** | 青春活泼 |\n| 情感/暖心/生活/问候 | **Sulafat** | 温暖亲近 |\n| 朋友间聊天/日常对话 | **Achird** | 亲切友好 |\n| 运动/励志/广告 | **Fenrir** | 激情有力 |\n| 轻松/休闲/娱乐 | **Aoede** | 爽朗活泼 |\n| 年轻/潮流/社交媒体 | **Puck** | 明快上扬 |\n| 自然/诗歌/文学 | **Zephyr** | 明亮清新 |\n| 历史/纪录片/旁白 | **Charon** | 娓娓道来 |\n| 深沉/史诗/严肃 | **Orus** | 浑厚有力 |\n| 舒缓/冥想/睡眠 | **Achernar** | 柔和轻声 |\n| 其他/无法判断（默认） | **Kore** | 通用稳妥 |\n\n### 语速与用户沟通（不向用户复述接口数值）\n\n- 默认：**正常语速**，不向用户索要「speed 数值」。\n- 仅当用户主动要求快慢时，用自然语言确认「要快一点还是慢一点？」，再在 JSON 请求中分别映射 **快→`speed: 1.2`**、**慢→`speed: 0.8`**；无须在对话中报读 `speed: 1.0`。\n\n### 提交全文校验（防漏句、复制截断）\n\n请求体中的 **`text`** 必须与用户本轮提供的待朗读正文 **逐字符一致**（未被省略、截断或改写，含空格与标点）。超长文本可分多段与用户逐段核对后再提交。\n\n### 第三步：调用接口\n\n- **长文本与实际使用**：必须使用异步 **`POST /tts/async`** → 每隔 3～5 秒 **`GET /tts/async/{jobId}`** 轮询，直至 `200` 且 **`status`: `done`**，从 **`audioBase64`** base64 解码为 `.wav` 播放。**已移除 SSE** `POST /tts/stream`，禁止按旧文档调用。\n- 极短试探可试用同步 **`POST /tts`**（易遇代理超时，长文禁止使用）。\n- 请求体常规含 `text`、`lang`、`voice`。完成时须在回复中转述 **`billingCharged`**、**`billingBalance`**（异步为 JSON 顶层字段）。\n- 详细 URI 与响应示例见 [HTTP-REQUESTS.md](./HTTP-REQUESTS.md) 中「TTS 文字转语音」章节。\n\nFile v1.0.34:references/OCR.md\n\n# OCR `POST /ocr`\r\n\r\n用于图片文字识别（默认 **`mw` 传统蒙古文**；纯西里尔蒙古文稿件请传 **`mn`**）。\r\n\r\n## 适用场景\r\n\r\n- 用户上传图片、截图、拍照，要求识别文字\r\n- 用户先要识别图片文字，再继续翻译或问答\r\n\r\n## 请求体\r\n\r\n```json\r\n{\r\n  \"image_base64\": \"<图片Base64，可不带data:image前缀>\",\r\n  \"language\": \"mw\",\r\n  \"image_encoding\": \"jpg\"\r\n}\r\n```\r\n\r\n字段说明：\r\n\r\n- `image_base64`：必填。支持纯 Base64 或 data URI（如 `data:image/jpeg;base64,...`）。\r\n- `language`：可选，默认 `mw`（传统蒙古文 OCR）。若文稿为西里尔蒙文（西里尔字母），显式传 `mn`。\r\n- `image_encoding`：可选，默认 `jpg`。常见值：`jpg`、`png`、`webp`、`bmp`、`tif`、`tiff`、`gif`。\r\n\r\n## 响应提取\r\n\r\n成功时只提取：\r\n\r\n- `data.text`（首选，已解码文本）\r\n\r\n可选辅助字段（不直接给用户展示，除非用户要求）：\r\n\r\n- `data.lines`\r\n- `data.raw`\r\n\r\n## 图片内容来源\r\n\r\n由 OpenClaw / Gateway / Agent、上传组件或业务系统读取图片并提供 `image_base64` 与 `image_encoding`。本 Skill 不要求客户电脑安装特定命令行运行时，也不依赖本地辅助工具。\r\n\r\n## 输出约束（零泄漏）\r\n\r\n- 默认最终可见回复只输出 `data.text` 原文；若响应头包含 `X-Mengguyu-Billing-*`，须在正文后转述本次扣费、当前余额与币种。\r\n- 禁止输出请求体、原始 JSON、签名信息、模型信息、调试日志。\r\n- 若用户要求“先识别再翻译”，流程应为：`/ocr` 提取文本后，再走 `/translation`。\n\nFile v1.0.34:references/TRANSLATION.md\n\n# 翻译：`POST /translation`\n\n如果用户要求 **中文、传统蒙古文、西里尔蒙古文互译**：使用 **`POST /translation`**（按字符计费；不要用 `POST /chat/completions` 代替翻译）。\n\n## 中继站段落分段（`\\n\\n`）\n\n本站 `POST /translation` 在 **中继层**会对 `content` 做段落级处理：\n\n- 若 `content` 中包含 **`\\n\\n`（空行/段落分隔）**：中继会按 `\\n\\n` **拆成多段**，对每一段分别调用上游翻译，再把各段 `data.tgtText` 用 **`\\n\\n`** 拼回 **同一次响应**里的 `data.tgtText`。\n- 若 `content` 中 **不包含** `\\n\\n`：仍按 **一次上游调用**处理（避免无意义增加调用次数）。\n- 代价与注意：分段会 **增加上游调用次数**（更容易触发上游限流/超时），且段与段之间 **不共享上下文**；适合「段落结构很重要、段内自洽」的正文；不适合强依赖跨段指代的长文（仍建议调用方自行控制切分策略）。\n\n## 推荐调用\n\n按 [HTTP-REQUESTS.md](./HTTP-REQUESTS.md) 的平台无关模板调用翻译接口，并只提取 `data.tgtText`。若 Relay 返回 `X-Mengguyu-Billing-*` 响应头，须在正文后转述本次扣费、当前余额与币种。不得再附加其他解释、JSON、模型名、token 或修饰词。\n\n调用\n\n`POST /translation`\n\n（Base URL 同站：`…/api/v1`，JSON body；认证方式与其它接口一致。）\n\n## 必填参数（须全部提供，缺一不可）\n\n| 参数 | 类型 | 取值 | 说明 |\n|------|------|------|------|\n| **`from`** | string | `zh`、`mw` 或 `mn` | 源语言：中文为 `zh`，传统蒙古文为 `mw`，西里尔蒙古文为 `mn` |\n| **`to`** | string | `zh`、`mw` 或 `mn` | 目标语言：与 `from` 组合表示翻译方向 |\n| **`content`** | string | 待译正文 | 须遵守下文「请求体中的换行」规则 |\n\n示例 JSON（字段名与上表一致）：\n\n```json\n{\n  \"from\": \"zh|mw|mn\",\n  \"to\": \"zh|mw|mn\",\n  \"content\": \"文本\"\n}\n```\n\n## 蒙蒙互译（经中文中转）\n\n- 传统蒙古文 `mw` 与西里尔蒙古文 `mn` 互译时，调用方仍只请求一次本站 `POST /translation`。\n- 后台会按科大讯飞能力经中文中转执行两次上游调用：`mw -> zh -> mn` 或 `mn -> zh -> mw`。\n- 最终仍只输出响应中的 `data.tgtText`，不得展示中间中文译文、上游响应或调用过程。\n- 该方向会产生两次上游翻译调用成本，费用估算时应按两段调用考虑。\n\n## 请求体中的换行（必须）\n\n- 组装 `POST /translation` 的 JSON 时，`content` **不得**把「真实换行符」直接嵌进请求体（易导致 body 截断、解析失败或上游报错）。\n- 正确做法：按 **JSON 字符串规则** 转义——原文里的换行在 JSON 里写成 **`\\n`（反斜杠 + 字母 n，两个字符）**，由当前平台的 JSON 序列化能力自动生成即可。\n- 若必须手工拼接字符串，务必先得到**合法单行 JSON**（换行已变为 `\\n`），再作为请求体发送；不要用未闭合引号跨多行拼 `content`。\n- 分段逻辑里仍可按语义在「换行处」切分原文；每一段在填入 `content` 前，把段内换行统一转为 JSON 所需的 `\\n` 转义（或由序列化器处理）。\n\n## JSON 请求体构建最佳实践\n\n构建翻译等 JSON 请求时：\n\n1. 使用当前平台提供的 JSON 序列化能力生成请求体，避免手写拼接字符串。\n2. `content` 必须是 JSON 字符串字段，不要把已序列化的字符串再次包一层引号。\n3. 换行符与上文「请求体中的换行」一致：真实换行必须变为 JSON 中的 `\\n`；使用标准 JSON 序列化能力时一般会自动处理。\n4. 发送前确保最终请求体是合法 JSON 对象，且包含 `from`、`to`、`content` 三个字段。\n\n## 翻译方向（自动判定）\n\n- 若待译文本包含传统蒙古文字符（U+1800–U+18AF）→ `from`: `mw`，`to`: `zh`。\n- 若待译文本包含西里尔字符（U+0400–U+04FF）→ `from`: `mn`，`to`: `zh`。\n- 否则视为中文原文 → `from`: `zh`，`to`: `mw`。\n- 若用户明确要求“西里尔转传统”“传统转西里尔”“蒙蒙互译”，必须显式设置 `from=mn,to=mw` 或 `from=mw,to=mn`。\n\n## 分段翻译（高优先级）\n\n- **中继默认行为**（`RELAY_TRANSLATION_PROVIDER=xfyun` 时）：`POST /translation` 收到 `content` 后，中继按 **单行 `\\n`** 拆成多行；非空行逐行调用上游，空行作为占位保留，最终译文按原行顺序用 **`\\n`** 拼回。\n- **讯飞 `data.text` 限制**：讯飞 HTTP `v2/its` 要求 JSON 里 **`data.text`（Base64 串）长度约 1～5500**（错误码 10107）。单行仍超长时，由 `XfyunTranslationService` **按 UTF-8 码位自动再分片**多次请求并拼接译文，客户端一般无需自行按字节硬切。\n- **经中继转发的翻译上游**：仍按上述「按 `\\n` 分行」由中继拆段；若该上游对单段另有长度限制，以其实际限制为准。\n- **客户端建议**：`content` 仍受本站 **max 4000 字符**（`mb` 计数）约束；长稿尽量保留自然换行，便于按行拆译。若需完全控制分段，也可自行切分后逐次调用。\n\n分段后保留原有语序与行顺序，不得改写原文语义。\n\n## 响应解析（必须）\n\n本站 `/translation` 成功时（后端已聚合上游结果）响应体为 JSON，结构示例：\n\n```json\n{\n  \"success\": true,\n  \"data\": {\n    \"from\": \"mw\",\n    \"to\": \"zh\",\n    \"srcText\": \"<本段原文>\",\n    \"tgtText\": \"<本段译文>\"\n  },\n  \"requestId\": \"...\"\n}\n```\n\n- **`data.tgtText`**：本段**译文**；分段时对每一段取 `tgtText`，再按段顺序拼接为最终结果。\n- **`data.srcText`**：本段原文回显（应与该段请求的 `content` 一致），用于核对；不要把它当成译文输出。\n\n返回 **译文即可**（最终输出为合并后的译文字符串，除非用户明确要求原始 JSON）。\n\n说明：蒙古文 → 中文的译文为**中文**，不适用 [BEHAVIOR-RULES.md](./BEHAVIOR-RULES.md) 中「全程传统蒙古文 / 禁止汉字」类自检；中文 → 传统蒙古文或西里尔蒙古文时，每段 `tgtText` 须符合目标文字体系；`mn <-> mw` 互译时只输出最终目标文字。\n\nFile v1.0.34:manifest.json\n\n{\n  \"skills\": {\n    \"mongolian-llm\": \"1.0.33\"\n  }\n}\n\nArchive v1.0.33: 13 files, 35458 bytes\n\nFiles: manifest.json (52b), package.json (354b), README.md (2804b), references/API-KEY.md (1686b), references/ASR.md (1834b), references/BEHAVIOR-RULES.md (12805b), references/CHAT-COMPLETIONS.md (5441b), references/HTTP-REQUESTS.md (11268b), references/INTERFACE-ROUTING.md (8332b), references/OCR.md (1643b), references/TRANSLATION.md (6205b), SKILL.md (18023b), _meta.json (133b)\n\nFile v1.0.33:SKILL.md\n\n---\nname: mongolian-llm\ndescription: 连接蒙古语专属 AI 接口，支持中文 ↔ 传统蒙古文 / 西里尔蒙古文互译、蒙古语对话创作、文字转语音（TTS）、语音识别（ASR）、图片文字识别（OCR）及 Word / PDF 文档翻译。遇到蒙古文相关请求自动激活，结果由专业接口处理，字符准确可靠。\ntriggers: 蒙语翻译, 蒙古语翻译, 蒙汉翻译, 蒙蒙互译, 西里尔蒙古文翻译, 传统转西里尔, 西里尔转传统, 中文翻译蒙古文, 蒙古文翻译, 蒙文邮件, 蒙古文邮件, 邮件蒙文, 发邮件蒙文, 邮件用蒙古文, 回复蒙文邮件, 蒙文邮件回复, 蒙语对话, 蒙古语会话, 蒙文聊天, 蒙古文聊天, 蒙语聊天, 蒙古语聊天, ᠮᠣᠩᠭᠣᠯ ᠬᠡᠯᠡᠬᠦ, 蒙文通知, 蒙古文通知, 推送蒙文, 通知蒙古文, 消息蒙古文, 定时蒙文, 定时通知蒙古文, 生成蒙文文件, 蒙古文文件, 蒙文文档, 导出蒙文, 蒙文附件, 社媒蒙文, 蒙古文贴文, 发社媒蒙古文, 社交媒体蒙古文, 发帖蒙古文, 蒙文文案, 网页翻译, 网页蒙文, 摘录翻译, 长文翻译, 批量翻译, 远程批量蒙文, 蒙古语, 蒙语, 蒙古文, 蒙文, 用蒙语, 用蒙古文, 说蒙语, 说蒙古文, 蒙语语音识别, 蒙古语语音识别, 蒙文语音识别, 语音转文字, 音频转写, ASR, 文字转语音, TTS\nmetadata: {\"openclaw\":{\"emoji\":\"🐎\",\"homepage\":\"https://mongol.open-idea.net\",\"primaryEnv\":\"MENGGUYU_API_KEY\"}}\n---\n\n# Mongolian Language Skill\n\nBase URL：`https://mongol.open-idea.net/api/v1`  \n请求模板：[references/HTTP-REQUESTS.md](./references/HTTP-REQUESTS.md)\n\n## 输出规则（最高优先级）\n\n调用成功后，最终可见回复由两部分组成：**业务正文** + **计费转述**。\n\n### 1. 业务正文\n\n仅包含下列接口对应目标字段原文；**计费句子不属于本节**，写法见 §2。\n\n| 接口 | 目标字段 |\n|------|---------|\n| `POST /translation` | `data.tgtText`（分段时按序拼接） |\n| `POST /chat/completions` | `choices[0].message.content` |\n| `POST /ocr` · `POST /word/translation` · `POST /pdf/translation` | `data.text` |\n| `POST /audio`（同步） | `data.text` |\n| `POST /audio/async` → 轮询 `GET /audio/async/{jobId}` 至 `done`（`200`） | `data.text` |\n| `POST /tts` | 二进制音频流，保存为文件后播放；无 JSON 目标字段 |\n| `POST /tts/async` → 轮询 `GET /tts/async/{jobId}` 至 `done`（`200`） | JSON 字段 `audioBase64` → 解码为 WAV 播放 |\n\n**TTS 边界**：对用户**不要**把 `audioBase64`、二进制或整段 WAV 原文贴出来；「业务正文」在此场景等价于按要求完成播放/落盘。**计费转述**仍按 §2 执行，不受影响。\n\n禁止输出：内部思考、路由解释、请求体、响应 JSON、模型名、token usage、代码块、前言、注释、礼貌语。\n\n### 2. 计费转述（强制；任意接口每次调用成功后皆须执行）\n\n**硬性要求**：**必须**在「成功解析」那一次 HTTP 响应上，**主动检查**响应头 **与** JSON 正文中是否存在计费字段。只要任一侧能读出 **扣费** 或 **余额**（及配套币种若有），即视为命中，**必须**输出 §2.2 模板，**金额与原样字段不得改写**。呈现位置：**首条**计费行须紧接在最终对用户展示的 §1 业务正文末尾**另起一行**；若同轮链路中多次调用皆命中计费，**后续每条计费各占一行**（参见 §2.2 示例），中间不穿插其它话术。\n\n若响应头 **与** JSON **皆无**任一计费字段，**严禁**编造数字；完成检查即可，**不写**计费行。\n\n#### 2.1 计费信息获取\n\n| 来源 | 字段 |\n|------|------|\n| HTTP 响应头 | `X-Mengguyu-Billing-Charged`、`X-Mengguyu-Billing-Balance`、`X-Mengguyu-Billing-Currency` |\n| JSON 正文（异步 `done` 等场景常见） | `billingCharged`、`billingBalance` |\n\n- **只看 JSON、或只看正文而不解析响应头** 会漏掉头侧计费信息，视为错误实现；**必须在同一轮成功响应中兼得可读的头与体**（或等价地同时保存头文件与 body），再拼装输出。\n- **禁止**单靠 `curl -s` 只解析 stdout：`-s` **不输出响应头**。请用 **`curl -sS -i`**、`curl -sS -D headers.txt -o body.json`，或 Python `requests` 的 `r.headers` / Node `fetch` 可读 headers 的客户端。\n- **异步**：轮询至 **`GET …/{jobId}` 返回 `200` 且 `done`** 的那一次响应，同样必须读取头或 JSON 内计费字段后再输出。\n\n币种：优先 **`X-Mengguyu-Billing-Currency`**；若缺失且 JSON 无等价字段，模板中 `{currency}` 用接口实际返回值里出现的币种字面量（**不得臆造**）。\n\n#### 2.2 输出格式（固定模板）\n\n在 §1 之后**另起一行**，严格套用（占位符替换为本次读到的数值/币种字面量）：\n\n`本次扣费: {charged} {currency}, 余额: {balance} {currency}`\n\n示例（单次）：\n\n```\nᠠᠪᠤᠷᠭᠤ\n本次扣费: 0.01 CNY, 余额: 9.99 CNY\n```\n\n示例（链路两次成功调用：如 OCR → 翻译，各有一次计费转述）：于最终对用户可见的正文末尾，按调用顺序分行附 **两行**模板（或使用与上行相同模板、数据来源分别对应 OCR 响应与翻译响应）：\n\n```\nᠠᠪᠤᠷᠭᠤ\n本次扣费: 0.02 CNY, 余额: 9.98 CNY\n本次扣费: 0.03 CNY, 余额: 9.95 CNY\n```\n\n#### 2.3 最终自检清单（输出前必过）\n\n- [ ] **每一次**调用成功且完成解析时，均已在该次响应上检查过头 **与** JSON（如 OCR→翻译等多步链路不得只查最后一步）\n- [ ] 凡命中计费字段的调用均在最终答复中接续输出 §2.2：**首行**紧接在 §1 业务正文末尾**另起一行**；同轮链路中后续的计费各占**新的一行**，中间不掺杂其它话术。**若全程均无计费字段**则**不写**计费行、**不捏造**。\n- [ ] 模板中金额 **原样抄写**，未四舍五入改写、未中英文混改写币种\n\n## 接口路由（每轮必须重新判断）\n\n优先级：OCR → ASR → TTS → 翻译 → 中文回复 → 蒙文回复/对话\n\n- **OCR**：输入含图片 → `POST /ocr`\n- **ASR**：输入含音频 → **默认 `POST /audio/async`**（`multipart` 上传 `file` + `language`，每隔 **3～5 秒** 轮询 **`GET /audio/async/{jobId}`** 直至 `status: done`，提取 **`data.text`**；OpenClaw / 长音频优先此路径以避免网关超时）。**极短音频或探测**可试同步 **`POST /audio`**（仍受本站单次 PCM 时长配额限制）。计费：`billingCharged` / `billingBalance`（JSON 或响应头）。\n- **TTS**：用户要求朗读/播放/合成音频 → 优先 **`POST /tts/async`**（异步轮询，长文本必用）；极短文本可试 **`POST /tts`**（同步，易受代理超时限制）\n- **翻译**：含「翻译」「译成」「什么意思」「西里尔转传统」等纯转换意图 → `POST /translation`\n- **中文回复**：含蒙文 + 「用中文回答/回复」→ `POST /chat/completions`（中文 system）\n- **蒙文对话**：蒙文输入无翻译关键词 → `POST /chat/completions`（蒙文 system）\n\n### 流式联动规则（OCR → 翻译）\n\n当上一环节的输出作为下一环节的输入时（例如先 `POST /ocr` 再 `POST /translation`）：\n\n1. **禁止手动转录**：不得从终端输出、日志截断、控制台预览或对话框摘录中复制内容，作为下一请求的输入。\n2. **变量直通**：OCR 成功响应中 **`data.text`** 的值必须**原封不动**用程序变量（或等价结构化字段）传入翻译请求的 **`content`**；中途不得截取、摘录或人工转写。\n3. **惰性校验**：若待传文本超过约 **200** 字符，直接以变量传递即可，无需输出全文预览供人工核对（以免诱导从预览复制不完整文本）。\n\n以上约束不改变「输出规则」：对用户可见的最终回复仍仅为「§1 业务正文 + §2 计费转述」，不要在对话里粘贴完整响应 JSON。\n\n## 调用模板\n\n### 翻译\n\n```json\n{ \"from\": \"zh\", \"to\": \"mw\", \"content\": \"待翻译文本\" }\n```\n语言代码：`zh` 中文 · `mw` 传统蒙古文 · `mn` 西里尔蒙古文。蒙蒙互译只调一次，后台经中文中转。\n\n### TTS（异步轮询优先；必须先问音色；禁止向用户报读 speed 数值）\n\n1. **音色**：触发 TTS 前，必须先向用户**完整列出全部 12 种** `voice` 供选择：**Kore · Puck · Zephyr · Charon · Fenrir · Aoede · Leda · Orus · Iapetus · Sulafat · Achird · Achernar**。根据用户回答选择对应名称；用户未回应、含糊回应（「随便」「你决定」）或直接去忙别的话题时，再按内容自动选（正式→Kore，新闻→Iapetus，儿童→Leda，情感→Sulafat，默认→Kore）。详细映射与话术见 [INTERFACE-ROUTING.md](./references/INTERFACE-ROUTING.md)。\n\n2. **语速**：对用户仅说明默认是**正常语速**，**不必主动询问**。**不要在对话里复述** `speed: 1.0` 等接口数值。只有当用户明确要求调整语速时，用自然语言问「想快一点还是慢一点？」，再在请求里分别映射：**快一点 → `speed`: 1.2**，**慢一点 → `speed`: 0.8**。（其他情况不传 `speed`。）\n\n3. **提交全文校验**：在发起请求前，将待合成的 `text` 与用户本轮提供的正文**逐字符**比对，确保未被省略、截断或改写（含空格与标点）。若文本很长，可分段与用户逐一核对后再提交。\n\n4. **调用方式**：绝大多数场景使用 **`POST /tts/async`** 提交任务后，每隔 **3～5 秒** 轮询 **`GET /tts/async/{jobId}`**，直到 `200` 且 `status: done`，从 **`audioBase64`** 解码为 `.wav` 播放。计费字段 **`billingCharged`**、**`billingBalance`** 必须转述。极短试探可试同步 **`POST /tts`**（长文禁止）。**禁止使用**已移除的 SSE 端点 `POST /tts/stream`。详见 [HTTP-REQUESTS.md](./references/HTTP-REQUESTS.md)。\n\n```http\nPOST /tts/async/\n```\n\n```json\n{ \"text\": \"ᠰᠠᠢᠨ ᠪᠠᠢᠨ᠎ᠠ ᠤᠤ\", \"lang\": \"mn-Mong\", \"voice\": \"Kore\" }\n```\n\n仅当用户在第 2 步明确要快/慢时追加 `\"speed\": 1.2` 或 `\"speed\": 0.8`。\n\n`lang`：`mn-Mong` 传统蒙古文 · `mn-Cyrl` 西里尔蒙古文 · `zh-Hans` 中文 · `en` 英文。\n\n### ASR（异步轮询优先；与 TTS 同类）\n\n1. **默认路径**：**`POST /audio/async`**，使用 **`multipart/form-data`** 上传字段 **`file`**（与同步接口相同格式类型），外加 **`language`**、可选 **`sample_rate`**。\n2. **轮询**：`202` 返回 `jobId` 后，每隔 **3～5 秒** **`GET /audio/async/{jobId}`**；`processing`/`pending` 时 **202**；**`200`** 且含 **`data.text`** 为完成（后台已按本站策略切段多次调上游并拼接文本）。\n3. **同步备选**：极短音频可 **`POST /audio`**（JSON 或 multipart），易被代理/单次时长限制；长音禁止依赖单请求。\n\n详见 [HTTP-REQUESTS.md](./references/HTTP-REQUESTS.md)。\n\n### 对话（蒙文 / 中文输出）\n\n调用 `POST /chat/completions` 时，须在拼好 **`messages`** 后、发送请求前，用 **本节下表** 为 **`max_tokens` 填入一个确定整数**。不要凭主观「感觉」偏小或偏大默认写 **4096** / **8192**；定性补充与封顶说明见 [CHAT-COMPLETIONS.md](./references/CHAT-COMPLETIONS.md)。\n\n#### `max_tokens` 自动估算规则（必选）\n\n1. **量谁**：本条请求 **`messages`** 中**最后一条** `role: user` 的 `content` 全文。\n2. **怎么数**：**Unicode 码点**个数（中英文、西里尔字母、传统蒙古文、标点、空格均各占 1）。**不要用** JavaScript 的 **`string.length`** 当作码点计数（UTF-16 代理对会 **误计**）；可用 **`Array.from(content).length`**、`Intl.Segmenter`（按 grapheme）、Python **`len`** 等对码点正确的方法。\n3. **多轮**：只数 **本条**即将发出去的那段 **`user.content`**；不要把历史 **`assistant`** 或其它轮次的上下文拼进来算 **`L`**，除非你确实已把拼接结果写进了本条 **`user.content`**。\n4. **查表**：令 **`L`** = 步骤 2 的码点字数，按下表取值（单值）。\n\n| **`L`** | 典型场景（便于对照） | **`max_tokens`** |\n|--------|---------------------|------------------|\n| **≤ 50** | 寒暄、极简短问 | **256** |\n| **51～200** | 一般问答、短指令 | **768**（对应原建议区间 512～1024 的折中；**严控成本**可改用 **512**） |\n| **201～1000** | 段落级、中长上下文 | **3072**（对应原区间 2048～4096 的折中；预期回答明显很长且不敏感余额可改用 **4096**） |\n| **> 1000** | 长文、文章体、条目式长答 | **8192**（若非顶格长输出可先试 **6144**） |\n\n用户若**明示**输出要「一段话即可 / 要尽量短 / 要写长文」，在不超 **8192** 硬顶的前提下可上下浮动一档，但仍须能说出依据（字数档或用户原话）。\n\n**蒙文示例**（仅演示结构； **`max_tokens` 须按上表重算**。若 **`L`** 在 51～200，常用 **768**）：\n\n```json\n{\n  \"model\": \"gpt-5-mw\",\n  \"messages\": [\n    {\"role\": \"system\", \"content\": \"请只用纯传统蒙古文回答，不要包含任何中文汉字。\"},\n    {\"role\": \"user\", \"content\": \"<用户问题>\"}\n  ],\n  \"temperature\": 0.5,\n  \"max_tokens\": 768\n}\n```\n\n**中文示例**（同上，`max_tokens` 查表；结构一致）：\n\n```json\n{\n  \"model\": \"gpt-5-mw\",\n  \"messages\": [\n    {\"role\": \"system\", \"content\": \"请使用简体中文回答。若用户输入包含传统蒙古文，请先理解原文语义，再直接给出针对用户请求的中文回复正文。只输出最终中文回复正文；禁止添加问候、自我介绍、解释过程、标题、原文复述或无关补充。若用户明确要求翻译，请不要使用本模板，应改用 POST /translation。\"},\n    {\"role\": \"user\", \"content\": \"<用户问题>\"}\n  ],\n  \"temperature\": 0.5,\n  \"max_tokens\": 768\n}\n```\n\n## 计费与调用确认\n\n| 接口 | 计费 | 参考费率 |\n|------|------|---------|\n| `/translation` · `/tts` · `/tts/async` | 按输入字符数 | ¥6 / 万字符 |\n| `/chat/completions` | 按 token | 输入 ¥60 / 百万；输出 ¥120 / 百万 |\n\n短文本/短对话直接调用。长文、批量、Word/PDF、OCR、ASR 等高成本任务须先估算费用、告知用户并等待确认。详见 [BEHAVIOR-RULES.md](./references/BEHAVIOR-RULES.md)。\n\n## API Key 配置\n\n未检测到 `MENGGUYU_API_KEY` 时，输出以下固定提示（原文输出，不改写）：\n\n```text\nMENGGUYU_API_KEY 未配置。请按以下步骤操作：\n1. 访问 https://mongol.open-idea.net 注册/登录，在「API Key」页创建并复制完整 Key\n2. 在本机终端执行（勿将 Key 粘贴到对话框）：\n   openclaw config set env.MENGGUYU_API_KEY \"<完整API Key>\"\n   openclaw gateway restart\n3. 若 openclaw 命令不可用，手动写入 ~/.openclaw/.env（Windows：%USERPROFILE%\\.openclaw\\.env）：\n   MENGGUYU_API_KEY=你的完整Key\n   再重启 Gateway\n```\n\n**⚠️ 禁止索取 Key**：不得要求用户将 Key 发送到对话框。若用户已主动粘贴 Key：立即警告（建议撤销并重新生成） → 写入配置并执行 `openclaw gateway restart` → 完成后再次提醒替换。禁止在对话中回显 Key 原文。\n\n详细配置说明：[references/API-KEY.md](./references/API-KEY.md)\n\n## 错误处理\n\n### 结果看起来「不正常」仍勿重复同一计费请求（防多次扣款）\n\n中继按 **单次已完结的调用**计费：只要收到 **`HTTP 200`**、JSON **`success: true`**（或等价语义）、可读 **`data.*` 等业务字段**，以及/或 **`X-Mengguyu-Billing-*` / JSON `billing*`**（含异步轮询 **`done`** 的那次 **`GET`**），通常即 **已记入一次扣款**。用户对译文质量、版面、空段落、「像乱码」等 **主观观感** 不等于服务端未入账。\n\n**禁止**：在未征得用户知情同意、且 **未改写请求载荷**（同一段 `content`、同一文件、`from/to`/分段策略不变）的情况下，只因为「上一轮结果不满意」就连发 **第二次、第三次** 同类调用——这会按 **新的一轮计费** 叠加扣款，且未必改善模型输出。\n\n**建议**：先用 §1 §2 向用户如实呈现上一轮业务正文与计费；若需重做，须在用户明确表示接受 **再次计费** 后 **调整输入**（拆段、换一种 `from/to`、删减噪声正文、换一种文档等）再调用，或引导用户走站内工单/人工支持，而不是静默重试。\n\n### 传输层可重试的边界\n\n- **`4xx`**：检查 Key、必填字段、JSON、分段与大小限制，**不重试**。\n- **`5xx` / 超时 / 网络抖动 / 连接被对端重置**：仅当 **尚未收到** 任何可解析的「成功/失败已完结」响应（无完整 JSON、无 `jobId` 可继续轮询、也无计费头可读）时，方可对 **同一请求体** 递增间隔重试，**最多 3 次**。一旦已解析到 **计费字段** 或异步 **已 `done`**，该次调用即 **视作结账完成**，不得以「想换一版结果」为由用原样载荷再打一枪。\n\n## 文档索引\n\n| 主题 | 文件 |\n|------|------|\n| 请求模板（全接口） | [HTTP-REQUESTS.md](./references/HTTP-REQUESTS.md) |\n| 接口路由详细规则 | [INTERFACE-ROUTING.md](./references/INTERFACE-ROUTING.md) |\n| 翻译分段规则 | [TRANSLATION.md](./references/TRANSLATION.md) |\n| 对话参数 | [CHAT-COMPLETIONS.md](./references/CHAT-COMPLETIONS.md) |\n| OCR | [OCR.md](./references/OCR.md) |\n| ASR | [ASR.md](./references/ASR.md) |\n| API Key 配置 | [API-KEY.md](./references/API-KEY.md) |\n| 行为规则 | [BEHAVIOR-RULES.md](./references/BEHAVIOR-RULES.md) |\n\n> **注意**：这不是 OpenAI API。路径、`model` 取值、字段均以本文档及 `references/` 为准，不要套用 OpenAI 规范。\n\nFile v1.0.33:README.md\n\n# mongolian-llm\n\nOpenClaw Skill：中文、傳統蒙古文、西里爾蒙古文互譯，蒙文對話/創作、圖片 OCR。\n\n## 能力\n\n- `POST /translation`：純文字翻譯（`zh` / `mw` / `mn`，蒙蒙互譯由後台經中文中轉）\n- `POST /chat/completions`：對話/創作\n- `POST /ocr`：圖片 OCR（預設 `language=mw` 傳統蒙文；西里爾蒙古文請傳 `mn`）\n- `POST /audio`：語音識別 / ASR\n\n## 路由優先級（每輪重判）\n\n1. 圖片 OCR\n2. 語音 ASR\n3. 純文字翻譯\n4. 中文回答蒙文\n5. 蒙文回答蒙文\n6. 預設蒙文對話\n\n詳見 `references/INTERFACE-ROUTING.md`。\n\n## 輸出規範（零洩漏）\n\n成功後最終可見回覆只能輸出：\n\n- `/translation` -> `data.tgtText`\n- `/chat/completions` -> `response.choices[0].message.content`\n- `/ocr` -> `data.text`\n- `/audio` -> `data.text`\n\n不得附加 JSON、工具輸出、路由解釋、模型名、token usage 等內容。\n\n## API Key\n\n主環境變數：`MENGGUYU_API_KEY`。發現階段不強依賴，業務調用前必須檢查。\n\n缺失時固定提示：\n\n```text\nMENGGUYU_API_KEY 未配置。请按以下步骤操作：\n1. 访问 https://mongol.open-idea.net 注册/登录账号\n2. 进入后台 API Key 页面，创建并复制完整 Key（含前缀如 `1|xxxx...`）\n3. 不要在本对话中粘贴完整 API Key；请在自己的本机终端执行：\n   openclaw config set env.MENGGUYU_API_KEY \"<完整API Key>\"\n4. 配置后重启 Gateway 或重新开启 OpenClaw 会话，使环境变量生效\n5. 若客户端不支持该命令，请改按本说明中的 `.openclaw/.env` 兼容方式配置\n```\n\n## 安裝與配置\n\n```text\nopenclaw skills install mongolian-llm\n```\n\n配置 API Key 時，不要把完整 Key 貼到聊天輸入框。請只在自己的本機終端執行：\n\n```bash\nopenclaw config set env.MENGGUYU_API_KEY \"<完整API Key>\"\n```\n\n配置後重啟 Gateway 或重新開啟 OpenClaw 會話，使環境變數生效。\n\n如果客戶端不支援上述命令，可改用 `.openclaw/.env` 兼容方式：\n\n```text\nWindows: %USERPROFILE%\\.openclaw\\.env\nmacOS / Linux: ~/.openclaw/.env\n```\n\n```env\nMENGGUYU_API_KEY=你的完整Key\n```\n\n## 通用 HTTPS 调用\n\n本 Skill 面向客戶環境時不要求安裝特定命令行運行時。請使用 `references/HTTP-REQUESTS.md` 中的平台無關 HTTPS 請求模板，由 OpenClaw / Gateway / Agent 當前可用的 HTTPS 請求能力發起 API 調用。\n\n常用接口：\n\n- `POST /translation`\n- `POST /chat/completions`\n- `POST /ocr`\n- `POST /audio`\n- `POST /word/translation`\n- `POST /pdf/translation`\n\n## 參考\n\n- `SKILL.md`\n- `references/HTTP-REQUESTS.md`\n- `references/INTERFACE-ROUTING.md`\n- `references/BEHAVIOR-RULES.md`\n- `references/TRANSLATION.md`\n- `references/CHAT-COMPLETIONS.md`\n- `references/OCR.md`\n- `references/API-KEY.md`\n\nFile v1.0.33:_meta.json\n\n{\n  \"ownerId\": \"kn76hv4bh6w5s87x5j8emd1ycs80dp3m\",\n  \"slug\": \"mongolian-llm\",\n  \"version\": \"1.0.33\",\n  \"publishedAt\": 1778904697487\n}\n\nFile v1.0.33:references/API-KEY.md\n\n# API Key 配置\n\n## 安全原则\n\n- **禁止索取 Key**：不得要求用户将 API Key 发送到对话框；Key 进入对话历史后不可撤回。\n- **兜底**：若用户已主动粘贴 Key，立即警告（建议前往 https://mongol.open-idea.net 撤销并重新生成），再写入配置并重启 Gateway，完成后再次提醒替换；不在对话中回显 Key 原文。\n\n## 配置步骤（引导用户在终端执行）\n\n**第一步**：登录 https://mongol.open-idea.net，在「API Key」页创建并复制完整 Key（含前缀，如 `1|xxxx...`）。\n\n**第二步**：在本机终端执行（勿粘贴到对话框）：\n\n```bash\nopenclaw config set env.MENGGUYU_API_KEY \"<完整API Key>\"\nopenclaw gateway restart\n```\n\n重启成功后告知\"已配置并重启，可以正常使用了\"；若重启失败，提示手动重启 Gateway。\n\n**兼容方式**（`openclaw` 命令不可用时）：手动写入环境文件后重启。\n\n- Windows：`%USERPROFILE%\\.openclaw\\.env`\n- macOS / Linux：`~/.openclaw/.env`\n\n```env\nMENGGUYU_API_KEY=<完整API Key>\n```\n\n## 调用前检查\n\n- 检查 `MENGGUYU_API_KEY` 是否存在且非空；**禁止**用 `openclaw config get` 核对（输出自动脱敏，无法得到真实值）。\n- 非空 → 正常调用接口。\n- 为空 → 引导用户按上方步骤配置；若有权限可代为执行 `openclaw gateway restart`（仅重启，不代写 Key）；未检测到 Key 时不得做任何业务回答。\n\n## 说明\n\n- Key 仅通过环境变量 `MENGGUYU_API_KEY` 配置，与 `plugins.entries` 无关。\n- 本 Skill 未声明 `requires.env`，以允许在未配置 Key 时被发现，但业务调用前必须完成上述检查。\n\nFile v1.0.33:references/ASR.md\n\n# ASR `POST /audio`\n\n用于语音识别，把本地音频或 PCM Base64 转成文本。\n\n**长音频 / OpenClaw**：优先 **`POST /audio/async`** → 轮询 **`GET /audio/async/{jobId}`**，与 TTS 异步同类；服务端切段拼接后再返回 **`data.text`**。详见 [HTTP-REQUESTS.md](./HTTP-REQUESTS.md)。\n\n## 适用场景\n\n- 用户上传音频、录音、语音文件，要求识别文字\n- 用户先要语音转文字，再继续翻译或问答\n\n## 推荐调用\n\n按 [HTTP-REQUESTS.md](./HTTP-REQUESTS.md) 的平台无关模板调用 `POST /audio`。\n\n本地音频文件优先以 `multipart/form-data` 上传到后端，由后端服务器转成 PCM 后调用 ASR。支持 `wav`、`mp3`、`m4a`、`aac`、`ogg`、`flac`、`pcm`。若当前环境已经有 PCM 16-bit mono Base64，也可使用 JSON 请求体直接传 `audio`。\n\n## 请求体\n\n```json\n{\n  \"audio\": \"<PCM 16-bit mono Base64>\",\n  \"language\": \"mw\",\n  \"sample_rate\": 16000\n}\n```\n\n字段说明：\n\n- `file`：使用 multipart 上传本地音频文件时必填，字段名为 `file`。\n- `audio`：使用 JSON 直传时必填。PCM 16-bit mono 的 Base64 内容。\n- `language`：可选，默认 `mw`。\n- `sample_rate`：可选，默认 `16000`。支持 `8000`、`16000`、`48000`。\n\n## 响应提取\n\n成功时只提取：\n\n- `data.text`（识别文本）\n\n可选辅助字段（不直接给用户展示，除非用户要求）：\n\n- `data.duration_seconds`\n- `data.raw`\n\n## 输出约束（零泄漏）\n\n- 默认最终可见回复只输出 `data.text` 原文；若响应头包含 `X-Mengguyu-Billing-*`，须在正文后转述本次扣费、当前余额与币种。\n- 禁止输出请求体、原始 JSON、签名信息、模型信息、调试日志。\n- 若用户要求“先识别再翻译”，流程应为：`/audio` 提取文本后，再走 `/translation`。\n\nFile v1.0.33:references/BEHAVIOR-RULES.md\n\n# 行为规则\n\n## 调用前确认（最高优先级，在 API Key 检查之前执行）\n\n调用付费接口前，先判断任务规模和费用风险。短文本翻译/短对话可以直接处理；长文、批量、文件、OCR、ASR 等高成本任务需要先提示费用并取得确认。\n\n---\n\n### 低成本短请求 → 可直接调用\n\n用户明确下达蒙古语相关指令，且内容明显为短文本、短对话、单句翻译时，可以直接调用 API。若响应头包含计费信息，调用完成后仍需转述本次扣费、当前余额与币种。\n\n典型情形：\n\n- \"帮我把这段翻译成蒙古文\"\n- \"用传统蒙文介绍那达慕大会\"\n- \"写一封蒙文邮件\"\n\n---\n\n### 高成本或不确定费用 → 必须先确认\n\n以下情况必须先完成「估算费用 → 告知用户 → 等待明确确认」，不得直接调用：\n\n- 长文、网页正文、批量文本、多文件或远程批量任务\n- Word/PDF 文档翻译\n- OCR 图片识别，尤其是多图或大图\n- ASR 语音识别，尤其是较长音频\n- Agent 自行判断、主动提出需要调用付费 API 的操作\n- 用户明确要求\"先告诉我费用再决定\"\n\n1. **估算费用**\n   - 翻译（`POST /translation/`）：估算费用 ≈ `UTF-8 字节数 / 10000 × ¥6`；批量时按全文总字节数估算。\n   - 对话（`POST /chat/completions/`）：输入费用 ≈ `messages 字符数 / 4 / 1000000 × ¥60`；输出费用视回复长度而定。\n   - OCR（`POST /ocr/`）：按识别出的文字字符数扣费，无法准确预估时提示\"将按识别字符数计费\"。\n   - ASR（`POST /audio/` 或异步 `POST /audio/async/`）：估算费用 ≈ `音频秒数 / 3600 × ¥24`；无法读取时长时提示\"将按实际识别秒数计费\"。\n   - Word/PDF：按解析出的可翻译文字字符数扣费，无法准确预估时提示\"将按实际翻译字符数计费\"。\n\n2. **告知用户并等待明确确认**  \n   示例措辞：\n   > \"我可以帮你翻译这段内容，估算费用约 ¥0.003，是否需要？\"\n\n   以下视为**明确确认**：是、确认、好、行、可以、yes、OK 及包含明确同意意图的自然语言。  \n   以下**不视为**确认，须重新询问：沉默、含糊词（\"随便\"\"无所谓\"）。\n\n典型情形（以下均属于 Agent 主动）：\n\n- Agent 在处理其他任务时，自行决定顺带翻译某段内容\n- Agent 主动提出\"我注意到这段文字，需要我帮你翻译吗\"\n- Agent 未经指示，主动发起蒙古语对话或内容创作\n\n---\n\n### 特殊覆盖（优先于上述两条）\n\n- 用户明确说\"我知道要收费，直接执行\" → 直接调用\n- 用户设置了\"本会话内不再询问\" → 直接调用（仅用户主动声明后生效）\n- 用户要求\"先告诉我费用再决定\" → 先估算并告知，等待确认后再调用\n\n---\n\n## 接口路由规则（优先级在调用前确认之后）\n\n当用户输入包含图片、音频、传统蒙古文字符（Unicode U+1800–U+18AF）或西里尔蒙古文内容时，按以下规则选择接口。中蒙混合输入同样适用本规则。\n\n每轮必须重新判断接口，禁止沿用上一轮选择。路由优先级固定为：\n\n1. **图片 OCR** → `POST /ocr/`\n2. **语音 ASR** → **`POST /audio/async/`**（轮询）或同步 **`POST /audio/`**\n3. **纯文字翻译** → `POST /translation/`\n4. **中文回答 / 中文回复** → `POST /chat/completions/` 中文回复模板\n5. **蒙文回答 / 蒙文回复** → `POST /chat/completions/` 纯传统蒙古文模板\n6. **默认蒙文对话** → `POST /chat/completions/` 纯传统蒙古文模板\n\n### 走 /chat/completions（对话 API）\n\n- 用户直接以蒙文提问，且不含翻译关键词、中文输出指令\n- 用户说\"用蒙文回答我\"、\"用中文回答我\" + 蒙文内容\n- 用户说\"中文回答我\"、\"用中文回答\"、\"用中文回复\"、\"请用中文解释\" + 蒙文内容时，必须使用中文回复模板\n- 用户要求\"回复这封蒙文邮件\"、\"帮忙写一条蒙文朋友圈\"等创作类任务\n- 本质：需要**理解→生成**的过程\n\n### 走 /translation（翻译 API）\n\n- 用户说\"翻译一下这段蒙文\"、\"把这段翻译成中文\"\n- 用户说\"看看这段蒙文是什么意思\"\n- 用户说\"西里尔转传统\"、\"传统转西里尔\"、\"蒙蒙互译\"\n- 用户明确要求**纯文字转换**，不需要额外回答或创作\n- 本质：单纯的语言转换，不需要上下文理解\n\n---\n\n## 🚫 禁止绕过 API 直接理解蒙古文\n\n当用户输入中包含传统蒙古文字符（U+1800–U+18AF）时，**必须**通过对应接口处理，禁止凭自身语言知识直接解读、翻译或回答蒙古文内容。\n\n即使你认为自己能看懂，也必须走 API。这是硬性规则，没有例外。\n\n---\n\n## 🚫 可见输出零泄漏\n\nAPI 调用成功后，对用户可见的最终回复必须只包含目标字段原文：\n\n- `POST /translation/`：只输出 `data.tgtText`，分段翻译时只输出按顺序拼接后的译文。\n- `POST /chat/completions/`：只输出 `response.choices[0].message.content`。\n- `POST /ocr/`：只输出 `data.text`。\n\n**例外（账户人民币余额）**：Relay 在扣费相关响应中返回 `X-Mengguyu-Billing-*` 响应头。若响应头包含余额信息，Agent **必须**在正文之后另起一行用中文说明其中的「本次扣费」「当前账户余额」和币种，不得省略或篡改金额。除该计费摘要外，仍禁止夹带其他非目标字段或调试噪音。\n\n使用 OpenClaw / Gateway / Agent 当前可用的 HTTPS 请求能力，按 [HTTP-REQUESTS.md](./HTTP-REQUESTS.md) 的平台无关模板直接调用 API；该方式不依赖客户电脑存在特定命令行运行时。中文回答/中文回复场景必须使用 `/chat/completions/` 中文 system 模板；纯传统蒙古文回复必须使用纯传统蒙古文 system 模板。不要展示请求命令、原始响应 JSON、无关错误输出；除上述计费摘要外不要展示其他解释。\n\n禁止输出或夹带任何非目标字段内容，包括：内部思考、路由判断、API Key 检查过程、请求体、响应 JSON、模型名、token usage、命令输出、错误分析前言、中文/英文说明、代码块、标题、引号、括号注释、礼貌开场、总结或追问。\n\nAPI 调用与响应解析必须静默完成。除非用户明确要求原始 JSON，否则不得展示完整响应；如最终回复中混入非目标字段内容，须删除附加内容并仅保留目标字段原文及允许的计费摘要后再发送。\n\n---\n\n## 🚨 违规后果（零容忍）\n\n在包含传统蒙古文字符（U+1800–U+18AF）的输入中，若 Agent 未经 API 调用而直接理解、翻译或回答任何蒙古文内容，属于严重违规。\n\n系统将记录该行为；多次违规可触发蒙古文技能禁用。不存在\"反正我懂了所以省一次调用\"的例外。\n\n---\n\n- 严格执行用户请求；翻译只返回译文。\n- **重复调用与扣费**：若已收到 **`200`/业务成功/异步 `done`**，且能读到 **目标业务字段** 或 **计费头、JSON `billing*`**，即通常 **已扣费**；不得以「结果看着不对、像失败」为由，用 **同一 `content` 或同一文件** 再打一枪，否则会 **多次扣款**。须先向用户说明现状与计费，取得同意后再 **改写输入或路由** 并接受再次计费；或引导走人工/工单，而非静默重试。\n- 调用 `/translation/` 或 `/chat/completions/`（及其他计费接口）仅当 **尚未收到** 可解析的完结响应时，遇 **网络抖动、超时或 5xx** 方可对**同一请求体**做 **有限重试**（例如间隔递增、最多 2～3 次）；**不要**对 4xx（含鉴权失败、参数错误）盲目重试，应先检查 Key、JSON 与分段是否符合本技能文档。\n- 不设置过小超时（禁止 `--max-time 5` / `--max-time 10`）。\n- `POST /chat/completions/` 默认不加 `--max-time`；必须设置时用 `--max-time 30~60`。\n- 不要把 10~20 秒内仍在生成的请求误判为卡住。\n- 先决条件：`MENGGUYU_API_KEY` 已配置且非空。检查方法：运行 `[ -n \"$MENGGUYU_API_KEY\" ] && echo \"已配置\" || echo \"未配置\"`，或 `echo \"${#MENGGUYU_API_KEY}\"` 查看字符数是否大于 0（**勿用 `openclaw config get` 核对**，见 [API-KEY.md](./API-KEY.md)）。若未配置，必须输出下方固定中文提示，不得直接做业务回答。\n- 未检测到 `MENGGUYU_API_KEY` 时，对用户只输出以下固定中文提示（原文输出，不改写）：\n\n  ```text\n  MENGGUYU_API_KEY 未配置。请按以下步骤操作：\n  1. 访问 https://mongol.open-idea.net 注册/登录账号\n  2. 进入后台 API Key 页面，创建并复制完整 Key（含前缀如 `1|xxxx...`）\n  3. 在本机终端自行执行（勿将 Key 粘贴到对话框）：\n     openclaw config set env.MENGGUYU_API_KEY \"<完整API Key>\"\n  4. 执行后在终端运行 openclaw gateway restart，使配置立即生效\n  5. 若客户端不支持上述命令，可手动编辑 ~/.openclaw/.env（Windows 为 %USERPROFILE%\\.openclaw\\.env），写入 MENGGUYU_API_KEY=你的完整Key，再重启 Gateway\n  ```\n- **⚠️ 禁止主动索取 API Key**：不得通过任何措辞要求或引导用户将完整 API Key 发送到对话框；Key 一旦出现在对话历史中，将对参与会话的所有方可见，且无法撤回。\n- 若用户已主动将完整 API Key（格式通常为 `数字|字母数字串`，如 `1|xxxxxx`）粘贴到对话框（兜底，不主动触发）：\n  - **首先立即给出安全警告**：Key 已出现在对话记录中，建议尽快前往 https://mongol.open-idea.net 后台撤销该 Key 并重新生成；\n  - OpenClaw 客户端：调用 `openclaw config set env.MENGGUYU_API_KEY \"<key>\"` 写入配置，再执行 `openclaw gateway restart` 重启 Gateway；完成后再次提醒尽快撤销并替换该 Key；\n  - QClaw 客户端：写入 `env.MENGGUYU_API_KEY` 字段后执行 `openclaw gateway restart`，并给出撤销提示；\n  - 写入操作本身不在对话中回显 Key 原文。\n- 当先决条件未满足时，不得用\"基于自身知识\"直接生成蒙古语内容，不得跳过配置步骤。\n- 调用顺序必须严格为：先按 [API-KEY.md](./API-KEY.md) 配置并确认 **`MENGGUYU_API_KEY` 环境变量**可用 → 再调用 `/translation/`（翻译）或 `/chat/completions/`（对话）；**禁止**依赖 `openclaw config get` 做密钥校验。\n- 配置 API Key 时必须原样完整写入，不得丢失任何字符（尤其是 `|`、`$`、`\"`、`\\` 等特殊字符）。\n- 若 key 含前缀（如 `1|xxxx...`），必须完整保留前缀；禁止去掉 `1|` 后再写入。\n- 写入后**不得**用 `openclaw config get` 与原始 Key 逐字比对（输出会脱敏）。应以环境变量是否可用、接口是否鉴权成功为准；若调用失败且怀疑密钥未生效，请用户确认已在本机终端执行配置命令，必要时让用户重新配置。\n\n## 语言约束（高优先级，适用于 chat/completions）\n\n- 当用户要求\"全程传统蒙古文\"时，最终回答正文必须为传统蒙古文，不得输出中文正文\n- 即使用户用中文下达指令，只要意图是\"用传统蒙古文作答\"，也必须输出纯传统蒙古文\n- 未明确要求双语时，禁止追加中文解释、中文总结或中文标题\n- 若内容中需要专有名词，优先使用传统蒙古文转写；避免中文括注\n- 对话接口调用成功后，最终输出必须严格等于 `response.choices[0].message.content` 原文，不得二次改写、摘要、翻译、补充说明，也不得在原文前后添加任何额外内容（包括但不限于开场白、转折句、总结、追问、表情、括号说明、响应 JSON、模型名或 token usage 等）。除非触发安全/合规拦截，否则这是一条硬性规则，没有例外。\n- 即使用户在 API 返回后进一步追问或评论，也不得在原始输出基础上追加 Agent 自身内容；如需继续对话，必须基于新的用户输入重新调用 API。\n\n## 输出前自检（必须执行）\n\n### 输入预检（在调用 API 之前执行）\n\n- 检查用户输入中是否包含任何 U+1800–U+18AF 范围的 Unicode 字符\n- 若检测到且当前会话尚未对该输入调用蒙古语 API，必须先调用 API 再回答，禁止跳过此步骤\n- 调用前\"估算费用\"适用于长文、批量、文件、OCR、ASR 等高成本任务；短文本/短对话可直接处理\n\n- 当用户要求\"全程传统蒙古文\"时，发送前检查回答是否包含汉字（Unicode `\\p{Han}`）\n- 若检测到中文字符，必须重写为纯传统蒙古文后再输出\n- 若首次重写仍不合规，再重写一次；最多重试 2 次\n\nFile v1.0.33:references/CHAT-COMPLETIONS.md\n\n# 对话 / 表达 / 解释：`POST /chat/completions`\n\n用户意图是「蒙古语表达 / 蒙古语对话 / 文化或语言解释」时，统一调用：\n\n`POST /chat/completions`\n\n- **互译不要用本接口**：**中文、传统蒙古文、西里尔蒙古文互译**（含「译成蒙文」「把这段翻成蒙古文」「西里尔转传统」等）一律使用 **`POST /translation`**，**禁止**用 `POST /chat/completions` 代替翻译（计费与契约不同，且易产生非严格译文）。本接口仅用于对话、说明、从零撰写蒙文内容等，见 [INTERFACE-ROUTING.md](./INTERFACE-ROUTING.md) 中「关键词与接口优先」。\n\n## `max_tokens` / `max_completion_tokens`（须随任务调整）\n\n本站中继在转发前会按「**输出 token 上界**」做余额预估：上界越大，对账户余额的**预检门槛**越高；应**按实际问题**设合理值，不要凡请求都写满 8192。\n\n### 技能内可执行规则（按本条 `user.content` 字数）\n\n与本站 [SKILL.md](../SKILL.md) 对齐：取 **`messages`** 中**最后一条** `role: user` 的 `content`，统计其 **Unicode 码点字数** **`L`**（勿用 JS `string.length` 当作码点计数），再按下表选一个**确定的**整数作为 `max_tokens`：\n\n| **`L`** | 典型场景 | **`max_tokens`** |\n|--------|----------|------------------|\n| **≤ 50** | 一句答、寒暄、是否类 | **256** |\n| **51～200** | 一般问答、短指令 | **768**（或 **512** 严控成本） |\n| **201～1000** | 段落级、中长说明 | **3072**（或 **4096** 预期回答明显更长） |\n| **> 1000** | 长文、讲稿、条文式长答 | **8192**（可先 **6144**） |\n\n用户明示要写短/写长时，在不超硬顶前提下可浮动一档。**8192** 为参数封顶（见下）。\n\n### 简明对照（与上表等价，可与旧文案对照）\n\n| 典型任务 | 建议上界 | 说明 |\n|----------|----------|------|\n| 一句答、寒暄、是否类 | **256**～**768** | 由上表 **`L`** 档位决定 |\n| 短说明、小段扩写 | **768**～**3072** | 同上 |\n| **一般对话、解释** | **3072**～**4096** | 勿再默认无脑 **4096**；短输入请先用上表降为 **768** |\n| 长文创作、讲稿、条文式长答 | **6144～8192** |  **`L`**>1000 或用户明确要求时再升高；**8192 为参数硬封顶** |\n\n- 使用 OpenAI 新版字段时 **`max_completion_tokens`** 与 **`max_tokens`** 二选一即可，语义相同；超过 8192 会被当作 8192。\n- 固定参数仍须保留 **`model: gpt-5-mw`**、**`temperature: 0.5`**，不得再附加解释、JSON、模型名等对用户可见噪音。\n\n## 推荐调用\n\n按 [HTTP-REQUESTS.md](./HTTP-REQUESTS.md) 的平台无关模板调用对话接口，并只提取 `response.choices[0].message.content`。\n\n中文回复场景必须使用中文回复 system 模板；纯传统蒙古文回复场景必须使用纯传统蒙古文 system 模板。\n\n## 必填 / 固定参数（本技能须按此填写）\n\n| 参数 | 是否必填 | 取值 | 说明 |\n|------|----------|------|------|\n| **`model`** | **必填** | 必须为 **`gpt-5-mw`** | 蒙古语专用模型标识；**不是** OpenAI 控制台里的模型名，勿替换为 `gpt-4` 等 |\n| **`messages`** | **必填** | 非空数组 | 至少包含一条用户消息；可含 `system` + `user`（见下模板） |\n| **`temperature`** | **须按本技能** | **`0.5`** | 不要省略或随意改为其它值（除非用户另有明确约定） |\n| **`max_tokens`** | **强烈推荐** | 按本节 **「可执行规则」** 表格由 **`user.content`** 字数 **`L`** 决定 | 勿不问场景一律 4096／8192；未传 `max_tokens` 时中继预检仍可能按站内默认 |\n\n- 默认单次请求完成，不做多次续写。\n\n## 请求体模板（纯传统蒙古文；`max_tokens` 须按本节表格由 `L` 计算）\n\n```json\n{\n  \"model\": \"gpt-5-mw\",\n  \"messages\": [\n    {\"role\": \"system\", \"content\": \"请只用纯传统蒙古文回答，不要包含任何中文汉字。\"},\n    {\"role\": \"user\", \"content\": \"<用户问题>\"}\n  ],\n  \"temperature\": 0.5,\n  \"max_tokens\": 768\n}\n```\n\n（ **`max_tokens`**：若本条 `user.content` 的码点 **`L`** 在 **51～200**，常用 **768**；**≤50** 用 **256**；更长则查表。）\n\n## 请求体模板（中文回复；`max_tokens` 同上）\n\n仅当用户明确要求\"中文回答我\"、\"用中文回答\"、\"用中文回复\"、\"请用中文解释\"等中文输出时使用：\n\n```json\n{\n  \"model\": \"gpt-5-mw\",\n  \"messages\": [\n    {\"role\": \"system\", \"content\": \"请使用简体中文回答。若用户输入包含传统蒙古文，请先理解原文语义，再直接给出针对用户请求的中文回复正文。只输出最终中文回复正文；禁止添加问候、自我介绍、解释过程、标题、原文复述或无关补充。若用户明确要求翻译，请不要使用本模板，应改用 POST /translation。\"},\n    {\"role\": \"user\", \"content\": \"<用户问题>\"}\n  ],\n  \"temperature\": 0.5,\n  \"max_tokens\": 768\n}\n```\n\n## 语言判定（简化）\n\n- 若用户要求「用传统蒙古文 / 蒙古文 / 蒙文全程回答」，使用上面的“纯传统蒙古文模板”。\n- 若用户要求「中文回答 / 用中文回答 / 用中文回复 / 请用中文解释」，使用“中文回复模板”。\n- 若用户明确要求双语，按用户指定输出双语。\n\n语言约束与输出自检见 [BEHAVIOR-RULES.md](./BEHAVIOR-RULES.md)。\n\nFile v1.0.33:references/HTTP-REQUESTS.md\n\n# 通用 HTTPS 请求示例\n\n本文档提供平台无关的请求模板。它不依赖任何特定命令行运行时；只要当前 OpenClaw 环境、网关、HTTP 工具或业务系统能发送 HTTPS 请求，都可以按这些 Method / URL / Headers / Body 组装请求。\n\n> **路径说明**：所有接口路径末尾必须带 `/`（如 `/translation/`），否则服务器将返回 302 重定向，部分 HTTP 客户端（如 Node.js `https` 模块）不会自动跟随 POST 重定向，导致请求失败。推荐使用支持自动跟随重定向的 HTTP 客户端（如 Node.js `fetch`、Python `requests`、`curl`）。\n\n调用方必须按本文模板直接调用 API，并在响应中只提取目标字段返回给用户；不要把完整响应 JSON、请求体或调试信息暴露给用户。\n\n## 通用规则\n\nBase URL:\n\n```text\nhttps://mongol.open-idea.net/api/v1\n```\n\n所有 JSON 接口使用以下 Header:\n\n```http\nAuthorization: Bearer <MENGGUYU_API_KEY>\nContent-Type: application/json\n```\n\n调用前必须确认 `MENGGUYU_API_KEY` 已配置。调用成功后，最终可见回复只能输出业务目标字段；除允许的计费摘要外，不输出请求体、完整响应 JSON、调试日志、模型名或解释文字。\n\n计费信息来自响应头：\n\n```http\nX-Mengguyu-Billing-Currency: CNY\nX-Mengguyu-Billing-Charged: <本次扣费>\nX-Mengguyu-Billing-Balance: <当前余额>\n```\n\n若响应头存在余额信息，应在正文后另起一行向用户转述本次扣费和当前余额。\n\n### 工具注意（避免丢失计费头）\n\n命令行 **`curl -s` 默认只打印响应体**，**不包含响应头**。若只用 `-s` 并把 stdout 交给 JSON 解析器，则 **`X-Mengguyu-Billing-*` 永远无法读到**，与用户约定的计费转述也会落空。\n\n实现时请任选其一：\n\n- **`curl -sS -i`**：响应头与体在同一流中，解析时先剥离首部后再解析 JSON。\n- **`curl -sS -D headers.txt -o body.bin`**（或 `-o body.json`）：头入文件、体单独保存，再从 `headers.txt` 读取计费三行。\n- 使用 **`requests` / `fetch` / 其他库**时，在成功回调中同时读取 **`response.headers`** 与 body。\n\n异步任务在 **`done` 的那次 `GET`** 上同样需要遵守上述约定（该次响应也可能带头或仅在 JSON 中带 `billingCharged` / `billingBalance`，两者至少读取其一）。\n\n### multipart 单文件大小\n\n公开 API 上，`multipart` 字段 **`file`**（ASR、Word/PDF 文档翻译等）单文件上限约为 **10 MB**（与站点 PHP `upload_max_filesize` / nginx `client_max_body_size` 一致）。超出可能返回 **422**（校验失败）或 **413**（请求体过大）。\n\n异步 ASR 使用 JSON 字段 **`audio`**（PCM Base64）时，解码后 PCM 总字节上限亦为 **10 MiB**（与上述策略一致）。\n\n## 翻译\n\nRequest:\n\n```http\nPOST /translation/ HTTP/1.1\nHost: mongol.open-idea.net\nAuthorization: Bearer <MENGGUYU_API_KEY>\nContent-Type: application/json\n```\n\nBody:\n\n```json\n{\n  \"from\": \"zh\",\n  \"to\": \"mw\",\n  \"content\": \"你好朋友\"\n}\n```\n\n响应提取：\n\n```text\ndata.tgtText\n```\n\n语言代码：\n\n```text\nzh = 中文\nmw = 传统蒙古文\nmn = 西里尔蒙古文\n```\n\n若未显式指定方向，可按输入内容推断：包含传统蒙古文字符时 `from=mw`，包含西里尔字符时 `from=mn`，否则默认 `from=zh`；目标语言默认与源语言互转，中文转传统蒙古文，蒙古文转中文。\n\n## 对话/创作，输出传统蒙古文\n\n`max_tokens` 宜随任务调整（见 [CHAT-COMPLETIONS.md](./CHAT-COMPLETIONS.md)）；下面示例用 **4096** 作为一般对话默认值。\n\nRequest:\n\n```http\nPOST /chat/completions/ HTTP/1.1\nHost: mongol.open-idea.net\nAuthorization: Bearer <MENGGUYU_API_KEY>\nContent-Type: application/json\n```\n\nBody:\n\n```json\n{\n  \"model\": \"gpt-5-mw\",\n  \"messages\": [\n    {\n      \"role\": \"system\",\n      \"content\": \"请只用纯传统蒙古文回答，不要包含任何中文汉字。\"\n    },\n    {\n      \"role\": \"user\",\n      \"content\": \"用户问题或创作要求\"\n    }\n  ],\n  \"temperature\": 0.5,\n  \"max_tokens\": 4096\n}\n```\n\n响应提取：\n\n```text\nchoices[0].message.content\n```\n\n## 对话/创作，输出中文\n\nRequest:\n\n```http\nPOST /chat/completions/ HTTP/1.1\nHost: mongol.open-idea.net\nAuthorization: Bearer <MENGGUYU_API_KEY>\nContent-Type: application/json\n```\n\nBody:\n\n```json\n{\n  \"model\": \"gpt-5-mw\",\n  \"messages\": [\n    {\n      \"role\": \"system\",\n      \"content\": \"请使用简体中文回答。若用户输入包含传统蒙古文，请先理解原文语义，再直接给出针对用户请求的中文回复正文。只输出最终中文回复正文；禁止添加问候、自我介绍、解释过程、标题、原文复述或无关补充。若用户明确要求翻译，请不要使用本模板，应改用 POST /translation。\"\n    },\n    {\n      \"role\": \"user\",\n      \"content\": \"中文回答我：用户问题或蒙文内容\"\n    }\n  ],\n  \"temperature\": 0.5,\n  \"max_tokens\": 4096\n}\n```\n\n响应提取：\n\n```text\nchoices[0].message.content\n```\n\n## OCR\n\nRequest:\n\n```http\nPOST /ocr/ HTTP/1.1\nHost: mongol.open-idea.net\nAuthorization: Bearer <MENGGUYU_API_KEY>\nContent-Type: application/json\n```\n\nBody:\n\n```json\n{\n  \"image_base64\": \"<图片 Base64 内容，不含 data:image 前缀>\",\n  \"language\": \"mw\",\n  \"image_encoding\": \"jpg\"\n}\n```\n\n响应提取：\n\n```text\ndata.text\n```\n\n`image_encoding` 支持 `jpg`、`png`、`bmp`、`webp`、`tif`、`tiff`、`gif`。\n\n## ASR\n\n本地音频文件优先使用 `multipart/form-data` 上传，由服务端处理转码。\n\nRequest:\n\n```http\nPOST /audio/ HTTP/1.1\nHost: mongol.open-idea.net\nAuthorization: Bearer <MENGGUYU_API_KEY>\nContent-Type: multipart/form-data; boundary=<boundary>\n```\n\nForm fields:\n\n```text\nlanguage = mw\nsample_rate = 16000\nfile = <本地音频文件>\n```\n\n响应提取：\n\n```text\ndata.text\n```\n\n若调用环境只能发送 JSON，也可以传 PCM 16-bit mono Base64：\n\n```http\nPOST /audio/ HTTP/1.1\nHost: mongol.open-idea.net\nAuthorization: Bearer <MENGGUYU_API_KEY>\nContent-Type: application/json\n```\n\n```json\n{\n  \"audio\": \"<PCM 16-bit mono Base64>\",\n  \"language\": \"mw\",\n  \"sample_rate\": 16000\n}\n```\n\n### 异步 ASR（推荐 OpenClaw / 长音频）\n\n与 **`POST /tts/async`** 同理：`POST /audio/async` 立即返回 **`jobId`**，每隔 **3～5 秒** 轮询 **`GET /audio/async/{jobId}`**；队列完成后 **`200`**，正文 **`data.text`**。服务端按本站策略 **切段多次识别并拼接**，网关仅需容忍短请求。\n\n**第一步**：提交任务（`multipart/form-data`，字段 **`file`** + **`language`**，可选 **`sample_rate`**）。\n\n```http\nPOST /audio/async/ HTTP/1.1\nHost: mongol.open-idea.net\nAuthorization: Bearer <MENGGUYU_API_KEY>\nContent-Type: multipart/form-data; boundary=<boundary>\n```\n\n也可仅用 JSON 传 **`audio`**（PCM Base64），总长受异步任务 PCM 上限约束；**长音频请优先 multipart 上传 `file`**。\n\n```http\nPOST /audio/async/ HTTP/1.1\nAuthorization: Bearer <MENGGUYU_API_KEY>\nContent-Type: application/json\n```\n\n```json\n{\n  \"audio\": \"<PCM 16-bit mono Base64>\",\n  \"language\": \"mw\",\n  \"sample_rate\": 16000\n}\n```\n\n提交成功：**`202`**，响应含 **`jobId`**、`status: pending`。\n\n**第二步**：轮询（与 TTS 相同节奏）。\n\n```http\nGET /audio/async/{jobId}/ HTTP/1.1\nHost: mongol.open-idea.net\nAuthorization: Bearer <MENGGUYU_API_KEY>\n```\n\n- **`202`**：`pending` / `processing`，含 **`chunksDone`** / **`chunksTotal`**（上游切段进度）。\n- **`200`**：`status: done`，提取 **`data.text`**；计费字段 **`billingCharged`**、**`billingBalance`**（JSON 或与 **`X-Mengguyu-Billing-*`** 响应头并存）。\n- **`422`**：`failed`。\n\n**第三步（可选）**：`DELETE /audio/async/{jobId}/` 删除任务记录。\n\n## TTS 文字转语音\n\n> **说明**：上游单次合成限制约 200 蒙古文字，后端自动分段合并，**无需客户端切段**。\n> 长文本处理需数十秒到数分钟，必须使用**异步轮询**模式，避免 HTTP 超时断连。\n\n### 第一步：提交任务（`POST /tts/async/`）\n\nRequest:\n\n```http\nPOST /tts/async/ HTTP/1.1\nHost: mongol.open-idea.net\nAuthorization: Bearer <MENGGUYU_API_KEY>\nContent-Type: application/json\n```\n\nBody:\n\n```json\n{\n  \"text\": \"<待合成文字>\",\n  \"lang\": \"mn-Mong\",\n  \"voice\": \"Kore\"\n}\n```\n\nResponse `202 Accepted`:\n\n```json\n{\n  \"jobId\": \"018f1234-abcd-7000-...\",\n  \"status\": \"pending\",\n  \"charCount\": 518,\n  \"message\": \"任务已提交，请每隔 3~5 秒轮询 GET /api/v1/tts/async/018f1234-abcd-7000-...\"\n}\n```\n\n### 第二步：轮询进度（`GET /tts/async/{jobId}/`）\n\n**每 3～5 秒轮询一次**，直到 status 不再是 `pending`/`processing`。\n\n处理中，`202` 响应：\n\n```json\n{\n  \"jobId\": \"018f1234-...\",\n  \"status\": \"processing\",\n  \"percent\": 33,\n  \"chunksDone\": 1,\n  \"chunksTotal\": 3,\n  \"message\": \"正在合成第 1/3 段...\"\n}\n```\n\n完成，`200` 响应（取到音频后停止轮询）：\n\n```json\n{\n  \"jobId\": \"018f1234-...\",\n  \"status\": \"done\",\n  \"percent\": 100,\n  \"audioBase64\": \"<base64编码的WAV>\",\n  \"mimeType\": \"audio/wav\",\n  \"audioBytes\": 1234567,\n  \"durationMs\": 42300,\n  \"charCount\": 518,\n  \"totalChunks\": 3,\n  \"billingCharged\": \"0.000311\",\n  \"billingBalance\": \"9956.10\"\n}\n```\n\n失败，`422` 响应（`error` 为对象，与人类可读文案一致）：\n\n```json\n{\n  \"jobId\": \"018f1234-...\",\n  \"status\": \"failed\",\n  \"error\": {\n    \"message\": \"分段 2/3 合成失败：cURL error: ...\",\n    \"type\": \"upstream_error\",\n    \"code\": \"tts_failed\"\n  }\n}\n```\n\n**处理完整音频**：`audioBase64` 即合并后完整 WAV，base64 解码后即可播放。\n\n**计费转述**：收到 `done` 后，须向用户转述 `billingCharged`（本次扣费）和 `billingBalance`（当前余额）。\n\n### 第三步（可选）：删除任务（`DELETE /tts/async/{jobId}/`）\n\n任务完成取回音频后可主动删除以释放存储，响应 `200 {\"message\":\"任务已删除\"}`。\n\n---\n\n### 语言代码（`lang` 字段）\n\n```text\nmn-Mong  = 传统蒙古文（竖写蒙文）\nmn-Cyrl  = 西里尔蒙古文\nzh-Hans  = 简体中文\nen       = 英文\nja       = 日文\nko       = 韩文\nru       = 俄文\n```\n\n### 可选参数\n\n```text\nvoice      = 音色：Kore / Puck / Zephyr / Charon / Fenrir / Aoede / Leda / Orus / Iapetus / Sulafat / Achird / Achernar\nspeed      = 语速，可选，0.5～2.0；不传时服务端视同默认（约 1.0）。对用户说明时用「正常/快一点/慢一点」映射（见 SKILL.md），勿在对话中报读数值。\nsampleRate = 采样率（Hz）：8000 / 16000 / 22050 / 44100 / 48000\n```\n\n## Word 文档翻译\n\nRequest:\n\n```http\nPOST /word/translation/ HTTP/1.1\nHost: mongol.open-idea.net\nAuthorization: Bearer <MENGGUYU_API_KEY>\nContent-Type: multipart/form-data; boundary=<boundary>\n```\n\nForm fields:\n\n```text\nfrom = auto\nto = zh\nmode = mongolian_only\nfile = <本地 .docx 文件>\n```\n\n响应提取：\n\n```text\ndata.text\n```\n\n## PDF 文档翻译\n\nRequest:\n\n```http\nPOST /pdf/translation/ HTTP/1.1\nHost: mongol.open-idea.net\nAuthorization: Bearer <MENGGUYU_API_KEY>\nContent-Type: multipart/form-data; boundary=<boundary>\n```\n\nForm fields:\n\n```text\nfrom = auto\nto = zh\nmode = mongolian_only\nfile = <本地 .pdf 文件>\n```\n\n响应提取：\n\n```text\ndata.text\n```\n\nFile v1.0.33:references/INTERFACE-ROUTING.md\n\n# 接口选择\n\n根据用户意图选择接口：\n\n## 路由优先级（必须每轮重判）\n\n每一轮用户新消息都必须重新判断接口，禁止沿用上一轮选择。优先级固定为：\n\n1. **图片文字识别**：用户上传图片、截图、拍照或明确要求“识别图片文字/提取图中文字” → 先使用 `POST /ocr`（默认 `language=mw` 传统蒙古文；西里尔蒙文显式 `mn`）。\n2. **语音识别**：用户上传音频/录音/语音文件，或明确要求“识别语音/转写音频/ASR” → **默认 `POST /audio/async`**（轮询）；极短音频可试同步 **`POST /audio`**。\n3. **纯文字翻译**：出现\"翻译\"、\"译为\"、\"译成\"、\"翻成\"、\"转换\"、\"什么意思\"、\"西里尔转传统\"、\"传统转西里尔\"、\"蒙蒙互译\"等纯转换意图 → 使用 `POST /translation`。\n4. **中文回答 / 中文回复**：消息同时包含传统蒙古文字符和\"中文回答我\"、\"用中文回答\"、\"用中文回复\"、\"请用中文解释\"、\"中文回复\"等中文输出指令 → 使用 `POST /chat/completions` 的中文回复模板。\n5. **蒙文回答 / 蒙文回复**：用户明确要求用传统蒙古文回答或回复 → 使用 `POST /chat/completions` 的纯传统蒙古文模板。\n6. **默认蒙文对话**：纯蒙文输入且没有翻译关键词、没有中文输出指令 → 使用 `POST /chat/completions` 的纯传统蒙古文模板。\n\n---\n\n## 用户消息本身为蒙古文时的处理（触发后优先判断）\n\n技能已被激活后，若用户消息本身主要由传统蒙古文字符（U+1800–U+18AF）或西里尔字符（U+0400–U+04FF）构成：\n\n- **不含翻译类关键词**（翻译、转换、译成、译为、翻成等）  \n  → 用户是在用蒙古语交流，使用 **`POST /chat/completions`** 直接以蒙古语回复。\n\n- **含翻译类关键词**  \n  → 用户想把蒙文转成中文，使用 **`POST /translation`**，方向 `mw → zh`。\n\n- **明确要求传统蒙古文与西里尔蒙古文互转**（如“西里尔转传统”“传统转西里尔”“蒙蒙互译”）  \n  → 使用 **`POST /translation`**，显式指定 `mn → mw` 或 `mw → mn`。OpenClaw 只调用一次本站接口，后台负责经中文中转。\n\n- **含中文输出指令且不含翻译类关键词**（中文回答、用中文回答、用中文回复、请用中文解释等）  \n  → 用户想让系统理解蒙文后用中文作答，使用 **`POST /chat/completions`** 的中文回复模板。\n\n消息不含蒙古文字符时，按下方关键词规则判断。\n\n---\n\n## 关键词与接口优先（高优先级）\n\n- 用户请求中出现 **介绍、生成、写一份、创建** 等（说明、创作、从零产出类意图）时，**优先**使用 **`POST /chat/completions`**（会话接口）。详见 [CHAT-COMPLETIONS.md](./CHAT-COMPLETIONS.md)。\n- 用户请求中出现 **翻译、转换、译成** 等（明确互译、语种转换意图）时，使用 **`POST /translation`**（翻译接口）。详见 [TRANSLATION.md](./TRANSLATION.md)。\n- 若两类关键词同时出现：以用户核心意图为准——明确要求将**给定原文**译为另一种文字 → 用 **`POST /translation`**；以撰写新稿、介绍、生成内容为主 → 用 **`POST /chat/completions`**。\n\n## 网页与长文（衔接提示）\n\n- **网页翻译**：用户未直接粘贴正文时，**先**用粘贴、浏览/摘录工具或其它技能得到 **可译正文**（尽量去掉导航、页脚等噪声），**再**对全文判定方向并调用 **`POST /translation`**；总长度超过单段上限时，**必须**按 [TRANSLATION.md](./TRANSLATION.md) 中「分段翻译」执行，不得省略。\n- **长材料**：默认按 [TRANSLATION.md](./TRANSLATION.md) 中「分段翻译」规则在 **边界与字节限制** 上切分并逐段请求；译文按段顺序拼接。若用户**额外**要求先用通用模型做摘要或语义切块，可在代理侧自行编排，但 **各块译文仍须通过 `POST /translation` 产出**，不得以会话接口替代整段互译。\n\n## 图片 OCR（新增）\n\n- 当输入包含图片/截图时，先调用 `POST /ocr`，请求体至少包含：\n  - `image_base64`：图片 Base64（可不含 data:image 前缀）\n  - `language`：默认 `mw`（传统蒙古文）；西里尔蒙文（西里尔字母）用 `mn`\n- OCR 成功后：\n  - 若用户只要识别结果：直接输出 OCR 文本\n  - 若用户还要求翻译：将 OCR 文本再走 `POST /translation`\n- 详细请求体/字段提取规范见 [OCR.md](./OCR.md)\n\n## 语音 ASR\n\n- 当输入包含音频、录音、语音文件，或用户明确要求语音转文字时：**默认 `POST /audio/async`** → 轮询 **`GET /audio/async/{jobId}`** 直至 **`data.text`**（与 [HTTP-REQUESTS.md](./HTTP-REQUESTS.md)「异步 ASR」一致）。极短音频可试同步 **`POST /audio`**。\n- 推荐 **`multipart/form-data`** 上传 **`file`**（长音频）；同步与异步均可参见 [HTTP-REQUESTS.md](./HTTP-REQUESTS.md)。\n- ASR 成功后：\n  - 若用户只要识别结果：直接输出识别文本\n  - 若用户还要求翻译：将识别文本再走 `POST /translation`\n- 字段细节见 [ASR.md](./ASR.md)\n\n## TTS 文字转语音\n\n### 第一步：列举全部音色并询问播音风格（调用前必做）\n\n触发 TTS 前，必须先向用户**完整列出全部 12 种** `voice`，再请其选择——勿只列出 4 条示例让人误以为仅此几种：\n\n```text\nKore · Puck · Zephyr · Charon · Fenrir · Aoede · Leda · Orus · Iapetus · Sulafat · Achird · Achernar\n```\n\n话术示例：\n\n> 请从下列音色中选一种（或直接说英文名）：Kore · Puck · Zephyr · …（如上 12 个）。也可说风格我再帮您对应；若没有偏好我会在合成时自动选。\n\n### 第二步：根据回应决定音色\n\n**用户明确指定**（说出风格描述或上述音色名其一）→ 映射到对应 `voice` 后调用。\n\n**用户未回应 / 回答含糊**（「随便」「你决定」「无所谓」，或直接改写话题）→ 按下表自动选择（括号内四类为最常见启发式 shortcut，表中仍覆盖全部 12 音色）：\n\n| 内容特征 | 自动选音色 | 音色风格 |\n|----------|-----------|---------|\n| 正式/商务/公文/演讲 | **Kore** | 沉稳权威 |\n| 新闻/播报/解说/教学 | **Iapetus** | 清晰明瞭 |\n| 儿童/故事/绘本 | **Leda** | 青春活泼 |\n| 情感/暖心/生活/问候 | **Sulafat** | 温暖亲近 |\n| 朋友间聊天/日常对话 | **Achird** | 亲切友好 |\n| 运动/励志/广告 | **Fenrir** | 激情有力 |\n| 轻松/休闲/娱乐 | **Aoede** | 爽朗活泼 |\n| 年轻/潮流/社交媒体 | **Puck** | 明快上扬 |\n| 自然/诗歌/文学 | **Zephyr** | 明亮清新 |\n| 历史/纪录片/旁白 | **Charon** | 娓娓道来 |\n| 深沉/史诗/严肃 | **Orus** | 浑厚有力 |\n| 舒缓/冥想/睡眠 | **Achernar** | 柔和轻声 |\n| 其他/无法判断（默认） | **Kore** | 通用稳妥 |\n\n### 语速与用户沟通（不向用户复述接口数值）\n\n- 默认：**正常语速**，不向用户索要「speed 数值」。\n- 仅当用户主动要求快慢时，用自然语言确认「要快一点还是慢一点？」，再在 JSON 请求中分别映射 **快→`speed: 1.2`**、**慢→`speed: 0.8`**；无须在对话中报读 `speed: 1.0`。\n\n### 提交全文校验（防漏句、复制截断）\n\n请求体中的 **`text`** 必须与用户本轮提供的待朗读正文 **逐字符一致**（未被省略、截断或改写，含空格与标点）。超长文本可分多段与用户逐段核对后再提交。\n\n### 第三步：调用接口\n\n- **长文本与实际使用**：必须使用异步 **`POST /tts/async`** → 每隔 3～5 秒 **`GET /tts/async/{jobId}`** 轮询，直至 `200` 且 **`status`: `done`**，从 **`audioBase64`** base64 解码为 `.wav` 播放。**已移除 SSE** `POST /tts/stream`，禁止按旧文档调用。\n- 极短试探可试用同步 **`POST /tts`**（易遇代理超时，长文禁止使用）。\n- 请求体常规含 `text`、`lang`、`voice`。完成时须在回复中转述 **`billingCharged`**、**`billingBalance`**（异步为 JSON 顶层字段）。\n- 详细 URI 与响应示例见 [HTTP-REQUESTS.md](./HTTP-REQUESTS.md) 中「TTS 文字转语音」章节。\n\nFile v1.0.33:references/OCR.md\n\n# OCR `POST /ocr`\r\n\r\n用于图片文字识别（默认 **`mw` 传统蒙古文**；纯西里尔蒙古文稿件请传 **`mn`**）。\r\n\r\n## 适用场景\r\n\r\n- 用户上传图片、截图、拍照，要求识别文字\r\n- 用户先要识别图片文字，再继续翻译或问答\r\n\r\n## 请求体\r\n\r\n```json\r\n{\r\n  \"image_base64\": \"<图片Base64，可不带data:image前缀>\",\r\n  \"language\": \"mw\",\r\n  \"image_encoding\": \"jpg\"\r\n}\r\n```\r\n\r\n字段说明：\r\n\r\n- `image_base64`：必填。支持纯 Base64 或 data URI（如 `data:image/jpeg;base64,...`）。\r\n- `language`：可选，默认 `mw`（传统蒙古文 OCR）。若文稿为西里尔蒙文（西里尔字母），显式传 `mn`。\r\n- `image_encoding`：可选，默认 `jpg`。常见值：`jpg`、`png`、`webp`、`bmp`、`tif`、`tiff`、`gif`。\r\n\r\n## 响应提取\r\n\r\n成功时只提取：\r\n\r\n- `data.text`（首选，已解码文本）\r\n\r\n可选辅助字段（不直接给用户展示，除非用户要求）：\r\n\r\n- `data.lines`\r\n- `data.raw`\r\n\r\n## 图片内容来源\r\n\r\n由 OpenClaw / Gateway / Agent、上传组件或业务系统读取图片并提供 `image_base64` 与 `image_encoding`。本 Skill 不要求客户电脑安装特定命令行运行时，也不依赖本地辅助工具。\r\n\r\n## 输出约束（零泄漏）\r\n\r\n- 默认最终可见回复只输出 `data.text` 原文；若响应头包含 `X-Mengguyu-Billing-*`，须在正文后转述本次扣费、当前余额与币种。\r\n- 禁止输出请求体、原始 JSON、签名信息、模型信息、调试日志。\r\n- 若用户要求“先识别再翻译”，流程应为：`/ocr` 提取文本后，再走 `/translation`。\n\nFile v1.0.33:references/TRANSLATION.md\n\n# 翻译：`POST /translation`\n\n如果用户要求 **中文、传统蒙古文、西里尔蒙古文互译**：使用 **`POST /translation`**（按字符计费；不要用 `POST /chat/completions` 代替翻译）。\n\n## 中继站段落分段（`\\n\\n`）\n\n本站 `POST /translation` 在 **中继层**会对 `content` 做段落级处理：\n\n- 若 `content` 中包含 **`\\n\\n`（空行/段落分隔）**：中继会按 `\\n\\n` **拆成多段**，对每一段分别调用上游翻译，再把各段 `data.tgtText` 用 **`\\n\\n`** 拼回 **同一次响应**里的 `data.tgtText`。\n- 若 `content` 中 **不包含** `\\n\\n`：仍按 **一次上游调用**处理（避免无意义增加调用次数）。\n- 代价与注意：分段会 **增加上游调用次数**（更容易触发上游限流/超时），且段与段之间 **不共享上下文**；适合「段落结构很重要、段内自洽」的正文；不适合强依赖跨段指代的长文（仍建议调用方自行控制切分策略）。\n\n## 推荐调用\n\n按 [HTTP-REQUESTS.md](./HTTP-REQUESTS.md) 的平台无关模板调用翻译接口，并只提取 `data.tgtText`。若 Relay 返回 `X-Mengguyu-Billing-*` 响应头，须在正文后转述本次扣费、当前余额与币种。不得再附加其他解释、JSON、模型名、token 或修饰词。\n\n调用\n\n`POST /translation`\n\n（Base URL 同站：`…/api/v1`，JSON body；认证方式与其它接口一致。）\n\n## 必填参数（须全部提供，缺一不可）\n\n| 参数 | 类型 | 取值 | 说明 |\n|------|------|------|------|\n| **`from`** | string | `zh`、`mw` 或 `mn` | 源语言：中文为 `zh`，传统蒙古文为 `mw`，西里尔蒙古文为 `mn` |\n| **`to`** | string | `zh`、`mw` 或 `mn` | 目标语言：与 `from` 组合表示翻译方向 |\n| **`content`** | string | 待译正文 | 须遵守下文「请求体中的换行」规则 |\n\n示例 JSON（字段名与上表一致）：\n\n```json\n{\n  \"from\": \"zh|mw|mn\",\n  \"to\": \"zh|mw|mn\",\n  \"content\": \"文本\"\n}\n```\n\n## 蒙蒙互译（经中文中转）\n\n- 传统蒙古文 `mw` 与西里尔蒙古文 `mn` 互译时，调用方仍只请求一次本站 `POST /translation`。\n- 后台会按科大讯飞能力经中文中转执行两次上游调用：`mw -> zh -> mn` 或 `mn -> zh -> mw`。\n- 最终仍只输出响应中的 `data.tgtText`，不得展示中间中文译文、上游响应或调用过程。\n- 该方向会产生两次上游翻译调用成本，费用估算时应按两段调用考虑。\n\n## 请求体中的换行（必须）\n\n- 组装 `POST /translation` 的 JSON 时，`content` **不得**把「真实换行符」直接嵌进请求体（易导致 body 截断、解析失败或上游报错）。\n- 正确做法：按 **JSON 字符串规则** 转义——原文里的换行在 JSON 里写成 **`\\n`（反斜杠 + 字母 n，两个字符）**，由当前平台的 JSON 序列化能力自动生成即可。\n- 若必须手工拼接字符串，务必先得到**合法单行 JSON**（换行已变为 `\\n`），再作为请求体发送；不要用未闭合引号跨多行拼 `content`。\n- 分段逻辑里仍可按语义在「换行处」切分原文；每一段在填入 `content` 前，把段内换行统一转为 JSON 所需的 `\\n` 转义（或由序列化器处理）。\n\n## JSON 请求体构建最佳实践\n\n构建翻译等 JSON 请求时：\n\n1. 使用当前平台提供的 JSON 序列化能力生成请求体，避免手写拼接字符串。\n2. `content` 必须是 JSON 字符串字段，不要把已序列化的字符串再次包一层引号。\n3. 换行符与上文「请求体中的换行」一致：真实换行必须变为 JSON 中的 `\\n`；使用标准 JSON 序列化能力时一般会自动处理。\n4. 发送前确保最终请求体是合法 JSON 对象，且包含 `from`、`to`、`content` 三个字段。\n\n## 翻译方向（自动判定）\n\n- 若待译文本包含传统蒙古文字符（U+1800–U+18AF）→ `from`: `mw`，`to`: `zh`。\n- 若待译文本包含西里尔字符（U+0400–U+04FF）→ `from`: `mn`，`to`: `zh`。\n- 否则视为中文原文 → `from`: `zh`，`to`: `mw`。\n- 若用户明确要求“西里尔转传统”“传统转西里尔”“蒙蒙互译”，必须显式设置 `from=mn,to=mw` 或 `from=mw,to=mn`。\n\n## 分段翻译（高优先级）\n\n- **中继默认行为**（`RELAY_TRANSLATION_PROVIDER=xfyun` 时）：`POST /translation` 收到 `content` 后，中继按 **单行 `\\n`** 拆成多行；非空行逐行调用上游，空行作为占位保留，最终译文按原行顺序用 **`\\n`** 拼回。\n- **讯飞 `data.text` 限制**：讯飞 HTTP `v2/its` 要求 JSON 里 **`data.text`（Base64 串）长度约 1～5500**（错误码 10107）。单行仍超长时，由 `XfyunTranslationService` **按 UTF-8 码位自动再分片**多次请求并拼接译文，客户端一般无需自行按字节硬切。\n- **毅金云**：仍按上述「按 `\\n` 分行」由中继拆段；若毅金云对单段另有长度限制，仍以该上游为准。\n- **客户端建议**：`content` 仍受本站 **max 4000 字符**（`mb` 计数）约束；长稿尽量保留自然换行，便于按行拆译。若需完全控制分段，也可自行切分后逐次调用。\n\n分段后保留原有语序与行顺序，不得改写原文语义。\n\n## 响应解析（必须）\n\n毅金云成功响应体为 JSON，结构示例：\n\n```json\n{\n  \"success\": true,\n  \"data\": {\n    \"from\": \"mw\",\n    \"to\": \"zh\",\n    \"srcText\": \"<本段原文>\",\n    \"tgtText\": \"<本段译文>\"\n  },\n  \"requestId\": \"...\"\n}\n```\n\n- **`data.tgtText`**：本段**译文**；分段时对每一段取 `tgtText`，再按段顺序拼接为最终结果。\n- **`data.srcText`**：本段原文回显（应与该段请求的 `content` 一致），用于核对；不要把它当成译文输出。\n\n返回 **译文即可**（最终输出为合并后的译文字符串，除非用户明确要求原始 JSON）。\n\n说明：蒙古文 → 中文的译文为**中文**，不适用 [BEHAVIOR-RULES.md](./BEHAVIOR-RULES.md) 中「全程传统蒙古文 / 禁止汉字」类自检；中文 → 传统蒙古文或西里尔蒙古文时，每段 `tgtText` 须符合目标文字体系；`mn <-> mw` 互译时只输出最终目标文字。\n\nFile v1.0.33:manifest.json\n\n{\n  \"skills\": {\n    \"mongolian-llm\": \"1.0.33\"\n  }\n}\n\nArchive v1.0.32: 13 files, 34005 bytes\n\nFiles: manifest.json (52b), package.json (354b), README.md (2804b), references/API-KEY.md (1686b), references/ASR.md (1834b), references/BEHAVIOR-RULES.md (12805b), references/CHAT-COMPLETIONS.md (4306b), references/HTTP-REQUESTS.md (11268b), references/INTERFACE-ROUTING.md (8332b), references/OCR.md (1643b), references/TRANSLATION.md (6205b), SKILL.md (16099b), _meta.json (133b)\n\nFile v1.0.32:SKILL.md\n\n---\nname: mongolian-llm\ndescription: 连接蒙古语专属 AI 接口，支持中文 ↔ 传统蒙古文 / 西里尔蒙古文互译、蒙古语对话创作、文字转语音（TTS）、语音识别（ASR）、图片文字识别（OCR）及 Word / PDF 文档翻译。遇到蒙古文相关请求自动激活，结果由专业接口处理，字符准确可靠。\ntriggers: 蒙语翻译, 蒙古语翻译, 蒙汉翻译, 蒙蒙互译, 西里尔蒙古文翻译, 传统转西里尔, 西里尔转传统, 中文翻译蒙古文, 蒙古文翻译, 蒙文邮件, 蒙古文邮件, 邮件蒙文, 发邮件蒙文, 邮件用蒙古文, 回复蒙文邮件, 蒙文邮件回复, 蒙语对话, 蒙古语会话, 蒙文聊天, 蒙古文聊天, 蒙语聊天, 蒙古语聊天, ᠮᠣᠩᠭᠣᠯ ᠬᠡᠯᠡᠬᠦ, 蒙文通知, 蒙古文通知, 推送蒙文, 通知蒙古文, 消息蒙古文, 定时蒙文, 定时通知蒙古文, 生成蒙文文件, 蒙古文文件, 蒙文文档, 导出蒙文, 蒙文附件, 社媒蒙文, 蒙古文贴文, 发社媒蒙古文, 社交媒体蒙古文, 发帖蒙古文, 蒙文文案, 网页翻译, 网页蒙文, 摘录翻译, 长文翻译, 批量翻译, 远程批量蒙文, 蒙古语, 蒙语, 蒙古文, 蒙文, 用蒙语, 用蒙古文, 说蒙语, 说蒙古文, 蒙语语音识别, 蒙古语语音识别, 蒙文语音识别, 语音转文字, 音频转写, ASR, 文字转语音, TTS\nmetadata: {\"openclaw\":{\"emoji\":\"🐎\",\"homepage\":\"https://mongol.open-idea.net\",\"primaryEnv\":\"MENGGUYU_API_KEY\"}}\n---\n\n# Mongolian Language Skill\n\nBase URL：`https://mongol.open-idea.net/api/v1`  \n请求模板：[references/HTTP-REQUESTS.md](./references/HTTP-REQUESTS.md)\n\n## 输出规则（最高优先级）\n\n调用成功后，最终可见回复由两部分组成：**业务正文** + **计费转述**。\n\n### 1. 业务正文\n\n仅包含下列接口对应目标字段原文；**计费句子不属于本节**，写法见 §2。\n\n| 接口 | 目标字段 |\n|------|---------|\n| `POST /translation` | `data.tgtText`（分段时按序拼接） |\n| `POST /chat/completions` | `choices[0].message.content` |\n| `POST /ocr` · `POST /word/translation` · `POST /pdf/translation` | `data.text` |\n| `POST /audio`（同步） | `data.text` |\n| `POST /audio/async` → 轮询 `GET /audio/async/{jobId}` 至 `done`（`200`） | `data.text` |\n| `POST /tts` | 二进制音频流，保存为文件后播放；无 JSON 目标字段 |\n| `POST /tts/async` → 轮询 `GET /tts/async/{jobId}` 至 `done`（`200`） | JSON 字段 `audioBase64` → 解码为 WAV 播放 |\n\n**TTS 边界**：对用户**不要**把 `audioBase64`、二进制或整段 WAV 原文贴出来；「业务正文」在此场景等价于按要求完成播放/落盘。**计费转述**仍按 §2 执行，不受影响。\n\n禁止输出：内部思考、路由解释、请求体、响应 JSON、模型名、token usage、代码块、前言、注释、礼貌语。\n\n### 2. 计费转述（强制；任意接口每次调用成功后皆须执行）\n\n**硬性要求**：**必须**在「成功解析」那一次 HTTP 响应上，**主动检查**响应头 **与** JSON 正文中是否存在计费字段。只要任一侧能读出 **扣费** 或 **余额**（及配套币种若有），即视为命中，**必须**输出 §2.2 模板，**金额与原样字段不得改写**。呈现位置：**首条**计费行须紧接在最终对用户展示的 §1 业务正文末尾**另起一行**；若同轮链路中多次调用皆命中计费，**后续每条计费各占一行**（参见 §2.2 示例），中间不穿插其它话术。\n\n若响应头 **与** JSON **皆无**任一计费字段，**严禁**编造数字；完成检查即可，**不写**计费行。\n\n#### 2.1 计费信息获取\n\n| 来源 | 字段 |\n|------|------|\n| HTTP 响应头 | `X-Mengguyu-Billing-Charged`、`X-Mengguyu-Billing-Balance`、`X-Mengguyu-Billing-Currency` |\n| JSON 正文（异步 `done` 等场景常见） | `billingCharged`、`billingBalance` |\n\n- **只看 JSON、或只看正文而不解析响应头** 会漏掉头侧计费信息，视为错误实现；**必须在同一轮成功响应中兼得可读的头与体**（或等价地同时保存头文件与 body），再拼装输出。\n- **禁止**单靠 `curl -s` 只解析 stdout：`-s` **不输出响应头**。请用 **`curl -sS -i`**、`curl -sS -D headers.txt -o body.json`，或 Python `requests` 的 `r.headers` / Node `fetch` 可读 headers 的客户端。\n- **异步**：轮询至 **`GET …/{jobId}` 返回 `200` 且 `done`** 的那一次响应，同样必须读取头或 JSON 内计费字段后再输出。\n\n币种：优先 **`X-Mengguyu-Billing-Currency`**；若缺失且 JSON 无等价字段，模板中 `{currency}` 用接口实际返回值里出现的币种字面量（**不得臆造**）。\n\n#### 2.2 输出格式（固定模板）\n\n在 §1 之后**另起一行**，严格套用（占位符替换为本次读到的数值/币种字面量）：\n\n`本次扣费: {charged} {currency}, 余额: {balance} {currency}`\n\n示例（单次）：\n\n```\nᠠᠪᠤᠷᠭᠤ\n本次扣费: 0.01 CNY, 余额: 9.99 CNY\n```\n\n示例（链路两次成功调用：如 OCR → 翻译，各有一次计费转述）：于最终对用户可见的正文末尾，按调用顺序分行附 **两行**模板（或使用与上行相同模板、数据来源分别对应 OCR 响应与翻译响应）：\n\n```\nᠠᠪᠤᠷᠭᠤ\n本次扣费: 0.02 CNY, 余额: 9.98 CNY\n本次扣费: 0.03 CNY, 余额: 9.95 CNY\n```\n\n#### 2.3 最终自检清单（输出前必过）\n\n- [ ] **每一次**调用成功且完成解析时，均已在该次响应上检查过头 **与** JSON（如 OCR→翻译等多步链路不得只查最后一步）\n- [ ] 凡命中计费字段的调用均在最终答复中接续输出 §2.2：**首行**紧接在 §1 业务正文末尾**另起一行**；同轮链路中后续的计费各占**新的一行**，中间不掺杂其它话术。**若全程均无计费字段**则**不写**计费行、**不捏造**。\n- [ ] 模板中金额 **原样抄写**，未四舍五入改写、未中英文混改写币种\n\n## 接口路由（每轮必须重新判断）\n\n优先级：OCR → ASR → TTS → 翻译 → 中文回复 → 蒙文回复/对话\n\n- **OCR**：输入含图片 → `POST /ocr`\n- **ASR**：输入含音频 → **默认 `POST /audio/async`**（`multipart` 上传 `file` + `language`，每隔 **3～5 秒** 轮询 **`GET /audio/async/{jobId}`** 直至 `status: done`，提取 **`data.text`**；OpenClaw / 长音频优先此路径以避免网关超时）。**极短音频或探测**可试同步 **`POST /audio`**（仍受本站单次 PCM 时长配额限制）。计费：`billingCharged` / `billingBalance`（JSON 或响应头）。\n- **TTS**：用户要求朗读/播放/合成音频 → 优先 **`POST /tts/async`**（异步轮询，长文本必用）；极短文本可试 **`POST /tts`**（同步，易受代理超时限制）\n- **翻译**：含「翻译」「译成」「什么意思」「西里尔转传统」等纯转换意图 → `POST /translation`\n- **中文回复**：含蒙文 + 「用中文回答/回复」→ `POST /chat/completions`（中文 system）\n- **蒙文对话**：蒙文输入无翻译关键词 → `POST /chat/completions`（蒙文 system）\n\n### 流式联动规则（OCR → 翻译）\n\n当上一环节的输出作为下一环节的输入时（例如先 `POST /ocr` 再 `POS\n\nArchive v1.0.31: 13 files, 33332 bytes\n\nFiles: manifest.json (52b), package.json (354b), README.md (2804b), references/API-KEY.md (1686b), references/ASR.md (1834b), references/BEHAVIOR-RULES.md (12805b), references/CHAT-COMPLETIONS.md (3281b), references/HTTP-REQUESTS.md (11123b), references/INTERFACE-ROUTING.md (8332b), references/OCR.md (1643b), references/TRANSLATION.md (6205b), SKILL.md (15910b), _meta.json (133b)\n\nArchive v1.0.30: 13 files, 32405 bytes\n\nFiles: manifest.json (52b), package.json (354b), README.md (2804b), references/API-KEY.md (1686b), references/ASR.md (1834b), references/BEHAVIOR-RULES.md (12249b), references/CHAT-COMPLETIONS.md (3281b), references/HTTP-REQUESTS.md (11123b), references/INTERFACE-ROUTING.md (8568b), references/OCR.md (1643b), references/TRANSLATION.md (6205b), SKILL.md (14314b), _meta.json (133b)\n\nArchive v1.0.29: 13 files, 32167 bytes\n\nFiles: manifest.json (52b), package.json (354b), README.md (2759b), references/API-KEY.md (1686b), references/ASR.md (1834b), references/BEHAVIOR-RULES.md (12249b), references/CHAT-COMPLETIONS.md (3281b), references/HTTP-REQUESTS.md (11123b), references/INTERFACE-ROUTING.md (8237b), references/OCR.md (1526b), references/TRANSLATION.md (6205b), SKILL.md (14314b), _meta.json (133b)\n\nArchive v1.0.28: 13 files, 31001 bytes\n\nFiles: manifest.json (52b), package.json (354b), README.md (2759b), references/API-KEY.md (1686b), references/ASR.md (1834b), references/BEHAVIOR-RULES.md (12249b), references/CHAT-COMPLETIONS.md (3281b), references/HTTP-REQUESTS.md (10675b), references/INTERFACE-ROUTING.md (8237b), references/OCR.md (1526b), references/TRANSLATION.md (6205b), SKILL.md (12021b), _meta.json (133b)\n\nArchive v1.0.27: 13 files, 28446 bytes\n\nFiles: manifest.json (52b), package.json (354b), README.md (2759b), references/API-KEY.md (1686b), references/ASR.md (1607b), references/BEHAVIOR-RULES.md (12168b), references/CHAT-COMPLETIONS.md (3281b), references/HTTP-REQUESTS.md (8195b), references/INTERFACE-ROUTING.md (8000b), references/OCR.md (1526b), references/TRANSLATION.md (6205b), SKILL.md (8841b), _meta.json (133b)","readmeExcerpt":"Skill: mongolian-llm Owner: knixie Summary: 须在 OpenClaw 配置 MONGOL_AI_SKILL_API_KEY（https://mongol.open-idea.net「API Key」）；调用 https://mongol.open-idea.net/api/v1。中文与传统/西里尔蒙古文互译、蒙语对话与创作、TTS、ASR、OCR、Word/... Tags: latest:1.0.36 Version history: v1.0.36 | 2026-05-18T02:10:39.312Z | user - Major documentation revision: modernized and greatly condensed SKILL.md for clarity and maintainability - Added references for TTS and","codeSnippets":[],"executableExamples":[{"language":"text","snippet":"openclaw skills install mongolian-llm"},{"language":"json","snippet":"{ \"from\": \"zh\", \"to\": \"mw\", \"content\": \"待译正文\" }"},{"language":"bash","snippet":"openclaw config set env.MONGOL_AI_SKILL_API_KEY \"<完整API Key>\"\nopenclaw gateway restart"},{"language":"text","snippet":"MONGOL_AI_SKILL_API_KEY 未配置。请按以下步骤操作：\n1. 访问 https://mongol.open-idea.net 注册/登录账号\n2. 进入后台 API Key 页面，创建并复制完整 Key（含前缀如 `1|xxxx...`）\n3. 在本机终端自行执行（勿将 Key 粘贴到对话框）：\n   openclaw config set env.MONGOL_AI_SKILL_API_KEY \"<完整API Key>\"\n4. 执行后在终端运行 openclaw gateway restart，使配置立即生效\n5. 若客户端不支持上述命令，可手动编辑 ~/.openclaw/.env（Windows 为 %USERPROFILE%\\.openclaw\\.env），写入 MONGOL_AI_SKILL_API_KEY=你的完整Key，再重启 Gateway"},{"language":"json","snippet":"{\n  \"model\": \"gpt-5-mw\",\n  \"messages\": [\n    {\"role\": \"system\", \"content\": \"请只用纯传统蒙古文回答，不要包含任何中文汉字。\"},\n    {\"role\": \"user\", \"content\": \"<用户问题>\"}\n  ],\n  \"temperature\": 0.5,\n  \"max_tokens\": 768\n}"},{"language":"json","snippet":"{\n  \"model\": \"gpt-5-mw\",\n  \"messages\": [\n    {\"role\": \"system\", \"content\": \"请使用简体中文回答。若用户输入包含传统蒙古文，请先理解原文语义，再直接给出针对用户请求的中文回复正文。只输出最终中文回复正文；禁止添加问候、自我介绍、解释过程、标题、原文复述或无关补充。若用户明确要求翻译，请不要使用本模板，应改用 POST /translation/。\"},\n    {\"role\": \"user\", \"content\": \"<用户问题>\"}\n  ],\n  \"temperature\": 0.5,\n  \"max_tokens\": 768\n}"}],"parameters":null,"dependencies":[],"permissions":[],"extractedFiles":[{"path":"SKILL.md","content":"---\nname: mongolian-llm\ndescription: 须在 OpenClaw 配置 MONGOL_AI_SKILL_API_KEY（https://mongol.open-idea.net「API Key」）；调用 https://mongol.open-idea.net/api/v1。中文与传统/西里尔蒙古文互译、蒙语对话与创作、TTS、ASR、OCR、Word/PDF 文档翻译；含传统蒙古文须走接口。\ntriggers: 蒙语翻译, 蒙古语翻译, 蒙汉翻译, 蒙蒙互译, 西里尔蒙古文翻译, 传统转西里尔, 西里尔转传统, 中文翻译蒙古文, 蒙古文翻译, 蒙文邮件, 蒙古文邮件, 邮件蒙文, 发邮件蒙文, 邮件用蒙古文, 回复蒙文邮件, 蒙文邮件回复, 蒙语对话, 蒙古语会话, 蒙文聊天, 蒙古文聊天, 蒙语聊天, 蒙古语聊天, ᠮᠣᠩᠭᠣᠯ ᠬᠡᠯᠡᠬᠦ, 蒙文通知, 蒙古文通知, 推送蒙文, 通知蒙古文, 消息蒙文, 定时蒙文, 定时通知蒙古文, 生成蒙文文件, 蒙古文文件, 蒙文文档, 导出蒙文, 蒙文附件, 社媒蒙文, 蒙古文贴文, 发社媒蒙古文, 社交媒体蒙古文, 发帖蒙古文, 蒙文文案, 网页翻译, 网页蒙文, 摘录翻译, 长文翻译, 批量翻译, 远程批量蒙文, 蒙古语, 蒙语, 蒙古文, 蒙文, 用蒙语, 用蒙古文, 说蒙语, 说蒙古文, 蒙语语音识别, 蒙古语语音识别, 蒙文语音识别, 语音转文字, 音频转写, ASR, 文字转语音, TTS\nmetadata: {\"openclaw\":{\"emoji\":\"🐎\",\"homepage\":\"https://mongol.open-idea.net\",\"primaryEnv\":\"MONGOL_AI_SKILL_API_KEY\"}}\n---\n\n# Mongol AI Skill 蒙古语AI技能\n\n蒙古语能力（互译、对话/创作、TTS、ASR、OCR、文档翻译），基址 **https://mongol.open-idea.net/api/v1**。`Authorization: Bearer <Key>`。**路径须带尾 /**，否则 POST 可能因 302 失败；示例见 [HTTP-REQUESTS.md](./references/HTTP-REQUESTS.md)。\n\n### Install\n\n```\nopenclaw skills install mongolian-llm\n```\n\n## Setup\n\n- **`MONGOL_AI_SKILL_API_KEY`**：[mongol.open-idea.net](https://mongol.open-idea.net) 登录后在「API Key」页创建，Bearer 调 `/api/v1`。[API-KEY.md](./references/API-KEY.md) · [BEHAVIOR-RULES.md](./references/BEHAVIOR-RULES.md)\n\n## Output\n\n成功响应后对用户展示 = **业务正文** + **计费行**（头或 JSON 任一侧有计费字段则须写）。\n\n| 接口 | 目标字段 |\n|------|----------|\n| `POST /translation/` | `data.tgtText` |\n| `POST /chat/completions/` | `choices[0].message.content` |\n| `POST /ocr/` · `POST /word/translation/` · `POST /pdf/translation/` | `data.text` |\n| `POST /audio/` · `POST /audio/async/` | `data.text`（异步轮询至 `done`） |\n| `POST /tts/` · `POST /tts/async/` | 播放或落盘音频；**勿**向用户贴 `audioBase64`、二进制或整段 WAV 原文 |\n\n**计费**：在成功响应上同时读 **HTTP 头**与 **JSON body**。头字段 `X-Mengguyu-Billing-Charged` · `X-Mengguyu-Billing-Balance` · `X-Mengguyu-Billing-Currency`；JSON 常见 `billingCharged` / `billingBalance`（异步以 `done` 那次为准）。勿单靠 `curl -s` 丢头。无计费字段则**不写**、不编造。\n\n在业务正文后**另起一行**原样抄写：\n\n`本次扣费: {charged} {currency}, 余额: {balance} {currency}`\n\n**禁止**对用户输出：完整 JSON、路由说明、模型名、token、Key、内部推理、无关客套等。\n\n## Routing\n\n每轮用户新消息须**重新**选接口。优先级：**OCR → ASR → TTS → 纯翻译 → 中文答蒙文 → 蒙文对话**。总表与分流：[INTERFACE-ROUTING.md](./references/INTERFACE-ROUTING.md)；各接口专页见下表「references」。\n\n多步串联（如 OCR→翻译）：**前一步**返回的 `data.text` 只能经程序变量传给**下一步**请求，**禁止**从终端或聊天里手抄。\n\n## Usage\n\n### Translation\n\n`from` / `to`：`zh` · `mw` · `mn`。蒙蒙互译单次调用。\n\n```json\n{ \"from\": \"zh\", \"to\": \"mw\", \"content\": \"待译正文\" }\n```\n\n长文、换行与服务端如何自动分段：[TRANSLATION.md](./references/TRANSLATION.md)。\n\n### Chat\n\n`model`=`gpt-5-mw`，`temperature`=0.5，`max_tokens` 与双套 system：[CHAT-COMPLETIONS.md](./references/CHAT-COMPLETIONS.md)。\n\n### OCR\n\n[OCR.md](./references/OCR.md) · [HTTP-REQUESTS.md](./references/HTTP-REQUESTS.md)\n\n### ASR\n\n[ASR.md](./references/ASR.md) · [HTTP-REQUESTS.md](./references/HTTP-REQUESTS.md)\n\n### TTS\n\n[TTS.md](./references/TTS.md) · [HTTP-REQUESTS.md](./references/HTTP-REQUESTS.md)。**勿**调用 `POST /tts/stream`。\n\n### Word / PDF\n\n[DOCUMENT-TRANSLATION.md](./"},{"path":"_meta.json","content":"{\n  \"ownerId\": \"kn76hv4bh6w5s87x5j8emd1ycs80dp3m\",\n  \"slug\": \"mongolian-llm\",\n  \"version\": \"1.0.36\",\n  \"publishedAt\": 1779070239312\n}"},{"path":"references/API-KEY.md","content":"# API Key\n\n- **`MONGOL_AI_SKILL_API_KEY`**：配合 `Authorization: Bearer`，请求 `https://mongol.open-idea.net/api/v1`；登录后在「API Key」页创建。\n- **禁止**索要 Key、把 Key 贴进聊天、用 `openclaw config get` 验真（输出脱敏）。\n\n```bash\nopenclaw config set env.MONGOL_AI_SKILL_API_KEY \"<完整API Key>\"\nopenclaw gateway restart\n```\n\n或 `%USERPROFILE%\\.openclaw\\.env` / `~/.openclaw\\.env`：`MONGOL_AI_SKILL_API_KEY=<Key>` 后重启。\n\n未配置提示全文：[BEHAVIOR-RULES.md](./BEHAVIOR-RULES.md)。"},{"path":"references/ASR.md","content":"# ASR\n\n路由：[INTERFACE-ROUTING.md](./INTERFACE-ROUTING.md)。\n\n默认 **`POST /audio/async/`** + 轮询 **`GET /audio/async/{jobId}/`**；极短可 **`POST /audio/`**（multipart `file`）。\n\n成功取 **`data.text`**。多步串联：再译 → `POST /translation/`（变量直通 `content`）。\n\nHost / 同步·异步示例：[HTTP-REQUESTS.md](./HTTP-REQUESTS.md)。交付与计费 [SKILL.md](../SKILL.md)。"},{"path":"references/BEHAVIOR-RULES.md","content":"# 行为规则\n\n交付与计费：[SKILL.md](../SKILL.md)。路由：[INTERFACE-ROUTING.md](./INTERFACE-ROUTING.md)。\n\n## 调用前\n\n- **可直调**：短句翻译/短对话；能读到计费则按 SKILL 输出。\n- **须先报价或说明计费并确认**：长文、批量、网页正文、Word/PDF、多图 OCR、长 ASR、Agent 主动提议、用户要先看价。金额以**预估 API（若有）**与**成功响应计费字段**为准；本文档**不列单价**。无预估或失败时只说明计费方式、**勿编造金额**；须取得「视为同意」（是/确认/好/行/可以/yes/OK；沉默、「随便」不算）。\n- **覆盖**：用户明示「知道收费直接做」或声明「本会话不再问」→ 可直接；用户要「先报价」→ 先报价或说清计费并确认后再调。\n\n## 禁止绕过 API\n\n含传统蒙古文 U+1800–U+18AF → 须走接口；禁止模型裸译/裸答。\n\n## 可见回复\n\n仅 SKILL 允许的目标字段 + 计费行。\n\n## Key\n\n配置：[API-KEY.md](./API-KEY.md)。未配置时**仅**输出下列固定提示（原文不改写）：\n\n```text\nMONGOL_AI_SKILL_API_KEY 未配置。请按以下步骤操作：\n1. 访问 https://mongol.open-idea.net 注册/登录账号\n2. 进入后台 API Key 页面，创建并复制完整 Key（含前缀如 `1|xxxx...`）\n3. 在本机终端自行执行（勿将 Key 粘贴到对话框）：\n   openclaw config set env.MONGOL_AI_SKILL_API_KEY \"<完整API Key>\"\n4. 执行后在终端运行 openclaw gateway restart，使配置立即生效\n5. 若客户端不支持上述命令，可手动编辑 ~/.openclaw/.env（Windows 为 %USERPROFILE%\\.openclaw\\.env），写入 MONGOL_AI_SKILL_API_KEY=你的完整Key，再重启 Gateway\n```\n\n禁止索要 Key；用户若已粘贴 → 警告撤销重签 → `openclaw config set` + `openclaw gateway restart` → 不回显 Key；保留 `1|` 等前缀。\n\n## 扣费与重试\n\n- `200`/业务成功/异步 `done` 且能读业务或计费 → **通常已扣费**；勿因不满意用**同一** content/文件再调。改输入/路由前须说明并获同意。\n- **4xx**：修参/Key，勿盲重试。**5xx**/未完结：同体限次退避（如 ≤3）。**勿**过小 `--max-time`；`chat` 不设或 `30～60s`。\n\n## Chat · 预检\n\n全程传统蒙文 → 输出须全蒙、禁多余汉字；等于 `choices[0].message.content`，勿二改（[CHAT-COMPLETIONS.md](./CHAT-COMPLETIONS.md)）。  \n含传统蒙而未调 API → 先调再答；高成本先走「调用前」。"}],"languages":[],"docsSourceLabel":"CLAWHUB","editorialOverview":"须在 OpenClaw 配置 MONGOL_AI_SKILL_API_KEY（https://mongol.open-idea.net「API Key」）；调用 https://mongol.open-idea.net/api/v1。中文与传统/西里尔蒙古文互译、蒙语对话与创作、TTS、ASR、OCR、Word/... Skill: mongolian-llm Owner: knixie Summary: 须在 OpenClaw 配置 MONGOL_AI_SKILL_API_KEY（https://mongol.open-idea.net「API Key」）；调用 https://mongol.open-idea.net/api/v1。中文与传统/西里尔蒙古文互译、蒙语对话与创作、TTS、ASR、OCR、Word/... Tags: latest:1.0.36 Version history: v1.0.36 | 2026-05-18T02:10:39.312Z | user - Major documentation revision: modernized and greatly condensed SKILL.md for clarity and maintainability - Added references for TTS and","editorialQuality":{"score":100,"threshold":65,"status":"ready","wordCount":857,"uniquenessScore":46,"reasons":[]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-10-09T17:13:02.430Z","emptyReason":"No screenshots, media assets, or demo links are available."},"primaryImageUrl":null,"mediaAssetCount":0,"assets":[],"demoUrl":null},"ownerResources":{"evidence":{"source":"unclaimed","verified":false,"confidence":"low","updatedAt":"2026-10-09T17:13:02.430Z","emptyReason":"This page has not been claimed by the agent owner."},"hasCustomPage":false,"customPageUpdatedAt":null,"customLinks":[],"structuredLinks":{"docsUrl":null,"demoUrl":null,"supportUrl":null,"pricingUrl":null,"statusUrl":null},"customPage":null},"relatedAgents":{"evidence":{"source":"protocol-neighbors","verified":false,"confidence":"medium","updatedAt":"2026-10-09T22:49:38.290Z","emptyReason":null},"items":[{"id":"8ebccd8e-3863-4187-8355-c3f14e1f9edf","entityType":"agent","canonicalPath":"/agent/iofficeai-aionui","slug":"iofficeai-aionui","name":"AionUi","description":"Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!","url":"https://github.com/iOfficeAI/AionUi","homepage":"https://www.aionui.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-10-09T19:11:12.944Z","createdAt":"2026-02-25T03:38:16.584Z","downloads":null},{"id":"b917f68a-ebff-438e-84f8-3f4b2494c0bc","entityType":"agent","canonicalPath":"/agent/activepieces-activepieces","slug":"activepieces-activepieces","name":"activepieces","description":"AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents","url":"https://github.com/activepieces/activepieces","homepage":"https://www.activepieces.com","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-15T02:22:12.426Z","createdAt":"2026-02-25T03:38:12.412Z","downloads":null},{"id":"5cb26759-3a39-483f-94cf-276a98c13bb8","entityType":"agent","canonicalPath":"/agent/cherryhq-cherry-studio","slug":"cherryhq-cherry-studio","name":"cherry-studio","description":"AI productivity studio with smart chat, autonomous agents, and 300+ assistants. Unified access to frontier LLMs","url":"https://github.com/CherryHQ/cherry-studio","homepage":"https://cherry-ai.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-11T14:38:40.986Z","createdAt":"2026-02-25T03:38:19.379Z","downloads":null},{"id":"6f6582d0-5d76-4f0f-b81d-86520247950b","entityType":"agent","canonicalPath":"/agent/copilotkit-copilotkit","slug":"copilotkit-copilotkit","name":"CopilotKit","description":"The Frontend for Agents & Generative UI. React + Angular","url":"https://github.com/CopilotKit/CopilotKit","homepage":"https://docs.copilotkit.ai","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-03-25T09:50:57.846Z","createdAt":"2026-02-25T03:39:14.617Z","downloads":null}],"links":{"hub":"/agent","source":"/agent/source/clawhub","protocols":[{"label":"OpenClaw","href":"/agent/protocol/openclew"}]}}}