通过OSS数据源一站式构建RAG系统最佳实践

OpenSearch-LLM智能问答版支持导入存储在OSS数据源中的数据来构建知识库,实现私有知识问答。本教程介绍如何通过OSS数据源一站式构建RAG系统。

方案概览

  • OpenSearch-LLM智能问答版:OpenSearch-LLM智能问答版内置数据解析与处理、切片、向量化、文本&向量检索、多模态LLM等模型和功能,提供一站式开箱即用的RAG产品,快速构建包含问答、对话、文档链接、参考图片在内的多模态对话式搜索服务,帮助企业和开发者快速搭建专属RAG系统。

  • 对象存储 OSS:对象存储OSS是一款海量、安全、低成本的云存储服务,支持众多类型数据的存储。众多企业、开发者选择将企业内部文档、知识存储到OSS中,作为云上的高可靠数据库。与此同时,这些文档数据也是优质的素材来源,能够协助LLM基于企业内部数据,提升对话的安全性和准确性。因此,如何使用OSS中存储的企业数据,快速构建RAG系统,在企业知识库、智能客服等更好的服务员工、客户成为云上企业、开发者常见的问题。

如果您在对象存储 OSS中存储了您的企业数据,那么您可以将数据导入到OpenSearch-LLM智能问答版,快速搭建起一个RAG系统。

通过OSS数据源一站式构建RAG系统,只需3步:

  1. 创建实例:我们首先创建一个OpenSearch-LLM智能问答版实例。

  2. 导入存储在OSS中的文档:然后我们通过API将OSS数据源中的数据上传到OpenSearch-LLM智能问答版。

  3. 问答测试:最后我们登录OpenSearch-LLM智能问答版控制台对这个RAG系统进行问答效果测试。

说明

除通过OSS数据源导入数据外,OpenSearch还支持通过控制台直接导入数据。具体请参考:通过控制台实现企业知识库问答

前提条件

  1. 请确保您已经获取RAM用户的AccessKey ID以及AccessKey Secret,用于作为调用SDK的凭证。

    1. 创建RAM用户并授权

    2. 查看RAM用户的AccessKey信息

    说明

    AccessKey Secret只在创建时显示,不支持查看。

  2. 请确保代码运行环境设置了环境变量ALIBABA_CLOUD_ACCESS_KEY_ID和ALIBABA_CLOUD_ACCESS_KEY_SECRET。具体配置方法,请参考:在Linux、macOS和Windows系统配置环境变量

创建实例

创建OpenSearch-LLM智能问答版实例:进入OpenSearch LLM智能问答版售卖页,按需求购买实例。

image

导入数据

  1. 登录OSS控制台,单击您的bucket名称进入文件列表,选择需要上传的文件后单击导出URL列表,获取存储在OSS中文档的URL链接。

    image

  2. 安装所需依赖,本文以Maven工程为例,要在Maven工程中使用OpenSearch Java SDK,只需在pom.xml中加入相应依赖即可。

    <dependency>
        <groupId>com.aliyun.opensearch</groupId>
        <artifactId>aliyun-sdk-opensearch</artifactId>
        <version>6.0.0</version>
    </dependency>
    <dependency>
        <groupId>com.aliyun</groupId>
        <artifactId>aliyun-java-sdk-core</artifactId>
        <version>4.6.0</version>
    </dependency
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>fastjson</artifactId>
        <version>1.2.76</version>
    </dependency
  3. 通过SDK上传文档,您可以通过以下示例代码导入存储在OSS中的文档,API详情参考:PushKnowledgeDocuments-文档推送

    import java.io.IOException;
    import java.nio.file.Files;
    import java.nio.file.Path;
    import java.nio.file.Paths;
    import java.util.Base64;
    import java.util.HashMap;
    import java.util.Map;
    
    import com.alibaba.fastjson.JSONArray;
    import com.alibaba.fastjson.JSONObject;
    
    import com.aliyun.opensearch.OpenSearchClient;
    import com.aliyun.opensearch.sdk.generated.OpenSearch;
    import com.aliyun.opensearch.sdk.generated.commons.OpenSearchClientException;
    import com.aliyun.opensearch.sdk.generated.commons.OpenSearchException;
    import com.aliyun.opensearch.sdk.generated.commons.OpenSearchResult;
    
    
    public class pushOSS {
        private static String appName = "test";
        //填入您的实例名称
        private static String host = "http://opensearch-cn-shanghai.aliyuncs.com";
        //流量服务接入地址
        private static String path = "/apps/%s/actions/knowledge-bulk";
        //API接口
    
        public static void main(String[] args) throws IOException {
            //用户识别信息
            //从环境变量读取配置的AccessKey ID和AccessKey Secret,运行代码示例前必须先配置环境变量
            String accesskey = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
            String secret = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
    
            String appPath = String.format(path, appName);
    
            //创建并构造OpenSearch对象
            OpenSearch openSearch = new OpenSearch(accesskey, secret, host);
            //创建OpenSearchClient对象,并以OpenSearch对象作为构造参数
            OpenSearchClient openSearchClient = new OpenSearchClient(openSearch);
    
            //单个doc构建
            JSONObject oneRequest = new JSONObject();
            oneRequest.put("cmd", "URL");
            //上传OSS文档,cmd为URL
            JSONObject fields = new JSONObject();
            fields.put("id", "1");
            //文档ID,唯一不重复。
            fields.put("title", "xxx.html");
            //(选填)文件名
            fields.put("url", "https://xxx.oss-cn-beijing.aliyuncs.com/xxx.html");
            //(必填)文档链接
            fields.put("content","https://xxx.oss-cn-beijing.aliyuncs.com/xxx.html");
            //(必填)文档内容,填入URL链接
            oneRequest.put("fields",fields);
    
            //可以同时添加多条数据
            final JSONArray request = new JSONArray();
            request.add(oneRequest);
            //request.add(twoRequest);
    
            Map<String, String> params = new HashMap<String, String>() {{
                put("format", "full_json");
                put("_POST_BODY", request.toString());
            }};
            try {
                OpenSearchResult openSearchResult = openSearchClient.callAndDecodeResult(appPath, params, "POST");
                //打印返回结果
                System.out.println(openSearchResult.getResult());
            } catch (OpenSearchException e) {
                e.printStackTrace();
            } catch (OpenSearchClientException e) {
                e.printStackTrace();
            }
        }
    
    }

问答测试

  1. 登录OpenSearch-LLM智能问答版控制台,单击操作栏下的管理按钮进入实例详情界面,在左侧导航栏选择配置中心->数据配置,可查看已导入的文档。

    image

  2. 在左侧导航栏选择问答测试,即可调整问答参数并测试问答效果。

    image

效果预览

image

image

总结

至此,您已完成了OSS数据源文档的导入以及RAG系统的搭建,后续只要将OpenSearch相应的接口接入到业务中,就可以支持企业知识库、智能文档、电商导购、教育问答等多种多样的场景。