如何使用LangChain4j框架创建和使用多种AI服务。它通过定义接口和注解,将自然语言处理任务(如情感分析、数字提取、日期提取、POJO提取等)封装为服务,并通过LangChain4j的AiServices动态生成这些服务的实现。
本章主要讲述基于LangChain调用大模型如何进行结构化输出的真实示例,一一列举,本章主要从自然语言中如何通过大模型精确匹配POJO的字段示例
整体代码结果说明
带描述的POJO提取服务(POJOExtractor with Descriptions)是LangChain4j框架中一个高级功能,它不仅从文本中提取并构造POJO对象,还通过@Description注解为POJO的字段提供详细的描述。这些描述帮助语言模型更好地理解每个字段的含义和要求,从而提高提取的准确性和可靠性
代码定义了多个静态内部类,每个类都展示了LangChain4j中不同类型的AI服务示例。这些服务通过接口和注解定义,并通过AiServices.create()方法动态生成实现。每个类都包含一个main方法,用于演示如何调用这些服务。
带描述的POJO提取服务(POJOExtractor with Descriptions)
1. 技术实现
1.1 接口定义
定义了一个接口RecipeExtractor,用于封装从文本中提取并构造Recipe对象的功能。接口中包含一个方法,用于从文本中提取Recipe对象。
interface RecipeExtractor {
@UserMessage("Extract information about a recipe from {
{it}}")
Recipe extractRecipeFrom(String text);
}
解析:
方法定义:extractRecipeFrom(String text)方法用于从文本中提取Recipe对象。
注解使用:@UserMessage注解定义了用户消息模板,{
{it}}会被替换为方法参数(即要提取信息的文本)。这使得AI能够理解用户的意图,并生成相应的响应。
1.2 POJO类定义
定义了一个Recipe类,用于表示提取的POJO对象。Recipe类包含title、description、steps和preparationTimeMinutes字段,并使用@Description注解为每个字段提供详细的描述。
static class Recipe {
@Description("Short title, 3 words maximum")
private String title;
@Description("Short description, 2 sentences maximum")
private String description;
@Description("Each step should be described in 4 words, steps should rhyme")
private List<String> steps;
private Integer preparationTimeMinutes;
@Override
public String toString() {
return "Recipe {" +
" title = \"" + title + "\"" +
", description = \"" + description + "\"" +
", steps = " + steps +