You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于FastAPI构建嵌入编码器?采用SentenceTransformer预训练模型

文本嵌入服务实现:FastAPI + SentenceTransformer + Swagger GUI

以下是满足需求的修正版代码,解决了原代码中的类型错误和依赖问题,同时保留Swagger GUI的交互能力:

from fastapi import FastAPI
from pydantic import BaseModel
from sentence_transformers import SentenceTransformer
from typing import List

# 全局加载预训练模型,仅初始化一次,节省资源
embedding_model = SentenceTransformer("./assets/BAAI/bge-small-en")

app = FastAPI(title="文本嵌入服务", description="输入任意文本,获取SentenceTransformer生成的嵌入向量")

class EmbeddingRequest(BaseModel):
    text: str  # 接收用户输入的纯文本

class EmbeddingResponse(BaseModel):
    embeddings: List[float]  # 修正类型:嵌入向量是浮点数组,而非单个浮点数

@app.post("/embeddings", response_model=EmbeddingResponse, summary="生成文本嵌入向量")
def get_embeddings(request: EmbeddingRequest):
    # 调用模型编码文本,转换为Python列表以便JSON序列化
    embeddings_result = embedding_model.encode(request.text).tolist()
    return EmbeddingResponse(embeddings=embeddings_result)

关键修改说明

  • 修复响应类型错误:原代码将embeddings定义为float,但模型返回的是一维浮点数组,改为List[float]才能正确返回符合格式的结果。
  • 简化模型调用逻辑:模型全局加载后可直接使用,无需通过Depends注入,避免重复加载模型导致的性能损耗。
  • 适配同步方法:model.encode是同步阻塞方法,使用同步路由(去掉async)更适配,FastAPI会自动在后台线程池处理请求,不影响并发。
  • 序列化兼容处理:将模型返回的numpy数组转为Python列表,确保能被JSON序列化后返回给前端。

使用步骤

  1. 安装依赖:
pip install fastapi uvicorn sentence-transformers pydantic
  1. 启动服务:
uvicorn main:app --reload
  1. 访问Swagger GUI:
    打开浏览器访问 http://localhost:8000/docs,找到/embeddings接口,输入文本后点击「Execute」即可获取对应的嵌入向量。

内容的提问来源于stack exchange,提问作者Christian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 03:10:11