LLM意图识别器实践
利用 Ollama 和 LangChain 强化条件判断语句的智能提示分类
❝
本文译自Supercharging If-Statements With Prompt Classification Using Ollama and LangChain一文,以Lumos工具为例,讲解了博主在工程实践中,如何基于LangChain框架和本地LLM优雅实现了通用的意图识别工具。
简短回顾 Lumos! 🪄
我以前写过不少关于 Lumos 的内容,所以这次我就简短介绍一下。Lumos 是一个基于本地大型语言模型(LLM)开发的网页浏览辅助工具,呈现为 Chrome 浏览器插件形式。它可以抓取当前页面的内容,并把抓取的数据在一个在线内存 RAG 工作流中处理,一切都在一个请求上下文内完成。Lumos 建立在 LangChain 基础上,并由 Ollama 本地LLM驱动,开源且免费。
Lumos 擅长于大型语言模型(LLM)所擅长的任务,比如:
- 摘要新闻文章、论坛帖子与聊天历史
- 关于餐厅和产品评价的查询
- 提取来自密集技术文档的细节
Lumos 甚至帮我优化了学习西班牙语的过程。该应用的操作逻辑极其方便。随着我不断深入使用这个应用,我也渐渐发掘出用LLM在浏览器中的新奇用法。
重建计算功能 🧮
在处理文本任务时,LLM 既有创意又灵巧。但它们的设计原则不是基于确定性Andrej Karpathy 曾将大型语言模型形容为 “dream machines”。因此,像 456*4343
这样简单的运算,LLM无法通过预测模型给出正确的回答。对于一个包含众多数值和符号的复杂方程,即便是最高级的模型也可能力不从心。
456*4343 — 56/(443-11+4)
等于多少?
GPT-3.5 错误地“计算”了 456*4343
Llama2 错误地“计算”了 456*4343
LLMs 在处理特定任务时需要借助额外的工具,比如执行代码或解决数学问题等。Lumos 也是如此。我不记得为什么需要在浏览器里快速使用计算器了(或许是计算税收?),但我知道我不想拿出手机或另开一个标签页。我只是希望我的 LLM 能准确解答数学问题。
所以,我决定把一个计算器集成到 Lumos 里。
借助 Ollama 进行提示分类 🦙
我之前用 Ollama 做了提示分类的实验并发现这个技术相当有用。如果可靠的话,“分类提示”的输出可以强化条件判断语句和逻辑分支。
虽然 Lumos 并没有基于 LangChain Agent 实现,但我希望用户使用它的体验能和与 Agent 互动一样流畅。它应能够在不需明确的指示下独立执行各种工具。应用程序应当能自动识别何时需要使用计算器。利用 Ollama 来判断是否需要计算器工具的实施是轻而易举的。
参考以下代码示例:
const isArithmeticExpression = async (baseURL: string, model: string, prompt: string,
): Promise<boolean> => {// 检查开头的触发指令 if (prompt.trim().toLowerCase().startsWith("calculate:")) { return new Promise((resolve) => resolve(true)); } // 否则,尝试分类当前提示 const ollama = new Ollama({ baseUrl: baseURL, model: model, temperature: 0, stop: [".", ","]}); const question = `以下提示是否代表含有数字和运算符的数学方程式?请用'是'或'否'来回答。\n\n提示: ${prompt}`; return ollama.invoke(question).then((response) => {console.log(`isArithmeticExpression 分类结果: ${response}`); const answer = response.trim().split(" ")[0].toLowerCase(); return answer.includes("yes"); });
};
只需询问大型语言模型,该提示是否为一个含有数字和运算符的数学方程,并检查返回的内容是否含有“是”或“否”。过程非常直接。这种实现即使在没有 JSON 模式和函数调用时也相当可靠。与让模型分类多个可能无关的类别相比,直接要求 LLM 对话给出二进制反应相比,更简单直接。我们在测试中的 Llama2 和 Mistral 都表现出色。将模型温度设为0,并配置结束序列如 [".", ","]
,能进一步提高响应速度和可靠度。相较于用户平时遇到的几秒钟的响应时间,这种分类所增加的延迟可以忽略不计。当然,对于某些应用来说,这点额外的等待时间或许还不够。
Lumos 控制台日志
我们还要特别强调,利用本地 LLMs,这个操作基本上是零成本的。Ollama 在这种情况下的实用性得到了充分的体现。为了让用户能最大程度地控制,我们还设有触发器选项,用户可通过在提示中加上特定的前缀来确保触发相应工具的执行。这与 ChatGPT 通过 @
符号调用特定 GPT 功能相似。
456 x 4343 =
1980408 🔢
Lumos 正确计算出 456*4343
Lumos 的计算器 设计得非常直观。它是以 LangChain 工具(Tool)的形式构建的,这样未来可以方便地将应用整合进更强大的 Agent 系统中。对于自定义工具,虽然 LangChain 推荐开发 DynamicTool
或 DynamicStructuredTool
,直接继承 Tool
基类同样简洁易行。
参见以下代码:
当 Lumos 接收到一个类似数学方程的提示,不管它的复杂程度如何,它都能自动判定调用计算器。
扩展分类技巧处理复杂条件 🌲
这种为多种模式功能而复现的分类技术,比如Lumos 的多模式能力,就能够在用户需要时从网页上下载图像。反之,如果不需要,则出于效率考虑,跳过下载过程。我决定用一个可配置的函数来普适化这种方法。
参见以下代码:
现在 classifyPrompt()
能够接收一个“分类提示”以及一个触发器参数。这个函数可以在整个应用程序代码中被复用。
把分类结果纳入条件判断语句是个自然、简单并且有效的做法。采用这种方法,软件开发者能够完全掌握应用程序的运作流程。到一定程度上,依赖于 LLM 的编程逻辑现在变得可测试了。
Lumos 在决定是否下载图像的时候,不仅考虑了分类结果,还把用户的一些配置选项考虑在内。更复杂的是,结合复杂应用状态(比如用户配置、访问控制、缓存状态等)和分类结果进行一致决策对于 LLM 来说,在大规模应用上会更有挑战。
这种方法可能被用于同时对多个 LLM 功能进行 A/B 测试。对于某些敏感领域,比如需要特定授权执行工具的情况或对 RAG 功能需要特定数据权限访问,这种设计方式看起来非常合适。我们不会让任何重要决策留给偶然。
Lumos 未来将如何发展?🔮
从短期来看,我将继续探索将更多工具集成进 Lumos。我将考虑迁移至 Agent 架构,并着手解决本地 LLM 应用运行时的效率和速度挑战。
长远来讲,还有更大的机遇值得我们考量。Chrome 插件固然强大,但其能力终究有限。当我们在思索将 LLM 运用到浏览器中的新场景时候,或许有必要完全打造一个全新的浏览器。目前而言,这些尚只是构想。暂且让我们享受在这个创新激动人心的时代开发 LLM 应用的过山车旅程,有了 LangChain 和 Ollama,这趟旅程会更加顺畅。😎
如何学习大模型
现在社会上大模型越来越普及了,已经有很多人都想往这里面扎,但是却找不到适合的方法去学习。
作为一名资深码农,初入大模型时也吃了很多亏,踩了无数坑。现在我想把我的经验和知识分享给你们,帮助你们学习AI大模型,能够解决你们学习中的困难。
我已将重要的AI大模型资料包括市面上AI大模型各大白皮书、AGI大模型系统学习路线、AI大模型视频教程、实战学习,等录播视频免费分享出来,需要的小伙伴可以扫取。

一、AGI大模型系统学习路线
很多人学习大模型的时候没有方向,东学一点西学一点,像只无头苍蝇乱撞,我下面分享的这个学习路线希望能够帮助到你们学习AI大模型。
二、AI大模型视频教程
三、AI大模型各大学习书籍
四、AI大模型各大场景实战案例
五、结束语
学习AI大模型是当前科技发展的趋势,它不仅能够为我们提供更多的机会和挑战,还能够让我们更好地理解和应用人工智能技术。通过学习AI大模型,我们可以深入了解深度学习、神经网络等核心概念,并将其应用于自然语言处理、计算机视觉、语音识别等领域。同时,掌握AI大模型还能够为我们的职业发展增添竞争力,成为未来技术领域的领导者。
再者,学习AI大模型也能为我们自己创造更多的价值,提供更多的岗位以及副业创收,让自己的生活更上一层楼。
因此,学习AI大模型是一项有前景且值得投入的时间和精力的重要选择。
相关文章:

LLM意图识别器实践
利用 Ollama 和 LangChain 强化条件判断语句的智能提示分类 ❝ 本文译自Supercharging If-Statements With Prompt Classification Using Ollama and LangChain一文,以Lumos工具为例,讲解了博主在工程实践中,如何基于LangChain框架和本地LLM优…...

常见的反爬手段和解决思路(爬虫与反爬虫)
常见的反爬手段和解决思路(爬虫与反爬虫) 学习目标1 服务器反爬的原因2 服务器长反什么样的爬虫(1)十分低级的应届毕业生(2)十分低级的创业小公司(3)不小心写错了没人去停止的失控小…...

Stable Diffusion【真人模型】:人像光影摄影极限写实真实感大模型
大家好,我是极客菌 今天和大家分享一个基于SD1.5的真人大模型:人像光影摄影极限写实真实感大模型。 该模型具有以下特点: 真实肤感(在面部肌理和皮肤肌理上均有加强学习,拒绝ai出图假的问题) 永不脱妆&a…...

java实现图片添加水印
文章目录 前言一、工具类WatermarkUtil二、工具类介绍2.1 图片来源类型2.2 水印类型2.3 读取本地图片2.4 读取网络图片2.5 水印处理2.6 添加水印 三、测试添加水印总结 前言 给图片添加水印是一个很常见的需求,一般是用来防盗用。比如我们csdn上面写的文章中&#…...

CSS规则——font-face
font-face 什么是font-face? 想要让网页文字千变万化,仅靠font-family还不够,还要借助font-face(是一个 CSS 规则,它允许你在网页上使用自定义字体,而不仅仅是用户系统中预装的字体。这意味着你可以通过提…...

【单片机毕业设计选题24034】-基于STM32的手机智能充电系统
系统功能: 系统可以设置充电时长,启动充电后按设置的充电时长充电,充电时间到后自动 停止充电,中途检测到温度过高也会结束充电并开启风扇和蜂鸣器报警。 系统上电后,OLED显示“欢迎使用智能充电系统请稍后”,两秒钟…...

[C++][数据结构][图][中][图的遍历][最小生成树]详细讲解
目录 1.图的遍历1.广度优先遍历2.深度优先遍历 2.最小生成树1.Kruskal算法2.Prim算法 1.图的遍历 给定一个图G和其中任意一个顶点 v 0 v_0 v0,从 v 0 v_0 v0出发,沿着图中各边访问图中的所有顶点,且每个顶 点仅被遍历一次 “遍历”&…...
退市新规解读—财务类强制退市
一、退市风险警示:第一年触及相关指标 上市公司最近一个会计年度触及下列退市风险指标之一,公司股票或存托凭证被实施退市风险警示(*ST): 第1项 组合类财务指标 仅发行A股或B股,最近一个会计年度或追溯重述后最近一个会计年度 …...
小程序的生命周期使用方法和应用场景
小程序生命周期 初始化(App Launch) • 触发时机:小程序首次启动时。 • 主要事件:onLaunch。 • 功能与适用场景: • 全局数据初始化:设置应用的全局状态和变量。 • 登录状态检查:判断用户是…...
什么是C++模块化系统?C++20的模块化系统。
C20引入的模块化系统是一种新的代码组织和编译机制,它旨在替代传统的头文件机制,提供更好的代码组织、更快的编译速度和更强的封装性。模块化系统的主要目标包括: 减少编译时间:通过减少冗余的头文件解析和宏定义传播,…...

智慧校园-档案管理系统总体概述
智慧校园档案管理系统,作为教育信息化进程中的重要一环,它运用现代信息技术的力量,彻底改变了传统档案管理的面貌,为学校档案资源的收集、整理、存储、检索与利用开辟了全新的途径。这一系统全面覆盖学生、教职工、教学科研及行政…...

文心一言 VS 讯飞星火 VS chatgpt (290)-- 算法导论21.3 3题
三、给出一个包含 m 个 MAKE-SET 、UNION 和 FINDSET 操作的序列(其中有 n 个是 MAKE-SET 操作),当仅使用按秩合并时,需要 Ω(mlgn) 的时间。如果要写代码,请用go语言。 文心一言: 在并查集(Union-Find)数…...
逻辑回归梯度推导
逻辑回归是一种广泛使用的分类算法,用于估计一个事件发生的概率。它是线性回归的扩展,通过sigmoid函数将线性回归的输出映射到[0, 1]区间,从而用于分类任务。 在逻辑回归中,我们使用对数似然损失函数(log-likelihood l…...
Python 使用函数输出一个整数的逆序数
在Python中,你可以定义一个函数来输出一个整数的逆序数。这里有一个简单的实现方法: def reverse_integer(x):# 检查输入是否为整数if not isinstance(x, int):raise ValueError("Input must be an integer")# 将整数转换为字符串,…...

【Linux】Wmware Esxi磁盘扩容
目录 一、概述 1.1 磁盘分区概念 1.2 LVM概念 二、扩容步骤 二、报错 一、概述 1.1 磁盘分区概念 在 Linux 中,每一个硬件设备都映射到一个系统的文件,对于硬盘、光驱等 IDE 或 SCSI 设备也不例外。Linux把各种 IDE 设备分配了一个由 hd 前缀组成的文…...

树莓派4B_OpenCv学习笔记15:OpenCv定位物体实时坐标
今日继续学习树莓派4B 4G:(Raspberry Pi,简称RPi或RasPi) 本人所用树莓派4B 装载的系统与版本如下: 版本可用命令 (lsb_release -a) 查询: Opencv 版本是4.5.1: 今日学习 OpenCv定位物体实时位置,代码来源是…...

MySQL之如何定位慢查询
1、如何定位慢查询 1.1、使用开源工具 调试工具:Arthas 运维工具:Promethuss、Skywalking 1.2、MySQL自带慢日志 慢查询日志记录了所有执行时间超过指定参数(long_query_time,单位:秒,默认10秒&#x…...

Open3D 删除点云中重复的点
目录 一、算法原理1、重叠点2、主要函数二、代码实现三、结果展示本文由CSDN点云侠原创,原文链接。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫与GPT。 一、算法原理 1、重叠点 原始点云克隆一份 构造重叠区域 合并点云获得重叠点 2、主要…...

填报志愿选专业是兴趣重要还是前景重要?
进行专业评估,找到一个适合自己的专业是一件非常困难的事情。在进行专业选择时,身上理想化色彩非常严重的人,会全然不顾及他人的劝阻,义无反顾的以兴趣为主,选择自己热爱的专业。一些较多考虑他人建议,能听…...
python开发基础——day9 函数基础与函数参数
一、初识函数(function) 编程函数!数学函数,里面的是逻辑,功能,而不是套公式 编程函数的作用实现特定操作的一段代码 你现在请客,每个人都点同样的一份吃的,请100个人 1.薯条 2.上校鸡块 3.可乐 那…...

css实现圆环展示百分比,根据值动态展示所占比例
代码如下 <view class""><view class"circle-chart"><view v-if"!!num" class"pie-item" :style"{background: conic-gradient(var(--one-color) 0%,#E9E6F1 ${num}%),}"></view><view v-else …...
Cesium1.95中高性能加载1500个点
一、基本方式: 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...

SCAU期末笔记 - 数据分析与数据挖掘题库解析
这门怎么题库答案不全啊日 来简单学一下子来 一、选择题(可多选) 将原始数据进行集成、变换、维度规约、数值规约是在以下哪个步骤的任务?(C) A. 频繁模式挖掘 B.分类和预测 C.数据预处理 D.数据流挖掘 A. 频繁模式挖掘:专注于发现数据中…...
vue3 字体颜色设置的多种方式
在Vue 3中设置字体颜色可以通过多种方式实现,这取决于你是想在组件内部直接设置,还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法: 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...
macOS多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用
文章目录 问题现象问题原因解决办法 问题现象 macOS启动台(Launchpad)多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用。 问题原因 很明显,都是Google家的办公全家桶。这些应用并不是通过独立安装的…...

高等数学(下)题型笔记(八)空间解析几何与向量代数
目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...
GitHub 趋势日报 (2025年06月08日)
📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图 884 cognee 566 dify 414 HumanSystemOptimization 414 omni-tools 321 note-gen …...

Ascend NPU上适配Step-Audio模型
1 概述 1.1 简述 Step-Audio 是业界首个集语音理解与生成控制一体化的产品级开源实时语音对话系统,支持多语言对话(如 中文,英文,日语),语音情感(如 开心,悲伤)&#x…...
Axios请求超时重发机制
Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式: 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...
实现弹窗随键盘上移居中
实现弹窗随键盘上移的核心思路 在Android中,可以通过监听键盘的显示和隐藏事件,动态调整弹窗的位置。关键点在于获取键盘高度,并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...