如何使用LangChain4j框架创建和使用多种AI服务。它通过定义接口和注解,将自然语言处理任务(如情感分析、数字提取、日期提取、POJO提取等)封装为服务,并通过LangChain4j的AiServices动态生成这些服务的实现。
本章主要讲述基于LangChain调用大模型如何进行结构化输出的真实示例,一共列列举,本章主要介绍自然语言结合大模型如何提取日期和时间(提取其他信息也是类似)
整体代码结果说明
代码定义了多个静态内部类,每个类都展示了LangChain4j中不同类型的AI服务示例。这些服务通过接口和注解定义,并通过AiServices.create()方法动态生成实现。每个类都包含一个main方法,用于演示如何调用这些服务。
日期和时间提取服务(DateTimeExtractor)
1. 技术实现
1.1 接口定义
日期和时间提取服务通过定义一个接口DateTimeExtractor来封装日期和时间提取功能。接口中包含三个方法:
- extractDateFrom(String text):从文本中提取日期(LocalDate)。
- extractTimeFrom(String text):从文本中提取时间(LocalTime)。
- extractDateTimeFrom(String text):从文本中提取日期和时间(LocalDateTime)。
interface DateTimeExtractor {
@UserMessage("Extract date from {
{it}}")
LocalDate extractDateFrom(String text);
@UserMessage("Extract time from {
{it}}")
LocalTime extractTimeFrom(String text);
@UserMessage("Extract date and time from {
{it}}")
LocalDateTime extractDateTimeFrom(String text);
}
解析:
方法定义:每个方法都使用@UserMessage注解定义了用户消息模板,{
{it}}会被替换为方法参数(即要提取日期和时间的文本)。这使得AI能够理解用户的意图,并生成相应的响应。
日期和时间类型支持:支持LocalDate、LocalTime和LocalDateTime,确保提取的日期和时间可以无缝地转换为所需的类型,避免类型转换错误。
1.2 动态生成服务实现
通过AiServices.create()方法,LangChain4j框架动态生成了DateTimeExtractor接口的实现。这意味着开发者不需要手动实现接口方法,而是由框架根据接口定义和注解自动生成实现逻辑。
DateTimeExtractor extractor = AiServices.create(DateTimeExtractor.c