Skip to content

无法正常配置和调用硅基流动asr模型 #1382

Open

Description

@message-199

提交前确认 / Before submitting

  • 我已经搜索过现有 Issue,确认这不是重复问题。
  • 我已经移除日志、截图和配置中的密钥及隐私信息。

Operit 版本 / Operit version

1.12.2

运行形态 / Distribution

Release APK

设备与运行环境 / Environment

设备模型:IQOO Z8
安卓版本13

问题领域 / Area

Model or provider / 模型或服务商

主要问题描述 / Main problem description

在“AI模型配置”中无法正常配置和调用硅基流动asr模型,解决方法是聊天框上传音频文件之后直接给硅基流动key和要求调用的指定模型。

复现步骤 / Steps to reproduce

模型与参数设置中选择厂商硅基流动,api端点配置为https://api.siliconflow.cn/v1/audio/transcriptions,key正常。勾选了模型支持音频解析,选用一个或多个asr模型点击测试稳定报错“聊天”和“音频”API请求失败,状态码400,错误信息空白。

复现频率 / Reproducibility

Always / 每次发生

相关配置 / Related context

无

截图或录屏 / Screenshot or recording

Image Image

日志或错误信息 / Logs or error output

无

Activity

  1. yoruuuchan commented on Oct 23, 2026

    @yoruuuchan
    Contributor

    认领。已核对现有工作,避免重复:搜索了仓库内与 1382、audio/transcriptions、siliconflow、ASR 相关的 Issue/PR,未发现对应 PR,Issue 目前也没有评论或 assignee。

    初步定位(附证据):

    • 硅基流动的 POST /v1/audio/transcriptions 是专用语音转写接口,请求必须是 multipart/form-data,官方 OpenAPI 只定义 file 与 model 两个字段,模型为 FunAudioLLM/SenseVoiceSmall、TeleAI/TeleSpeechASR,响应为 {"text":"..."}:https://docs.siliconflow.com/en/api-reference/audio/create-audio-transcriptions
    • “AI模型配置”里的“聊天”测试和“模型支持音频解析”的音频测试,实际都走 OpenAIProvider.sendMessage(),即向配置的端点 POST application/json 的 chat/completions 请求体。把端点填成 /v1/audio/transcriptions 后,JSON 请求打到只接受 multipart 的转写接口,因此稳定 400;错误体为空时界面就只显示状态码 400。
    • 硅基流动的 ASR 模型不是聊天模型,不能通过 /v1/chat/completions 调用;“模型支持音频解析”只适用于原生支持 input_audio 的聊天模型,不适用于 ASR 端点。

    计划修复:

    1. 在模型配置与功能测试中识别转写端点,使用 test/1.mp3 发起真实的 multipart 转写请求并按转写文本判定,不再用聊天 JSON 请求误测;
    2. 音频识别(AUDIO_RECOGNITION)使用转写端点时,真实请求同样走 multipart 转写客户端;
    3. 在聊天配置/端点设置处对“把转写端点当聊天端点”的情况给出明确诊断和正确用法提示;
    4. 校正 OpenAI STT 对硅基流动的请求字段(file + model,不发送对方 schema 未定义的字段),其他服务商行为保持不变;
    5. 补充 JVM 单元测试,覆盖端点识别、multipart 字段、响应解析与测试计划选择。

    完成后会提交 PR 到 dev 并关联 Fixes #1382。

  2. yoruuuchan commented on Oct 23, 2026

    @yoruuuchan
    Contributor

    已提交修复 PR:#1406 (目标分支 dev,Fixes #1382)。

    问题结论(复述)

    • POST /v1/audio/transcriptions 是专用语音转写接口:请求必须是 multipart/form-data,官方 OpenAPI 只声明 file 与 model,响应为 {"text": "..."}(官方文档)。
    • 硅基流动的 ASR 模型(FunAudioLLM/SenseVoiceSmall、TeleAI/TeleSpeechASR)不是聊天模型,不能用 /v1/chat/completions 调用。
    • Operit 之前把该端点当聊天端点:模型测试与「模型支持音频解析」的音频测试都发送 chat/completions JSON,必然 400;错误体为空时界面只剩状态码。
    • 「模型支持音频解析」(enableDirectAudioProcessing)只对原生支持 input_audio content part 的聊天模型有意义;硅基流动聊天接口的 schema 里没有 input_audio。

    修复内容

    1. 新增 AudioTranscriptionProtocol / AudioTranscriptionClient:端点判定、multipart 构造(file + model)、{"text": ...} 解析、错误体归一(硅基流动 {"code":...,"message":...} 与 OpenAI {"error":{"message":...}})。
    2. 模型连接测试:转写端点下 CHAT 项给出明确诊断“这是转写接口,不能用于聊天;聊天用 /v1/chat/completions,转写请在语音服务配置”;AUDIO 项改用 test/1.mp3 发起真实 multipart 转写并按文本判定。
    3. 「功能配置 → 音频识别」测试与真实识别链路(analyzeAudioWithIntent)同样按端点类型走转写客户端。
    4. 设置界面:模型 API 端点输入下方对转写端点给出常驻提示;硅基流动勾选「模型支持音频解析」时提示该开关不适用于 ASR;语音服务的 OpenAI STT 模型输入框在硅基流动 host 下显示可用模型。
    5. OpenAISttProvider:硅基流动只发送 file、model,其他 OpenAI 兼容服务保持 language(可选)与 response_format=json。

    正确用法

    • 语音转写:在「语音服务 → 语音识别」新建 OpenAI STT 配置,URL 填 https://api.siliconflow.cn/v1/audio/transcriptions,模型填 FunAudioLLM/SenseVoiceSmall 或 TeleAI/TeleSpeechASR。
    • 聊天:模型配置端点用 https://api.siliconflow.cn/v1/chat/completions,并选择真正的聊天模型(如 Qwen/Qwen2.5-72B-Instruct 等)。
    • 不要把 /audio/transcriptions 填进「AI模型配置」的聊天端点,也不要对硅基流动 ASR 模型勾选「模型支持音频解析」。

    验证

    • .\gradlew.bat :app:compileDebugKotlin:BUILD SUCCESSFUL
    • .\gradlew.bat :app:testDebugUnitTest --tests "...AudioTranscriptionProtocolTest":12 项全部通过
    • check_localizations.py / check_markdown_links.py / git diff --check:无新增问题
    • 本机无真实硅基流动 Key,端到端转写需按 PR 中的手工步骤在有 Key 的环境补跑(假 Key 探测确认了鉴权先于参数校验,无法据此区分 400 细节)。

    计划文档:docs/TODO/issue-1382-siliconflow-asr/。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions