Spring Boot集成AI问答助手(极简无需显卡)

最近在做毕业设计,是SpringBoot+Vue的论坛系统,老师说最好加上一点创新点,思考了一下决定加一个RAG构建的智能问答助手。这里我们使用LLM+Langchain的方式对大模型进行微调,采用通义千问的API来充当LLM的部分,无需显卡,非常适合配置一般的电脑,那么如何最简单的在SpringBoot里集成呢?

首先下载Langchain-chatchat的整合包

为了减少时间成本,这里直接参照B站大神分享的整合包:
无需显卡Langchain-chatchat接入通义千问大模型
按照视频里的操作下载完成之后申请通义千问API的key并配置完毕就可以进行下一步了

在SpringBoot里集成

首先启动整合包
启动完成之后看见如下界面,红框部分是整合包的API文档
在这里插入图片描述
进入API文档地址:
在这里插入图片描述
找到这个与知识库对话的API,接下来将他封装进SpringBoot,这里我们使用Spring WebClient构造请求体并访问。
首先在pom文件里添加WebClient相关:

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-webflux</artifactId>
</dependency>

Hutool工具类:

<dependency>
    <groupId>cn.hutool</groupId>
    <artifactId>hutool-all</artifactId>
    <version>5.8.16</version>
</dependency>

然后在SpringBoot里新建一个工具类:

@Component
@Slf4j
public class LangChainSDK {

    private final WebClient webClient;

    public LangChainSDK() {
        // 初始化 WebClient 配置
        this.webClient = WebClient.builder()
                .baseUrl("http://127.0.0.1:7861") // 设置基础URL
                .build();
    }

    public Mono<String> chatWithAI(String content) {
        try {
            Map<String, Object> body = new HashMap<>();
            body.put("query", content); //问题内容
            body.put("knowledge_base_name", "yourModelName"); //模型名字
            body.put("top_k", 3);
            body.put("score_threshold", 2); //0-2 模型匹配值
            body.put("stream", false);
            body.put("model_name", "qwen-api"); //模型名字
            body.put("temperature", 0.7); //默认
            body.put("max_tokens", 0);
            body.put("prompt_name", "default");

            return webClient.post()
                    .uri("/chat/knowledge_base_chat")
                    .contentType(MediaType.APPLICATION_JSON)
                    .bodyValue(body)
                    .retrieve()
                    .bodyToMono(String.class)
                    .map(response -> {
                        //现在返回值的类型是String类型的JSON----data:{answer:"xxx"}
                        String jsonStr = response.replace("data:", "");
                        //转成真JSON
                        JSONObject jsonObject = JSONUtil.parseObj(jsonStr);
                        //只要answer
                        return jsonObject.getStr("answer");
                    })
                    .doOnError(error -> {
                        log.error("LangChain Chat Error: {}", error.getMessage());
                    });
        } catch (Exception e) {
            log.error("Exception occurred: {}", e.getMessage());
            throw new ServiceException(ResponseEnum.LANG_CHAIN_CHAT_ERROR);
        }
    }
}

body.put("knowledge_base_name", "yourModelName"); //模型名字这里面的模型名字替换成你自己的
throw new ServiceException(ResponseEnum.LANG_CHAIN_CHAT_ERROR);这里是我自己封装的全局异常类,可以替换成你们自己的,或者直接throw一个RunTimeException

调用

接下来就可以调用了,我在Service层调用如下:

@Service
public class AIServiceImpl implements AIService {

    @Resource
    private LangChainSDK langChainSDK;


    @Override
    public String chatWithAI(String content) {
        return langChainSDK.chatWithAI(content).block();
    }
}

content是你的想问的问题

在controller里调用:

@RestController
@RequestMapping("/ai")
@Api(tags = "AI助手模块")
public class AIController {

    @Resource
    private AIService aiService;

    @PostMapping("/chat")
    @ApiOperation(value = "和本地知识库对话")
    public R<?> chatWithAI(@RequestParam String content) {
        return new R<>().success(ResponseEnum.SUCCESS, aiService.chatWithAI(content));
    }

}

运行结果

ApiFox调试结果:
在这里插入图片描述
成功整合

  • 11
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值