服务器大本营

 找回密码
 我要入营

QQ登录

只需一步,快速开始

查看: 9|回复: 0

AI智能体搭建实战教程之DeepSeek的Ollama部署FastAPI封装调用

[复制链接]

8万

敬重

935

主题

207

精华

管理员

积分
9800

启航之章进阶之印里程之碑突破之证飞跃之星蜕变之勋卓越之路龙年行大运

QQ
发表于 2 小时前 | 显示全部楼层 |阅读模式

我要入营,结交更多好友,开启更多功能,轻松玩转服务器大本营!

您需要 登录 才可以下载或查看,没有账号?我要入营

x
前言
DeepSeek的横空出世引爆了AI大模型的势如破竹之势,在深度进入AI领域之前,对DeepSeek有个初步的了解和使用体验也至关重要,本文将结合Ollama实现本地化部署并生成开放接口,经由FastAPI调用实现!

一、Ollama的安装与路径迁移
1、打开Ollama官网

AI智能体搭建实战教程之DeepSeek的Ollama部署FastAPI封装调用

AI智能体搭建实战教程之DeepSeek的Ollama部署FastAPI封装调用


2、点击Download,按需选中要下载的版本,本文以Windows版本为例;

AI智能体搭建实战教程之DeepSeek的Ollama部署FastAPI封装调用

AI智能体搭建实战教程之DeepSeek的Ollama部署FastAPI封装调用


3、下载完成后,双击OllamaSetup.exe直接运行后点击Install开始安装,注意此处无法选择安装目录,如果需要修改目录需手动迁移;

AI智能体搭建实战教程之DeepSeek的Ollama部署FastAPI封装调用

AI智能体搭建实战教程之DeepSeek的Ollama部署FastAPI封装调用


4、安装完成后,打开cmd,运行ollama -v即可查看安装的Ollama版本信息

AI智能体搭建实战教程之DeepSeek的Ollama部署FastAPI封装调用

AI智能体搭建实战教程之DeepSeek的Ollama部署FastAPI封装调用


Ollama默认安装在C盘中:C:\Users\du\AppData\Local\Ollama,如果考虑到C盘空间需迁移目录,需手动迁移到指定目录;

5、目录迁移前先查看进程中Ollama是否正正运行,如在运行中需先结束进程,避免文件拷贝失败;

AI智能体搭建实战教程之DeepSeek的Ollama部署FastAPI封装调用

AI智能体搭建实战教程之DeepSeek的Ollama部署FastAPI封装调用


6、将整个文件夹直接剪切到新的路径,如D:\AIWorld\Ollama

AI智能体搭建实战教程之DeepSeek的Ollama部署FastAPI封装调用

AI智能体搭建实战教程之DeepSeek的Ollama部署FastAPI封装调用


7、路径迁移后需修改环境变量配置,打开环境变量

AI智能体搭建实战教程之DeepSeek的Ollama部署FastAPI封装调用

AI智能体搭建实战教程之DeepSeek的Ollama部署FastAPI封装调用


8、依次打开【环境变量】中的【Path】变量,直接在旧的配置上编辑或增加新的路径;

AI智能体搭建实战教程之DeepSeek的Ollama部署FastAPI封装调用

AI智能体搭建实战教程之DeepSeek的Ollama部署FastAPI封装调用


9、安装的路径配置完毕,还需新建或者修改系统变量中的OLLAMA_MODELS变量,将变量值改为目标路径

AI智能体搭建实战教程之DeepSeek的Ollama部署FastAPI封装调用

AI智能体搭建实战教程之DeepSeek的Ollama部署FastAPI封装调用


至此,Ollama安装路径迁移完毕,重新运行ollama.exe即可启动程序;

二、Ollama的使用
访问Ollama的官方模型库,library (ollama.com),选择需要的模型

AI智能体搭建实战教程之DeepSeek的Ollama部署FastAPI封装调用

AI智能体搭建实战教程之DeepSeek的Ollama部署FastAPI封装调用


运行指定命令下载模型,如下载deepseek-r1:1.5b 模型:
  1. ollama pull deepseek-r1:1.5b
复制代码

AI智能体搭建实战教程之DeepSeek的Ollama部署FastAPI封装调用

AI智能体搭建实战教程之DeepSeek的Ollama部署FastAPI封装调用


下载完成后,运行该模型:
  1. ollama run deepseek-r1:1.5b
复制代码

AI智能体搭建实战教程之DeepSeek的Ollama部署FastAPI封装调用

AI智能体搭建实战教程之DeepSeek的Ollama部署FastAPI封装调用


查看Ollama中正正运行的模型:
  1. ollama ps
复制代码

AI智能体搭建实战教程之DeepSeek的Ollama部署FastAPI封装调用

AI智能体搭建实战教程之DeepSeek的Ollama部署FastAPI封装调用


模型已经运行成功,并可进行对话,经过思考后输出反馈,至此,模型的搭建成功并正常运行!

三、Ollama的API调用
ollama成功运行后,会提供一个REST API接口地址,默认运行在11434端口,http://localhost:11434/api/generate,调用方式参考如下:
  1. import requests
  2. # 调用ollama,指定模型和本地部署后api地址
  3. def query_ollama(prompt, model="deepseek-r1:1.5b"):
  4.     url = "http://localhost:11434/api/generate"
  5.     data = {
  6.         "model": model,
  7.         "prompt": prompt,
  8.         "stream": False  
  9.     }
  10.     response = requests.post(url, json=data)
  11.     if response.status_code == 200:
  12.         return response.json()["response"]
  13.     else:
  14.         raise Exception(f"API 请求失败: {response.text}")
  15. # 使用示例
  16. response = query_ollama("你好,你是什么大模型,请浓重介绍一下自己!")
  17. print(response)
复制代码

运行结果:
  1. <think>
  2. 您好!我是由中国的深度求索(DeepSeek)公司开发的智能助手DeepSeek-R1。如您有任何任何问题,我会尽我所能为您提供帮助。
  3. </think>
  4. 您好!我是由中国的深度求索(DeepSeek)公司开发的智能助手DeepSeek-R1。如您有任何任何问题,我会尽我所能为您提供帮助。
复制代码

以上示例中结果为一次性输出,也可以调整为带有思考模式的逐字输出:
  1. import requests
  2. # 流模式输出结果内容
  3. def query_ollama(prompt, model="deepseek-r1:1.5b", stream=False):
  4.     url = "http://localhost:11434/api/generate"
  5.     data = {
  6.         "model": model,
  7.         "prompt": prompt,
  8.         "stream": stream  
  9.     }
  10.     if stream:
  11.         # 开始处理流式响应结果
  12.         with requests.post(url, json=data, stream=True) as response:
  13.             if response.status_code == 200:
  14.                 # 逐行打印结果内容
  15.                 for line in response.iter_lines(decode_unicode=True):
  16.                     if line:
  17.                         # Ollama流式返回每行是一个json字符串
  18.                         try:
  19.                             import json
  20.                             obj = json.loads(line)
  21.                             print(obj.get("response", ""), end="", flush=True)
  22.                         except Exception as e:
  23.                             print(f"解析流式响应出错: {e}")
  24.             else:
  25.                 raise Exception(f"API 请求失败: {response.text}")
  26.     else:
  27.         response = requests.post(url, json=data)
  28.         if response.status_code == 200:
  29.             return response.json()["response"]
  30.         else:
  31.             raise Exception(f"API 请求失败: {response.text}")
  32. # 使用示例
  33. print("流式响应结果输出:")
  34. query_ollama("你好,你是什么大模型,请隆重介绍一下自己", stream=True)
复制代码

当本地的模型部署完毕后,可以使用FastAPI进行封装后提供给外部调用,主要注意接口地址和端口,以下配置路径没有特别限制,可自定义调整:
  1. http://127.0.0.1:8000/api/aichat
复制代码

  1. from fastapi import FastAPI
  2. from fastapi.middleware.cors import CORSMiddleware
  3. from pydantic import BaseModel
  4. import requests
  5. app = FastAPI()
  6. # 定义请求模型
  7. class ChatRequest(BaseModel):
  8.     prompt: str
  9.     model: str = "deepseek-r1:1.5b"
  10. # 允许跨域请求(根据需要配置)
  11. app.add_middleware(
  12.     CORSMiddleware,
  13.     allow_origins=["*"],
  14.     allow_methods=["*"],
  15.     allow_headers=["*"],
  16. )
  17. #此处画重点,外部访问的接口地址
  18. @app.post("/api/aichat")
  19. async def chat(request: ChatRequest):
  20.     ollama_url = "http://localhost:11434/api/generate"
  21.     data = {
  22.         "model": request.model, #接口调用要传入的模型参数
  23.         "prompt": request.prompt, #接口调用要传入的指令
  24.         "stream": False
  25.     }
  26.     response = requests.post(ollama_url, json=data)
  27.     if response.status_code == 200:
  28.         return {"response": response.json()["response"]}
  29.     else:
  30.         return {"error": "Failed to get response from Ollama"}, 500
  31. if __name__ == "__main__":
  32.     import uvicorn
  33. #外部调用时访问的端口
  34.     uvicorn.run(app, host="0.0.0.0", port=8000)
复制代码

运行以上代码后,出现以下提示,表示接口成功运行:
  1. INFO:     Started server process [10588]
  2. INFO:     Waiting for application startup.
  3. INFO:     Application startup complete.
  4. INFO:     Uvicorn running on http://0.0.0.0:8000 (Press CTRL+C to quit)
复制代码

可以使用接口测试工具Postman测试接口是否可以正常调用,输出的结果包含了思考部分和最终结果,可以实现推理到结果的过程:

AI智能体搭建实战教程之DeepSeek的Ollama部署FastAPI封装调用

AI智能体搭建实战教程之DeepSeek的Ollama部署FastAPI封装调用


如果不清楚Postman的使用,也可以通过Python测试:
  1. import requests
  2. response = requests.post(
  3.     "http://localhost:8000/api/aichat",
  4.     json={"model":"deepseek-r1:1.5b","prompt": "你好,请介绍一下你自己"}
  5. )
  6. print(response.json())
复制代码

也会得到同样的输出结果:
  1. {'response': '<think>\n\n</think>\n\n您好!我是由中国的深度求索(DeepSeek)公司开发的智能助手DeepSeek-R1。关于我以及我的能力,请参考官方文档或使用相关AI服务工具获取详细信息。'}
复制代码

感谢您的阅读,服务器大本营-技术文章内容集合站,助您成为更专业的服务器管理员!
一入IDC深似海,从此你我是良人!
您需要登录后才可以回帖 登录 | 我要入营

本版积分规则

点击直接加入[服务器大本营QQ频道]
滴!摸鱼时间到~
Loading...

QQ|Archiver|手机版|网站地图|服务器大本营 ( 赣ICP备2021009089号 )

GMT+8, 2025-10-25 19:48 , Processed in 0.061464 second(s), 27 queries , Gzip On.

Powered by 服务器大本营

© 2021-2023 联系飞飞

快速回复 返回顶部 返回列表