VI ▾
Lấy khóa API

Máy chủ API Whisper: Tùy chọn thiết lập và bước xử lý văn bản

Một máy chủ whisper api là một dịch vụ HTTP chấp nhận âm thanh và trả về một bản ghi. Nó chỉ xử lý giọng nói, vì vậy bất cứ điều gì bạn muốn làm với từ ngữ sau đó cần một mô hình văn bản riêng biệt.

Cập nhật

Minh họa đẳng hướng của luồng âm thanh từ một máy chủ vào một chồng các dòng văn bản sạch

Điểm chính

  • Whisper là một mô hình nhận diện giọng nói sang văn bản; một máy chủ bọc nó phía sau một điểm cuối HTTP.
  • Bạn có thể thuê một điểm cuối được lưu trữ, tự tạo một vỏ bọc, hoặc chạy một chương trình nhị phân cục bộ.
  • API này chỉ dành cho văn bản: nó thực hiện bước sau khi chuyển đổi giọng nói, không phải bước âm thanh.
  • Hai giai đoạn kết nối với nhau bằng vài dòng Python bằng cách dùng SDK OpenAI hai lần.

Câu trả lời ngắn gọn

Whisper là một mô hình nhận diện giọng nói nguồn mở mà OpenAI đã công bố. Một mình nó chỉ là một tệp mô hình và một số mã suy luận. Một máy chủ đặt một giao diện HTTP phía trước nó, để ứng dụng của bạn có thể gửi một tệp âm thanh và nhận lại văn bản thay vì gọi các hàm Python trực tiếp.

Hầu hết các máy chủ sao chép hình dạng của điểm cuối chuyển đổi giọng nói của OpenAI, POST /v1/audio/transcriptions, chấp nhận một tải lên đa phần với tệp âm thanh và tên mô hình. Hình dạng đó là lý do tại sao cùng một thư viện client có thể giao tiếp với một dịch vụ được lưu trữ, một container trên máy của bạn, hoặc một vỏ bọc nhỏ do người khác viết.

  • Đầu vào: một tệp âm thanh, thường là mp3, wav, m4a hoặc tương tự.
  • Đầu ra: văn bản thuần, hoặc JSON với các đoạn và dấu thời gian, tùy thuộc vào máy chủ.
  • Không bao gồm: các bản tóm tắt, dịch sang văn bản trau chuốt, trích xuất các mục hành động. Những việc đó cần một mô hình ngôn ngữ.

Ba cách để có một server Whisper

1. Một endpoint hosted

OpenAI cung cấp một điểm cuối chuyển đổi giọng nói được lưu trữ, và các nhà cung cấp khác cũng bán chuyển đổi giọng nói dựa trên Whisper. Bạn trả tiền theo mức sử dụng, bạn không quản lý phần cứng, và bạn gửi âm thanh của bạn đến cơ sở hạ tầng của người khác. Các mô hình tính phí khác nhau giữa các nhà cung cấp, và các dịch vụ giọng nói thường tính phí theo thời lượng âm thanh, vì vậy hãy kiểm tra giá hiện tại của họ trước khi bạn cam kết một khối lượng.

2. Một wrapper tự host

Nhiều dự án nguồn mở bọc Whisper hoặc các bản triển khai lại của nó trong một máy chủ web mô phỏng tuyến đường chuyển đổi giọng nói của OpenAI. Bạn chạy nó trong Docker trên một máy có GPU, hoặc trên CPU nếu bạn chấp nhận xử lý chậm hơn. Điều này cho bạn quyền kiểm soát nơi âm thanh đi. Nó cũng khiến bạn chịu trách nhiệm về việc tải xuống mô hình, cập nhật, hàng đợi và khởi động lại.

3. Một binary cục bộ

Dự án whisper.cpp là bản chuyển đổi C và C++ của mô hình, và kho lưu trữ của nó bao gồm một ví dụ về máy chủ HTTP. Nó chạy trên các máy tính xách tay thông thường và các máy chủ nhỏ, điều này khiến nó trở thành một lựa chọn tốt cho bản thử nghiệm hoặc cho một người dùng duy nhất chuyển đổi một vài bản ghi mỗi ngày. Đối với các tác vụ hàng loạt hàng trăm giờ, một dịch vụ có GPU thường thực tế hơn.

Hãy chọn dựa trên ba câu hỏi: âm thanh có thể di chuyển ở đâu, bạn xử lý bao nhiêu giờ mỗi tháng, và ai sẽ duy trì dịch vụ chạy. Bước xử lý văn bản được mô tả bên dưới hoạt động giống nhau với bất kỳ trong ba cách nào.

Nơi API LLM văn bản phù hợp sau khi chuyển đổi giọng nói

Bản chuyển đổi Whisper thô là một khối văn bản. Nó có rất ít ngắt đoạn, tên người nói bị thiếu trừ khi bạn thêm tách biệt người nói riêng biệt, và các từ đệm vẫn còn. Whisper cũng mắc lỗi với tên sản phẩm, thuật ngữ và danh từ riêng. Hầu hết mọi dự án thực tế đều thêm một giai đoạn thứ hai hoạt động trên văn bản.

Các công việc giai đoạn thứ hai điển hình:

  • Sửa dấu câu, chia thành các đoạn, loại bỏ các lỗi bắt đầu.
  • Tóm tắt một cuộc gọi hoặc bài giảng thành một vài gạch đầu dòng.
  • Trích xuất dữ liệu có cấu trúc như các quyết định, tên và ngày dưới dạng JSON.
  • Viết lại nội dung nói thành một bài báo, một kịch bản hoặc ghi chú chương trình.
  • Dịch hoặc bản địa hóa văn bản đã được làm sạch.

Đó là nơi dịch vụ này phù hợp. Nó là một API văn bản tương thích OpenAI với một mô hình, uncensored, cửa sổ ngữ cảnh 100.000 token và streaming. Một bản chuyển đổi phỏng vấn hai giờ thường vừa trong một yêu cầu, vì vậy bạn có thể bỏ qua logic chia nhỏ mà các cửa sổ ngữ cảnh nhỏ hơn bắt buộc bạn phải làm. Đối với tài liệu dài hơn, hãy xem tài liệu quickstart để biết chi tiết yêu cầu.

Mô hình được tinh chỉnh để trả lời mà không có từ chối nội dung cho việc sử dụng người lớn hợp pháp. Điều đó quan trọng đối với các pipeline chuyển đổi vì âm thanh nguồn không thể đoán trước: các cuộc phỏng vấn, podcast, đọc truyện và cuộc gọi hỗ trợ chứa ngôn ngữ mạnh và các chủ đề khó. Một mô hình từ chối làm sạch một bản chuyển đổi vì người nói đã chửi thề sẽ lãng phí một lần chuyển đổi đã trả tiền. Giới hạn cứng duy nhất là không chấp nhận bất cứ điều gì liên quan đến nội dung tình dục với người chưa thành niên.

Một pipeline hai giai đoạn hoạt động

SDK Python của OpenAI cho phép bạn tạo hai client với các base URL khác nhau. Một trỏ đến máy chủ Whisper của bạn, cái kia trỏ đến API này. Đặt các biến môi trường cho dịch vụ chuyển đổi của riêng bạn; client thứ hai sử dụng base URL cho trang web này.

import os
from openai import OpenAI

# Stage 1: any Whisper-compatible transcription server you run or rent.
stt = OpenAI(base_url=os.environ["STT_BASE_URL"], api_key=os.environ["STT_KEY"])

# Stage 2: the text model.
llm = OpenAI(base_url="https://api.whisperapis.com/v1", api_key=os.environ["LLM_KEY"])

with open("call.mp3", "rb") as f:
    transcript = stt.audio.transcriptions.create(
        model=os.environ["STT_MODEL"],  # the model name your server expects
        file=f,
    )

resp = llm.chat.completions.create(
    model="uncensored",
    messages=[
        {"role": "system", "content": "Clean up this transcript: fix punctuation, keep every statement, no commentary."},
        {"role": "user", "content": transcript.text},
    ],
    temperature=0.2,
)
print(resp.choices[0].message.content)

Hai chi tiết dễ bị sai. Thứ nhất, tên mô hình chuyển đổi là bất cứ thứ gì máy chủ của bạn mong đợi, đó là lý do tại sao nó đến từ một biến môi trường ở đây. Thứ hai, khóa cho API văn bản là riêng biệt với bất kỳ khóa nào bạn giữ cho dịch vụ speech; mỗi khóa chỉ xác thực host của riêng nó.

Nếu bạn thích shell, giai đoạn xử lý văn bản là một yêu cầu chat completion đơn giản:

curl https://api.whisperapis.com/v1/chat/completions \
  -H "Authorization: Bearer $LLM_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "uncensored",
    "messages": [
      {"role": "user", "content": "Summarize this transcript in five bullet points: ..."}
    ]
  }'

Xác thực sử dụng khóa Bearer trong tiêu đề Authorization, và các endpoint là POST /v1/chat/completions và GET /v1/models. Bạn có thể lấy khóa từ trang khóa API; tài khoản mới có thể nhận tín dụng dùng thử $0,50 chỉ với một cú nhấp chuột tại đó, có giá trị trong 7 ngày và không cần thẻ.

Những thứ thường bị hỏng trong thực tế

Các tệp audio lớn

Nhiều server Whisper giới hạn kích thước tải lên, và các bản ghi dài có thể bị timeout ở giữa một yêu cầu. Hãy chia audio thành các đoạn mười đến ba mươi phút bằng một công cụ như ffmpeg, transcribe từng đoạn, sau đó nối text lại. Vì API text chấp nhận lên đến 100.000 token, bạn có thể nối các đoạn và gửi chúng dưới dạng một prompt. Giới hạn thân yêu cầu trên API này là 8 MB, lớn hơn nhiều so với bất kỳ transcript nào cần.

Giới hạn tốc độ và độ đồng thời

Một khóa đầy đủ cho phép 8 yêu cầu đồng thời và 300 yêu cầu mỗi phút; khóa dùng thử cho phép 2 và 60. Nếu bạn chạy hàng đợi với nhiều worker, hãy giới hạn nó ở mức độ đồng thời của khóa của bạn. Vượt quá sẽ trả về HTTP 429, với mã rate_limited cho yêu cầu mỗi phút hoặc concurrency cho quá nhiều cùng lúc. Một yêu cầu truyền phát giữ slot của nó cho đến khi stream kết thúc, vì vậy một client bị treo có thể chiếm slot lâu hơn bạn mong đợi. Hãy quay lui và thử lại; nếu phản hồi có tiêu đề Retry-After: 5, hãy chờ khoảng thời gian đó.

Lỗi transcription mà LLM không thể thấy

Nếu Whisper nghe sai từ, mô hình văn bản chỉ thấy từ sai. Nó thậm chí có thể làm mượt lỗi và khiến nó trông có chủ đích. Hãy đặt một glossary về tên và thuật ngữ trong system prompt, và bảo mô hình đánh dấu các đoạn không chắc chắn thay vì đoán. Đối với tài liệu quan trọng, hãy giữ bản transcript gốc bên cạnh bản đã được làm sạch.

Từ đệm bị ảo giác

Whisper đôi khi tạo ra văn bản bịa đặt trong lúc im lặng hoặc nhạc. Cắt bỏ khoảng lặng trước khi gửi, và yêu cầu giai đoạn thứ hai đánh dấu các câu có vẻ không phù hợp. Một giá trị temperature thấp, chẳng hạn như 0.2, giúp việc làm sạch gần với nguồn gốc hơn.

API này không làm gì

Nó không chuyển đổi giọng nói thành văn bản. Không có đầu vào âm thanh, không có đầu ra giọng nói, không có tạo hình ảnh hoặc video, không có embedding và không có fine-tuning. Đây là một mô hình văn bản được lưu trữ phía sau một endpoint chat completions, do một nhà cung cấp độc lập vận hành, và không phải là API chính thức của OpenAI hay bất kỳ nhà cung cấp mô hình nào khác. Nếu dự án của bạn cần cả hai phần, bạn cần một server xử lý âm thanh cho phần đầu và dịch vụ này cho phần thứ hai.

Các prompt không được dùng để huấn luyện. Điều đó tách biệt với những gì nhà cung cấp giọng nói của bạn làm với âm thanh, vì vậy hãy đọc điều khoản của nhà cung cấp đó.

Để lập kế hoạch chi phí, phần văn bản được tính phí theo token với giá $0,15 cho mỗi triệu token đầu vào và $0,50 cho mỗi triệu token đầu ra, từ tín dụng trả trước không bao giờ hết hạn. trang giá cả liệt kê các kích thước nạp tiền và phần thưởng. Các yêu cầu thất bại hoặc bị từ chối không bị tính phí, điều này giúp các vòng lặp thử lại không làm bạn tốn tiền.

Một cách khởi đầu hợp lý

  1. Khởi chạy một server tương thích Whisper, lưu trữ hoặc cục bộ, và xác nhận nó trả về văn bản cho một tệp âm thanh dài một phút.
  2. Tạo tài khoản, nhận tín dụng dùng thử và chạy lệnh curl ở trên với một bản ghi ngắn.
  3. Kết nối hai client với nhau bằng script Python, sử dụng system prompt của riêng bạn cho kiểu làm sạch mà bạn muốn.
  4. Thêm một hàng đợi chỉ sau khi luồng tệp đơn hoạt động, và cấu hình nó dựa trên độ đồng thời của khóa của bạn.

Hầu hết nỗ lực tập trung vào prompt và xử lý âm thanh, không phải vào đoạn mã kết nối. Hãy bắt đầu với một bản ghi bạn đã biết rõ, so sánh kết quả với những gì bạn đã nghe, và điều chỉnh hướng dẫn trước khi mở rộng quy mô.

Hỏi đáp

Máy chủ API Whisper có giống với API OpenAI không?

Không. Whisper là một mô hình, và một server là bất kỳ chương trình nào cung cấp nó qua HTTP. OpenAI chạy một phiên bản được lưu trữ, và nhiều người chạy phiên bản của riêng họ bằng các công cụ mã nguồn mở sao chép cùng một tuyến chuyển văn bản.

API này có thể chuyển văn bản từ giọng nói (transcribe) các tệp âm thanh không?

Không. API này chỉ chấp nhận văn bản. Bạn hãy sử dụng một dịch vụ xử lý giọng nói hoặc máy chủ Whisper của riêng bạn cho bước chuyển văn bản từ giọng nói, sau đó gửi bản transcript này vào đây.

Tôi nên dùng tên mô hình nào cho bước xử lý văn bản?

Sử dụng uncensored làm model ID, với base URL https://api.whisperapis.com/v1 và key của bạn dưới dạng Bearer token.

Tôi có thể gửi bản ghi (transcript) dài bao nhiêu?

Cửa sổ ngữ cảnh là 100.000 token, bao gồm cả prompt và completion. Điều này đủ cho nhiều bản ghi âm nhiều giờ trong một yêu cầu.

Tôi có cần thẻ để dùng thử không?

Không. Người dùng mới có thể nhận tín dụng dùng thử miễn phí trị giá $0,50 chỉ bằng một cú nhấp chuột trên trang khóa API sau khi đăng ký, mà không cần thẻ.

Khóa của bạn chỉ còn một bước biểu mẫu nữa

Tạo tài khoản, sao chép khóa, thay đổi base URL. Đó là toàn bộ thiết lập.

Lấy khóa API