logo

接入QAnything的AI问答知识库,可私有化部署的企业级WIKI知识库

作者:冰是沉默的水2024.03.03 14:52浏览量:242

简介:zyplayer-doc是一款适合企业和个人使用的WIKI知识库管理工具,提供在线化的知识库管理功能

zyplayer-doc是一款适合企业和个人使用的WIKI知识库管理工具,提供在线化的知识库管理功能,专为私有化部署而设计,最大程度上保证企业或个人的数据安全,可以完全以内网的方式来部署使用它。

您也可以将其作为企业产品的说明文档来使用,支持一键将整个空间的内容开放到互联网,提供有不同风格的开放文档页样式可供选择,以及适配了在手机端、小程序中文档的展示,省去为产品的说明文档而定制开发系统的成本。

安装知识库系统

1. 下载Java并安装
版本号:JAVA 1.8 及以上,本项目使用JAVA语言开发,启动时会依赖JAVA的运行时环境

2. 安装数据库依赖
私有化部署后应用产生的所有数据都存储在自己的MySQL数据库中,数据库安装成功后,需要手动创建一个库:create database zyplayer_doc;

3. 下载安装文件
到官网可下载最新版安装文件:https://doc.zyplayer.com/#/integrate/zyplayer-doc/install ,同时也可使用Docker或宝塔进行安装

4. 修改配置并启动
修改文件夹下的 application.properties 里面的数据库链接和帐号密码,双击文件夹下的 startup.bat 启动项目,启动后访问:http://127.0.0.1:8083 ,默认账号:zyplayer 密码:123456

文档的编写

在知识库首页新建空间,进入空间即可新建文档进行编辑,也可以上传或新建Office文档进行在线协同编辑

image.png

image.png

接入QAnything实现AI问答

服务的接入

可通过私有化部署的方式,或者使用QAnything云服务,将应用信息填入到系统中,并开启内部文档或开放问答的启用开关
QAnything 开源地址:https://github.com/netease-youdao/QAnything
QAnything 云服务地址:https://ai.youdao.com/console/#/service-singleton/qanything

image.png

在空间中启用

在空间的设置页中将 AI知识库同步 开关开启,等待同步完成后在空间的高级搜索和开放文档页面即会出现AI问答选项

image.png

image.png

在文集中启用

只需要将文集引用到的空间全部开启 AI知识库同步 ,文集搜索界面则会出现AI问答选项

image.png

AI问答限流

在AI问答配置处可配置问答限流,可按 用户或全系统 配置 每天/每小时/每分钟 的问答次数限制,防止恶意刷量。

image.png

API开放问答接口

可通过开放接口的方式实现指定空间或文集进行问答,可用于智能客服等场景使用

同步请求地址:http://127.0.0.1:8083/openApi/v1/ai/chats/sync ,请求代码示例:

public static void main(String[] args) {
    // 组装请求参数
    Map<String, Object> paramMap = new HashMap<>();
    paramMap.put("space", "uta2JteQtykCil4b0ePSMp");
    paramMap.put("question", "zyplayer-doc文档管理系统是什么?");
    paramMap.put("salt", UUID.randomUUID());
    // 加密参数
    String privateKey = "MIICeAIBAxxxxxxxxDMKVrlHqf";
    String content = JSON.toJSONString(paramMap);
    String sha256 = SecureUtil.sha256(content);
    RSA rsaPrivate = SecureUtil.rsa(privateKey, null);
    String encrypt = rsaPrivate.encryptHex(sha256, KeyType.PrivateKey);
    // 发送请求
    String url = "http://127.0.0.1:8083/openApi/v1/ai/chats/sync";
    String body = HttpUtil.createPost(url).form("content", content).form("encrypt", encrypt).execute().body();
    System.out.println(body);
}

流式请求地址:http://127.0.0.1:8083/openApi/v1/ai/chats/stream ,请求代码示例:

public static void main(String[] args) {
    CountDownLatch latch = new CountDownLatch(1);
    Map<String, Object> paramMap = new HashMap<>();
    paramMap.put("space", "uta2JteQtykCil4b0ePSMp");
    paramMap.put("question", "zyplayer-doc文档管理系统是什么?");
    paramMap.put("salt", UUID.randomUUID());
    // 加密参数
    String privateKey = "MIICeAIBAxxxxxxxxDMKVrlHqf";
    String content = JSON.toJSONString(paramMap);
    String sha256 = SecureUtil.sha256(content);
    RSA rsaPrivate = SecureUtil.rsa(privateKey, null);
    String encrypt = rsaPrivate.encryptHex(sha256, KeyType.PrivateKey);
    // 发送请求
    Map<String, Object> bodyMap = new HashMap<>();
    bodyMap.put("content", content);
    bodyMap.put("encrypt", encrypt);
    WebClient webClient = WebClient.create("http://127.0.0.1:8083");
    Flux<AiChatStreamResult> eventStream = webClient.post()
            .uri("/openApi/v1/ai/chats/stream")
            .bodyValue(bodyMap)
            .retrieve()
            .bodyToFlux(AiChatStreamResult.class);
    Disposable disposable = eventStream.timeout(Duration.ofSeconds(60)).subscribe(data -> {
        // 在这里处理每次获取到的数据
        if (Objects.equals(data.getName(), "response")) {
            logger.info("message: {}", data.getMessage());
        } else if (Objects.equals(data.getName(), "complete")) {
            logger.info("sourceList: {}", data.getSourceList());
        } else if (Objects.equals(data.getName(), "failed")) {
            logger.info("failed: {}", data.getErrMsg());
        }
    }, error -> {
        // 处理错误
        logger.error("ChatStream error", error);
        latch.countDown();
    }, () -> {
        // 处理流结束事件
        logger.info("ChatStream complete");
        latch.countDown();
    });
    try {
        // 最多等待60秒
        latch.await(60, TimeUnit.SECONDS);
    } catch (InterruptedException e) {
        logger.error("等待超时:{}", e.getMessage());
    }
    disposable.dispose();
}

相关文章推荐

发表评论