LangChain4j实战-大模型(LLM)意图识别和槽位填充技术

2025-11-17 / 13 阅读 / AI
在智能对话系统中,意图识别和槽位填充是两个核心任务。意图识别类似于文本分类,旨在确定用户输入的语义意图;而槽位填充则类似于序列标注,用于提取用户输入中的关键信息。

废话不多说,上代码

package xyz.wbsite.ai;

import dev.langchain4j.model.openai.OpenAiChatModel;
import dev.langchain4j.service.AiServices;
import dev.langchain4j.service.SystemMessage;
import dev.langchain4j.service.UserMessage;
import dev.langchain4j.service.V;

public class 意图识别槽位填充 {

    record Entity(
            String intent,
            String city,
            String date,
            String timeOfDay
    ) {

    }

    interface Assistant {
        @SystemMessage("""
                你是一个自然语言理解(NLU)引擎。
                给定一个用户话语,你必须以一个可JSON序列化的对象形式输出意图名称和每个槽值。
                识别的意图必须是以下之一:获取天气信息、未知。
                已识别插槽有:城市、日期、时间。
                如果某个插槽不存在,则将其值设置为空。
                使用此类作为输出:WeatherIntentResult(intent, city, date, timeOfDay)
                """)
        @UserMessage("User query: \"{{input}}\"")
        Entity chat(@V("input") String input);
    }

    public static void main(String[] args) {

        OpenAiChatModel chatModel = Helper.getChatModel();

        Assistant assistant = AiServices.builder(Assistant.class)
                .chatModel(chatModel)
                .build();

        Entity entity = assistant.chat("帮我查一下深圳明天下午的天气");
        System.out.println("解析结果:");
        System.out.println("意图 = " + entity.intent());
        System.out.println("城市 = " + entity.city());
        System.out.println("日期 = " + entity.date());
        System.out.println("时间段 = " + entity.timeOfDay());
    }
}

运行结果

解析结果:
意图 = 获取天气信息
城市 = 深圳
日期 = 明天
时间段 = 下午

此处博主使用的是本地部署的ollama qwen2.5:1.5b,看出来模型参数虽小,识别效果还是可以的。

相关推荐