spring-ai-alibaba 1.0.0.2 学习(八)——接入阿里云信息查询服务
本文介绍了如何在Spring AI项目中集成阿里云信息查询服务(IQS)实现公开文档检索。相比私有知识库方案,IQS无需预先搭建知识库,直接通过云端API检索公开文档。文章详细说明了实现步骤:1)引入阿里云IQS SDK依赖;2)申请API权限并配置密钥;3)通过自定义DocumentRetriever接口封装检索逻辑,包括初始化客户端、构建搜索请求和处理返回结果。该方法简化了文档检索流程,适合需
相比私有知识库,检索前还需要创建知识库,自行导入知识文档,从网上检索公开文档这个方案直接检索即可,省略了搭建知识库的过程,更加方便
前一篇接入阿里百炼云平台知识库,虽然知识库是在云端,但仍然是私有知识库,那如果不想接入私有知识库,想从网上检索文档,应该如何操作呢?
阿里云提供了信息查询服务(信息查询服务(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{
@Override
public 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);
}
//将结果转化为Document
private List<Document> convertDocument(UnifiedSearchResponse response) {
return response.getBody().getPageItems().stream()
.map(item ->
Document.builder()
.text(item.mainText)
.score(item.rerankScore)
.build()
)
.toList();
}
//构建Client对象
//也可以将Client做成自动装配的bean
private 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博客 中的检索部分)
火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。
更多推荐
所有评论(0)