StructBERT中文相似度模型部署教程FastAPI替代Gradio高性能API方案1. 环境准备与快速部署想要快速搭建一个高性能的中文文本相似度服务吗StructBERT中文相似度模型是个不错的选择但原生的Gradio界面虽然友好性能却不够理想。今天我来教你用FastAPI打造一个高性能的API服务。首先我们需要准备基础环境# 创建项目目录 mkdir structbert-api cd structbert-api # 创建虚拟环境 python -m venv venv source venv/bin/activate # Linux/Mac # 或者 venv\Scripts\activate # Windows # 安装核心依赖 pip install fastapi uvicorn sentence-transformers numpy安装完成后我们创建一个简单的启动脚本# run_server.sh uvicorn main:app --host 0.0.0.0 --port 8000 --reload这样基础环境就准备好了接下来我们开始构建核心服务。2. 核心代码实现2.1 创建FastAPI应用让我们从创建一个基础的FastAPI应用开始# main.py from fastapi import FastAPI from sentence_transformers import SentenceTransformer import numpy as np from pydantic import BaseModel import time app FastAPI( titleStructBERT中文相似度API, description基于FastAPI的高性能中文文本相似度计算服务, version1.0.0 ) # 定义请求模型 class SimilarityRequest(BaseModel): text1: str text2: str class BatchRequest(BaseModel): texts: list # 加载模型首次运行需要下载 app.on_event(startup) async def load_model(): global model print(正在加载StructBERT模型...) start_time time.time() model SentenceTransformer(structbert-large-chinese) load_time time.time() - start_time print(f模型加载完成耗时: {load_time:.2f}秒)2.2 实现相似度计算接口现在添加核心的相似度计算功能# 继续在main.py中添加 app.post(/similarity) async def calculate_similarity(request: SimilarityRequest): 计算两个文本的相似度 try: # 编码文本 embeddings model.encode([request.text1, request.text2]) # 计算余弦相似度 similarity np.dot(embeddings[0], embeddings[1]) / ( np.linalg.norm(embeddings[0]) * np.linalg.norm(embeddings[1]) ) return { text1: request.text1, text2: request.text2, similarity: float(similarity), status: success } except Exception as e: return {error: str(e), status: error} app.post(/batch-similarity) async def batch_similarity(request: BatchRequest): 批量计算文本相似度 try: if len(request.texts) 2: return {error: 至少需要两个文本, status: error} # 编码所有文本 embeddings model.encode(request.texts) # 计算相似度矩阵 similarities [] norms np.linalg.norm(embeddings, axis1) normalized_embeddings embeddings / norms[:, np.newaxis] similarity_matrix np.dot(normalized_embeddings, normalized_embeddings.T) return { texts: request.texts, similarity_matrix: similarity_matrix.tolist(), status: success } except Exception as e: return {error: str(e), status: error}2.3 添加健康检查和其他接口为了服务的完整性我们再添加一些辅助接口# 继续添加 app.get(/) async def root(): return { message: StructBERT中文相似度API服务运行中, version: 1.0.0, endpoints: { /similarity: 计算两个文本的相似度, /batch-similarity: 批量计算文本相似度, /health: 服务健康检查 } } app.get(/health) async def health_check(): return { status: healthy, model_loaded: model in globals(), timestamp: time.time() } if __name__ __main__: import uvicorn uvicorn.run(app, host0.0.0.0, port8000)3. 配置优化和部署建议3.1 创建配置文件为了让服务更加稳定我们添加一些配置# config.py import os class Config: # 服务器配置 HOST os.getenv(HOST, 0.0.0.0) PORT int(os.getenv(PORT, 8000)) # 模型配置 MODEL_NAME structbert-large-chinese MAX_TEXT_LENGTH 512 # 最大文本长度 # 性能配置 MAX_WORKERS int(os.getenv(MAX_WORKERS, 4)) TIMEOUT int(os.getenv(TIMEOUT, 300))3.2 创建Docker部署文件为了便于部署我们创建一个Docker配置# Dockerfile FROM python:3.9-slim WORKDIR /app # 安装系统依赖 RUN apt-get update apt-get install -y \ gcc \ g \ rm -rf /var/lib/apt/lists/* # 复制依赖文件 COPY requirements.txt . RUN pip install -r requirements.txt # 复制应用代码 COPY . . # 暴露端口 EXPOSE 8000 # 启动命令 CMD [uvicorn, main:app, --host, 0.0.0.0, --port, 8000, --workers, 4]对应的requirements.txt文件fastapi0.104.1 uvicorn0.24.0 sentence-transformers2.2.2 numpy1.24.3 pydantic2.5.04. 使用示例和测试方法4.1 启动服务完成代码编写后启动服务# 直接运行 python main.py # 或者使用uvicorn uvicorn main:app --reload服务启动后访问 http://localhost:8000 可以看到API文档。4.2 测试API接口使用curl测试相似度计算# 测试单个相似度计算 curl -X POST http://localhost:8000/similarity \ -H Content-Type: application/json \ -d {text1: 今天天气真好, text2: 今天的天气很不错} # 测试批量计算 curl -X POST http://localhost:8000/batch-similarity \ -H Content-Type: application/json \ -d {texts: [苹果手机, iPhone, 香蕉水果]}4.3 Python客户端示例你也可以用Python代码来调用这个API# client_example.py import requests import json def test_similarity(): url http://localhost:8000/similarity data { text1: 深度学习模型训练, text2: 机器学习模型训练 } response requests.post(url, jsondata) result response.json() print(f相似度: {result[similarity]:.4f}) def test_batch_similarity(): url http://localhost:8000/batch-similarity data { texts: [ 人工智能技术, AI技术发展, 天气预报今天 ] } response requests.post(url, jsondata) result response.json() print(相似度矩阵:) for i, row in enumerate(result[similarity_matrix]): print(f文本{i}: {row}) if __name__ __main__: test_similarity() test_batch_similarity()5. 性能优化建议5.1 启用响应压缩在启动命令中添加压缩选项减少网络传输时间uvicorn main:app --host 0.0.0.0 --port 8000 --workers 4 --compress5.2 使用更快的JSON序列化安装orjson来提高JSON处理速度pip install orjson然后在FastAPI中配置from fastapi.responses import ORJSONResponse app.get(/, response_classORJSONResponse) async def root(): return {message: 使用更快的JSON序列化}5.3 批处理优化对于大批量文本处理建议使用批处理接口减少模型调用次数# 批量处理示例 texts [文本1, 文本2, 文本3, ...] # 多个文本 embeddings model.encode(texts, batch_size32) # 批量处理6. 总结通过这个教程我们成功将StructBERT中文相似度模型从Gradio界面迁移到了FastAPI高性能服务。这个方案有几个明显优势性能提升FastAPI基于ASGI支持异步处理比Gradio的同步处理快很多扩展性强可以轻松添加身份验证、速率限制、监控等功能部署灵活支持Docker容器化部署方便集成到现有系统接口标准化提供RESTful API各种编程语言都能调用相比原来的Gradio方案这个FastAPI版本更适合生产环境使用能够处理更高的并发请求响应速度也更快。在实际使用中你还可以根据需求添加更多功能比如缓存机制、负载均衡、监控告警等让服务更加稳定可靠。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。
StructBERT中文相似度模型部署教程:FastAPI替代Gradio高性能API方案
发布时间:2026/5/26 10:47:24
StructBERT中文相似度模型部署教程FastAPI替代Gradio高性能API方案1. 环境准备与快速部署想要快速搭建一个高性能的中文文本相似度服务吗StructBERT中文相似度模型是个不错的选择但原生的Gradio界面虽然友好性能却不够理想。今天我来教你用FastAPI打造一个高性能的API服务。首先我们需要准备基础环境# 创建项目目录 mkdir structbert-api cd structbert-api # 创建虚拟环境 python -m venv venv source venv/bin/activate # Linux/Mac # 或者 venv\Scripts\activate # Windows # 安装核心依赖 pip install fastapi uvicorn sentence-transformers numpy安装完成后我们创建一个简单的启动脚本# run_server.sh uvicorn main:app --host 0.0.0.0 --port 8000 --reload这样基础环境就准备好了接下来我们开始构建核心服务。2. 核心代码实现2.1 创建FastAPI应用让我们从创建一个基础的FastAPI应用开始# main.py from fastapi import FastAPI from sentence_transformers import SentenceTransformer import numpy as np from pydantic import BaseModel import time app FastAPI( titleStructBERT中文相似度API, description基于FastAPI的高性能中文文本相似度计算服务, version1.0.0 ) # 定义请求模型 class SimilarityRequest(BaseModel): text1: str text2: str class BatchRequest(BaseModel): texts: list # 加载模型首次运行需要下载 app.on_event(startup) async def load_model(): global model print(正在加载StructBERT模型...) start_time time.time() model SentenceTransformer(structbert-large-chinese) load_time time.time() - start_time print(f模型加载完成耗时: {load_time:.2f}秒)2.2 实现相似度计算接口现在添加核心的相似度计算功能# 继续在main.py中添加 app.post(/similarity) async def calculate_similarity(request: SimilarityRequest): 计算两个文本的相似度 try: # 编码文本 embeddings model.encode([request.text1, request.text2]) # 计算余弦相似度 similarity np.dot(embeddings[0], embeddings[1]) / ( np.linalg.norm(embeddings[0]) * np.linalg.norm(embeddings[1]) ) return { text1: request.text1, text2: request.text2, similarity: float(similarity), status: success } except Exception as e: return {error: str(e), status: error} app.post(/batch-similarity) async def batch_similarity(request: BatchRequest): 批量计算文本相似度 try: if len(request.texts) 2: return {error: 至少需要两个文本, status: error} # 编码所有文本 embeddings model.encode(request.texts) # 计算相似度矩阵 similarities [] norms np.linalg.norm(embeddings, axis1) normalized_embeddings embeddings / norms[:, np.newaxis] similarity_matrix np.dot(normalized_embeddings, normalized_embeddings.T) return { texts: request.texts, similarity_matrix: similarity_matrix.tolist(), status: success } except Exception as e: return {error: str(e), status: error}2.3 添加健康检查和其他接口为了服务的完整性我们再添加一些辅助接口# 继续添加 app.get(/) async def root(): return { message: StructBERT中文相似度API服务运行中, version: 1.0.0, endpoints: { /similarity: 计算两个文本的相似度, /batch-similarity: 批量计算文本相似度, /health: 服务健康检查 } } app.get(/health) async def health_check(): return { status: healthy, model_loaded: model in globals(), timestamp: time.time() } if __name__ __main__: import uvicorn uvicorn.run(app, host0.0.0.0, port8000)3. 配置优化和部署建议3.1 创建配置文件为了让服务更加稳定我们添加一些配置# config.py import os class Config: # 服务器配置 HOST os.getenv(HOST, 0.0.0.0) PORT int(os.getenv(PORT, 8000)) # 模型配置 MODEL_NAME structbert-large-chinese MAX_TEXT_LENGTH 512 # 最大文本长度 # 性能配置 MAX_WORKERS int(os.getenv(MAX_WORKERS, 4)) TIMEOUT int(os.getenv(TIMEOUT, 300))3.2 创建Docker部署文件为了便于部署我们创建一个Docker配置# Dockerfile FROM python:3.9-slim WORKDIR /app # 安装系统依赖 RUN apt-get update apt-get install -y \ gcc \ g \ rm -rf /var/lib/apt/lists/* # 复制依赖文件 COPY requirements.txt . RUN pip install -r requirements.txt # 复制应用代码 COPY . . # 暴露端口 EXPOSE 8000 # 启动命令 CMD [uvicorn, main:app, --host, 0.0.0.0, --port, 8000, --workers, 4]对应的requirements.txt文件fastapi0.104.1 uvicorn0.24.0 sentence-transformers2.2.2 numpy1.24.3 pydantic2.5.04. 使用示例和测试方法4.1 启动服务完成代码编写后启动服务# 直接运行 python main.py # 或者使用uvicorn uvicorn main:app --reload服务启动后访问 http://localhost:8000 可以看到API文档。4.2 测试API接口使用curl测试相似度计算# 测试单个相似度计算 curl -X POST http://localhost:8000/similarity \ -H Content-Type: application/json \ -d {text1: 今天天气真好, text2: 今天的天气很不错} # 测试批量计算 curl -X POST http://localhost:8000/batch-similarity \ -H Content-Type: application/json \ -d {texts: [苹果手机, iPhone, 香蕉水果]}4.3 Python客户端示例你也可以用Python代码来调用这个API# client_example.py import requests import json def test_similarity(): url http://localhost:8000/similarity data { text1: 深度学习模型训练, text2: 机器学习模型训练 } response requests.post(url, jsondata) result response.json() print(f相似度: {result[similarity]:.4f}) def test_batch_similarity(): url http://localhost:8000/batch-similarity data { texts: [ 人工智能技术, AI技术发展, 天气预报今天 ] } response requests.post(url, jsondata) result response.json() print(相似度矩阵:) for i, row in enumerate(result[similarity_matrix]): print(f文本{i}: {row}) if __name__ __main__: test_similarity() test_batch_similarity()5. 性能优化建议5.1 启用响应压缩在启动命令中添加压缩选项减少网络传输时间uvicorn main:app --host 0.0.0.0 --port 8000 --workers 4 --compress5.2 使用更快的JSON序列化安装orjson来提高JSON处理速度pip install orjson然后在FastAPI中配置from fastapi.responses import ORJSONResponse app.get(/, response_classORJSONResponse) async def root(): return {message: 使用更快的JSON序列化}5.3 批处理优化对于大批量文本处理建议使用批处理接口减少模型调用次数# 批量处理示例 texts [文本1, 文本2, 文本3, ...] # 多个文本 embeddings model.encode(texts, batch_size32) # 批量处理6. 总结通过这个教程我们成功将StructBERT中文相似度模型从Gradio界面迁移到了FastAPI高性能服务。这个方案有几个明显优势性能提升FastAPI基于ASGI支持异步处理比Gradio的同步处理快很多扩展性强可以轻松添加身份验证、速率限制、监控等功能部署灵活支持Docker容器化部署方便集成到现有系统接口标准化提供RESTful API各种编程语言都能调用相比原来的Gradio方案这个FastAPI版本更适合生产环境使用能够处理更高的并发请求响应速度也更快。在实际使用中你还可以根据需求添加更多功能比如缓存机制、负载均衡、监控告警等让服务更加稳定可靠。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。