当前位置: 首页 > article >正文

如何在Spring Boot项目中集成LangChain4J开源开发框架

目录

  • 1.1、前言
  • 1.2、集成环境
  • 1.3、单一LLM提供商集成
  • 1.4、声明式AI服务集成
  • 1.5、多模型集成
  • 1.6、集成示例工程

1.1、前言

        LangChain4j提供与许多LLM提供商的集成。每个集成都有自己的maven依赖关系。LangChain4j也为每个不同的LLM提供商提供对应的Spring Boot启动器,用户根据自己的实际情况选择对应的LLM提供商进行集成。LangChain4j针对不同LLM提供商提供的Spring Boot启动器如下图所示:
Spring Boot启动器

1.2、集成环境

        Spring Boot项目集成LangChain4J开源开发框架最低环境配置是Java17和Spring Boot 3.2及以上,本实例采用的配置如下表所示:

环境名称版本号
JDK17.0.7
Maven3.6.3
Idea2022.2.1
Spring Boot3.2.4

1.3、单一LLM提供商集成

        Spring Boot启动器有助于创建和配置语言模型、嵌入模型、嵌入存储、和其他核心 LangChain4j 组件。用户只需根据实际情况选择对应的LLM提供商的Spring Boot启动器进行依赖导入即可。
        Spring Boot启动器依赖项的命名约定为:langchain4j-{LLM提供商名称}-spring-boot-starter。
        下面以OpenAI为例讲解如何在Spring Boot项目单一集成OpenAI大模型,首先我们需要找到OpenAI依赖项名称,按照约定OpenAI的Spring Boot启动器名称应为:langchain4j-open-ai-spring-boot-starter。然后,用户只需要进行如下三步就可以轻松在自己的Spring Boot项目中集成和使用OpenAI。

  • 导入依赖
    用户只需要在Spring Boot项目的pom文件中导入OpenAI依赖即可,依赖配置如下:
<dependency>
    <groupId>dev.langchain4j</groupId>
    <artifactId>langchain4j-open-ai-spring-boot-starter</artifactId>
    <version>1.0.0-beta2</version>
</dependency>
  • 配置模型参数
    在用户配置模型参数之前,用户需要自行去OpenAI官网上申请自己的API-KEY,这里不做赘述。有了API-KEY需要在Spring Boot项目的配置文件中配置模型参数,示例模型参数如下所示:
langchain4j.open-ai.chat-model.api-key=${OPENAI_API_KEY}
langchain4j.open-ai.chat-model.model-name=gpt-4o
langchain4j.open-ai.chat-model.log-requests=true
langchain4j.open-ai.chat-model.log-responses=true
...

Spring Boot项目的配置文件通常为application.properties或者application.yaml文件,如果没有需要用户在项目的resources目录下新建application.properties或者application.yaml文件。

  • 编写AI服务接口
    用户在项目的src目录下新建包名编写自己的AI服务即可。在这种情况下,将自动创建OpenAiChatModel的实例,该实例也就是ChatLanguageModel的实现。用户只需要在使用的地方自动注入该对象即可。示例AI服务如下:
@RestController
public class ChatController {

    ChatLanguageModel chatLanguageModel;

    public ChatController(ChatLanguageModel chatLanguageModel) {
        this.chatLanguageModel = chatLanguageModel;
    }

    @GetMapping("/chat")
    public String model(@RequestParam(value = "message", defaultValue = "Hello") String message) {
        return chatLanguageModel.chat(message);
    }
}

        如果用户需要使用StreamingChatLanguageModel实例,用户只要在配置文件中配置使用流式聊天模型而不是聊天模型属性,配置如下:

langchain4j.open-ai.streaming-chat-model.api-key=${OPENAI_API_KEY}
...

1.4、声明式AI服务集成

        LangChain4j提供了一个Spring Boot启动器,用于自动配置AI服务、RAG、工具等。用户必须已经导入了一个集成启动器(见上文)的基础上再在Spring Boot项目的pom文件中导入该Spring Boot启动器依赖即可,依赖配置如下:

<dependency>
    <groupId>dev.langchain4j</groupId>
    <artifactId>langchain4j-spring-boot-starter</artifactId>
    <version>1.0.0-beta2</version>
</dependency>

        接下来用户在项目的src目录下新建包名编写自己的AI服务,用户只需要在自定义接口上使用@AiService注解进行标记即可。具体如下:

@AiService
interface Assistant {

    @SystemMessage("You are a polite assistant")
    String chat(String userMessage);
}

@AiService注解可以将其视为标准的Spring Boot@Service,但具有AI功能。
当应用程序启动时,LangChain4j starter将扫描类路径并找到所有用@AiService注释的接口。对于找到的每个AI服务,它将使用应用程序上下文中可用的所有LangChain4j组件创建此接口的实现,并将其注册为bean,以便您可以在需要时自动注入它。

        示例AI服务如下:

@RestController
class AssistantController {

    @Autowired
    Assistant assistant;

    @GetMapping("/chat")
    public String chat(String message) {
        return assistant.chat(message);
    }
}

1.5、多模型集成

        如果你有多个AI服务,并且想将不同的LangChain4j组件连接到每个服务中,你可以通过显式连接模式(@AiService(wiringMode=explicit))指定要使用的组件。比如你在配置文件中配置了多个模型参数,具体如下:

# OpenAI
langchain4j.open-ai.chat-model.api-key=${OPENAI_API_KEY}
langchain4j.open-ai.chat-model.model-name=gpt-4o-mini

# Ollama
langchain4j.ollama.chat-model.base-url=http://localhost:11434
langchain4j.ollama.chat-model.model-name=llama3.1

        这时我们需要再自定义服务接口层中通过显式连接模式(@AiService(wiringMode=explicit))指定要使用的组件。具体如下:

@AiService(wiringMode = EXPLICIT, chatModel = "openAiChatModel")
interface OpenAiAssistant {

    @SystemMessage("You are a polite assistant")
    String chat(String userMessage);
}

@AiService(wiringMode = EXPLICIT, chatModel = "ollamaChatModel")
interface OllamaAssistant {

    @SystemMessage("You are a polite assistant")
    String chat(String userMessage);
}

1.6、集成示例工程

  • 单模型集成示例工程,下载地址
  • 声明式AI服务集成示例工程,下载地址
  • 多模型集成示例工程,下载地址

http://www.kler.cn/a/597654.html

相关文章:

  • 论文阅读:2024-NAACL Semstamp、2024-ACL (Findings) k-SemStamp
  • 【第21节】windows sdk编程:网络编程基础
  • 【Spring】Spring Task详解
  • java设计模式之建造者模式《装修启示录》​
  • MAC-在使用@Async注解的方法时,分布式锁管理和释放
  • 嵌入式开发之STM32学习笔记day08
  • Mac:Ant 下载+安装+环境配置(详细讲解)
  • Web3如何影响未来的社交平台:去中心化社交的兴起
  • 区块链在医疗数据共享中的应用:解锁安全与透明的新维度
  • 广度优先搜索(BFS) vs 深度优先搜索(DFS):算法对比与 C++ 实现
  • 洛谷 P10108 [GESP202312 六级] 闯关游戏 题解
  • Android Studio控制台中文乱码解决方案
  • Webpack vs Vite:深度对比与实战示例,如何选择最佳构建工具?
  • LeetCode热题100精讲——Top1:两数之和【哈希】
  • 如何编写一个Spring Boot Starter
  • Ubuntu YOLO5 环境安装
  • UI设计中的大数据可视化:解锁数据背后的秘密
  • 基于深度学习的图像分割项目实践:从理论到应用
  • 基于WebAssembly的浏览器密码套件
  • 【技术选型】三大 Python Web 框架全面对比