前面我们已经学到了如何定义一个接口,如下:
// 定义业务接口
interface Assistant {
// userMessage 是用户输入的消息
// 返回值是 AI 回复的内容呢
String chat(@UserMessage String userMessage, ChatRequestParameters chatRequestParameters);
}然后,使用 AiServices 类快速创建接口对应的服务对象:
// 使用 AiServices 创建服务
Assistant assistant = AiServices.builder(Assistant.class)
.chatModel(chatModel)
.build();以下是一些有效的人工智能服务方法示例,可以作为参考。
下面示例给出了如何定义拥有用户消息(@UserMessage)的示例,看看是否有你需要的:
String chat(String userMessage);
String chat(@UserMessage String userMessage);
String chat(@UserMessage String userMessage, ChatRequestParameters parameters);
// userMessage 包含 "{{country}}" 模板变量
String chat(@UserMessage String userMessage, @V("country") String country);
// content 可以是以下之一:
// TextContent, ImageContent, AudioContent, VideoContent, PdfFileContent
String chat(@UserMessage String userMessage, @UserMessage Content content);
// 第二个参数 image 可以是以下之一:
// TextContent, ImageContent, AudioContent, VideoContent, PdfFileContent
String chat(@UserMessage String userMessage, @UserMessage ImageContent image);
String chat(@UserMessage String userMessage, @UserMessage List<Content> contents);
String chat(@UserMessage String userMessage, @UserMessage List<ImageContent> images);
@UserMessage("德国的首都是什么?")
String chat();
@UserMessage("{{it}}的首都是什么?")
String chat(String country);
@UserMessage("{{country}}的首都是什么?")
String chat(@V("country") String country);
@UserMessage("{{something}}是{{country}}的什么?")
String chat(@V("something") String something, @V("country") String country);
// 这仅在Quarkus和Spring Boot应用程序中有效
@UserMessage("{{country}}的首都是什么?")
String chat(String country);下面给出了同时拥有系统消息(@SystemMessage)和用户消息(@UserMessage)的示例,看看是否有你需要的:
@SystemMessage("给定一个国家的名称,请用它的首都名称来回答")
String chat(String userMessage);
@SystemMessage("给定一个国家的名称,请用它的首都名称来回答")
String chat(@UserMessage String userMessage);
@SystemMessage("给定一个国家的名称,{{answerInstructions}}")
String chat(@V("answerInstructions") String answerInstructions,
@UserMessage String userMessage);
// userMessage包含 “{{country}}” 模板变量
@SystemMessage("给定一个国家的名称,请用它的首都名称来回答")
String chat(@UserMessage String userMessage, @V("country") String country);
// userMessage包含“{{country}}”模板变量
@SystemMessage("给定一个国家的名称,{{answerInstructions}}")
String chat(@V("answerInstructions") String answerInstructions,
@UserMessage String userMessage, @V("country") String country);
@SystemMessage("给定一个国家的名称,请用它的首都名称来回答")
@UserMessage("德国")
String chat();
@SystemMessage("给定一个国家的名称,{{answerInstructions}}")
@UserMessage("德国")
String chat(@V("answerInstructions") String answerInstructions);
@SystemMessage("给定一个国家的名称,请用它的首都名称来回答")
@UserMessage("{{it}}")
String chat(String country);
@SystemMessage("给定一个国家的名称,请用它的首都名称来回答")
@UserMessage("{{country}}")
String chat(@V("country") String country);
@SystemMessage("给定一个国家的名称,{{answerInstructions}}")
@UserMessage("{{country}}")
String chat(@V("answerInstructions") String answerInstructions,
@V("country") String country);除了文本内容之外,或者作为文本内容的替代,AI 服务方法可以接受一个或多个 Content 或 List 参数:
String chat(@UserMessage String userMessage, @UserMessage Content content);
String chat(@UserMessage String userMessage, @UserMessage ImageContent image);
String chat(@UserMessage String userMessage, @UserMessage ImageContent image,
@UserMessage AudioContent audio);
String chat(@UserMessage String userMessage, @UserMessage List<Content> contents);
String chat(@UserMessage String userMessage, @UserMessage List<ImageContent> images);
String chat(Content content);
String chat(AudioContent content);
String chat(List<Content> contents);
String chat(List<AudioContent> contents);
String chat(@UserMessage Content content1, @UserMessage Content content2);
String chat(@UserMessage AudioContent audio, @UserMessage ImageContent image);注意:AI 服务会按照参数声明的顺序,将所有内容放入最终的 UserMessage 中。
更多 LangChain4j 知识请阅读后续教程……