translategemma-4b-it开发者案例OllamaFastAPI封装为微服务供前端调用1. 项目背景与价值在实际开发中我们经常需要将AI模型能力集成到现有系统中。直接让前端调用Ollama服务存在诸多不便跨域问题、安全性考虑、接口标准化等。通过FastAPI将translategemma-4b-it模型封装为标准的RESTful API可以让前端开发者像调用普通接口一样使用翻译能力。这种微服务架构的优势很明显前后端分离、接口标准化、易于扩展、便于监控。无论是Web应用、移动端还是其他服务都能通过统一的API接口获得高质量的翻译服务。2. 环境准备与部署2.1 基础环境要求确保你的系统已经安装以下组件Python 3.8Ollama最新版本FastAPI及相关依赖2.2 Ollama模型部署首先确保translategemma:4b模型已经正确安装# 拉取模型如果尚未安装 ollama pull translategemma:4b # 验证模型是否可用 ollama run translategemma:4b 你好2.3 安装必要的Python包创建项目目录并安装依赖mkdir translate-service cd translate-service python -m venv venv source venv/bin/activate # Linux/Mac # 或 venv\Scripts\activate # Windows pip install fastapi uvicorn requests python-multipart3. FastAPI服务实现3.1 创建主服务文件新建main.py文件实现核心API逻辑from fastapi import FastAPI, HTTPException from fastapi.middleware.cors import CORSMiddleware import requests import json from pydantic import BaseModel app FastAPI(titleTranslateGemma API Service, version1.0.0) # 允许跨域请求 app.add_middleware( CORSMiddleware, allow_origins[*], allow_credentialsTrue, allow_methods[*], allow_headers[*], ) class TranslationRequest(BaseModel): text: str source_lang: str en target_lang: str zh-Hans class ImageTranslationRequest(BaseModel): image_url: str target_lang: str zh-Hans app.post(/translate/text) async def translate_text(request: TranslationRequest): 文本翻译接口 prompt f你是一名专业的{request.source_lang}至{request.target_lang}翻译员。 你的目标是准确传达原文的含义与细微差别同时遵循语法、词汇及文化敏感性规范。 仅输出{request.target_lang}译文无需额外解释或评论。请翻译以下文本 {request.text} try: response requests.post( http://localhost:11434/api/generate, json{ model: translategemma:4b, prompt: prompt, stream: False } ) if response.status_code 200: result response.json() return {translated_text: result[response]} else: raise HTTPException(status_code500, detail翻译服务内部错误) except Exception as e: raise HTTPException(status_code500, detailf翻译失败: {str(e)}) app.post(/translate/image) async def translate_image(request: ImageTranslationRequest): 图片翻译接口 prompt f你是一名专业的翻译员。请将图片中的文本翻译成{request.target_lang}。 仅输出{request.target_lang}译文无需额外解释或评论。 try: # 这里需要根据实际情况处理图片URL或base64编码 # 示例中使用图片URL实际可能需要下载图片或处理base64 response requests.post( http://localhost:11434/api/generate, json{ model: translategemma:4b, prompt: prompt, images: [request.image_url], stream: False } ) if response.status_code 200: result response.json() return {translated_text: result[response]} else: raise HTTPException(status_code500, detail图片翻译服务内部错误) except Exception as e: raise HTTPException(status_code500, detailf图片翻译失败: {str(e)}) app.get(/health) async def health_check(): 服务健康检查 return {status: healthy, model: translategemma:4b} if __name__ __main__: import uvicorn uvicorn.run(app, host0.0.0.0, port8000)3.2 启动服务运行以下命令启动FastAPI服务uvicorn main:app --reload --host 0.0.0.0 --port 8000服务启动后访问 http://localhost:8000/docs 可以看到自动生成的API文档。4. 前端调用示例4.1 JavaScript调用示例前端可以使用fetch或axios调用翻译服务// 文本翻译示例 async function translateText(text, sourceLang, targetLang) { try { const response await fetch(http://localhost:8000/translate/text, { method: POST, headers: { Content-Type: application/json, }, body: JSON.stringify({ text: text, source_lang: sourceLang, target_lang: targetLang }) }); const result await response.json(); return result.translated_text; } catch (error) { console.error(翻译失败:, error); return null; } } // 使用示例 translateText(Hello, how are you?, en, zh-Hans) .then(translation console.log(translation));4.2 图片翻译调用示例// 图片翻译示例 async function translateImage(imageUrl, targetLang) { try { const response await fetch(http://localhost:8000/translate/image, { method: POST, headers: { Content-Type: application/json, }, body: JSON.stringify({ image_url: imageUrl, target_lang: targetLang }) }); const result await response.json(); return result.translated_text; } catch (error) { console.error(图片翻译失败:, error); return null; } }5. 高级功能扩展5.1 批量翻译支持可以扩展API支持批量文本翻译class BatchTranslationRequest(BaseModel): texts: List[str] source_lang: str en target_lang: str zh-Hans app.post(/translate/batch) async def batch_translate(request: BatchTranslationRequest): 批量文本翻译接口 results [] for text in request.texts: # 这里可以添加并发处理提高效率 translated await translate_text_internal(text, request.source_lang, request.target_lang) results.append(translated) return {translations: results}5.2 支持更多语言对通过动态生成prompt支持多种语言对def generate_translation_prompt(text, source_lang, target_lang): language_pairs { (en, zh-Hans: 英语至中文, (zh-Hans, en: 中文至英语, (en, ja: 英语至日语, # 添加更多语言对支持 } pair_name language_pairs.get((source_lang, target_lang), f{source_lang}至{target_lang}) return f你是一名专业的{source_lang}至{target_lang}翻译员。 你的目标是准确传达原文的含义与细微差别同时遵循语法、词汇及文化敏感性规范。 仅输出{target_lang}译文无需额外解释或评论。请翻译以下文本 {text}6. 部署与优化建议6.1 生产环境部署对于生产环境建议使用# 使用gunicorn部署多worker gunicorn -w 4 -k uvicorn.workers.UvicornWorker main:app # 或者使用docker部署 # Dockerfile示例 FROM python:3.9-slim WORKDIR /app COPY requirements.txt . RUN pip install -r requirements.txt COPY . . CMD [uvicorn, main:app, --host, 0.0.0.0, --port, 8000]6.2 性能优化建议连接池管理为Ollama请求使用连接池异步处理使用异步HTTP客户端如httpx缓存机制对常见翻译结果进行缓存负载均衡多个Ollama实例负载均衡7. 总结通过FastAPI将translategemma-4b-it封装为微服务我们实现了标准化接口提供统一的RESTful API供前端调用跨平台支持任何能发送HTTP请求的应用都能使用翻译服务易于扩展可以轻松添加批量翻译、多语言支持等功能部署灵活支持本地部署、容器化部署等多种方式这种架构不仅解决了直接调用Ollama的技术限制还为后续的功能扩展和性能优化提供了良好基础。无论是个人项目还是企业应用都能通过这种方式快速集成高质量的翻译能力。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。