多客科技 发表于 2025-10-22 12:56

注解式AI服务实战

作者:微信文章



在介绍更多特性前,先给大家介绍一下 LangChain4j 最重要的开发模式 —— AI Service,AI Service 提供了很多高层抽象的、用起来更方便的 API⁢,把 AI 应用当做服务来开发。
LangChain4j 系列文章

1. LangChain4j - LangChain4j快速入门实战2. LangChain4j - 多模态开发踩坑实录3. LangChain4j - 系统提示词稳住AI
使用 AI Service

首先引入 langchain4j 依赖:
<dependency>
    <groupId>dev.langchain4j</groupId>
    <artifactId>langchain4j</artifactId>
    <version>1.1.0</version>
</dependency>


然后创建一个编程助手 AI Service 服务,采用声明式开发方法,编写一个对话方法,然后可以直接通过 @SystemMessage 注解定义系统提示词。
/**
* AI 代码助手服务接口
*
* @author BNTang
*/
public interface AiCodeHelperService {
    @SystemMessage("你是一位编程小助手")
    String chat(String userMessage);
}


不过由于我们提示词较长,写到注解里很不优雅,所以单独在 resources 目录下新建文件 system-prompt.txt 来存储系统提示词。



@SystemMessage 注解支持从文件中读取系统提示词:
@SystemMessage(fromResource = "system-prompt.txt")


然后我们需要编写工厂类,用于创建 AI Service:
/**
* AI 代码助手服务工厂
*
* @author BNTang
*/
@Configuration
public class AiCodeHelperServiceFactory {

    @Resource
    private ChatModel qwenChatModel;

    /**
   * 创建 AI 代码助手服务实例
   *
   * @return AI 代码助手服务
   */
    @Bean
    public AiCodeHelperService aiCodeHelperService() {
      // 创建并返回 AI 代码助手服务实例
      return AiServices.create(AiCodeHelperService.class, qwenChatModel);
    }
}
调用 AiServices.create 方法就可以创建出 AI Service 的实现类了,背后的原理是利用 Java 反射机制创建了一个实现接口的代理对象,代理对象负责输入和输出的转换,比如把 String 类型的用户消息参数转为 UserMessage 类型并调用 ChatModel,再将 AI 返回的 AiMessage 类型转换为 String 类型作为返回值。

但我们不用关心这么多,直接写接口和注解来开发就好。

你喜欢这种开发方式么?

编写单元测试,调用我们开发的 AI Service:
@SpringBootTest
class AiCodeHelperServiceTest {

    @Resource
    private AiCodeHelperService aiCodeHelperService;

    @Test
    void chat() {
      String result = aiCodeHelperService.chat("你好,我是程序员NEO");
      System.out.println(result);
    }
}


Debug 运行,发现生成了 AI Service 的代理类,并且系统提示词生效了。是不是比之前自己⁢拼接系统消息要方便多了?


Spring Boot 项目中使用

如果你觉得手动调用 create 方法来创建 Service 比较麻烦,在 Spring Boot ⁢项目中可以引入依赖:
<dependency>
    <groupId>dev.langchain4j</groupId>
    <artifactId>langchain4j-spring-boot-starter</artifactId>
    <version>1.1.0-beta7</version>
</dependency>
然后给 AI Service 加上 @AiService 注解,就能自动创建出服务实例了:
/**
* AI 代码助手服务接口
*
* @author BNTang
*/
@AiService
public interface AiCodeHelperService {
    @SystemMessage(fromResource = "system-prompt.txt")
    String chat(String userMessage);
}


记得注释掉之前工厂类的 @Configuration 注解,否则会出现 Bean ⁢冲突



再次运行单元测试,也是可以正常对话的:



这种方式虽然更方便了,但是缺少了自主构建的灵活性(可以自由设置很多参数),所以我建议还是采用自主构建。之后的功能特性,我们也会基于这种 AI S⁢ervice 开发模式来实现。



如果这篇文章帮到了你,不妨点个“在看”或分享给同样需要的朋友吧! 你的每一次支持,都是我持续创作的动力!💪

往期推荐:
序号文章标题链接1MCP协议爆火揭秘查看详情2轻松配置Cursor玩转MCP查看详情3Browser-Tool 前端开发神器查看详情4AI编码焕新:用Context7查看详情5NotebookLM:靠谱知识库查看详情6Spring AI 玩转多轮对话查看详情7Cursor生成UI,加一步封神查看详情8神器!免费替代Postman查看详情
页: [1]
查看完整版本: 注解式AI服务实战