网站自助建站,手机网站怎么建立,公司网站点击量如何看,如何更改网站备案号Cogito 3B部署教程#xff1a;Ollama API对接FastAPI#xff0c;打造企业级AI服务接口 你是不是也想在自己的服务器上部署一个强大的AI模型#xff0c;然后通过一个标准的API接口来调用它#xff1f;比如#xff0c;你想开发一个智能客服系统#xff0c;或者一个内容创作…Cogito 3B部署教程Ollama API对接FastAPI打造企业级AI服务接口你是不是也想在自己的服务器上部署一个强大的AI模型然后通过一个标准的API接口来调用它比如你想开发一个智能客服系统或者一个内容创作助手但不想依赖第三方服务希望数据完全掌握在自己手里。今天我就带你一步步实现这个目标。我们将使用一个性能非常出色的开源模型——Cogito 3B通过Ollama来运行它再用FastAPI给它套上一个标准、高效的Web API外壳。整个过程就像给一台强大的发动机Cogito模型装上方向盘和油门Ollama再给它造一个漂亮、好用的驾驶舱FastAPI接口。学完这篇教程你将拥有一个完全由自己掌控、可以7x24小时稳定运行的企业级AI服务接口。无论是集成到你的网站、APP还是内部办公系统都变得轻而易举。1. 为什么选择Cogito 3B Ollama FastAPI在开始动手之前我们先快速了解一下这套技术组合的优势让你明白为什么这么选。1.1 认识我们的核心Cogito 3B模型Cogito v1预览版模型特别是我们今天要部署的cogito-v1-preview-llama-3B是个“小而美”的狠角色。性能强劲在大多数标准测试中它的表现都超过了同级别3B参数规模的其他知名开源模型比如LLaMA、DeepSeek和Qwen的同类模型。这意味着用更小的资源你能获得不错的智能水平。功能独特它是一个“混合推理”模型。简单说它有两种模式标准模式像普通聊天模型一样直接回答问题。推理模式在回答前会先“自我反思”一下像人一样多想想适合解决更复杂、需要逻辑思考的问题。实用性强专门针对编程、科学计算、指令理解和通用问答做了优化还支持超过30种语言和长达128K的上下文。对于大多数企业应用场景比如代码辅助、知识问答、多语言客服它都游刃有余。完全开源允许商业使用没有后顾之忧。1.2 强大的模型运行器OllamaOllama就像一个专为大型语言模型设计的“播放器”。它的好处是一键部署通过简单的命令就能拉取和运行各种模型管理起来非常方便。提供标准APIOllama本身自带了一个RESTful API默认在11434端口我们可以直接通过HTTP请求和模型对话。这为我们后续封装打下了基础。资源友好对CPU和GPU资源的管理比较高效特别适合在服务器上长期运行。1.3 高效的API框架FastAPIFastAPI是Python领域构建API的“当红炸子鸡”我们用它来封装Ollama的API理由如下开发极快用很少的代码就能构建出功能完整的API。自动文档它会自动生成漂亮的交互式API文档Swagger UI前端同事或者你自己测试的时候会爱死这个功能。性能卓越基于Starlette和Pydantic速度非常快能轻松应对高并发请求。类型安全利用Python的类型提示减少错误代码更清晰。简单比喻Cogito 3B是发动机Ollama是传动系统和底盘FastAPI就是那个拥有仪表盘、方向盘和空调的驾驶舱。接下来我们开始组装这辆“车”。2. 环境准备与Ollama部署首先我们需要一台Linux服务器Ubuntu 20.04/22.04或CentOS 7/8为例并确保有Python 3.8的环境。假设你已经通过SSH连接上了你的服务器。2.1 安装OllamaOllama的安装非常简单一行命令搞定。# 在终端中执行以下命令下载并安装Ollama curl -fsSL https://ollama.com/install.sh | sh安装完成后Ollama服务会自动启动。你可以用下面的命令检查状态# 检查Ollama服务状态 sudo systemctl status ollama如果看到active (running)的字样说明服务已经跑起来了。2.2 拉取并运行Cogito 3B模型Ollama安装好接下来就是把我们的“发动机”——Cogito 3B模型下载下来。# 从Ollama的模型库中拉取cogito:3b模型 ollama pull cogito:3b这个命令会从网络下载模型文件根据你的网速可能需要几分钟到十几分钟。下载完成后你就可以直接运行这个模型了# 在命令行中与cogito:3b模型交互类似聊天 ollama run cogito:3b运行后你会看到一个提示符这时你可以直接输入问题比如“用Python写一个快速排序函数”模型就会生成回答。按CtrlD可以退出这个交互模式。到这里模型已经在本地运行起来了。但我们的目标是通过API调用所以先让它在后台运行。# 让模型在后台以API服务模式运行 ollama serve # 或者使用nohup让它更稳定地在后台运行 # nohup ollama serve ollama.log 21 默认情况下Ollama的API服务运行在http://localhost:11434。你可以快速测试一下# 测试Ollama API是否正常工作 curl http://localhost:11434/api/tags如果返回一个JSON里面列出了你拉取的模型包括cogito:3b说明API服务一切正常。3. 构建FastAPI应用封装企业级接口现在“发动机”和“底盘”准备好了我们来打造“驾驶舱”。我们将创建一个Python项目用FastAPI提供更规范、更安全的API。3.1 创建项目并安装依赖首先为我们的API服务创建一个新的目录并设置虚拟环境推荐可以隔离依赖。# 创建项目目录并进入 mkdir cogito_fastapi_service cd cogito_fastapi_service # 创建虚拟环境假设使用python3 python3 -m venv venv # 激活虚拟环境 source venv/bin/activate # Linux/macOS # 如果是Windows使用venv\Scripts\activate # 安装必要的Python包 pip install fastapi uvicorn httpx python-dotenvfastapi: 我们的Web框架。uvicorn: 一个轻量级的ASGI服务器用于运行FastAPI应用。httpx: 一个现代化的HTTP客户端我们将用它来调用后端的Ollama API。python-dotenv: 用于从.env文件加载环境变量方便配置管理。3.2 设计API接口与编写核心代码我们的目标是提供两个最核心的接口/v1/chat/completions(模仿OpenAI格式)接收用户消息返回模型生成的回复。/health健康检查接口用于监控服务是否存活。在项目根目录下创建两个文件.env和main.py。首先创建.env文件来管理配置# .env 配置文件 OLLAMA_BASE_URLhttp://localhost:11434 OLLAMA_MODELcogito:3b API_HOST0.0.0.0 API_PORT8000然后创建主程序文件main.py# main.py import os from typing import List, Optional from fastapi import FastAPI, HTTPException from pydantic import BaseModel, Field import httpx from dotenv import load_dotenv import logging # 加载环境变量 load_dotenv() # 配置日志 logging.basicConfig(levellogging.INFO) logger logging.getLogger(__name__) # 从环境变量读取配置 OLLAMA_BASE_URL os.getenv(OLLAMA_BASE_URL, http://localhost:11434) OLLAMA_MODEL os.getenv(OLLAMA_MODEL, cogito:3b) API_HOST os.getenv(API_HOST, 0.0.0.0) API_PORT int(os.getenv(API_PORT, 8000)) # 初始化FastAPI应用 app FastAPI( titleCogito 3B API Service, description基于Ollama和FastAPI封装的企业级Cogito 3B模型API服务, version1.0.0 ) # 初始化HTTP客户端保持连接池以提高性能 client httpx.AsyncClient(timeout60.0) # 超时时间设为60秒 # ---------- 数据模型定义 (Request/Response Schema) ---------- class Message(BaseModel): 单条消息 role: str Field(..., description消息角色如 user, assistant, system) content: str Field(..., description消息内容) class ChatCompletionRequest(BaseModel): 聊天补全请求体 (模仿OpenAI格式) model: Optional[str] Field(defaultOLLAMA_MODEL, description使用的模型默认为配置的模型) messages: List[Message] Field(..., description消息历史列表) stream: Optional[bool] Field(defaultFalse, description是否使用流式输出) max_tokens: Optional[int] Field(default2048, description生成的最大token数) class ChatCompletionChoice(BaseModel): 聊天补全选项 index: int 0 message: Message finish_reason: Optional[str] stop class ChatCompletionResponse(BaseModel): 聊天补全响应体 (模仿OpenAI格式) id: str chatcmpl- # 简单模拟一个ID object: str chat.completion created: int 0 # 时间戳可以后续填充 model: str OLLAMA_MODEL choices: List[ChatCompletionChoice] usage: Optional[dict] {prompt_tokens: 0, completion_tokens: 0, total_tokens: 0} # ---------- 核心API端点 ---------- app.post(/v1/chat/completions, response_modelChatCompletionResponse) async def create_chat_completion(request: ChatCompletionRequest): 核心聊天补全接口。 接收用户消息调用后端Ollama服务返回模型生成的回复。 logger.info(f收到聊天请求消息数{len(request.messages)}) # 1. 准备发送给Ollama的请求数据 # 将消息列表转换为Ollama API所需的格式 prompt for msg in request.messages: prompt f{msg.role}: {msg.content}\n prompt assistant: # 提示模型开始回复 ollama_payload { model: request.model or OLLAMA_MODEL, prompt: prompt, stream: request.stream, options: { num_predict: request.max_tokens # Ollama中使用num_predict参数 } } # 2. 调用Ollama API ollama_url f{OLLAMA_BASE_URL}/api/generate try: logger.info(f调用Ollama API: {ollama_url}) response await client.post(ollama_url, jsonollama_payload) response.raise_for_status() # 如果状态码不是2xx抛出异常 ollama_result response.json() except httpx.RequestError as e: logger.error(f请求Ollama API失败: {e}) raise HTTPException(status_code503, detailf后端模型服务暂时不可用: {str(e)}) except httpx.HTTPStatusError as e: logger.error(fOllama API返回错误状态码: {e.response.status_code}) raise HTTPException(status_code502, detailf后端模型服务错误: {e.response.text}) # 3. 处理Ollama的响应并格式化成OpenAI兼容的格式 generated_text ollama_result.get(response, ).strip() logger.info(f模型生成完成长度{len(generated_text)}) # 构建返回给客户端的响应 assistant_message Message(roleassistant, contentgenerated_text) choice ChatCompletionChoice(messageassistant_message) return ChatCompletionResponse( choices[choice], modelrequest.model or OLLAMA_MODEL ) app.get(/health) async def health_check(): 健康检查端点。 用于监控服务是否正常运行也可以简单测试Ollama后端是否连通。 try: # 简单检查Ollama是否可访问 async with httpx.AsyncClient() as test_client: resp await test_client.get(f{OLLAMA_BASE_URL}/api/tags, timeout5.0) ollama_ok resp.status_code 200 except Exception: ollama_ok False status healthy if ollama_ok else degraded return { status: status, fastapi_service: running, ollama_backend: available if ollama_ok else unavailable } app.on_event(shutdown) async def shutdown_event(): 应用关闭时关闭HTTP客户端连接 await client.aclose() logger.info(HTTP客户端连接已关闭) # ---------- 主程序入口 ---------- if __name__ __main__: import uvicorn logger.info(f启动Cogito API服务监听 {API_HOST}:{API_PORT}) uvicorn.run(app, hostAPI_HOST, portAPI_PORT)3.3 代码要点解析这段代码虽然不长但包含了构建一个健壮API服务的关键点配置管理使用.env文件将API地址、模型名称、端口等配置外部化便于在不同环境开发、测试、生产部署。结构化数据使用Pydantic的BaseModel定义了清晰的请求和响应数据结构。这不仅能自动验证客户端传来的数据是否合法还能让FastAPI自动生成漂亮的API文档。错误处理在调用Ollama API时我们使用了try...except块来捕获网络错误和HTTP错误并向上游客户端返回友好的错误信息503服务不可用、502网关错误等而不是直接抛出Python异常。格式转换我们将通用的OpenAI API格式的请求messages列表转换成了Ollama API所需的prompt字符串格式。同时将Ollama的响应再包装成OpenAI兼容的格式返回。这样做的好处是前端代码如果之前是调用ChatGPT API的可以几乎无缝迁移到我们这个服务上。健康检查/health端点对于运维监控至关重要。它可以被Kubernetes、Docker Swarm或负载均衡器定期调用以判断服务实例是否健康。资源管理使用httpx.AsyncClient并保持长连接可以提高调用Ollama API的效率。在应用关闭时我们优雅地关闭了这个客户端。4. 启动服务与接口测试代码写好了让我们来启动它并看看效果。4.1 启动FastAPI服务在你的项目目录下虚拟环境已激活运行# 启动FastAPI开发服务器 python main.py你应该会看到类似下面的输出说明服务已经启动在http://0.0.0.0:8000INFO:root:启动Cogito API服务监听 0.0.0.0:8000 INFO: Started server process [12345] INFO: Waiting for application startup. INFO: Application startup complete. INFO: Uvicorn running on http://0.0.0.0:8000 (Press CTRLC to quit)4.2 测试API接口服务跑起来了我们通过几种方式来测试它。方法一使用自动生成的API文档最方便打开你的浏览器访问http://你的服务器IP:8000/docs。你会看到一个Swagger UI界面里面列出了我们刚写的两个接口。你可以直接在这个页面上点击“Try it out”输入数据然后点击“Execute”来测试/v1/chat/completions接口。方法二使用cURL命令测试打开另一个终端用curl命令来测试# 1. 测试健康检查接口 curl http://localhost:8000/health # 2. 测试核心聊天接口 curl -X POST http://localhost:8000/v1/chat/completions \ -H Content-Type: application/json \ -d { messages: [ {role: user, content: 请用简单的语言解释一下什么是人工智能} ], max_tokens: 150 }如果一切正常健康检查接口会返回{status:healthy, ...}聊天接口会返回一个JSON其中choices[0].message.content字段就是Cogito 3B模型生成的回答。方法三使用Python脚本测试创建一个test_client.py文件# test_client.py import httpx import asyncio async def test_chat(): async with httpx.AsyncClient() as client: response await client.post( http://localhost:8000/v1/chat/completions, json{ messages: [{role: user, content: 写一首关于春天的五言绝句。}] } ) print(状态码:, response.status_code) print(响应JSON:, response.json()) if __name__ __main__: asyncio.run(test_chat())运行python test_client.py看看模型生成的唐诗怎么样。5. 进阶配置与生产环境部署建议到目前为止一个可用的API服务已经搭建完成。但如果要用于真实的生产环境还需要考虑更多。5.1 配置优化与功能增强你可以根据需求修改main.py来增强服务增加身份验证API Key在关键的/v1/chat/completions接口上添加依赖项检查请求头中的Authorization字段。支持流式响应Streaming我们的代码中预留了stream参数。要真正支持流式输出需要修改接口使用FastAPI的StreamingResponse并处理Ollama返回的流式数据块。这对于需要实时显示生成结果的场景如聊天界面很重要。调整模型参数在调用Ollama API的options里可以加入更多参数比如temperature控制随机性、top_p核采样等来调整模型生成的效果。添加请求限流Rate Limiting使用像slowapi这样的中间件防止API被滥用。更详细的日志记录每个请求的耗时、token使用量等便于分析和计费。5.2 生产环境部署在开发服务器python main.py上运行没问题但生产环境需要更稳定、性能更好的方式。1. 使用Gunicorn/Uvicorn WorkerUvicorn本身是一个ASGI服务器但在生产环境中我们通常会在它前面再加一个进程管理器比如Gunicorn。# 安装gunicorn pip install gunicorn # 使用gunicorn启动服务使用4个worker进程 gunicorn -w 4 -k uvicorn.workers.UvicornWorker -b 0.0.0.0:8000 main:app-w 4: 指定4个worker进程可以根据你的CPU核心数调整。-k uvicorn.workers.UvicornWorker: 指定使用Uvicorn worker来处理ASGI应用。-b: 绑定地址和端口。main:app: 指定应用对象main是模块名app是FastAPI实例名。2. 使用进程守护与管理Systemd为了让服务在服务器重启后能自动运行并且方便管理启动、停止、重启、查看日志最好配置成系统服务。创建一个服务文件/etc/systemd/system/cogito-api.service[Unit] DescriptionCogito 3B FastAPI Service Afternetwork.target [Service] Useryour_username # 改为你的系统用户名 Groupyour_groupname # 改为你的用户组 WorkingDirectory/path/to/your/cogito_fastapi_service # 改为你的项目绝对路径 EnvironmentPATH/path/to/your/cogito_fastapi_service/venv/bin # 虚拟环境路径 ExecStart/path/to/your/cogito_fastapi_service/venv/bin/gunicorn -w 4 -k uvicorn.workers.UvicornWorker -b 0.0.0.0:8000 main:app Restartalways RestartSec10 [Install] WantedBymulti-user.target然后启用并启动服务sudo systemctl daemon-reload sudo systemctl enable cogito-api.service sudo systemctl start cogito-api.service # 查看状态和日志 sudo systemctl status cogito-api.service sudo journalctl -u cogito-api.service -f3. 使用反向代理Nginx在生产环境中通常不会让Gunicorn直接对外服务。我们会在前面加一个Nginx作为反向代理它可以处理静态文件、负载均衡、SSL/TLS加密HTTPS等。一个简单的Nginx配置片段 (/etc/nginx/sites-available/cogito-api)server { listen 80; server_name your_domain.com; # 你的域名或IP location / { proxy_pass http://127.0.0.1:8000; # 转发给Gunicorn proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } # 如果你有静态文件可以在这里配置 # location /static { # alias /path/to/your/static/files; # } }配置好后重启Nginx即可。你还可以使用Let‘s Encrypt为你的域名申请免费SSL证书配置HTTPS让API调用更安全。6. 总结回顾一下我们今天完成了一件很有成就感的事将顶尖的开源小模型Cogito 3B通过Ollama运行起来并用FastAPI封装成了一个标准、可扩展的企业级Web API服务。整个过程就像搭积木拉取模型用Ollama一键获取强大的Cogito 3B引擎。搭建桥梁用FastAPI快速构建一个高效、规范的API驾驶舱。连接内外编写适配代码将通用的API请求格式翻译成Ollama能听懂的语言再把结果包装成通用的格式返回。加固上线通过Gunicorn、Systemd、Nginx等工具让这个服务变得稳定、安全足以支撑生产环境。你现在拥有的不再只是一个命令行玩具而是一个可以通过网络被任何程序你的网站、手机App、内部工具调用的、功能完整的AI服务。你可以基于这个基础继续添加用户管理、计费、监控、更复杂的对话逻辑等功能打造属于你自己的AI产品后端。动手试试吧从今天开始把AI能力真正集成到你的业务流中。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。