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

一、springboot 整合 langchain4j 实现简单的问答功能

最近在学习langchain4j,本文将介绍如何使用langchain4j快速实现一个简单的问答功能,帮助大家快速入门。

1. 工具

  • JDK 17
  • Maven 3.9.9
  • IntelliJ IDEA 2024.3.4 (Community Edition)

2. apikey

可以优先选择阿里云百炼申请一个apikey,免费额度足够测试使用。
在这里插入图片描述

3. springboot项目创建

3.1 项目创建

创建springboot项目,与其他springboot项目创建方式一样,这里不再详细介绍。

3.2 依赖引入

这里只提供了部分依赖示例,使用的版本是1.0.0-beta2,完整依赖可以参考langchain4j官方文档,本文最后给出了完整pom.xml供大家参考。实际上三方依赖会经常更新,随着版本变化需要引入的依赖总是会有些区别,还是建议多查阅官方文档。

<!-- springboot 父依赖 -->
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>3.4.4</version>
</parent>

<dependencies>
    <!-- springboot web 模块 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <!-- langchain4j 集成 springboot相关的依赖 -->
    <dependency>
        <groupId>dev.langchain4j</groupId>
        <artifactId>langchain4j-open-ai-spring-boot-starter</artifactId>
    </dependency>
    <dependency>
        <groupId>dev.langchain4j</groupId>
        <artifactId>langchain4j-spring-boot-starter</artifactId>
    </dependency>
    <dependency>
        <groupId>dev.langchain4j</groupId>
        <artifactId>langchain4j-open-ai</artifactId>
    </dependency>
    <dependency>
        <groupId>dev.langchain4j</groupId>
        <artifactId>langchain4j</artifactId>
    </dependency>
</dependencies>

3.3 配置文件

application.yml 配置文件内容如下:

langchain4j:
  open-ai:
    chat-model:
      log-requests: true
      log-responses: true
      temperature: 0.5
      max-tokens: 4096
      base-url: https://dashscope.aliyuncs.com/compatible-mode/v1
      model-name: qwen-plus
      api-key: ${API_KEY} # 需要替换成自己申请的apikey

      # base-url: https://api.deepseek.com/v1
      # model-name: deepseek-reasoner
      # api-key: ${API_KEY}

logging.level.dev.langchain4j: DEBUG

4. 代码编写

4.1 启动类

先准备springboot启动类

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

}

4.2 controller

编写一个接口,注入ChatLanguageModel,写一个最简单的接口测试。

import dev.langchain4j.model.chat.ChatLanguageModel;
import dev.langchain4j.service.AiServices;
import jakarta.annotation.Resource;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;


@RestController
public class ChatController {

    @Resource
    ChatLanguageModel chatLanguageModel;

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

4.3 测试

启动项目,用postman调用接口进行简单测试:
在这里插入图片描述

参考

完整的pom.xml文件如下

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>cn.chenf24k.tools</groupId>
    <artifactId>cf-langchain</artifactId>
    <version>1.0-SNAPSHOT</version>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>3.4.4</version>
    </parent>

    <properties>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <langchain4j.version>1.0.0-beta2</langchain4j.version>
    </properties>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>dev.langchain4j</groupId>
                <artifactId>langchain4j-bom</artifactId>
                <version>${langchain4j.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>dev.langchain4j</groupId>
            <artifactId>langchain4j-open-ai-spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>dev.langchain4j</groupId>
            <artifactId>langchain4j-spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>dev.langchain4j</groupId>
            <artifactId>langchain4j-open-ai</artifactId>
        </dependency>
        <dependency>
            <groupId>dev.langchain4j</groupId>
            <artifactId>langchain4j</artifactId>
        </dependency>
        <dependency>
            <groupId>org.mapdb</groupId>
            <artifactId>mapdb</artifactId>
            <version>3.0.9</version>
            <exclusions>
                <exclusion>
                    <groupId>org.jetbrains.kotlin</groupId>
                    <artifactId>kotlin-stdlib</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

    </dependencies>

    <build>
        <finalName>app</finalName>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

相关文章:

  • FreeRTOS(消息队列信号量队列集事件标志组)
  • Emu: Enhancing Image Generation Models Using Photogenic Needles in a Haystack
  • Windows笔记本怎样删除已保存的Wifi
  • 0413-多态、Object类方法、访问权限修饰符、装箱拆箱、128陷阱
  • 车载以太网-SOMEIP
  • python 微博爬虫 01
  • Java学习手册:Java I/O与NIO
  • 【题解-洛谷】P1824 进击的奶牛
  • LangSmith 设置指南
  • 安装树莓派3B+环境
  • 山东大学软件学院创新项目实训开发日志(12)之将对话记录保存到数据库中
  • OSI 七层模型与 TCP/IP 协议栈详解
  • 【JS】关于原型/原型链
  • 【玩泰山派】MISC(杂项)- 使用vscode远程连接泰山派进行开发
  • 0x05.为什么 Redis 设计为单线程?6.0 版本为何引入多线程?
  • 移动端适配
  • javaSE.Lambda表达式
  • 【TI MSPM0】Printf重定向学习
  • GitLab 17.x 配置 https
  • NLP 梳理02 — 标点符号和大小写
  • 王伟妻子人民日报撰文:81192,一架永不停航的战机
  • 一图看懂|印巴交火后,双方基地受损多少?
  • 人民日报:从“轻微免罚”看涉企执法方式转变
  • 哲学新书联合书单|远离苏格拉底
  • 联合国秘书长欢迎中美经贸高层会谈成果
  • 中拉论坛部长级会议为何悬挂海地和圣卢西亚的国旗?外交部回应