构建AI智能体:二、DeepSeek的Ollama部署FastAPI封装调用

简介: 本文介绍如何通过Ollama本地部署DeepSeek大模型,结合FastAPI实现API接口调用。涵盖Ollama安装、路径迁移、模型下载运行及REST API封装全过程,助力快速构建可扩展的AI应用服务。

前言:


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


一、Ollama的安装与路径迁移


1.打开Ollama官网


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


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


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

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


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


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


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


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


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

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


二、Ollama的使用


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



运行指定命令下载模型,如下载deepseek-r1:1.5b 模型:

ollama pull deepseek-r1:1.5b


下载完成后,运行该模型:

ollama run deepseek-r1:1.5b


查看Ollama中正正运行的模型:

ollama ps

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


三、Ollama的API调用

ollama成功运行后,会提供一个REST API接口地址,默认运行在11434端口,http://localhost:11434/api/generate,调用方式参考如下:

import requests
# 调用ollama,指定模型和本地部署后api地址
def query_ollama(prompt, model="deepseek-r1:1.5b"):
    url = "http://localhost:11434/api/generate"
    data = {
        "model": model,
        "prompt": prompt,
        "stream": False  
    }
    response = requests.post(url, json=data)
    if response.status_code == 200:
        return response.json()["response"]
    else:
        raise Exception(f"API 请求失败: {response.text}")
# 使用示例
response = query_ollama("你好,你是什么大模型,请浓重介绍一下自己!")
print(response)


运行结果:

<think>
您好!我是由中国的深度求索(DeepSeek)公司开发的智能助手DeepSeek-R1。如您有任何任何问题,我会尽我所能为您提供帮助。
</think>
您好!我是由中国的深度求索(DeepSeek)公司开发的智能助手DeepSeek-R1。如您有任何任何问题,我会尽我所能为您提供帮助。


以上示例中结果为一次性输出,也可以调整为带有思考模式的逐字输出:

import requests
# 流模式输出结果内容
def query_ollama(prompt, model="deepseek-r1:1.5b", stream=False):
    url = "http://localhost:11434/api/generate"
    data = {
        "model": model,
        "prompt": prompt,
        "stream": stream  
    }
    if stream:
        # 开始处理流式响应结果
        with requests.post(url, json=data, stream=True) as response:
            if response.status_code == 200:
                # 逐行打印结果内容
                for line in response.iter_lines(decode_unicode=True):
                    if line:
                        # Ollama流式返回每行是一个json字符串
                        try:
                            import json
                            obj = json.loads(line)
                            print(obj.get("response", ""), end="", flush=True)
                        except Exception as e:
                            print(f"解析流式响应出错: {e}")
            else:
                raise Exception(f"API 请求失败: {response.text}")
    else:
        response = requests.post(url, json=data)
        if response.status_code == 200:
            return response.json()["response"]
        else:
            raise Exception(f"API 请求失败: {response.text}")
# 使用示例
print("流式响应结果输出:")
query_ollama("你好,你是什么大模型,请隆重介绍一下自己", stream=True)


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

http://127.0.0.1:8000/api/aichat


from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
from pydantic import BaseModel
import requests
app = FastAPI()
# 定义请求模型
class ChatRequest(BaseModel):
    prompt: str
    model: str = "deepseek-r1:1.5b"
# 允许跨域请求(根据需要配置)
app.add_middleware(
    CORSMiddleware,
    allow_origins=["*"],
    allow_methods=["*"],
    allow_headers=["*"],
)
#此处画重点,外部访问的接口地址
@app.post("/api/aichat")
async def chat(request: ChatRequest):
    ollama_url = "http://localhost:11434/api/generate"
    data = {
        "model": request.model, #接口调用要传入的模型参数
        "prompt": request.prompt, #接口调用要传入的指令
        "stream": False
    }
    response = requests.post(ollama_url, json=data)
    if response.status_code == 200:
        return {"response": response.json()["response"]}
    else:
        return {"error": "Failed to get response from Ollama"}, 500
if __name__ == "__main__":
    import uvicorn
#外部调用时访问的端口
    uvicorn.run(app, host="0.0.0.0", port=8000)


运行以上代码后,出现以下提示,表示接口成功运行:

INFO:     Started server process [10588]
INFO:     Waiting for application startup.
INFO:     Application startup complete.
INFO:     Uvicorn running on http://0.0.0.0:8000 (Press CTRL+C to quit)


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


如果不清楚Postman的使用,也可以通过Python测试:

import requests
response = requests.post(
    "http://localhost:8000/api/aichat",
    json={"model":"deepseek-r1:1.5b","prompt": "你好,请介绍一下你自己"}
)
print(response.json())


也会得到同样的输出结果:

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


相关文章
|
10月前
|
人工智能 数据处理 API
阿里云、Ververica、Confluent 与 LinkedIn 携手推进流式创新,共筑基于 Apache Flink Agents 的智能体 AI 未来
Apache Flink Agents 是由阿里云、Ververica、Confluent 与 LinkedIn 联合推出的开源子项目,旨在基于 Flink 构建可扩展、事件驱动的生产级 AI 智能体框架,实现数据与智能的实时融合。
1568 6
阿里云、Ververica、Confluent 与 LinkedIn 携手推进流式创新,共筑基于 Apache Flink Agents 的智能体 AI 未来
|
10月前
|
人工智能 运维 安全
加速智能体开发:从 Serverless 运行时到 Serverless AI 运行时
在云计算与人工智能深度融合的背景下,Serverless 技术作为云原生架构的集大成者,正加速向 AI 原生架构演进。阿里云函数计算(FC)率先提出并实践“Serverless AI 运行时”概念,通过技术创新与生态联动,为智能体(Agent)开发提供高效、安全、低成本的基础设施支持。本文从技术演进路径、核心能力及未来展望三方面解析 Serverless AI 的突破性价值。
|
10月前
|
人工智能 搜索推荐 数据可视化
当AI学会“使用工具”:智能体(Agent)如何重塑人机交互
当AI学会“使用工具”:智能体(Agent)如何重塑人机交互
955 115
|
10月前
|
人工智能 API 开发工具
构建AI智能体:一、初识AI大模型与API调用
本文介绍大模型基础知识及API调用方法,涵盖阿里云百炼平台密钥申请、DashScope SDK使用、Python调用示例(如文本情感分析、图像文字识别),助力开发者快速上手大模型应用开发。
3301 18
构建AI智能体:一、初识AI大模型与API调用
|
10月前
|
存储 机器学习/深度学习 人工智能
构建AI智能体:三、Prompt提示词工程:几句话让AI秒懂你心
本文深入浅出地讲解Prompt原理及其与大模型的关系,系统介绍Prompt的核心要素、编写原则与应用场景,帮助用户通过精准指令提升AI交互效率,释放大模型潜能。
1514 7
|
10月前
|
机器学习/深度学习 人工智能 JSON
PHP从0到1实现 AI 智能体系统并且训练知识库资料
本文详解如何用PHP从0到1构建AI智能体,涵盖提示词设计、记忆管理、知识库集成与反馈优化四大核心训练维度,结合实战案例与系统架构,助你打造懂业务、会进化的专属AI助手。
1462 6
|
10月前
|
存储 人工智能 前端开发
超越问答:深入理解并构建自主决策的AI智能体(Agent)
如果说RAG让LLM学会了“开卷考试”,那么AI智能体(Agent)则赋予了LLM“手和脚”,使其能够思考、规划并与真实世界互动。本文将深入剖析Agent的核心架构,讲解ReAct等关键工作机制,并带你一步步构建一个能够调用外部工具(API)的自定义Agent,开启LLM自主解决复杂任务的新篇章。
1996 6
|
10月前
|
人工智能 Cloud Native 自然语言处理
拔俗AI智能体服务开发:你的7x24小时数字员工,让企业效率飙升的秘密武器
在“人效为王”时代,企业面临服务响应慢、成本高、协同难等痛点。阿里云AI智能体以自主决策、多模态交互、持续学习三大引擎,打造永不疲倦的“数字员工”,实现7×24小时高效服务,助力企业降本增效、驱动创新增长。(238字)
673 0
|
10月前
|
存储 人工智能 搜索推荐
拔俗AI助教系统:基于大模型与智能体架构的新一代教育技术引擎
AI助教融合大语言模型、教育知识图谱、多模态感知与智能体技术,重构“教、学、评、辅”全链路。通过微调LLM、精准诊断错因、多模态交互与自主任务规划,实现个性化教学。轻量化部署与隐私保护设计保障落地安全,未来将向情感感知与教育深度协同演进。(238字)
1285 0