([English](README.md)|简体中文|[日本語](README_ja.md)|[한국어](README_ko.md)) # FunASR OpenAI 兼容 API 服务 FunASR OpenAI 兼容 API 提供 `/v1/audio/transcriptions`,可作为私有语音转写服务接入 OpenAI 风格 SDK、Agent 框架、Dify、n8n、HTTP 节点和内部业务系统。 ## 快速开始 ```bash pip install funasr fastapi uvicorn python-multipart python server.py --model sensevoice --device cuda --port 8000 ``` 服务通常会在模型加载后启动。健康检查:`GET /health`。 需要直接复制的接入示例?可以继续查看 [客户端配方](CLIENTS.md)、[JavaScript/TypeScript 配方](JAVASCRIPT_zh.md)、[Gradio 浏览器 Demo](GRADIO_zh.md)、[工作流配方](WORKFLOWS_zh.md)、[Postman 集合](POSTMAN_zh.md)、[OpenAPI 规范](OPENAPI_zh.md)、[安全与网关指南](SECURITY_zh.md) 和 [Kubernetes 部署模板](kubernetes/README_zh.md)。 ### 端到端 smoke test 在另一个终端运行: ```bash bash smoke_test.sh # 不依赖 curl/bash 的跨平台方式: python smoke_test.py ``` 等价手动命令: ```bash curl -L https://isv-data.oss-cn-hangzhou.aliyuncs.com/ics/MaaS/ASR/test_audio/BAC009S0764W0121.wav -o sample.wav curl http://localhost:8000/health curl http://localhost:8000/v1/audio/transcriptions \ -F file=@sample.wav \ -F model=sensevoice \ -F response_format=verbose_json ``` ## Gradio 浏览器 Demo 如果希望用本地浏览器上传音频或测试麦克风,先启动 API 服务,再运行可选 Gradio 前端: ```bash pip install gradio python gradio_app.py --base-url http://localhost:8000 ``` 这个浏览器 demo 调用的就是 smoke test 使用的 OpenAI 兼容 API 端点。Docker、Kubernetes 和生产注意事项见 [Gradio 浏览器 Demo](GRADIO_zh.md)。 ## 使用 OpenAI SDK ```python from openai import OpenAI client = OpenAI(base_url="http://localhost:8000/v1", api_key="not-needed") result = client.audio.transcriptions.create( model="sensevoice", # 也可以使用 "paraformer"、"paraformer-en"、"fun-asr-nano" file=open("meeting.wav", "rb"), ) print(result.text) verbose = client.audio.transcriptions.create( model="sensevoice", file=open("meeting.wav", "rb"), response_format="verbose_json", ) print(verbose.segments) ``` ## 使用 curl ```bash curl http://localhost:8000/v1/audio/transcriptions \ -F file=@audio.wav \ -F model=sensevoice curl http://localhost:8000/v1/audio/transcriptions \ -F file=@audio.wav \ -F model=sensevoice \ -F response_format=verbose_json ``` ## 可用模型 | Model | GPU 速度 | CPU 速度 | 语言 | 特性 | |---|---|---|---|---| | `sensevoice` | 170x realtime | 17x realtime | zh/en/ja/ko/yue | 情感与事件标签 | | `paraformer` | 120x realtime | 15x realtime | zh/en | 标点恢复 | | `paraformer-en` | 120x realtime | 15x realtime | en | 英文识别 | | `fun-asr-nano` | 17x realtime | 3.6x realtime | 31 languages | LLM-based,时间戳 | ## API 端点 | Endpoint | Method | 说明 | |---|---|---| | `/v1/audio/transcriptions` | POST | OpenAI 兼容音频转写 | | `/v1/models` | GET | 列出模型别名 | | `/health` | GET | 健康检查、已加载模型和可用模型 | | `/docs` | GET | FastAPI Swagger 文档 | 不想写代码验证接口时,可以使用 [Gradio 浏览器 Demo](GRADIO_zh.md) 做本地上传或麦克风测试,也可以导入 [Postman 集合](POSTMAN_zh.md)。如果要接入 API 网关、开发者门户或生成内部客户端,可以使用 [OpenAPI 规范](OPENAPI_zh.md)。 ## Agent 与低代码工作流 适用场景包括 **LangChain**、**LlamaIndex**、**AutoGen**、**CrewAI**、**Semantic Kernel**、**Dify**、**n8n** 和任何支持 OpenAI audio API 或 multipart HTTP 的系统。 - SDK、JavaScript/TypeScript 和 Agent tool 写法见 [客户端配方](CLIENTS.md) 与 [JavaScript/TypeScript 配方](JAVASCRIPT_zh.md)。 - Dify、n8n、HTTP 节点和 webhook worker 见 [工作流配方](WORKFLOWS_zh.md)。 - 图形界面 smoke test 见 [Postman 集合](POSTMAN_zh.md)。 - schema 驱动导入见 [OpenAPI 规范](OPENAPI_zh.md)。 ## Docker 部署 默认镜像以 CPU 模式启动,适合作为可复现 smoke test。 ```bash cd examples/openai_api cp .env.example .env docker compose up --build ``` 等价 `docker run`: ```bash docker build -t funasr-api . docker run --rm -p 8000:8000 \ -e FUNASR_DEVICE=cpu \ -e FUNASR_MODEL=sensevoice \ funasr-api ``` GPU 环境需要 NVIDIA Container Toolkit 和 CUDA-capable PyTorch/FunASR 镜像。适配 CUDA 依赖后,可使用: ```bash docker run --rm --gpus all -p 8000:8000 \ -e FUNASR_DEVICE=cuda \ -e FUNASR_MODEL=sensevoice \ funasr-api ``` 验证容器: ```bash BASE_URL=http://localhost:8000 bash smoke_test.sh python smoke_test.py --base-url http://localhost:8000 ``` ## Kubernetes 部署 在跨团队共享服务或通过网关暴露服务前,请先阅读 [安全与网关指南](SECURITY_zh.md),补齐 TLS、鉴权、上传限制、限流和日志策略。 如果需要在集群内部提供带持久化模型缓存、健康检查和私有 `ClusterIP` 的语音 API,可以从 [Kubernetes 部署模板](kubernetes/README_zh.md) 开始。先构建并推送示例镜像,应用 manifests,再通过 `kubectl port-forward` 和 `python smoke_test.py --base-url http://localhost:8000` 验证。 在没有 CUDA-capable 镜像和 GPU 调度配置前,请保持默认 CPU 模式。 ## 配置 | 参数 | 默认值 | 说明 | |---|---|---| | `--host` | `0.0.0.0` | 监听地址 | | `--port` | `8000` | 监听端口 | | `--device` | `cuda` | `cuda`、`cpu` 或 `mps` | | `--model` | `sensevoice` | 启动时预加载模型 | Docker 环境变量: | Env | 默认值 | 说明 | |---|---|---| | `FUNASR_PORT` | `8000` | 传给 `server.py` 的容器端口 | | `FUNASR_DEVICE` | `cpu` | 容器设备模式;只有在镜像已适配 CUDA 时才设为 `cuda` | | `FUNASR_MODEL` | `sensevoice` | 容器启动时加载的模型别名 | ## 故障排查 | 现象 | 处理方式 | |---|---| | CUDA 不可用 | 先用 `--device cpu` 跑通 smoke test。 | | 8000 端口被占用 | 改用 `--port 9000`,并运行 `BASE_URL=http://localhost:9000 bash smoke_test.sh` 或 `python smoke_test.py --base-url http://localhost:9000`。 | | 模型下载很慢 | 换稳定网络,或提前从 ModelScope/Hugging Face 下载模型。 | | Dify/n8n 容器里访问 `localhost` 失败 | 使用工作流运行时可访问的主机名、Compose service name 或 Kubernetes service name。 | | 响应中没有 `segments` | 设置 `response_format=verbose_json`。 |