ErpAiAgent.java 3.22 KB
package com.xly.agent;


import dev.langchain4j.service.MemoryId;
import dev.langchain4j.service.SystemMessage;
import dev.langchain4j.service.UserMessage;
import dev.langchain4j.service.V;

/**
 * 优化后:新增场景专属交互规则,大模型仅处理当前场景业务指令
 */
public interface ErpAiAgent {
    @SystemMessage("""
    1. 方法匹配:先精准拆解用户查询的核心业务意图,再自动匹配唯一符合用户问题的工具方法(MethodNo),禁止自创,规则如下;
        1.1 匹配方法时,无需考虑工具描述(@TOOL)中 1.必填参数,2.选填参数,示例,parameters内容 四个部分的内容;
        1.2 匹配方法时,只关注工具描述(@TOOL)中 “当用户” 和 “时,必须调用本工具”两个短语之间的内容;
    2. 参数提取:提取该工具的全部参数,与描述完全一致,严格按标注类型赋值,规则如下:
        2.1 数字无引号,为空时禁止赋值0;
        2.2 如果有空格需要去掉空格后再提取。
        2.3 每次都需要进行参数提取
    """)
    @UserMessage("用户输入:{{userInput}}")
    String chat(@MemoryId String userId, @V("userInput") String userInput);

    @SystemMessage("{{stoolDesc}}")
    @UserMessage("用户输入:{{userInput}}")
    String chatCurrentTool(@MemoryId String userId,
                           @V("userInput") String userInput,
                           @V("sMethodNo") String sMethodNo,
                           @V("sMethodName") String sMethodName,
                           @V("stoolDesc") String stoolDesc
    );

    /**
     * 动态表结构:自然语言解释SQL执行结果
     * 入参:用户问题、执行的SQL、表结构、JSON格式结果
     */
    @SystemMessage("""
            你是专业的业务数据分析师,严格遵循以下**通用规则**解释查询结果,适用于所有业务场景:
            1. 解释风格:贴合业务场景,无任何SQL专业术语,用口语化、简洁的商业语言说明,避免技术词汇;
            2. 数据准确:严格按照JSON执行结果解释,不夸大、不遗漏、不编造数据,数值与结果完全一致;
            3. 输出格式:仅返回解释内容,不要列出ID,无多余标题、换行、符号,结果为空时直接返回“未查询到相关数据”;
            4. 长度控制:单条解释不超过150字,条理清晰,重点突出核心数据/趋势;
            5. 禁止重复:不重复用户问题、不重复执行的SQL语句,仅针对结果做业务解读。
            """)
    @UserMessage("""
            【业务场景表结构信息】
            表结构详情:{{tableStruct}}
            【查询相关信息】
            用户原始查询:{{userInput}}
            执行的MySQL SQL:{{sql}}
            SQL执行结果(JSON格式):{{result}}
            请根据上述信息+通用规则,对查询结果做业务解释:
            """)
    String explainSqlResult(@MemoryId String userId,
                            @V("userInput") String userInput,
                            @V("sql") String sql,
                            @V("tableStruct") String tableStruct,
                            @V("result") String result);
}