如何用规则+大模型搞定意图识别
如果只依靠大模型来理解用户的意图,那么结果是不可靠的,例如有一个理解电商客户的意图,我的意图有下面几个:
public enum Intent {
QUERY_ORDER, // 查订单
QUERY_LOGISTICS, // 查物流
COMPLAIN_PRODUCT, // 商品投诉
COMPLAIN_SERVICE, // 服务投诉
CONSULT_REFUND, // 咨询退款
CONSULT_WARRANTY, // 咨询保修
CHAT, // 闲聊
UNKNOWN // 无法识别
}
System prompt这样写:
你是一个意图识别专家。
你的任务是根据用户输入,识别出用户的核心意图。
意图列表:
- QUERY_ORDER: 用户想查询订单信息(包含订单号)
- QUERY_LOGISTICS: 用户想查询物流状态
- COMPLAIN_PRODUCT: 用户投诉商品质量(坏了、少了、错了)
- COMPLAIN_SERVICE: 用户投诉服务态度(客服、物流慢)
- CONSULT_REFUND: 用户咨询退款流程
- CONSULT_WARRANTY: 用户咨询保修政策
- CHAT: 闲聊、问候
- UNKNOWN: 无法判断
输出格式:只输出意图名称,不要输出其他内容。
例如:QUERY_ORDER
如果直接调用大模型进行意图识别,我们访问:
http://localhost:8080/intent?msg=我要投诉
那么大模型的回复可能如下:
{ "input": "我要投诉", "intent": "UNKNOWN" }
这是因为意图中有投诉商品COMPLAIN_PRODUCT和投诉服务COMPLAIN_SERVICE,所以模型分不清到底意图是哪个,所以返回UNKNOWN.
所以,一味的依靠模型不可取,只有把规则+模型结合起来,才能大大提高识别的准确率。
下面用AC自动机+大模型的方式进行意图识别。
1.AC自动机:AC自动机(Aho-Corasick Automaton)是一个经典的多模式匹配算法,由Alfred V. Aho和Margaret J. Corasick在1975年提出。简单来说,它的核心能力是:在一个长文本中,一次性找出所有来自一个“关键词集合”中的关键词.假设你有十万个“敏感词”或“关键词”,现在需要判断用户输入的一句话里是否包含其中任何一个。如果用正则表达式,把十万个词拼成一个超长正则,性能会非常差,容易导致CPU飙升甚至系统卡顿。如果用循环遍历,对每个词都执行一次 contains(),那么十万个词就需要扫描十万次文本,效率极低。而AC自动机的高明之处在于:它只需要扫描一遍文本,就能找出所有匹配的关键词。它的时间复杂度是 O(n)(n是文本长度),与关键词的数量和长度无关,性能是常量级的。
2.AC自动机+大模型进行意图识别:
1)流程图如下:

也就是说在调用大模型之前,把AC自动机的规则识别放在第一道防线,如果没命中,再来调用大模型识别。
2)定义意图:
public enum Intent {
QUERY_ORDER, // 查订单
QUERY_LOGISTICS, // 查物流
COMPLAIN_PRODUCT, // 商品投诉
COMPLAIN_SERVICE, // 服务投诉
CONSULT_REFUND, // 咨询退款
CONSULT_WARRANTY, // 咨询保修
CHAT, // 闲聊
UNKNOWN // 无法识别
}
3)定义"COMPLAIN_SERVICE"的关键字(这里先只拿COMPLAIN_SERVICE做测试):
ac:
complainkeywords:
- 投诉
- 差评
4)定义COMPLAIN_SERVICE配置读取类(读取上面的COMPLAIN_SERVICE关键字):
@Component
@ConfigurationProperties(prefix = "ac")
public class AhoCorasickProperties {
private List<String> complainkeywords = new ArrayList<>();
public List<String> getComplainkeywords() {
return complainkeywords;
}
public void setComplainkeywords(List<String> complainkeywords) {
this.complainkeywords = complainkeywords;
}
}
5)定义AC自动机Bean(注入上面的COMPLAIN_SERVICE配置读取类,然后初始化AC自动机)
@Configuration
public class AhoCorasickConfig {
Logger logger=LoggerFactory.getLogger(AhoCorasickConfig.class);
@Autowired
private AhoCorasickProperties properties;
@Bean
public Trie ahoCoresickTrie() {
List<String> keywords=properties.getComplainkeywords();
logger.info("keywords is:"+keywords.toString());
if(null==keywords || keywords.isEmpty()) {
return Trie.builder().build();
}
else {
return Trie.builder()
.addKeywords(keywords)
.build();
}
}
}
6)定义意图识别器(首先用AC自动机进行判断,如果命中则直接返回,否则发送给大模型):
@Service
public class LLMIntentClassifier {
private final ChatClient chatClient;
private final Trie trie;
public LLMIntentClassifier(ChatClient.Builder builder,Trie trie) {
this.trie=trie;
this.chatClient = builder
.defaultSystem("""
你是一个意图识别专家。
你的任务是根据用户输入,识别出用户的核心意图。
意图列表:
- QUERY_ORDER: 用户想查询订单信息(包含订单号)
- QUERY_LOGISTICS: 用户想查询物流状态
- COMPLAIN_PRODUCT: 用户投诉商品质量(坏了、少了、错了)
- COMPLAIN_SERVICE: 用户投诉服务态度(客服、物流慢)
- CONSULT_REFUND: 用户咨询退款流程
- CONSULT_WARRANTY: 用户咨询保修政策
- CHAT: 闲聊、问候
- UNKNOWN: 无法判断
输出格式:只输出意图名称,不要输出其他内容。
例如:QUERY_ORDER
""")
.build();
}
public Intent classify(String userInput) {
try {
//第一步,关键词快速判断
//举一个例子:"投诉"关键词的快速判断
if(isComplainServiceIntent(userInput)) return Intent.COMPLAIN_SERVICE;
else {
//第二步,大模型兜底
String response = chatClient.prompt()
.user(userInput)
.call()
.content();
// 尝试解析
return Intent.valueOf(response.trim());
}
} catch (Exception e) {
System.err.println("⚠️ 大模型意图识别失败: " + e.getMessage());
return Intent.UNKNOWN;
}
}
public boolean isComplainServiceIntent(String input) {
boolean contains=!trie.parseText(input).isEmpty();
if(contains) return true;
else {
return false;
}
}
}
7)Controller:
@GetMapping("/intent")
public String Intent(@RequestParam String msg) {
Intent intent= this.llmIntentClassifier.classify(msg);
return String.format("""
{
"input": "%s",
"intent": "%s"
}
""", msg, intent);
}
8)访问:
http://localhost:8080/intent?msg=我要投诉
返回:
{ "input": "我要投诉", "intent": "COMPLAIN_SERVICE" }
所以,在实际工作中,我们要结合这种规则+模型的方式进行识别,这样不但能提高准确率,而且还能节省时间和成本。当然上面只是一个例子,只是用来说明思路。在实际生产中,还要进一步优化,例如给每一个关键词给于权重,权重越高,那么可信度越高,然后根据对可信度进行规则的判断,例如生产级的意图识别架构如下:

学AI大模型的正确顺序,千万不要搞错了
🤔2026年AI风口已来!各行各业的AI渗透肉眼可见,超多公司要么转型做AI相关产品,要么高薪挖AI技术人才,机遇直接摆在眼前!
有往AI方向发展,或者本身有后端编程基础的朋友,直接冲AI大模型应用开发转岗超合适!
就算暂时不打算转岗,了解大模型、RAG、Prompt、Agent这些热门概念,能上手做简单项目,也绝对是求职加分王🔋

📝给大家整理了超全最新的AI大模型应用开发学习清单和资料,手把手帮你快速入门!👇👇
学习路线:
✅大模型基础认知—大模型核心原理、发展历程、主流模型(GPT、文心一言等)特点解析
✅核心技术模块—RAG检索增强生成、Prompt工程实战、Agent智能体开发逻辑
✅开发基础能力—Python进阶、API接口调用、大模型开发框架(LangChain等)实操
✅应用场景开发—智能问答系统、企业知识库、AIGC内容生成工具、行业定制化大模型应用
✅项目落地流程—需求拆解、技术选型、模型调优、测试上线、运维迭代
✅面试求职冲刺—岗位JD解析、简历AI项目包装、高频面试题汇总、模拟面经
以上6大模块,看似清晰好上手,实则每个部分都有扎实的核心内容需要吃透!
我把大模型的学习全流程已经整理📚好了!抓住AI时代风口,轻松解锁职业新可能,希望大家都能把握机遇,实现薪资/职业跃迁~
这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】

更多推荐



所有评论(0)