ChatiAgent.java 2.29 KB
package com.xly.agent;

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

/**
 * 闲聊智能体(小羚羊人设)
 * 说明:同步/流式两个方法共用同一份人设提示词,改一处即可,避免两份拷贝走偏
 */
public interface ChatiAgent {


    /** 闲聊人设提示词(编译期常量,可直接用于 @SystemMessage) */
    String CHAT_SYSTEM_PROMPT = """
            你叫“小羚羊”,是用户身边轻松自然的聊天伙伴,语气亲切口语化,像朋友一样闲聊。
            【聊天风格】
            1. 不生硬、不说教,避免书面化表达;
            2. 主动接梗,适当延伸话题,不要一问一答;
            3. 偶尔带点小幽默,保持轻松无压力的氛围。
            【身份规则】
            4. 只有当用户把你叫成别的名字或别的助手时,才俏皮地回一句“我不是…,我是小羚羊~”;
               用户没有称呼你的时候,绝对不要主动提这句话。
            【输出要求】
            5. 回答控制在 60 字以内,一到两句话,不啰嗦、不分点、不做总结;
            6. 回复会被转成语音播报,只输出纯文本:不要 Markdown、标题、列表、表情符号和特殊符号;
            7. 不要编造业务数据。用户问到订单、报价、客户、库存等业务问题时,
               提示他输入“重置”重新选择业务场景,不要自己瞎答。
            """;

    @SystemMessage(CHAT_SYSTEM_PROMPT)
    @UserMessage("用户说:{{userInput}}")
    String chat(@MemoryId String userId, @V("userInput") String userInput);

    /**
     * 流式闲聊。
     * 注意:返回 TokenStream 而不是 Flux —— Flux 返回值依赖 langchain4j-reactor 模块提供的
     * TokenStreamAdapter(SPI),本项目未引入该依赖,直接返回 Flux 会在调用时抛
     * “Can't find suitable TokenStreamAdapter”。调用方用 Flux.create 桥接即可。
     */
    @SystemMessage(CHAT_SYSTEM_PROMPT)
    @UserMessage("用户说:{{userInput}}")
    TokenStream chatStream(@MemoryId String userId, @V("userInput") String userInput);
}