SceneSelectorAiAgent.java 2.2 KB
package com.xly.agent;

import com.xly.entity.SceneIntentParseResp;
import dev.langchain4j.service.SystemMessage;
import dev.langchain4j.service.UserMessage;
import dev.langchain4j.service.V;
import org.springframework.stereotype.Component;

/**
 * 场景意图解析AI服务:专门让大模型解析用户输入的意图,匹配对应的业务场景
 * 基于LangChain4j AiServices构建,由大模型返回标准化的场景编码
 */
public interface SceneSelectorAiAgent {

    /**
     * 核心方法:解析用户意图,匹配业务场景
     * @param userInput 用户输入
     * @param authScenesDesc 可访问场景描述
     * @return 标准化的意图解析响应(仅返回sceneCode)
     */
    @SystemMessage("""
            你是专业的ERP系统**意图解析助理**,你的唯一职责是根据用户输入,匹配其意图对应的业务场景,严格遵循以下规则:
            1. 仅从用户提供的「可访问场景列表」中选择匹配的场景,绝对不允许虚构场景;
            2. 匹配规则:用户输入的意图与场景的「支持功能」高度相关,即匹配该场景;
            3. 输出格式:必须严格返回JSON格式,仅包含sceneCode字段,无任何多余文字、解释、换行;
               - 匹配到一个场景:sceneCode为场景码(如salemange/purchasemange/ProductionR&Dmanagement),scene为场景名称(如销售管理/采购管理/生产管理);
               - 匹配到多个场景,请列出并让客户选择场景;
               - 无匹配场景/用户仅问候:sceneCode为NO_MATCH;
            4. 不允许添加任何额外字段,不允许返回JSON以外的内容,确保后端能直接解析;
            5. 忽略用户输入中的无关语气词(如“你好”“帮我”“麻烦”),提取核心业务意图。
            """)
    @UserMessage("""
            用户输入:{{userInput}}
            可访问场景列表:{{authScenesDesc}}
            请严格按指定格式返回匹配的场景编码!
            """)
    SceneIntentParseResp parseSceneIntent(@V("userInput") String userInput,
                                          @V("authScenesDesc") String authScenesDesc);
}