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

Spring AI 系列之三十九 - Spring AI Alibaba-集成百炼知识库

之前做个几个大模型的应用,都是使用Python语言,后来有一个项目使用了Java,并使用了Spring AI框架。随着Spring AI不断地完善,最近它发布了1.0正式版,意味着它已经能很好的作为企业级生产环境的使用。对于Java开发者来说真是一个福音,其功能已经能满足基于大模型开发企业级应用。借着这次机会,给大家分享一下Spring AI框架。

注意由于框架不同版本改造会有些使用的不同,因此本次系列中使用基本框架是 Spring AI-1.0.0,JDK版本使用的是19,Spring-AI-Alibaba-1.0.0.3-SNAPSHOT
代码参考: https://github.com/forever1986/springai-study

目录

  • 1 百炼平台的知识库
    • 1.1 构建知识库
    • 1.2 代码演示

前面讲了Spring AI Alibaba如何基于Spring AI框架进行扩展,但是Spring AI Alibaba还有一个最大的优势,就是可以与阿里云上的百炼平台集成,这个是Spring AI Alibaba独特的优势。用户可以在百炼平台构建知识库、智能体、工作流应用以及智能体编排,然后在Spring AI Alibaba中调用创建好的内容。本章先演示一个知识库调用。

1 百炼平台的知识库

大模型缺乏私有知识,且通用知识更新滞后。业界通常采用检索增强生成(RAG)技术,根据用户输入从外部信息源检索相关信息,然后将检索到的内容整合到用户输入中,从而帮助大模型生成更准确的回答。知识库功能作为阿里云百炼的RAG能力,能有效补充私有知识并提供最新信息。

1.1 构建知识库

1)打开百炼平台的应用数据界面:https://bailian.console.aliyun.com/?utm_content=se_1021227512&tab=app#/data-center

在这里插入图片描述

2)上传你的数据,这里使用《庆余年.txt》小说上传

在这里插入图片描述

3)利用上传的数据构建知识库,打开知识库:https://bailian.console.aliyun.com/?utm_content=se_1021227512&tab=app#/knowledge-base

在这里插入图片描述

4)创建知识库,设置名称、embeded模型,以及应用数据(注意:这里的名称就是你代码中要使用的

在这里插入图片描述

在这里插入图片描述

5)等待解析完成

在这里插入图片描述

1.2 代码演示

代码参考lesson30子模块下的baili-knowledge子模块

示例说明:通过代码调用百炼平台的知识库解答问题

1)新建lesson30子模块

2)在lesson30子模块下,新建baili-knowledge子模块,其pom引入如下:

<dependencies><dependency><groupId>com.alibaba.cloud.ai</groupId><artifactId>spring-ai-alibaba-starter-dashscope</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency>
</dependencies>

3)新建配置文件

# 百炼模型的API KEY
spring.ai.dashscope.api-key=你的阿里百炼API KEY

4)新建BailianKnowledgeController 演示类

import com.alibaba.cloud.ai.advisor.DocumentRetrievalAdvisor;
import com.alibaba.cloud.ai.autoconfigure.dashscope.DashScopeConnectionProperties;
import com.alibaba.cloud.ai.dashscope.api.DashScopeApi;
import com.alibaba.cloud.ai.dashscope.rag.DashScopeDocumentRetriever;
import com.alibaba.cloud.ai.dashscope.rag.DashScopeDocumentRetrieverOptions;
import org.springframework.ai.chat.client.ChatClient;
import org.springframework.ai.rag.retrieval.search.DocumentRetriever;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;@RestController
@EnableConfigurationProperties({DashScopeConnectionProperties.class})
public class BailianKnowledgeController {private static final String indexName = "庆余年小说";private final ChatClient chatClient;public BailianKnowledgeController(ChatClient.Builder builder, DashScopeConnectionProperties properties) {DocumentRetriever retriever = new DashScopeDocumentRetriever(DashScopeApi.builder().apiKey(properties.getApiKey()).build(),DashScopeDocumentRetrieverOptions.builder().withIndexName(indexName).build());chatClient = builder.defaultAdvisors(new DocumentRetrievalAdvisor(retriever)).build();}@GetMapping("/bailian/knowledge/call")public String call(@RequestParam(value = "message",defaultValue = "你是谁?") String message) {return chatClient.prompt().user(message).call().content();}}

5)新建启动类:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
public class Lesson30KnowledgeApplication {public static void main(String[] args) {SpringApplication.run(Lesson30KnowledgeApplication.class, args);}}

6)演示效果

http://localhost:8080/bailian/knowledge/call?message=监察院是做什么的

在这里插入图片描述

结语:本章演示了如何使用Spring AI Alibaba集成百炼平台的知识库,这样对于实际应用开发来说是非常迅速的,这就是Spring AI Alibaba框架的优势之一。下一章将讲如何集成百炼平台的线上智能体。

Spring AI系列上一章:《Spring AI 系列之三十八 - Spring AI Alibaba-Tool Calling》

Spring AI系列下一章:《Spring AI 系列之四十 - Spring AI Alibaba-集成百炼智能体》

http://www.dtcms.com/a/322027.html

相关文章:

  • 【Python-Day 38】告别通用错误!一文学会创建和使用 Python 自定义异常
  • 【Nginx基础①】 | VS Code Remote SSH 环境下的静态资源与反向代理配置实践
  • 明厨亮灶场景下误检率↓76%:陌讯多模态融合算法实战解析
  • 蓝桥杯----大模板
  • 【NFTurbo】基于DockerCompose一键部署
  • Redis中String数据结构为什么以长度44为embstr和raw实现的分界线?
  • 【大模型实战篇】部署GPT-OSS-120B踩得坑(vllm / ollama等推理框架)
  • 数据库索引创建的核心原则与最佳实践
  • JAVA 分布式锁的5种实现方式
  • 【C++高阶五】mapset对红黑树的封装
  • 【昇腾】Atlas 500 A2 智能小站制卡从M.2 SATA盘启动Ubuntu22.04系统,重新上电卡死没进系统问题处理_20250808
  • 图片识别表格工具v3.0绿色版,PNG/JPG秒变可编辑Excel
  • Redis初步介绍和分布式系统介绍
  • 项目一系列-第4章 在线接口文档 代码模板改造
  • 临床医学 RANDOM SURVIVAL FORESTS(randomSurvivalForest)-2 python 例子
  • shell脚本使用
  • 软件销售跟进思路
  • 期货和期权对冲后能盈利吗?
  • 大力水手4——AI驱动的多帧生成与神经网络渲染
  • MySQL NULL 值处理详细说明
  • 《天天酷跑》:用Pygame打造经典跑酷游戏的开发与玩法全解析
  • 库函数NTC采样温度的方法(STC8)
  • react的form.resetFields()
  • cuda编程之内核执行配置参数
  • 智慧交通场景下 mAP↑28%:陌讯多模态融合算法实战解析
  • Linux入门到精通,第二周自我总结
  • 书生浦语第五期-L1G3-LMDeploy 课程
  • 配电线路故障定位在线监测装置的技术解析与应用价值
  • C语言编译流程讲解
  • 第七篇:动画基础:requestAnimationFrame循环