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运用开发感兴趣的朋友加我微信,一起交流,共同前行。