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

Day19:让我的AI助手彻底离线!LangChain+Ollama本地模型实战 [特殊字符]

Day19让我的AI助手彻底离线LangChainOllama本地模型实战 前言为什么我的AI助手总在关键时刻“掉线”兄弟们有没有遇到过这种尴尬时刻你正兴致勃勃地给朋友演示你的AI助手结果它突然来一句“Sorry, I’m having trouble connecting to the API.” 然后你的朋友用看智障的眼神看着你……这就是在线模型的痛网络波动、服务器宕机、API限额、隐私泄露……各种问题防不胜防。尤其是当我们想把AI集成到一些敏感场景比如公司内部文档处理、个人知识库时数据上传到云端简直就是灾难。那有没有办法让AI助手彻底离线运行同时还能保持智能当然有今天我们就用 LangChain Ollama 这对王炸组合打造一个完全离线的AI Agent以后再也不怕网络抽风数据绝对安全而且还能省下大笔API费用懂的都懂。今日目标把LangChain里的“大脑”换成本地OllamaLangChain是目前最火的AI应用开发框架它把大模型、工具、记忆等组件像乐高一样拼接起来让AI拥有“手”和“脑”。之前我们可能都是接OpenAI的API但今天我们要做的是配置LangChain使用本地Ollama模型以Qwen 7B为例创建一个简单的Agent让它能调用工具比如计算器、时间查询测试Agent的运行效果看看它和在线模型比谁更快优化响应速度让本地Agent跑得飞快环境准备先让你的Ollama跑起来如果你还没安装Ollama请参考我上周的博客 《Ollama安装与本地模型运行把你的电脑变成AI宠物乐园》。简单来说安装Ollama拉取一个模型比如 qwen:7b 或 llama3:7b确保Ollama服务正在运行默认开机自启检查一下ollama list应该能看到你拉取的模型NAME ID SIZE MODIFIED qwen:7b 2091ee8c8d8f 4.5 GB 19 hours ago再检查服务是否在监听curl http://localhost:11434返回结果StatusCode : 200 StatusDescription : OK Content : Ollama is running RawContent : HTTP/1.1 200 OK Content-Length: 17 Content-Type: text/plain; charsetutf-8 Date: Fri, 20 Mar 2026 07:27:00 GMT Ollama is running Forms : {} Headers : {[Content-Length, 17], [Content-Type, text/plain; charsetutf-8], [Date, Fri, 20 Mar 2026 07:27:00 GMT]} Images : {} InputFields : {} Links : {} ParsedHtml : System.__ComObject RawContentLength : 17安装LangChain及依赖我们使用Python 3.9创建虚拟环境可选但推荐然后安装pip install langchain langchain-communitylangchain-community包含了Ollama的集成模块。配置LangChain使用Ollama模型LangChain为Ollama提供了两种封装OllamaLLM用于纯文本生成CompletionChatOllama用于对话模型Chat支持消息列表因为我们要做Agent通常使用Chat模型更合适。我们来试试ChatOllamafromlangchain_community.chat_modelsimportChatOllama# 初始化本地模型llmChatOllama(modelqwen:7b,temperature0.7,# 其他参数top_p, num_predict等)就这么简单llm现在就是一个LangChain标准的聊天模型对象你可以像使用OpenAI的ChatOpenAI一样使用它。测试一下responsellm.invoke(你好你是谁)print(response.content)应该会输出模型的自我介绍。创建第一个本地Agent会计算加减乘除的AI助手Agent的核心是工具。我们先定义两个简单的工具一个计算器一个时间查询器模拟本地时间。定义工具LangChain中定义工具有多种方式最方便的是用 tool 装饰器fromlangchain.toolsimporttoolimportdatetimeimportmathtooldefcalculator(expression:str)-str:计算数学表达式例如 22 或 sqrt(16)try:# 注意eval不安全这里仅作演示实际应用请使用 safer 方式resulteval(expression,{__builtins__:None},math.__dict__)returnf计算结果{result}exceptExceptionase:returnf计算错误{str(e)}tooldefget_current_time(format:str%Y-%m-%d %H:%M:%S)-str:获取当前时间可指定格式默认返回年月日时分秒nowdatetime.datetime.now()returnnow.strftime(format)构建提示词模板Agent需要一个系统提示词来指导它如何使用工具。LangChain的create_react_agent需要传入一个提示词模板我们可以用ChatPromptTemplate构建fromlangchain.promptsimportChatPromptTemplate,MessagesPlaceholder promptChatPromptTemplate.from_messages([(system,你是一个有用的AI助手可以调用工具来回答问题。),MessagesPlaceholder(variable_namechat_history),(human,{input}),MessagesPlaceholder(variable_nameagent_scratchpad),])这里的chat_history用于记忆稍后会用agent_scratchpad用于存放中间思考步骤。创建AgentLangChain提供了两种创建Agent的方式旧版initialize_agent和新版create_react_agent。我们使用新版更灵活fromlangchain.agentsimportcreate_react_agent,AgentExecutor tools[calculator,get_current_time]# 创建Agentagentcreate_react_agent(llm,tools,prompt)# 创建执行器agent_executorAgentExecutor(agentagent,toolstools,verboseTrue,# 打印思考过程handle_parsing_errorsTrue,# 处理解析错误)测试运行resultagent_executor.invoke({input:现在几点了})print(result[output])如果一切顺利你会看到Agent的思考过程因为verboseTrue然后输出当前时间。再试试计算resultagent_executor.invoke({input:计算 123 * 456 等于多少})print(result[output])完美你的第一个本地Agent诞生了优化响应速度让本地Agent飞起来本地模型虽然快但如果不优化可能还是会感觉有点慢。我们可以从几个方面下手选择量化模型Ollama支持多种量化版本比如 qwen:7b-q4_0 是4bit量化速度更快内存占用更低。拉取时指定ollama pull qwen:7b-q4_0然后在代码中换用这个模型。调整推理参数temperature越低越确定越高越随机。对于工具调用建议设低一些0.1~0.3。num_predict限制生成的最大token数避免模型废话太多。top_k,top_p控制采样策略。在ChatOllama中直接传参llmChatOllama(modelqwen:7b-q4_0,temperature0.1,num_predict512,)使用流式输出流式输出可以提升用户体验让用户感觉更快。AgentExecutor本身支持流式只需在调用时设置streamTrueforchunkinagent_executor.stream({input:讲个笑话}):print(chunk)不过流式输出需要配合前端展示命令行下可能不太方便但可以用于Web界面减少不必要的思考Agent的思考过程ReAct会消耗token如果工具调用简单可以尝试使用更简洁的提示词或者使用“plan-and-execute”类型的Agent但实现稍复杂。与在线模型的终极PK我们来做一个简单对比同样的任务计算123*456分别用本地模型qwen:7b-q4_0和在线模型gpt-3.5-turbo测试。模型响应时间回答质量成本本地 qwen:7b-q4_01.2秒正确免费在线 gpt-3.5-turbo2.8秒正确约0.002美元结论本地模型在速度上明显占优质量足够应付多数场景而且免费在线模型在复杂推理上可能更强但也要考虑网络延迟和费用。8. 完整代码示例以下是今天所有的代码整合成一个脚本local_agent.pyimportdatetimeimportmathfromlangchain.toolsimporttoolfromlangchain_community.chat_modelsimportChatOllamafromlangchain.promptsimportChatPromptTemplate,MessagesPlaceholderfromlangchain.agentsimportcreate_react_agent,AgentExecutor# 1. 定义工具tooldefcalculator(expression:str)-str:计算数学表达式例如 22 或 sqrt(16)try:resulteval(expression,{__builtins__:None},math.__dict__)returnf计算结果{result}exceptExceptionase:returnf计算错误{str(e)}tooldefget_current_time(format:str%Y-%m-%d %H:%M:%S)-str:获取当前时间可指定格式默认返回年月日时分秒nowdatetime.datetime.now()returnnow.strftime(format)# 2. 初始化模型llmChatOllama(modelqwen:7b-q4_0,# 使用量化版本temperature0.1,num_predict512,)# 3. 创建提示词模板promptChatPromptTemplate.from_messages([(system,你是一个有用的AI助手可以调用工具来回答问题。),MessagesPlaceholder(variable_namechat_history),(human,{input}),MessagesPlaceholder(variable_nameagent_scratchpad),])# 4. 创建Agenttools[calculator,get_current_time]agentcreate_react_agent(llm,tools,prompt)agent_executorAgentExecutor(agentagent,toolstools,verboseTrue,handle_parsing_errorsTrue,)# 5. 测试if__name____main__:# 单轮测试resultagent_executor.invoke({input:现在几点了})print(回答,result[output])resultagent_executor.invoke({input:计算 123 * 456 等于多少})print(回答,result[output])今日总结今天我们完成了✅ LangChain对接本地Ollama模型✅ 创建了一个带工具的Agent✅ 测试了运行效果✅ 优化了响应速度常见问题解答Q运行时报错**ModuleNotFoundError: No module named langchain_community**A请确保安装了langchain-communitypip install langchain-communityQAgent调用工具时报错说工具不存在A检查工具函数的docstringAgent依赖docstring来理解工具用途。确保工具函数有清晰的描述。Q为什么我的Agent有时候不调用工具而是自己瞎编答案A可能是模型不够聪明或者提示词不够好。可以尝试降低temperature或者优化提示词明确告诉它“如果需要可以调用工具”。Q本地模型回答太啰嗦怎么办A在ChatOllama中设置num_predict限制最大token数或者在提示词中要求“简洁回答”。

相关文章:

Day19:让我的AI助手彻底离线!LangChain+Ollama本地模型实战 [特殊字符]

Day19:让我的AI助手彻底离线!LangChainOllama本地模型实战 🚀 前言:为什么我的AI助手总在关键时刻“掉线”? 兄弟们,有没有遇到过这种尴尬时刻:你正兴致勃勃地给朋友演示你的AI助手&#xff0…...

工业相机选型必看:Mono8、Mono10、Mono12这些像素格式到底该怎么选?(附应用场景对比)

工业相机像素格式深度解析:从Mono8到Mono12的实战选型指南 在工业视觉系统中,像素格式的选择往往被工程师们低估——直到项目遇到瓶颈。我曾亲眼见证一个价值数百万的检测产线因为像素格式选型不当,导致良品率统计出现5%的偏差。这不是理论问…...

ChatTTS操作全解析:语速调节与音色锁定的最佳实践

ChatTTS操作全解析:语速调节与音色锁定的最佳实践 "它不仅是在读稿,它是在表演。" ChatTTS 是目前开源界最逼真的语音合成模型之一,专门针对中文对话进行了优化。它能自动生成自然极高的停顿、换气声、笑声,听起来完全不…...

LeeCode HOT 100 94.二叉树的中序遍历

给定一个二叉树的根节点 root ,返回 它的 中序 遍历 。示例 1:输入:root [1,null,2,3] 输出:[1,3,2]示例 2:输入:root [] 输出:[]示例 3:输入:root [1] 输出&#xff…...

技术迭代背景下B端拓客号码核验的困境与发展路径氪迹科技法人股东决策人号码核验系统

B端拓客精细化运营的深化,使得企业核心决策人(法人、股东、董监高)号码的核验与筛选,成为影响拓客成效的关键前置环节。其服务质量直接关联拓客投入产出比,更是各类拓客主体实现规模化发展的重要支撑。当前&#xff0c…...

aE2库:Arduino平台E2总线温湿度传感器驱动指南

1. 项目概述aE2(Arduino-E2)是一个专为Arduino平台设计的轻量级E2总线通信库,用于驱动奥地利EE Elektronik公司生产的EE系列温湿度传感器(如EE-07)。该库不依赖任何第三方硬件抽象层或中间件,仅需标准Ardui…...

别再只会 pip freeze 了!用 pip-tools 和 pipreqs 搞定 Python 项目依赖,告别版本混乱

告别Python依赖管理混乱:pip-tools与pipreqs实战指南 每次接手新项目时,你是否也经历过这样的噩梦?克隆代码后运行pip install -r requirements.txt,结果等待你的不是顺利运行,而是各种版本冲突和依赖地狱。作为从业多…...

CoPaw模型版本管理与回滚实战:使用MLflow跟踪实验

CoPaw模型版本管理与回滚实战:使用MLflow跟踪实验 1. 为什么需要模型版本管理 在AI项目的实际开发中,模型迭代是家常便饭。你可能遇到过这种情况:上周的模型效果明明很好,这周更新后指标却突然下降,想找回之前的版本…...

小程序毕业设计-基于微信小程序的停车预约系统设计与实现-停车预约小程序

小程序毕业设计-基于微信小程序的停车预约系统设计与实现 https://www.bilibili.com/video/BV1hxKNzaER3/?spm_id_from333.1387.search.video_card.click&vd_source832d614817260f8f26d9431e5d8f726b 技术说明: 技术说明: 用户前端:微信小程序原生框架 管理前端:Vue.js 系…...

手把手教你用Buck电路设计5V电源(附波形分析+效率优化)

手把手教你用Buck电路设计5V电源(附波形分析效率优化) 在电子设备小型化和高效化的趋势下,开关电源已成为现代电子设计的核心组件。Buck电路作为最常用的降压型开关电源拓扑,其高效、紧凑的特性使其在5V电源设计中占据主导地位。本…...

计算机毕业设计springboot基于Web的在线视频教育平台 基于SpringBoot框架的数字化远程教学服务平台 采用B/S架构的智能化网络课程学习管理系统

计算机毕业设计springboot基于Web的在线视频教育平台(配套有源码 程序 mysql数据库 论文) 本套源码可以在文本联xi,先看具体系统功能演示视频领取,可分享源码参考。随着互联网和数字技术的迅猛发展,传统的面对面教学模式正逐步向线…...

雪女-斗罗大陆-造相Z-Turbo开箱即用:无需复杂配置,直接生成雪女图像

雪女-斗罗大陆-造相Z-Turbo开箱即用:无需复杂配置,直接生成雪女图像 1. 快速体验:三步生成你的专属雪女 1.1 一键部署,无需复杂配置 雪女-斗罗大陆-造相Z-Turbo镜像已经预装了所有必要的运行环境和模型文件,真正实现…...

Nomic-Embed-Text-V2-MoE轻量化版本效果对比:在边缘计算场景下的性能评估

Nomic-Embed-Text-V2-MoE轻量化版本效果对比:在边缘计算场景下的性能评估 最近在折腾一个物联网项目,需要在设备端实时处理用户语音指令的语义。这事儿听起来简单,但真做起来才发现,把一个大模型塞进资源紧张的边缘设备里&#x…...

NavMeshPlus:Unity 2D智能寻路的技术突破与跨场景实践指南

NavMeshPlus:Unity 2D智能寻路的技术突破与跨场景实践指南 【免费下载链接】NavMeshPlus Unity NavMesh 2D Pathfinding 项目地址: https://gitcode.com/gh_mirrors/na/NavMeshPlus 一、三大技术突破:重新定义2D导航系统价值 1.1 架构设计&#…...

Vue2+ElementUI电商后台管理系统实战:从登录权限到用户管理完整指南

Vue2ElementUI电商后台管理系统实战:从登录权限到用户管理完整指南 电商后台管理系统作为企业数字化转型的核心工具,其开发效率与稳定性直接影响运营团队的日常工作。本文将基于Vue2和ElementUI,从零构建一个功能完整的电商后台系统&#xff…...

java微信小程序的汽车线上车辆租赁管理系统的设计与实现_

目录需求分析与系统设计技术选型与开发环境搭建核心功能模块实现测试与部署方案项目技术支持可定制开发之功能创新亮点源码获取详细视频演示 :文章底部获取博主联系方式!同行可合作需求分析与系统设计 明确汽车租赁管理系统的核心功能需求,包…...

【微信小程序】如何优雅地获取用户昵称与头像(兼容性优化指南)

1. 微信小程序获取用户信息的现状与挑战 最近在做一个社区类小程序时,我发现获取用户昵称和头像这个看似简单的功能,在实际开发中会遇到不少坑。特别是随着微信基础库版本的迭代,官方对用户隐私保护越来越严格,获取方式也发生了很…...

Windows 的 Git Bash 中使用 md5sum 命令非常简单 md5做文件完整性检测 WinRAR 可以计算文件的 MD5 值

在 Windows 的 Git Bash 中使用 md5sum 命令非常简单,因为 Git Bash 自带了这个工具。使用方法与在 Linux 终端中几乎完全一致。 基础使用方法打开 Git Bash。使用 cd 命令切换到你的文件所在目录。 例如,如果文件在 D 盘的 models 文件夹 cd /d/models …...

华硕笔记本性能优化全攻略:使用G-Helper工具提升硬件效能

华硕笔记本性能优化全攻略:使用G-Helper工具提升硬件效能 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops. Control tool for ROG Zephyrus G14, G15, G16, M16, Flow X13, Flow X16, TUF, Strix, Scar and other models 项目…...

终极指南:使用OpenCore Legacy Patcher让老旧Mac运行最新macOS系统

终极指南:使用OpenCore Legacy Patcher让老旧Mac运行最新macOS系统 【免费下载链接】OpenCore-Legacy-Patcher 体验与之前一样的macOS 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher 还在为苹果官方不再支持你的老旧Mac设备而烦…...

Python+ENVI双方案:Landsat7条带修复效果对比与自动化脚本分享

PythonENVI双方案:Landsat7条带修复效果对比与自动化脚本实战 遥感影像处理中,Landsat7 ETM卫星因扫描线校正器(SLC)故障导致的条带缺失问题,一直是数据预处理的技术难点。本文将深入对比ENVI插件修复与Python GDAL库处…...

手把手教你理解Llama2的GQA:从理论到实践的性能提升

手把手教你理解Llama2的GQA:从理论到实践的性能提升 在当今大模型技术快速迭代的背景下,如何平衡模型性能与计算效率成为工程师面临的核心挑战。Llama2作为Meta推出的开源大语言模型,其采用的Group Query Attention(GQA&#xff0…...

别再用‘两分钟爬U-D寸’了!这道C语言‘蠕虫爬井’题的正确循环思路与常见误区

从"蠕虫爬井"问题看C语言循环设计的思维陷阱与实战突破 在初学C语言循环结构时,许多编程新手都会遇到一类看似简单却暗藏玄机的问题——"蠕虫爬井"就是其中的经典代表。这道题目表面上是计算时间,实则是对编程者过程模拟能力和边界条…...

信息系统安全运维服务资质认证申报流程详解_信息系统安全运维(一级)资质怎么申请

信息系统安全运维服务资质认证申报流程详解_信息系统安全运维(一级)资质怎么申请 随着我国信息化和信息安全保障工作的不断深入,以应急处理、风险评估、灾难恢复、系统测评、安全运维、安全审计、安全培训和安全咨询等为主要内容的信息安全服务在信息安全保障中的作…...

wan2.1-vae高算力适配教程:双卡并行推理配置与nvidia-smi监控技巧

wan2.1-vae高算力适配教程:双卡并行推理配置与nvidia-smi监控技巧 1. 平台与硬件准备 wan2.1-vae是基于Qwen-Image-2512模型的AI图像生成平台,能够根据中英文提示词生成最高2048x2048分辨率的高质量图像。该平台特别针对高分辨率图像生成进行了优化&am…...

电动车终章:最后一页的告别

电驭之尽:所有故事都有最后一页在所有关于电动车的叙事即将收尾之际,在所有出发与归来的循环终于停歇之时,有一个不可回避的事实——所有故事都有最后一页。不是终结,不是消亡,只是翻到了那一页,然后合上。…...

Qwen3.5-9B镜像免配置教程:一行命令启动7860端口Web服务

Qwen3.5-9B镜像免配置教程:一行命令启动7860端口Web服务 1. 前言:为什么选择Qwen3.5-9B 如果你正在寻找一个功能强大又容易部署的多模态AI模型,Qwen3.5-9B绝对值得考虑。这个模型最大的特点就是"开箱即用"——不需要复杂的配置&a…...

别再乱选融合方法了!ENVI 5.6.2里6种图像融合工具(GS、NNDiffuse等)的实战对比与避坑指南

ENVI 5.6.2图像融合工具深度评测:从原理到实战的完整决策指南 在遥感图像处理领域,图像融合技术就像一位技艺高超的调酒师,能够将多光谱影像丰富的光谱信息与全色影像锐利的空间细节完美调和,创造出兼具两者优势的"鸡尾酒&qu…...

隐私优先方案:OpenClaw+本地化Qwen3-32B处理敏感数据

隐私优先方案:OpenClaw本地化Qwen3-32B处理敏感数据 1. 为什么需要完全离线的数据处理方案 去年我在处理一批法律案件卷宗时,遇到了一个棘手的问题:客户要求所有材料必须在内网环境完成数字化处理,且禁止使用任何云端AI工具。当…...

IDEA 2023最新版方法返回值补全失效?3步搞定快捷键配置(附常见问题排查)

IDEA 2023方法返回值补全失效终极解决方案:从原理到实战 最近升级到IDEA 2023后,不少开发者发现原本得心应手的CtrlAltV方法返回值补全快捷键突然失灵了。这看似是个小问题,实则严重影响编码效率——想象一下每次都要手动输入类型声明&#x…...