智能对话Demo

行业算法版支持智能对话功能,通过调用接入的AI搜索开发平台大模型在搜索时对用户问题进行智能回答。本文介绍智能对话的Java示例。

配置环境变量

配置环境变量ALIBABA_CLOUD_ACCESS_KEY_IDALIBABA_CLOUD_ACCESS_KEY_SECRET

重要
  • 阿里云账号AccessKey拥有所有API的访问权限,建议您使用RAM用户进行API访问或日常运维,具体操作,请参见创建RAM用户

  • 创建AccessKey IDAccessKey Secret,请参考创建AccessKey

  • 如果您使用的是RAM用户的AccessKey,请确保主账号已授权AliyunServiceRoleForOpenSearch服务关联角色,请参考OpenSearch-行业算法版服务关联角色,相关文档参考访问鉴权规则

  • 请不要将AccessKey IDAccessKey Secret保存到工程代码里,否则可能导致AccessKey泄露,威胁您账号下所有资源的安全。

  • LinuxmacOS系统配置方法:

    执行以下命令,其中, <access_key_id>需替换为您RAM用户的AccessKey ID,<access_key_secret>替换为您RAM用户的AccessKey Secret。

    export ALIBABA_CLOUD_ACCESS_KEY_ID=<access_key_id> 
    export ALIBABA_CLOUD_ACCESS_KEY_SECRET=<access_key_secret>
  • Windows系统配置方法

    1. 新建环境变量文件,添加环境变量ALIBABA_CLOUD_ACCESS_KEY_IDALIBABA_CLOUD_ACCESS_KEY_SECRET,并写入已准备好的AccessKey IDAccessKey Secret。

    2. 重启Windows系统生效。

示例代码

重要

注意:以下示例需要Java SDK版本不低于6.2.0。

<dependency>
    <groupId>com.aliyun.opensearch</groupId>
    <artifactId>aliyun-sdk-opensearch</artifactId>
    <version>6.2.0</version>
</dependency>

package org.example;
import com.aliyun.opensearch.OpenSearchClient;
import com.aliyun.opensearch.SearcherClient;
import com.aliyun.opensearch.sdk.dependencies.com.google.common.collect.Lists;
import com.aliyun.opensearch.sdk.generated.OpenSearch;
import com.aliyun.opensearch.sdk.generated.commons.OpenSearchClientException;
import com.aliyun.opensearch.sdk.generated.search.Chat;
import com.aliyun.opensearch.sdk.generated.search.Config;
import com.aliyun.opensearch.sdk.generated.search.SearchFormat;
import com.aliyun.opensearch.sdk.generated.search.SearchParams;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;

public class testChat {

    private static String appName = "替换为opensearch应用名";
    private static String host = "替换应用的API访问地址";

    public static void main(String[] args) {

        //用户识别信息
        //从环境变量读取配置的AccessKey ID和AccessKey Secret,运行代码示例前必须先配置环境变量
        String accesskey = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
        String secret = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");


        OpenSearch opensearch = new OpenSearch(accesskey, secret, host);
        opensearch.setHost(host);
        opensearch.setTimeout(90000);
        OpenSearchClient openSearchClient = new OpenSearchClient(opensearch);
        SearcherClient searcherClient = new SearcherClient(openSearchClient);

        Config config = new Config(Lists.newArrayList(appName));
        config.setHits(10);
        config.setStart(0);
        config.setSearchFormat(SearchFormat.findByValue(1));
        config.setFetchFields(Arrays.asList("title", "description", "id"));
        SearchParams searchParams = new SearchParams(config);
        searchParams.setQuery("default:'OpenSearch'");
        searchParams.setRawQuery("OpenSearch");
        String chatName = "test_chat";

        Map<String, String> promptParameters = new HashMap();
        // promptParameters.put("rule_prompt", "");
        // promptParameters.put("attitude_prompt", "");
        // promptParameters.put("noanswer_prompt", "");
        Chat chat = new Chat(chatName, promptParameters);
        searchParams.setChat(chat);

        try {
            searcherClient.executeForServerSentEvents(searchParams, e -> {
                System.out.println(e.data());
            });
        } catch (OpenSearchClientException e) {
            System.out.println("ErrorMessage=" + e.getMessage());
        }
    }
}

正常返回示例

{"result":{"searchtime":0.011841,"total":5,"num":5,"viewtotal":5,"compute_cost":[{"index_name":"rag_test","value":0.395}],"items":[{"content":"广大中小企业都有各种结构化的数据需要进行检索,目前一般采用数据库本身提供的搜索功能或者利用open source的搜索软件搭建,这样的做法不但会消耗网站本身的资源,性能也会很容易成为问题,而且相关性通常也不够好。我们的产品的目的是要利用阿里云先进的云计算和搜索技术向广大中小企业提供低成本,高质量,高性能,可定制的数据搜索解决方案。本项目和云搜索的通用解决方案目标略有不同,主要区别为本项目主要针对用户的结构化数据进行搜索,云搜索的通用解决方案则主要是针对网页型数据位处理对象。","url":"库巴购物","id":"5","index_name":"rag_test"},{"content":"专业词典:用户可配置专属的专用词词典。同义词:用户自定义的同义词表,一般为行业同义词表。停用词配置:在系统停用词表外再配置专用的停用词表。禁用词配置:缺省启用系统过滤,用户可以添加自己的过滤词表,命中时屏蔽搜索结果。提供两种选项:Query过滤,即匹配后无结果;结果过滤,结果根据匹配情况过滤。","url":"京东商城","id":"1","index_name":"rag_test"},{"content":"广大中小企业都有各种结构化的数据需要进行检索,目前一般采用数据库本身提供的搜索功能或者利用open source的搜索软件搭建,这样的做法不但会消耗网站本身的资源,性能也会很容易成为问题,而且相关性通常也不够好。我们的产品的目的是要利用阿里云先进的云计算和搜索技术向广大中小企业提供低成本,高质量,高性能,可定制的数据搜索解决方案。本项目和云搜索的通用解决方案目标略有不同,主要区别为本项目主要针对用户的结构化数据进行搜索,云搜索的通用解决方案则主要是针对网页型数据位处理对象。","url":"小米官网","id":"4","index_name":"rag_test"},{"content":"搜索引擎是指根据一定的策略、运用特定的计算机程序从互联网上搜集信息,在对信息进行组织和处理后,为用户提供检索服务,将用户检索相关的信息展示给用户的系统。搜索引擎包括全文索引、目录索引、元搜索引擎、垂直搜索引擎、集合式搜索引擎、门户搜索引擎与免费链接列表等。百度和谷歌等是搜索引擎的代表。","url":"亚马逊","id":"3","index_name":"rag_test"},{"content":"根据对各种类型典型站点的调研而制定的一套具有一定扩展性的结构化数据搜索方案,能覆盖该类型95%以上的数据属性,支持专属词表配置、排序公式定制,并提供良好的相关性、丰富的检索方式,以及多维度的过滤、排序及统计。用户可以通过选择模版的方式来节省定制工作量。","url":"新蛋商城","id":"2","index_name":"rag_test"}],"facet":[]},"ops_request_misc":"%7B%22request%5Fid%22%3A%222b352b22ce79cd53c4554204f400aff8%22%2C%22scm%22%3A%2220140713.150121380..%22%7D","tracer":"","request_id":"2b352b22ce79cd53c4554204f400aff8","errors":[],"status":"OK"}
{"result":"","ops_request_misc":"%7B%22request%5Fid%22%3A%222b352b22ce79cd53c4554204f400aff8%22%2C%22scm%22%3A%2220140713.150121380..%22%7D","chat":{"text":"根据"},"tracer":"","request_id":"2b352b22ce79cd53c4554204f400aff8","errors":[],"status":"OK"}
{"result":"","ops_request_misc":"%7B%22request%5Fid%22%3A%222b352b22ce79cd53c4554204f400aff8%22%2C%22scm%22%3A%2220140713.150121380..%22%7D","chat":{"text":"根据已"},"tracer":"","request_id":"2b352b22ce79cd53c4554204f400aff8","errors":[],"status":"OK"}
{"result":"","ops_request_misc":"%7B%22request%5Fid%22%3A%222b352b22ce79cd53c4554204f400aff8%22%2C%22scm%22%3A%2220140713.150121380..%22%7D","chat":{"text":"根据已知"},"tracer":"","request_id":"2b352b22ce79cd53c4554204f400aff8","errors":[],"status":"OK"}
{"result":"","ops_request_misc":"%7B%22request%5Fid%22%3A%222b352b22ce79cd53c4554204f400aff8%22%2C%22scm%22%3A%2220140713.150121380..%22%7D","chat":{"text":"根据已知信息"},"tracer":"","request_id":"2b352b22ce79cd53c4554204f400aff8","errors":[],"status":"OK"}
{"result":"","ops_request_misc":"%7B%22request%5Fid%22%3A%222b352b22ce79cd53c4554204f400aff8%22%2C%22scm%22%3A%2220140713.150121380..%22%7D","chat":{"text":"根据已知信息无法"},"tracer":"","request_id":"2b352b22ce79cd53c4554204f400aff8","errors":[],"status":"OK"}
{"result":"","ops_request_misc":"%7B%22request%5Fid%22%3A%222b352b22ce79cd53c4554204f400aff8%22%2C%22scm%22%3A%2220140713.150121380..%22%7D","chat":{"text":"根据已知信息无法回答"},"tracer":"","request_id":"2b352b22ce79cd53c4554204f400aff8","errors":[],"status":"OK"}
{"result":"","ops_request_misc":"%7B%22request%5Fid%22%3A%222b352b22ce79cd53c4554204f400aff8%22%2C%22scm%22%3A%2220140713.150121380..%22%7D","chat":{"text":"根据已知信息无法回答该"},"tracer":"","request_id":"2b352b22ce79cd53c4554204f400aff8","errors":[],"status":"OK"}
{"result":"","ops_request_misc":"%7B%22request%5Fid%22%3A%222b352b22ce79cd53c4554204f400aff8%22%2C%22scm%22%3A%2220140713.150121380..%22%7D","chat":{"text":"根据已知信息无法回答该问题"},"tracer":"","request_id":"2b352b22ce79cd53c4554204f400aff8","errors":[],"status":"OK"}
{"result":"","ops_request_misc":"%7B%22request%5Fid%22%3A%222b352b22ce79cd53c4554204f400aff8%22%2C%22scm%22%3A%2220140713.150121380..%22%7D","chat":{"text":"根据已知信息无法回答该问题。"},"tracer":"","request_id":"2b352b22ce79cd53c4554204f400aff8","errors":[],"status":"OK"}
{"result":"","ops_request_misc":"%7B%22request%5Fid%22%3A%222b352b22ce79cd53c4554204f400aff8%22%2C%22scm%22%3A%2220140713.150121380..%22%7D","chat":{"text":"根据已知信息无法回答该问题。"},"tracer":"","request_id":"2b352b22ce79cd53c4554204f400aff8","errors":[],"status":"OK"}
{"result":"","ops_request_misc":"%7B%22request%5Fid%22%3A%222b352b22ce79cd53c4554204f400aff8%22%2C%22scm%22%3A%2220140713.150121380..%22%7D","chat":{"text":"根据已知信息无法回答该问题。"},"tracer":"","request_id":"2b352b22ce79cd53c4554204f400aff8","errors":[],"status":"OK"}
{"result":{"searchtime":0.011841,"total":5,"num":5,"viewtotal":5,"compute_cost":[{"index_name":"rag_test","value":0.395}],"items":[{"content":"广大中小企业都有各种结构化的数据需要进行检索,目前一般采用数据库本身提供的搜索功能或者利用open source的搜索软件搭建,这样的做法不但会消耗网站本身的资源,性能也会很容易成为问题,而且相关性通常也不够好。我们的产品的目的是要利用阿里云先进的云计算和搜索技术向广大中小企业提供低成本,高质量,高性能,可定制的数据搜索解决方案。本项目和云搜索的通用解决方案目标略有不同,主要区别为本项目主要针对用户的结构化数据进行搜索,云搜索的通用解决方案则主要是针对网页型数据位处理对象。","url":"库巴购物","id":"5","index_name":"rag_test"},{"content":"专业词典:用户可配置专属的专用词词典。同义词:用户自定义的同义词表,一般为行业同义词表。停用词配置:在系统停用词表外再配置专用的停用词表。禁用词配置:缺省启用系统过滤,用户可以添加自己的过滤词表,命中时屏蔽搜索结果。提供两种选项:Query过滤,即匹配后无结果;结果过滤,结果根据匹配情况过滤。","url":"京东商城","id":"1","index_name":"rag_test"},{"content":"广大中小企业都有各种结构化的数据需要进行检索,目前一般采用数据库本身提供的搜索功能或者利用open source的搜索软件搭建,这样的做法不但会消耗网站本身的资源,性能也会很容易成为问题,而且相关性通常也不够好。我们的产品的目的是要利用阿里云先进的云计算和搜索技术向广大中小企业提供低成本,高质量,高性能,可定制的数据搜索解决方案。本项目和云搜索的通用解决方案目标略有不同,主要区别为本项目主要针对用户的结构化数据进行搜索,云搜索的通用解决方案则主要是针对网页型数据位处理对象。","url":"小米官网","id":"4","index_name":"rag_test"},{"content":"搜索引擎是指根据一定的策略、运用特定的计算机程序从互联网上搜集信息,在对信息进行组织和处理后,为用户提供检索服务,将用户检索相关的信息展示给用户的系统。搜索引擎包括全文索引、目录索引、元搜索引擎、垂直搜索引擎、集合式搜索引擎、门户搜索引擎与免费链接列表等。百度和谷歌等是搜索引擎的代表。","url":"亚马逊","id":"3","index_name":"rag_test"},{"content":"根据对各种类型典型站点的调研而制定的一套具有一定扩展性的结构化数据搜索方案,能覆盖该类型95%以上的数据属性,支持专属词表配置、排序公式定制,并提供良好的相关性、丰富的检索方式,以及多维度的过滤、排序及统计。用户可以通过选择模版的方式来节省定制工作量。","url":"新蛋商城","id":"2","index_name":"rag_test"}],"facet":[]},"ops_request_misc":"%7B%22request%5Fid%22%3A%222b352b22ce79cd53c4554204f400aff8%22%2C%22scm%22%3A%2220140713.150121380..%22%7D","chat":{"text":"根据已知信息无法回答该问题。"},"tracer":"","request_id":"2b352b22ce79cd53c4554204f400aff8","errors":[],"status":"OK"}
[done]