当前位置: 首页 > article >正文

从零搭建本地大模型Agent:Ollama + FastAPI 实战指南

引言随着AI技术的爆发云端大模型API的调用成本不断攀升同时数据隐私问题也日益受到关注。越来越多的开发者开始将目光投向本地化部署方案。今天我将手把手教你如何利用Ollama FastAPI在本地搭建一个具备Agent能力的AI助手让它能够自主调用工具、执行任务彻底告别云端依赖。Ollama是一款极简的本地大模型管理工具它封装了复杂的模型下载、GPU加速和推理过程让开发者只需一条命令就能在本地运行Llama、Qwen、DeepSeek等主流模型。FastAPI则是构建高性能API的利器可以帮助我们将模型能力快速封装成REST服务。二者结合就能打造一个完全本地化、可扩展、具备Agent能力的AI应用系统。为什么需要Agent普通的大模型只能被动回答用户问题而Agent智能体能够自主判断用户意图、调用外部工具、执行多步骤任务。例如“帮我在北京订一间今晚的酒店” → Agent自动搜索酒店、比较价格、完成预订。2026年4月最新更新Ollama v0.21.0已正式发布新增Hermes Agent联动、Copilot CLI集成和多项性能修复本地Agent体验大幅提升。v0.18.3版本更是实现了VS Code原生集成一行命令即可在IDE中调用本地模型。目录一、环境搭建与Ollama部署二、模型下载与基础对话三、FastAPI封装REST接口四、Agent工具调用实战五、进阶优化与避坑指南六、总结一、环境搭建与Ollama部署1.1 安装Ollama访问 Ollama官网 下载对应操作系统的安装包双击安装即可。# Windows: 双击 OllamaSetup.exe 安装# macOS: brew install ollama# Linux: curl https://ollama.com/install.sh | sh验证安装ollama--version1.2 路径迁移可选推荐Ollama默认安装在C盘Windows模型也会存储在C盘。如果C盘空间紧张建议迁移到其他盘符。打开任务管理器结束Ollama进程将C:\Users\用户名\.ollama整个文件夹剪切到目标路径如D:\AIWorld\.ollama新增系统环境变量OLLAMA_MODELS变量值设为D:\AIWorld\.ollama\models重新启动Ollama小提示迁移后首次启动会重新加载已有模型无需重新下载。二、模型下载与基础对话2.1 拉取模型Ollama官方模型库支持Qwen、DeepSeek、Llama、Mistral等主流模型。本文以轻量高效的Qwen2.5:7B为例。# 拉取模型约4GB取决于网速ollama pull qwen2.5:7b# 查看已下载的模型列表ollama list# 直接运行对话ollama run qwen2.5:7b2.2 测试对话运行ollama run qwen2.5:7b后可以直接在终端中与模型对话输入exit退出。截图示例此处插入终端对话截图模型正常运行后的对话界面输入问题模型会生成回复三、FastAPI封装REST接口3.1 安装依赖pipinstallfastapi uvicorn requests pydantic3.2 基础API封装代码创建main.py编写最简API接口importrequestsfromfastapiimportFastAPIfrompydanticimportBaseModel appFastAPI(title本地大模型API)classChatRequest(BaseModel):prompt:strmodel:strqwen2.5:7bstream:boolFalseapp.post(/chat)defchat(request:ChatRequest):对话接口urlhttp://localhost:11434/api/generatedata{model:request.model,prompt:request.prompt,stream:request.stream}responserequests.post(url,jsondata)ifresponse.status_code200:return{response:response.json()[response]}else:return{error:f请求失败:{response.text}}3.3 启动服务uvicorn main:app--host0.0.0.0--port8000--reload访问http://localhost:8000/docs即可看到Swagger交互式文档在线测试API。截图示例FastAPI自动生成的API文档界面可以在这里直接测试接口四、Agent工具调用实战这是文章的核心部分。我们将让大模型具备自主调用外部工具的能力——当用户需要查询实时信息时Agent会主动调用天气API并返回结果。4.1 工具调用的核心原理Ollama从v0.18.3版本开始优化了工具调用的解析能力并支持流式工具调用。其流程是用户发送请求同时告诉模型可用的工具列表模型判断是否需要调用工具如需调用则返回tool_calls开发者执行工具函数将结果返回给模型模型根据工具结果生成最终回复4.2 完整Agent代码创建agent.pyimportrequestsimportjsonfromfastapiimportFastAPIfrompydanticimportBaseModelfromtypingimportList,Dict,Any appFastAPI(title本地AI Agent)# 定义可用工具 defget_current_weather(location:str,unit:strcelsius)-str:获取指定位置的天气模拟# 实际应用中可调用真实天气APIreturnf{location}的天气晴朗温度25{unit}defcalculate(expression:str)-str:计算数学表达式try:returnstr(eval(expression))except:return计算错误# 工具注册表TOOLS{get_current_weather:get_current_weather,calculate:calculate,}# 工具Schema告诉模型如何调用TOOLS_SCHEMA[{type:function,function:{name:get_current_weather,description:获取指定位置的天气,parameters:{type:object,properties:{location:{type:string,description:城市名},unit:{type:string,enum:[celsius,fahrenheit]}},required:[location]}}},{type:function,function:{name:calculate,description:计算数学表达式,parameters:{type:object,properties:{expression:{type:string,description:数学表达式}},required:[expression]}}}]classAgentRequest(BaseModel):prompt:strmodel:strqwen2.5:7bdefcall_ollama_with_tools(prompt:str,model:str):调用Ollama并处理工具调用urlhttp://localhost:11434/api/chatmessages[{role:user,content:prompt}]# 第一次请求模型决定是否调用工具payload{model:model,messages:messages,tools:TOOLS_SCHEMA,stream:False}responserequests.post(url,jsonpayload)ifresponse.status_code!200:returnfAPI错误:{response.text}resultresponse.json()messageresult.get(message,{})# 检查是否有工具调用tool_callsmessage.get(tool_calls,[])iftool_calls:# 执行工具调用fortool_callintool_calls:func_nametool_call[function][name]argumentsjson.loads(tool_call[function][arguments])iffunc_nameinTOOLS:tool_resultTOOLS[func_name](**arguments)# 将工具结果添加到对话中messages.append(message)messages.append({role:tool,content:tool_result,tool_call_id:tool_call.get(id,unknown)})# 第二次请求模型根据工具结果生成最终回答final_payload{model:model,messages:messages,stream:False}final_responserequests.post(url,jsonfinal_payload)returnfinal_response.json()[message][content]else:# 无工具调用直接返回returnmessage.get(content,)app.post(/agent)asyncdefagent_chat(request:AgentRequest):Agent对话接口responsecall_ollama_with_tools(request.prompt,request.model)return{response:response}if__name____main__:importuvicorn uvicorn.run(app,host0.0.0.0,port8000)4.3 测试Agentpython agent.py测试1工具调用天气查询curl-XPOST http://localhost:8000/agent\-HContent-Type: application/json\-d{prompt: 深圳今天天气怎么样}测试2工具调用数学计算curl-XPOST http://localhost:8000/agent\-HContent-Type: application/json\-d{prompt: 帮我计算 123 * 456 等于多少}测试3普通问答curl-XPOST http://localhost:8000/agent\-HContent-Type: application/json\-d{prompt: 介绍一下人工智能}截图示例这里推荐使用Postman 或 Apifox 等图形化工具工具调用成功后模型返回的包含计算结果的回复4.4 LangChain Ollama Agent更强大如果你需要更复杂的Agent能力可以使用LangChain框架。首先安装依赖pipinstalllangchain langchain-communityfromlangchain_community.llmsimportOllamafromlangchain.agentsimportinitialize_agent,Toolfromlangchain.agentsimportAgentType# 初始化本地模型llmOllama(modelqwen2.5:7b)# 定义工具tools[Tool(name天气查询,funcget_current_weather,description查询城市天气),Tool(name计算器,funccalculate,description数学计算)]# 初始化Agentagentinitialize_agent(tools,llm,agentAgentType.ZERO_SHOT_REACT_DESCRIPTION,verboseTrue)# 执行resultagent.run(深圳今天天气怎么样)print(result)五、进阶优化与避坑指南5.1 GPU加速配置默认情况下Ollama会使用CPU运行。如果需要GPU加速确保NVIDIA驱动已安装然后使用以下命令启动# Windows: 确保NVIDIA CUDA环境已配置ollama run qwen2.5:7b --num-gpu15.2 修改默认端口Ollama默认使用11434端口如需修改# Windows (PowerShell)$env:OLLAMA_HOST0.0.0.0:11435ollama serve# Linux/macOSexportOLLAMA_HOST0.0.0.0:11435ollama serve5.3 模型下载加速如果模型下载缓慢可以使用代理# Windows (PowerShell)$env:HTTP_PROXYhttp://127.0.0.1:7890ollama pull qwen2.5:7b# Linux/macOSexportHTTP_PROXYhttp://127.0.0.1:7890 ollama pull qwen2.5:7b5.4 常见错误及解决方案错误原因解决方案connection refusedOllama服务未启动确保ollama serve在后台运行no model found模型未下载执行ollama pull [model_name]out of memory显存/内存不足使用更小的模型如qwen2.5:1.5btool call not working模型不支持工具调用Qwen、Llama 3.1、DeepSeek等均支持5.5 性能优化建议使用4-bit量化模型qwen2.5:7b-q4占用约4GB显存质量损失极小合理设置上下文长度--num-ctx 2048监控资源使用ollama ps查看运行中的模型六、总结本文从零开始带领大家完成了以下工作✅ 部署Ollama本地大模型运行环境✅ 下载并测试Qwen2.5-7B模型✅ 使用FastAPI封装REST接口✅ 实现Agent工具调用让大模型能够自主执行任务技术架构总览用户请求 → FastAPI → Ollama API → 本地模型推理 → 工具调用判断 → 执行工具 → 返回结果后续扩展方向集成更多工具如搜索引擎、数据库查询、文件操作等构建RAG知识库结合Chroma向量数据库让模型回答私有文档问题开发Web前端使用React/Next.js构建聊天界面VS Code原生集成Ollama v0.18.3已支持一行命令集成到IDE参考资料Ollama官方文档FastAPI官方文档Qwen模型库互动提问你在本地部署过程中遇到了什么问题欢迎在评论区留言交流本文代码已上传至GitHub需要的朋友可以私信获取。如果觉得有用记得点赞收藏哦⭐

相关文章:

从零搭建本地大模型Agent:Ollama + FastAPI 实战指南

引言 随着AI技术的爆发,云端大模型API的调用成本不断攀升,同时数据隐私问题也日益受到关注。越来越多的开发者开始将目光投向本地化部署方案。今天,我将手把手教你如何利用 Ollama FastAPI,在本地搭建一个具备Agent能力的AI助手…...

深入理解Hash冲突:两个不相等的对象能否拥有相同的HashCode?

深入理解Hash冲突:两个不相等的对象能否拥有相同的HashCode? 在Java、Python等编程语言中,哈希表(HashMap、HashSet等)是极为常用的数据结构。而哈希码(hashCode)作为哈希表的核心概念&#xff…...

Linux Socket编程进阶:send()函数flags参数全解析,从MSG_DONTWAIT到MSG_MORE的实战避坑指南

Linux Socket编程进阶:send()函数flags参数全解析与实战避坑指南 在网络编程的世界里,send()函数就像是一位沉默的信使,而它的flags参数则是这位信使的"行为模式开关"。今天,我们不谈基础,直接深入探讨如何…...

AI代码审查实战:用大模型构建自动化代码质量守卫系统

代码审查的效率困境 每个技术团队都懂代码审查的价值,但实际执行中,它往往成为最大的开发摩擦点。资深工程师时间有限,基础问题却需要反复指出——命名不规范、缺少错误处理、安全漏洞隐患、重复代码……这些东西本可以自动化处理&#xff0c…...

保姆级教程:给VORON 2.4装上TMC2209驱动,手把手搞定Klipper配置与无传感器归零

VORON 2.4终极静音升级:TMC2209驱动配置与无传感器归零实战指南 当你深夜调试VORON 2.4时,是否被步进电机的尖锐噪音困扰?作为一台追求极致性能的coreXY机器,原装A4988或TMC2208驱动在静音性和微步控制上仍有提升空间。这次我们将…...

手把手教你用MATLAB仿真5G NR中的DM-RS与PT-RS:从序列生成到信道估计

5G NR参考信号深度实践:从MATLAB仿真到相位噪声补偿实战 在毫米波通信和Massive MIMO技术快速发展的今天,5G NR参考信号的设计与实现成为无线通信工程师必须掌握的核心技能。不同于传统LTE系统中"一刀切"的CRS参考信号,5G采用了更加…...

Degrees of Lewdity中文整合包:3分钟完成汉化美化全配置

Degrees of Lewdity中文整合包:3分钟完成汉化美化全配置 【免费下载链接】DOL-CHS-MODS Degrees of Lewdity 整合 项目地址: https://gitcode.com/gh_mirrors/do/DOL-CHS-MODS Degrees of Lewdity中文整合包(DOL-CHS-MODS)是一款专为中…...

real-anime-z实战教程:为原创IP‘琉璃姬’生成全套视觉资产(头像/立绘/LOGO)

real-anime-z实战教程:为原创IP琉璃姬生成全套视觉资产(头像/立绘/LOGO) 1. 项目背景与工具介绍 1.1 为什么选择real-anime-z 为原创动漫角色"琉璃姬"打造全套视觉资产是许多创作者面临的挑战。传统方式需要雇佣画师&#xff0c…...

ADK WinPE定制进阶:除了Explorer,我的PE里还集成了这些轻量级必备工具

ADK WinPE定制进阶:打造轻量高效的PE工具生态 在系统维护与部署领域,一个精心定制的WinPE环境就像技术人员的瑞士军刀——不在于功能繁多,而在于每项工具都能精准解决实际问题。当大多数现成PE系统要么功能冗余要么过于简陋时,掌握…...

Ubuntu服务器全盘加密与远程启动自动化解密实践

1. 为什么需要全盘加密与自动解密? 最近帮朋友配置了一台托管在机房的Ubuntu服务器,遇到个头疼的问题:既要保证数据安全,又要能远程重启。传统方案要么加密不彻底,要么每次开机都得手动输密码,对于无人值守…...

BES恒玄单线通讯避坑指南:解决‘收不到数据’、‘波形异常’等三大调试难题

BES恒玄单线通讯实战调试:从波形解析到中断优化的深度解决方案 当你在深夜的实验室里盯着示波器上那条纹丝不动的直线,GPIO中断就像个任性的孩子拒绝响应你的召唤——这种挫败感每个嵌入式开发者都深有体会。BES恒玄方案的单线通讯系统看似简单&#xf…...

窗口管理革命:PinWin如何用一键置顶彻底改变你的多任务工作流

窗口管理革命:PinWin如何用一键置顶彻底改变你的多任务工作流 【免费下载链接】PinWin Pin any window to be always on top of the screen 项目地址: https://gitcode.com/gh_mirrors/pin/PinWin 你是否曾因频繁切换窗口而打断工作思路?是否在编…...

NVIDIA Profile Inspector:解锁显卡隐藏潜能,打造极致游戏体验

NVIDIA Profile Inspector:解锁显卡隐藏潜能,打造极致游戏体验 【免费下载链接】nvidiaProfileInspector 项目地址: https://gitcode.com/gh_mirrors/nv/nvidiaProfileInspector 想要让显卡发挥出100%的实力吗?NVIDIA Profile Inspec…...

【含最新安装包】OpenClaw 2.6.4 环境搭建与一键部署全流程

OpenClaw(小龙虾)Windows 一键部署保姆级教程 | 10 分钟养出你的数字员工【点击下载最新安装包】 适配平台:Windows 10/11(64 位)|新手友好|全程可视化操作|无技术门槛 点击下方链…...

从荧光微球选购到成像避坑:一次完整的PSF测量实战记录(附ThermoFisher beads型号选择建议)

从荧光微球选购到成像避坑:一次完整的PSF测量实战记录 第一次独立完成PSF测量时,实验室的冷光灯下只有我和那瓶价值四位数的荧光微球面面相觑。作为课题组第一个尝试这项技术的人,我翻遍了文献却找不到关于"如何根据显微镜参数选择beads…...

如何高效管理中文文献:Jasminum插件完整指南与实战技巧

如何高效管理中文文献:Jasminum插件完整指南与实战技巧 【免费下载链接】jasminum A Zotero add-on to retrive CNKI meta data. 一个简单的Zotero 插件,用于识别中文元数据 项目地址: https://gitcode.com/gh_mirrors/ja/jasminum 还在为Zotero管…...

5分钟掌握Balena Etcher:安全镜像烧录的实战指南

5分钟掌握Balena Etcher:安全镜像烧录的实战指南 【免费下载链接】etcher Flash OS images to SD cards & USB drives, safely and easily. 项目地址: https://gitcode.com/GitHub_Trending/et/etcher 还在为制作系统启动盘而头疼吗?面对复杂…...

《后端开发全栈工具安装踩坑指南 经验沉淀手册》

《后端开发全栈工具安装踩坑指南 & 经验沉淀手册》这份汇总,是日常开发、环境搭建、中间件部署过程中,一步步踩坑、反复调优攒下来的实战级工具安装 & 配置沉淀。覆盖了编程语言运行环境、版本控制、数据库全家桶、Nginx/Kafka 等主流中间件、远…...

深度解析开源虚拟显示驱动:如何用Parsec VDD实现专业级多屏扩展方案

深度解析开源虚拟显示驱动:如何用Parsec VDD实现专业级多屏扩展方案 【免费下载链接】parsec-vdd ✨ Perfect virtual display for game streaming 项目地址: https://gitcode.com/gh_mirrors/pa/parsec-vdd Parsec VDD(Virtual Display Driver&a…...

别再滥用单例了!在Unity中实现一个轻量级、可测试的事件总线(Event Bus)系统

重构Unity事件系统:从单例依赖到可测试事件总线的进阶实践 在游戏开发中,我们经常遇到不同组件间需要通信的场景。传统做法是使用GameManager单例或静态类来全局传递数据,但这种做法会导致代码高度耦合、难以测试和维护。想象一下&#xff0c…...

从“看见”到“照见”:武印视界如何重构东方武道的沉浸式表达

在信息过载、注意力成为稀缺资源的当下,人们习惯了“看见”——看见别人的生活、看见算法推送的成功、看见屏幕上不断刷新的胜负。但真正稀缺的,是“照见”:在对手的眼睛里看见自己的恐惧,在胜者的泪水里看见自己的渴望&#xff0…...

终极指南:如何通过智能鼠标宏配置解锁PUBG精准射击的完整潜力

终极指南:如何通过智能鼠标宏配置解锁PUBG精准射击的完整潜力 【免费下载链接】logitech-pubg PUBG no recoil script for Logitech gaming mouse / 绝地求生 罗技 鼠标宏 项目地址: https://gitcode.com/gh_mirrors/lo/logitech-pubg 你是否在《绝地求生》的…...

这个OCR镜像真香!无需编码基础,可视化界面操作超简单

这个OCR镜像真香!无需编码基础,可视化界面操作超简单 1. 为什么选择这个OCR镜像 在日常工作和生活中,我们经常需要从图片中提取文字内容。无论是扫描的文档、拍摄的发票,还是路牌标识,手动输入这些文字既费时又容易出…...

LM在教育场景的应用:美术教学中AI辅助人像构图与光影教学可视化

LM在教育场景的应用:美术教学中AI辅助人像构图与光影教学可视化 1. 引言:AI如何改变美术教育 传统美术教学中,人像构图与光影表现一直是教学难点。学生需要大量时间练习才能掌握这些抽象概念,而教师也面临示范作品制作耗时、难以…...

3分钟破解QQ音乐格式封锁:qmcdump音频解密完整指南

3分钟破解QQ音乐格式封锁:qmcdump音频解密完整指南 【免费下载链接】qmcdump 一个简单的QQ音乐解码(qmcflac/qmc0/qmc3 转 flac/mp3),仅为个人学习参考用。 项目地址: https://gitcode.com/gh_mirrors/qm/qmcdump 你是否遇…...

别再东拼西凑了!我为你整理了一份超全的嵌入式开发知识图谱(含学习路线与避坑指南)

嵌入式开发者的终极成长指南:从菜鸟到架构师的系统化进阶路线 当我在2015年第一次接触STM32开发板时,面对满屏的寄存器配置和晦涩的数据手册,曾一度怀疑自己是否选错了职业方向。八年后的今天,当我带领团队完成第五代工业控制器开…...

nli-MiniLM2-L6-H768企业实操:NLI服务接入内部知识库语义检索链路

nli-MiniLM2-L6-H768企业实操:NLI服务接入内部知识库语义检索链路 1. 模型概述 nli-MiniLM2-L6-H768是一个专为自然语言推理(NLI)与零样本分类设计的轻量级交叉编码器(Cross-Encoder)模型。它在保持接近BERT-base精度的同时,通过6层768维的紧凑结构实现…...

Vue-Office终极指南:5分钟实现专业级Office文档预览方案

Vue-Office终极指南:5分钟实现专业级Office文档预览方案 【免费下载链接】vue-office 支持word(.docx)、excel(.xlsx,.xls)、pdf、pptx等各类型office文件预览的vue组件集合,提供一站式office文件预览方案,支持vue2和3,也支持Reac…...

别再踩坑了!Windows 10/11上SQL Server 2019 Developer版保姆级安装与SSMS配置全流程

Windows 10/11上SQL Server 2019 Developer版零失败安装指南 第一次在Windows上安装SQL Server 2019 Developer版时,我遇到了各种奇怪的问题——安装程序卡在某个步骤、服务无法启动、SSMS连接失败...后来才发现,很多问题其实都有简单的预防措施。本文将…...

Vue.js组件通信Emit处理长列表滚动到底部后的数据请求

<p>应使用 Intersection Observer 或 scrollTop clientHeight ≥ scrollHeight - threshold&#xff08;阈值10~50px&#xff09;判断触底&#xff0c;配合节流与 isLoading/noMore 状态守卫防重复请求&#xff0c;并在父组件用 concat 更新列表、$nextTick 后滚动到底部…...