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

spring-ai-alibaba 1.0.0.2 学习(八)——接入阿里云信息查询服务

相比私有知识库,检索前还需要创建知识库,自行导入知识文档,从网上检索公开文档这个方案直接检索即可,省略了搭建知识库的过程,更加方便

前一篇接入阿里百炼云平台知识库,虽然知识库是在云端,但仍然是私有知识库,那如果不想接入私有知识库,想从网上检索文档,应该如何操作呢?

阿里云提供了信息查询服务(信息查询服务(IQS)-阿里云帮助中心)作为大模型专用搜索解决方案,可惜spring-ai-alibaba并没有将其直接封装为工具或检索器(但是提供了baidu和bing作为工具,具体工具列表参考spring-ai-alibaba 1.0.0.2 学习(二)——jar包盘点-CSDN博客),需要我们自行封装

ps: 阿里通义大模型qwen本身是有联网搜索功能的,仅需将options中的enable_search设置为true即可(默认false)

将信息查询服务封装为检索器

第一步:引入相关依赖

<dependency><groupId>com.aliyun</groupId><artifactId>iqs20241111</artifactId><version>1.3.1</version>
</dependency>

第二步:申请权限并添加配置

在阿里云平台申请IQS权限,并将accessKeyId和accessKeySecret添加到配置文件

第三步:代码封装

import com.alibaba.cloud.ai.dashscope.api.DashScopeApi;
import com.alibaba.cloud.ai.dashscope.rag.DashScopeDocumentRetrievalAdvisor;
import com.alibaba.cloud.ai.dashscope.rag.DashScopeDocumentRetriever;
import com.alibaba.cloud.ai.dashscope.rag.DashScopeDocumentRetrieverOptions;
import com.aliyun.iqs20241111.Client;
import com.aliyun.iqs20241111.models.*;
import com.aliyun.teaopenapi.models.Config;
import org.springframework.ai.chat.client.ChatClient;
import org.springframework.ai.chat.client.advisor.api.Advisor;
import org.springframework.ai.document.Document;
import org.springframework.ai.rag.Query;
import org.springframework.ai.rag.retrieval.search.DocumentRetriever;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;import java.util.List;public class AlibabaIqsDocumentRetriever implements DocumentRetriever{@Overridepublic List<Document> retrieve(Query query) {try {//分2步,初始化客户端,执行搜索Client iqsClient = initClient();return search(iqsClient, query);} catch (Exception e) {throw new RuntimeException(e);}}//执行搜索private List<Document> search(Client client, Query query) throws Exception {//分3步:构建请求对象,调用client发送请求,处理返回结果RequestContents requestContents = new RequestContents().setMainText(true);UnifiedSearchInput input = new UnifiedSearchInput().setQuery(query.text()).setContents(requestContents);UnifiedSearchRequest request = new UnifiedSearchRequest().setBody(input);UnifiedSearchResponse response = client.unifiedSearch(request);return convertDocument(response);}//将结果转化为Documentprivate List<Document> convertDocument(UnifiedSearchResponse response) {return response.getBody().getPageItems().stream().map(item ->Document.builder().text(item.mainText).score(item.rerankScore).build()).toList();}//构建Client对象//也可以将Client做成自动装配的beanprivate Client initClient() throws Exception {String accessKeyId = "your_access_key_id";String accessKeySecret = "your_access_key_secret";Config iqsConfig = new Config().setAccessKeyId(accessKeyId).setAccessKeySecret(accessKeySecret).setEndpoint("iqs.cn-zhangjiakou.aliyuncs.com");return new Client(iqsConfig);}
}

通过以上三步,就可以使用DocumentRetriever进行检索了(将其注入DocumentRetrievalAdvisor,不清楚的参考spring-ai-alibaba 1.0.0.2 学习(七)——集成阿里云百炼平台知识库-CSDN博客 中的检索部分)

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

相关文章:

  • 深度学习-逻辑回归
  • RJ45 连接器(水晶头)的引脚定义
  • 从0到1解锁Element-Plus组件二次封装El-Dialog动态调用
  • Gemini CLI初体验
  • 二叉树题解——二叉树的层序遍历【LeetCode】队列实现
  • Java中Stream流的使用
  • Web攻防-文件上传黑白名单MIMEJS前端执行权限编码解析OSS存储分域名应用场景
  • 设计模式(九)
  • 魔术方法__call__
  • Redis缓存架构实战
  • Selenium Base全新升级版:新一代自动化框架实战解析
  • Python 的内置函数 range
  • 高边驱动 低边驱动
  • 黑暗中的爆破(船讯网Ais爬虫暨爬虫实战js逆向学习经验分享)
  • 车载以太网-IP 掩码 vlan 端口
  • SciPy 安装使用教程
  • [特殊字符] 电子机械制动(EMB)产业全景分析:从技术演进到千亿市场爆发
  • 高通QCS8550部署YOLO-NAS模型与性能测试
  • 使用excel中的MATCH函数进行匹配数据
  • Python数据库软件:查询与预测功能集成系统
  • Linux常见指令以及权限理解
  • 使用 Flask 构建基于 Dify 的企业资金投向与客户分类评估系统
  • HTTP详细介绍
  • Windows 10 2016 长期服务版
  • 仿小红书交流社区(微服务架构)
  • day 58 python打卡
  • AppInventor2 标签内容过多,如何做到可上下滑动?
  • 【WRFDA教程第一期】运行观测预处理程序(OBSPROC)
  • 数据结构:数组在编译器中的表示(Array Representation by Compiler)
  • oracle锁表,oracle解锁表,oracle用户连接数