SmallThinker-3B-Preview镜像免配置:Ollama + FastAPI封装成标准REST API教程

张开发
2026/4/26 1:26:07 15 分钟阅读

分享文章

SmallThinker-3B-Preview镜像免配置:Ollama + FastAPI封装成标准REST API教程
SmallThinker-3B-Preview镜像免配置Ollama FastAPI封装成标准REST API教程1. 了解SmallThinker-3B-Preview模型SmallThinker-3B-Preview是一个基于Qwen2.5-3b-Instruct模型微调而来的轻量级AI模型。这个模型专门为边缘设备部署设计体积小巧但功能强大非常适合在资源受限的环境中运行。这个模型有两个主要用途一是作为独立的边缘AI助手可以在本地设备上快速响应各种查询二是作为更大模型QwQ-32B-Preview的草稿模型能够显著提升整体推理速度。通过专门的长链推理训练SmallThinker在处理复杂推理任务时表现出色。2. 环境准备与快速部署2.1 系统要求在开始之前请确保你的系统满足以下基本要求操作系统Linux Ubuntu 18.04 或 Windows 10/11内存至少8GB RAM存储空间10GB可用空间Python版本3.8或更高版本2.2 一键安装依赖打开终端或命令提示符执行以下命令安装所需依赖# 创建项目目录 mkdir smallthinker-api cd smallthinker-api # 安装Python依赖 pip install fastapi uvicorn ollama python-dotenv这些包的作用分别是fastapi用于构建REST API的现代框架uvicornASGI服务器用于运行FastAPI应用ollama与Ollama模型交互的Python客户端python-dotenv管理环境变量3. 创建FastAPI应用3.1 初始化应用结构首先创建项目文件结构touch main.py touch .env touch requirements.txt在requirements.txt中添加依赖fastapi0.104.1 uvicorn0.24.0 ollama0.1.6 python-dotenv1.0.03.2 编写核心API代码打开main.py文件添加以下代码from fastapi import FastAPI, HTTPException from fastapi.middleware.cors import CORSMiddleware import ollama from pydantic import BaseModel import os from dotenv import load_dotenv # 加载环境变量 load_dotenv() # 定义请求模型 class ChatRequest(BaseModel): message: str model: str smallthinker:3b max_tokens: int 1024 temperature: float 0.7 # 定义响应模型 class ChatResponse(BaseModel): response: str model: str tokens_used: int # 创建FastAPI应用 app FastAPI( titleSmallThinker API, descriptionREST API for SmallThinker-3B-Preview model, version1.0.0 ) # 添加CORS中间件 app.add_middleware( CORSMiddleware, allow_origins[*], allow_credentialsTrue, allow_methods[*], allow_headers[*], ) app.get(/) async def root(): return {message: SmallThinker API is running!} app.post(/chat, response_modelChatResponse) async def chat_completion(request: ChatRequest): try: # 调用Ollama模型 response ollama.chat( modelrequest.model, messages[{role: user, content: request.message}], options{ num_predict: request.max_tokens, temperature: request.temperature } ) return ChatResponse( responseresponse[message][content], modelrequest.model, tokens_usedlen(response[message][content].split()) ) except Exception as e: raise HTTPException(status_code500, detailfModel error: {str(e)}) app.get(/models) async def list_models(): try: models ollama.list() return {models: models} except Exception as e: raise HTTPException(status_code500, detailfError listing models: {str(e)}) if __name__ __main__: import uvicorn uvicorn.run(app, host0.0.0.0, port8000)4. 配置环境与运行应用4.1 环境配置在.env文件中添加配置# API配置 API_HOST0.0.0.0 API_PORT8000 # 模型配置 DEFAULT_MODELsmallthinker:3b MAX_TOKENS1024 TEMPERATURE0.74.2 启动API服务在终端中运行以下命令启动服务# 方式一直接运行Python文件 python main.py # 方式二使用uvicorn命令 uvicorn main:app --host 0.0.0.0 --port 8000 --reload服务启动后你会在终端看到类似这样的输出INFO: Uvicorn running on http://0.0.0.0:8000 (Press CTRLC to quit)5. 测试API接口5.1 使用curl测试打开新的终端窗口使用curl测试API# 测试根端点 curl http://localhost:8000/ # 发送聊天请求 curl -X POST http://localhost:8000/chat \ -H Content-Type: application/json \ -d { message: 你好请介绍一下你自己, model: smallthinker:3b, max_tokens: 256, temperature: 0.7 }5.2 使用Python客户端测试创建测试脚本test_api.pyimport requests import json def test_chat_api(): url http://localhost:8000/chat payload { message: 请用中文写一首关于春天的短诗, model: smallthinker:3b, max_tokens: 150, temperature: 0.8 } try: response requests.post(url, jsonpayload) if response.status_code 200: result response.json() print(响应内容:, result[response]) print(使用模型:, result[model]) print(令牌使用:, result[tokens_used]) else: print(请求失败:, response.text) except Exception as e: print(请求异常:, str(e)) if __name__ __main__: test_chat_api()运行测试脚本python test_api.py6. 高级功能与配置6.1 添加流式响应如果你想支持流式响应逐字输出可以修改API端点from fastapi.responses import StreamingResponse import asyncio app.post(/chat/stream) async def chat_stream(request: ChatRequest): async def generate(): try: # 流式调用Ollama stream ollama.chat( modelrequest.model, messages[{role: user, content: request.message}], streamTrue, options{ num_predict: request.max_tokens, temperature: request.temperature } ) for chunk in stream: if message in chunk and content in chunk[message]: yield fdata: {chunk[message][content]}\n\n await asyncio.sleep(0.01) except Exception as e: yield fdata: Error: {str(e)}\n\n return StreamingResponse(generate(), media_typetext/event-stream)6.2 添加身份验证为了增加安全性可以添加简单的API密钥验证from fastapi import Depends, Header from typing import Optional API_KEYS [your-secret-key-here] # 在实际应用中从环境变量读取 async def verify_api_key(api_key: Optional[str] Header(None)): if api_key not in API_KEYS: raise HTTPException(status_code401, detailInvalid API key) return api_key app.post(/secure/chat) async def secure_chat(request: ChatRequest, api_key: str Depends(verify_api_key)): # 原有的聊天逻辑 return await chat_completion(request)7. 部署与优化建议7.1 生产环境部署对于生产环境建议使用# 使用Gunicorn作为生产服务器 pip install gunicorn gunicorn -w 4 -k uvicorn.workers.UvicornWorker main:app # 或者使用Docker部署7.2 性能优化创建docker-compose.yml文件用于容器化部署version: 3.8 services: smallthinker-api: build: . ports: - 8000:8000 environment: - API_HOST0.0.0.0 - API_PORT8000 restart: unless-stopped创建DockerfileFROM python:3.9-slim WORKDIR /app COPY requirements.txt . RUN pip install --no-cache-dir -r requirements.txt COPY . . EXPOSE 8000 CMD [uvicorn, main:app, --host, 0.0.0.0, --port, 8000]8. 总结通过本教程你已经成功将SmallThinker-3B-Preview模型封装成了标准的REST API服务。这个方案的优势在于快速部署无需复杂配置几分钟内就能搭建完整的AI服务标准化接口提供统一的REST API方便各种客户端调用灵活扩展可以轻松添加身份验证、流式响应等高级功能生产就绪提供了容器化部署方案适合生产环境使用现在你可以让各种应用程序通过HTTP请求来使用SmallThinker模型的智能能力了。无论是网站聊天机器人、移动应用还是其他系统集成都能通过这个统一的API接口来访问AI功能。记得在实际使用时根据你的具体需求调整配置参数比如响应长度、温度值等以获得最佳的对话效果。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。

更多文章