LLM意图识别器实践

news2024/11/25 1:08:07

图片利用 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 推荐开发 DynamicToolDynamicStructuredTool,直接继承 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大模型是一项有前景且值得投入的时间和精力的重要选择。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1876350.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Meta发布LLM编译器 称将改变我们的编程方式

Meta发布了Meta 大型语言模型&#xff08;LLM&#xff09;编译器&#xff0c;这是一套强大的开源模型&#xff0c;旨在优化代码并彻底改变编译器设计。这项创新有望改变开发人员优化代码的方式&#xff0c;使代码优化更快、更高效、更具成本效益。 在将大型语言模型应用于代码和…

Vue--》从零开始打造交互体验一流的电商平台(四)完结篇

今天开始使用 vue3 + ts 搭建一个电商项目平台,因为文章会将项目的每处代码的书写都会讲解到,所以本项目会分成好几篇文章进行讲解,我会在最后一篇文章中会将项目代码开源到我的github上,大家可以自行去进行下载运行,希望本文章对有帮助的朋友们能多多关注本专栏,学习更多…

20240629在NanoPi R6C开发板的预编译的Android12下使用iperf3测试网速

20240629在NanoPi R6C开发板的预编译的Android12下使用iperf3测试网速 2024/6/29 11:11 【表扬一下】友善之臂没有提供update.img的预编译固件&#xff0c;我心里一凉&#xff0c;这么多IMG文件&#xff0c;得一个一个选择呀&#xff01; 但是别人友善之臂特别急人之所急&#…

Linux部署wordpress站点

先安装宝塔面板 yum install -y wget && wget -O install.sh https://download.bt.cn/install/install_6.0.sh && sh install.sh ed8484bec 因为wordpress需要php&#xff0c;mysql&#xff0c;apache &#xff0c;httpd环境 参考&#xff1a;Linux 安装宝塔…

Docker基础知识的掌握,相关基本命令的用法

安装docker步骤&#xff1a;https://b11et3un53m.feishu.cn/wiki/Rfocw7ctXij2RBkShcucLZbrn2d 1.docker Docker 是一种容器化平台&#xff0c;用于帮助开发者打包、发布和管理应用程序及其依赖关系。通过 Docker&#xff0c;开发者可以将应用程序及其所有依赖项打包到一个称为…

java虚拟机栈帧操作

虚拟机栈(Virtual Machine Stack)是虚拟机(如JVM、Python VM等)用来管理方法调用和执行的栈结构。它主要用于存储方法调用的相关信息,包括局部变量、操作数栈、动态链接和方法返回地址等。 java虚拟机栈操作的基本元素就是栈帧,栈帧主要包含了局部变量表、操作数栈、动态…

10分钟完成微信JSAPI支付对接过程-JAVA后端接口

引入架包 <dependency><groupId>com.github.javen205</groupId><artifactId>IJPay-WxPay</artifactId><version>${ijapy.version}</version></dependency>配置类 package com.joolun.web.config;import org.springframework.b…

【算法专题--栈】栈的压入、弹出序列 -- 高频面试题(图文详解,小白一看就懂!!)

目录 一、前言 二、题目描述 三、解题方法 &#x1f4a7;栈模拟法&#x1f4a7;-- 双指针 ⭐ 解题思路 ⭐ 案例图解 四、总结与提炼 五、共勉 一、前言 栈的压入、弹出序列 这道题&#xff0c;可以说是--栈专题--&#xff0c;最经典的一道题&#xff0c;也是在…

贪心法思想-求最大子数组和案例图解

贪心法思想 ​ 基本思想是在问题的每个决策阶段&#xff0c;都选择当前看起来最优的选择&#xff0c;即贪心地做出局部最优的决策&#xff0c;以期获得全局最优解。 ​ 正如其名字一样&#xff0c;贪心法在解决问题的策略上目光短浅&#xff0c;只根据当前已有的信息做出选择…

【FFmpeg】avformat_write_header函数

FFmpeg相关记录&#xff1a; 示例工程&#xff1a; 【FFmpeg】调用ffmpeg库实现264软编 【FFmpeg】调用ffmpeg库实现264软解 【FFmpeg】调用ffmpeg库进行RTMP推流和拉流 【FFmpeg】调用ffmpeg库进行SDL2解码后渲染 流程分析&#xff1a; 【FFmpeg】编码链路上主要函数的简单分…

VMware中安装CentOS系统

VMware中安装CentOS系统 CentOS 镜像的准备创建虚拟机Cent OS系统的安装 CentOS 镜像的准备 下载链接&#xff1a;清华园CenOS 7镜像下载 VMware的安装参考&#xff1a;VMware workstation pro 16 虚拟机的安装 创建虚拟机 1.打开VMware workstation pro 16->创建新的虚拟…

[leetcode]insert-into-a-binary-search-tree

. - 力扣&#xff08;LeetCode&#xff09; class Solution { public:TreeNode* insertIntoBST(TreeNode* root, int val) {if (root nullptr) {return new TreeNode(val);}TreeNode* pos root;while (pos ! nullptr) {if (val < pos->val) {if (pos->left nullptr…

掌握Python编程的深层技能

一、Python基础语法、变量、列表、字典等运用 1.运行python程序的两种方式 1.交互式即时得到程序的运行结果 2.脚本方式把程序写到文件里(约定俗称文件名后缀为.py),然后用python解释器解释执行其中的内容2.python程序运行的三个步骤 python3.8 C:\a\b\c.py 1.先启动python3…

揭秘循环购模式:消费即赚钱,私域电商新纪元

消费1000送2000、每天领钱、钱还可以提现&#xff0c;这样的商业模式——循环购模式&#xff0c;确实在私域电商领域引起了广泛的关注。这种模式的成功并非偶然&#xff0c;而是基于合理的返利规则和商业模式创新。下面我将为您详细解析循环购模式为何能够吸引消费者&#xff0…

记录一次——RK100键盘按键失效修复

一、背景说明: 背景&#xff1a;购买的键盘是RK的型号RK100&#xff0c;具有紧凑的外观&#xff0c;并搭配了TTC金粉轴&#xff0c;使用起来还不错&#xff0c;目前已经是第3年了。问题&#xff1a;前几个月会出现H按键失效的问题&#xff0c;但是过一段时间又会修复。最近是Q…

深入解析链表:解锁数据结构核心奥秘

一. 链表的定义 链表是一种线性数据结构&#xff0c;由一系列节点组成。每个节点包含两个部分&#xff1a; 数据域&#xff08;Data&#xff09;&#xff1a;存储节点的数据。指针域&#xff08;Pointer&#xff09;&#xff1a;存储指向下一个节点的地址。 链表的第一个节点…

一招教你用python代码给朋友写一个爱心代码

有人问我马上要跟女朋友一周年了&#xff0c;能不能用代码给他写一个爱心代码呢&#xff1f;那算你问对人了&#xff0c;来上才艺 可以使用Python的turtle模块来绘制一个爱心形状。下面是一个简单的示例代码&#xff0c;我将详细解释每一步&#xff1a; import turtle # 创建一…

制定班规要注意哪些事项

对于如何管理班级&#xff0c;制定班规是一项至关重要的任务。关系到班级的日常秩序&#xff0c;影响着学生的集体荣誉感。制定班规并非易事&#xff0c;需要深思熟虑和周全考虑。 班规的制定应以学生为中心。深入了解学生的需求和期望&#xff0c;以及他们在学习和生活中可能遇…

统计信号处理基础 习题解答11-6

题目 考虑例11.1对WGN中单个正弦信号的数据模型&#xff0c;将模型重写为 其中&#xff1a; &#xff0c;证明A的PDF是瑞丽的&#xff0c;的PDF是&#xff0c;且和是相互独立的。 解答 根据例11.1&#xff1a; 由于N维联合高斯分布为&#xff1a; 由&#xff1a; 因此&#…

Java程序员学习Go开发Higress的WASM插件

Java程序员学习Go开发Higress的WASM插件 契机 ⚙ 今年天池大赛有higress相关挑战&#xff0c;研究一下。之前没搞过go&#xff0c;踩了很多坑&#xff0c;最主要的就是tinygo打包&#xff0c;多方寻求解决无果&#xff0c;结论是tinygo0.32go1.19无法在macos arm架构下打包。…