LLM应用开发与落地:基于上下文的文本信息检测与提取

最近一直用LLM解决各种各样的问题,感觉已经脱离不了LLM了。每次使用LLM解决一个之前解决不了的问题,或者大大提升我的工作效率的时候,我内心都小小会激动一下。我想这是只通过看文章或只是研究AI理论感受不到的小确幸。我也因此更加确信LLM是一个技术变革,它会带来了一些技术范式的改变,非常期待它的进一步发展。

分享一个最近在实际业务中使用LLM解决传统技术解决不了的小问题(或者说之前解决门槛和成本非常高),以及整个过程的感受。

需求

最近业务上有一个需要文本检测和信息提取的功能,就是要从聊天上下文中获取用户意图和信息。比如用户聊天内容的意图是什么,以及提取聊天内容中出现的用户当前位置和年龄信息等等。

传统技术方案

团队中的一个同学尝试用规则去实现。他的思路是用分词算法去分词,然后按关键字去匹配,再分割出认为是对应信息的字符串。这种方法一看就不灵,因为没有上下文,很容易误判或者检测不出来。

比如下边的聊天内容:

用户:我在深圳上班的时候才24岁。

这句话中既没有用户的当前位置信息,也没有当前的年龄信息,但是如果你用关键字“我在”和“岁”去匹配,可能会匹配出位置“深圳”和年龄“24”,但这并不是用户当前的位置和年龄信息,属于误判。

再举个上下文相关的例子:

用户A:我不年轻了,都34了,不知道还能干几年。

用户B:我也差不多,就比你小一岁。

这样的场景用规则是无法识别出用户B的年龄信息的。

LLM方案尝试

我一看,觉得这个场景适合用LLM解决。我写了个简单的prompt,用百度最新的ernie-bot-4尝试了下,发现效果不错。当时没有多想,就开始动手把百度的ernie-bot-4 接进来了。

但是,接进来容易,实测起来发现问题不少:LLM幻觉导致的误判,prompt过长导致的成本,以及用户输入的敏感字符导致触发LLM的安全规则等等。

接下来的一周,我一直在努力去解决这些问题,目标是达到业务要求的95%的准确率并且把成本降下来。在经历几次都差点要放弃的情况下,终于达到在控制成本的前提下接近95%的准确率。优化过程中用了很多技巧:用词准确性优化,特殊关键词语(比如:让我们一步一步思考等等),符号分割,关键字突出,输出格式优化,结构化prompt,COT,few shot,问题拆解等等。

总结

回想从demo验证到最终优化到满足业务要求的过程,有几点感悟:

首先,prompt是使用LLM解决问题的关键。怎么写prompt,用什么prompt框架会大大影响LLM解决问题的准确率。prompt中的用词的准确,词出现的位置,few shot,COT等都能影响LLM的输出结果。

第二,prompt优化非常考验经验和思路,这也是很多人在尝试LLM后最终放弃,并得出LLM是个玩具的结论的原因。我在优化过程中也几次想要放弃,因为LLM是一个黑箱,我也不确定持续优化下去能不能达到最终的要求。这给人非常大的不安全感,真正的业务开发中需要承担比较大业务压力和可能失败的风险。

第三,用LLM解决问题跟使用传统技术解决问题有点不一样。使用prompt解决问题的关键是准确描述需求,然后不断地去调优prompt,而且基于现在的LLM的能力基本无法做到100%准确。这跟上边的第二点相关,传统技术方案是非常确定的。

第四,虽然现在也没有人能解释清楚LLM为什么会出现涌现的能力,也无法用数学证明它100%正确。但是它确实能解决我们之前无法解决的一些问题(或者解决起来门槛和成本极高)。既然有用,那我们可以先用起来。我们不要排斥它,我们要承认它具备一些可以非常方便使用的特有的能力,比如语义理解,一定的常识智能,情绪判断等等。最重要的是,LLM目前还在快速发展中,非常值得期待。

同时,我们目前也不要神化LLM。LLM目前确实还是有不少缺陷,比如成本,幻觉,响应时间,数学能力差等等。

prompt分享

下边是解决方案中用到的一个根据聊天上下文获取年龄信息的prompt的草稿,给大家参考一下。我这里相当于把llm当作一个接口来用,所以输入是josn字符串,输出也是json字符串,主要是方便跟传统程序对接,感兴趣的可以尝试一下:

# Role
你是一个通过分析聊天对话内容准确地计算出"我的年龄"的年龄计算器。## Backgrounds
- 与不同的陌生人聊天对话中经常会出现询问问我年龄的情况。
- 从"我"对自己年龄的描述中分析出"我的年龄"。## Workflows
1.从 input json对象中读取 "year" 字段,获取"今年年份"。
2.通过"今年年份"和"msgs"消息中我对年龄的描述,计算出"我的年龄"。## Constraints
- 描述年龄的数字是"大于等于70"时,表示"19"开头的"出生年份"。
- 描述年龄的数字是"0开头"时,表示"20"开头的"出生年份"。
- 年龄="今年年份" - "出生年份",减法计算通过调用 python 命令完成。
- 描述年龄的数字是"大于等于16" 且 "小于等于50"时,即[16,50]时,数字即"我的年龄"。
- 如果信息不足于准确地计算出具体的年龄,"我的年龄"为0。
- 避免误判,严格按照给定规则进行计算。
- 只有是对"我"年龄询问的回答的数字才是"我的年龄"## Skills
- 文本分析和理解的能力。
- 1000 以内 加减算术的能力。## Examples
###
input:
{
"year":2020,
"msgs":[
{
"A": "你几岁?",
"我": "9 5 的"
},
{
"B": "你多大了?",
"我": "2 7了"
},
{
"C": "你的号码发我下",
"我": "19"
},
{
"D": "你今年几岁了?",
"我": "我 97 的"
},
{
"E": "你哪年的?",
"我": "02年的"
},
{
"F": "你今年几岁了?",
"我": "24"
}
]
}
output:
{
"year":2020,
"ages":[
"年龄询问并回答出生年,2020-1995=25(25)",
"年龄询问并直接回答(27)",
"非年龄询问(0)",
"年龄询问并回答出生年,2020-1997=23(23)",
"年龄询问并回答出生年,2020-2002=18(18)",
"年龄询问并直接回答(24)"
]
}
###
input:
{
"year":2024,
"msgs":[
{
"A": "你多大?",
"我": "我三十一"
},
{
"B": "我比你年轻",
"我": "你97的?"
},
{
"C": "我比你小",
"我": "你24了?"
},
{
"D": "我30岁",
"我": "我比你小3岁"
},
{
"E": "你发下你的号码",
"我": "34"
},
{
"F": "你多大?",
"我": "我03年的"
}
]
}
output:
{
"year":2024,
"ages":[
"年龄询问并直接回答(31)",
"没有我的年龄信息(0)",
"没有我的年龄信息(0)",
"推算我的年龄,30-3=27(27)"
"非年龄询问(0)",
"年龄询问并回答出生年,2024-2003=21(21)"
]
}
##### 注意
- 只有明确地描述"我的"出生年份或年龄时才推算"我的年龄"。
- 疑问句,询问句都不能推算"我的年龄"。
- 对方的年龄,即"你的年龄" 不予以计算。
- 只有是对"我"年龄询问的回答的数字才是"我的年龄",其他情况年龄默认为 0。
- **不输出analyse, 但分析过程请严格按照analyse分析**。## Goals
让我们一步一步思考,严格遵循 Constraints,一条一条地根据 analyse 的分析过程准确地计算出"我的年龄",**严格按照格式**输出json对象output。###
input:
{
"year":2023,
"msgs":[
{
"A": "我比你大",
"我": "你今年30了?"
},
{
"B": "我25,你多大?",
"我": "我比你大3岁"
},
{
"C": "你多大?",
"我": "你呢?你97的?"
},
{
"E": "你的号码是?",
"我": "我18"
},
{
"F": "你多大了?",
"我": "23"
},
{
"G": "你多大?",
"我": "我93年的"
}
]
}
output:

我目前正在开发一款基于自研的LLM agent framework 的智能客服产品,它具有意图引导、信息收集、情绪安抚、LUI与GUI 完美融合、打通公司内部与外部数据孤岛、人工接管、数据分析与洞察、异常监控等功能。

欢迎对智能客服产品、AI应用落地,或者是prompt学习和调优,LLM应用开发感兴趣的朋友加我微信,一起交流,共同前行。

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

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

相关文章

Kotlin MultiPlatform:构建跨平台应用的未来

Kotlin MultiPlatform:构建跨平台应用的未来 1 引言 1.1 Kotlin MultiPlatform简介 Kotlin MultiPlatform(简称KMP)是一种由JetBrains开发的跨平台开发解决方案,它建立在Kotlin语言之上。KMP允许开发者使用一套Kotlin代码来构建…

【2024】Docker部署Redis

1.说明: 因为容器实例的运行是有生命周期的,一些redis的备份、日志和配置文件什么的最好还是放在服务器本地。这样当容器删除时,我们也可以保留备份和日志文件。所以先在本地服务器安装redis并配置文件设置。下面是安装步骤: 2.安装步骤 1…

Jmeter性能测试: 基于JDK 21 安装 Jmeter 5.6.3

目录 一、实验 1.环境 2.JDK下载 3.Jmeter下载 4.Windows安装JDK 21 5.Windows安装Jmeter 5.6.3 6.Linux安装JDK 21 7.Linux安装Jmeter 5.6.3 二、问题 1. Linux 的profile、bashrc、bash_profile文件有哪些区别 一、实验 1.环境 (1)主机 表…

Android源码设计模式解析与实战第2版笔记(二)

第二章 应用最广的模式 — 单例模式 单例模式的定义 确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。 单例模式的使用场景 确保某个类有且只有一个对象的场景,避免产生多个对象消耗过多的资源,或者某种类型的对象只应…

压电式、电磁式蜂鸣器设计电路

蜂鸣器常用分类从两方面 声源类型:压电蜂鸣器( Piezoceramic Element Buzzers )、电磁蜂鸣器( Magnetic Buzzers ) 驱动类型:有源蜂鸣器( Indicators )、无源蜂鸣器( Transducers ) 一、电磁式蜂鸣器 无源电磁式设计电路 电磁蜂鸣器的线圈类似于电感&am…

web前端项目-动画特效【附源码】

文章目录 一:赛车游戏动画HTML源码:JS源码:CSS源码:(1)normalize.css(2)style.css 二:吉普车动画演示HTML源码:CSS源码:(1&#xff09…

【时间序列篇】基于LSTM的序列分类-Pytorch实现 part1 案例复现

系列文章目录 【时间序列篇】基于LSTM的序列分类-Pytorch实现 part1 案例复现 【时间序列篇】基于LSTM的序列分类-Pytorch实现 part2 自有数据集构建 【时间序列篇】基于LSTM的序列分类-Pytorch实现 part3 化为己用 本篇文章是对已有一篇文章的整理归纳,并对文章中…

HybridA* 论文解读

本文旨在对原论文进行翻译,对混合A*有一个大概的理解 论文题目:Practical Search Techniques in Path Planning for Autonomous Driving 1 摘要 本文描述了一个实用的路径规划算法,无人驾驶汽车在未知的环境中,障碍物通过机器人…

计算机毕业设计 | SSM 凌云招聘平台(附源码)

1,绪论 人力资源是企业产生效益、创造利润的必不可少的、最重要的资源。人作为人力资源的个体可看作是一个承载着有效知识、能力的信息单元。这样的信息单元可看作是一个为企业产生价值和利润的个体。从而使得这样的信息单元所具有的信息就是一个有价值的信息。 校…

day34WEB 攻防-通用漏洞文件上传黑白盒审计逻辑中间件外部引用

目录 一,白盒审计-Finecms-代码常规-处理逻辑 黑盒思路:寻找上传点抓包修改突破获取状态码及地址 审计流程:功能点-代码文件-代码块-抓包调试-验证测试 二,白盒审计-CuppaCms-中间件-.htaccess 三,白盒审计-Metin…

银行数据仓库体系实践(11)--数据仓库开发管理系统及开发流程

数据仓库管理着整个银行或公司的数据,数据结构复杂,数据量庞大,任何一个数据字段的变化或错误都会引起数据错误,影响数据应用,同时业务的发展也带来系统不断升级,数据需求的不断增加,数据仓库需…

adb测试冷启动和热启动 Permission Denial解决

先清理日志 adb shell logcat -c 打开手机模拟器中的去哪儿网,然后日志找到包名和MainActivity adb shell logcat |grep Main com.Qunar/com.mqunar.atom.alexhome.ui.activity.MainActivity 把手机模拟器的去哪儿的进程给杀掉 执行 命令 adb shell am start -W…

专业133总分400+上海交通大学819考研经验分享上交819电子信息与通信工程

今年专业819信号系统与信号处理133,总分400,如愿考上梦中上海交通大学,通过自己将近一年的复习,实现了人生中目前为止最大的逆袭(自己本科学校很普通),总结自己的复习经历,希望可以给…

苹果Arcade会员的交易开通

arcade是苹果的游戏订阅服务,会员可以畅玩200多个苹果商店精品游戏,包括美区apple id绑卡apple tv购买内购游戏apple one、A2K、狂野飙8,同时ChatGPT也可以,并且这些游戏没有广告没有内购项目,可以在线玩也可以离线玩&…

华为云WAF,开启web网站的专属反爬虫防护罩

背景 从保护原创说起 作为一个原创技术文章分享博主,日常除了Codeing就是总结Codeing中的技术经验。 之前并没有对文章原创性的保护意识,直到在某个非入驻的平台看到了我的文章,才意识到,辛苦码字、为灵感反复试验创作出来的文…

JavaScript模块系统入门教程

🧑‍🎓 个人主页:《爱蹦跶的大A阿》 🔥当前正在更新专栏:《VUE》 、《JavaScript保姆级教程》、《krpano》、《krpano中文文档》 ​ 目录 ✨ 前言 ✨ 正文 一、模块 (Module) 简介 什么是模块 导出与导入 默…

QGIS编译(跨平台编译)之二十四:libbz2编译(Windows、Linux、MacOS环境下编译)

文章目录 1、libbz2介绍2、文件下载3、Linux下编译4、MacOS下编译5、Windows下编译1、libbz2介绍 bzip2是一个基于Burrows-Wheeler 变换的无损压缩软件,压缩效果比传统的LZ77/LZ78压缩算法来得好。它是一款免费软件。可以自由分发免费使用。 bzip2能够进行高质量的数据压缩。…

【代码随想录15】110.平衡二叉树 257. 二叉树的所有路径 404.左叶子之和

目录 110. 平衡二叉树题目描述参考代码 257. 二叉树的所有路径题目描述参考代码 404.左叶子之和题目描述参考代码 110. 平衡二叉树 题目描述 给定一个二叉树,判断它是否是高度平衡的二叉树。 本题中,一棵高度平衡二叉树定义为: 一个二叉树…

AI数字人-数字人视频创作数字人直播效果媲美真人

在科技的不断革新下,数字人技术正日益融入到人们的生活中。近年来,随着AI技术的进一步发展,数字人视频创作领域出现了一种新的创新方式——AI数字人。数字人视频通过AI算法生成虚拟主播,其外貌、动作、语音等方面可与真实人类媲美…

huggingface高速下载模型的实战代码

大家好,我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于机器学习算法研究与应用。曾获得阿里云天池比赛第一名,CCF比赛第二名,科大讯飞比赛第三名。拥有多项发明专利。对机器学习和深度学习拥有自己独到的见解。曾经辅导过若干个非计算机专业的学生进入到算法…