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); }