AI-知识库搭建(一)腾讯云向量数据库使用

一、AI知识库

将已知的问答知识,问题和答案转变成向量存储在向量数据库,在查找答案时,输入问题,将问题向量化,匹配向量库的问题,将向量相似度最高的问题筛选出来,将答案提交。

二、腾讯云向量数据库

向量数据库_大模型知识库_向量数据存储_向量数据检索- 腾讯云

腾讯云向量数据库(Tencent Cloud VectorDB)是一款全托管的自研企业级分布式数据库服务,专用于存储、检索、分析多维向量数据。该数据库支持多种索引类型和相似度计算方法,单索引支持千亿级向量规模,可支持百万级 QPS 及毫秒级查询延迟。腾讯云向量数据库不仅能为大模型提供外部知识库,提高大模型回答的准确性,还可广泛应用于推荐系统、自然语言处理等 AI 领域。

三、使用教程(java)

1、项目引用依赖
        <!--腾讯云向量数据库使用-->
        <dependency>
            <groupId>com.tencent.tcvectordb</groupId>
            <artifactId>vectordatabase-sdk-java</artifactId>
            <version>1.2.0</version>
        </dependency>
2、application.properties 配置
#向量数据库地址-购买服务器后,获取到外网访问域名,账号密码
vectordb.url=${VECTORDB_URL:http://xxxxxxxxx.com:10000}
vectordb.user=${VECTORDB_USER:root}
vectordb.key=${VECTORDB_KEY:123456}
3、初始化客户端
import com.tencent.tcvectordb.client.VectorDBClient;
import com.tencent.tcvectordb.model.param.database.ConnectParam;
import com.tencent.tcvectordb.model.param.enums.ReadConsistencyEnum;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;


@Component
public class InitVectorClient {

    @Value("${vectordb.url:}")
    private String vdbUrl;

    @Value("${vectordb.user:}")
    private String vdbUser;

    @Value("${vectordb.key:}")
    private String  vdbKey;

    @Bean
    public VectorDBClient vdbClient(){
         ConnectParam connectParam = ConnectParam.newBuilder()
                .withUrl(vdbUrl)
                .withUsername(vdbUser)
                .withKey(vdbKey)
                .withTimeout(30)
                .build();
        VectorDBClient client = new VectorDBClient(connectParam, ReadConsistencyEnum.EVENTUAL_CONSISTENCY);
        return client;
    }

}
4、创建表结构

这里使用HTTP的方式

curl --location --request POST 'xxxxx.com:10000/database/create' \
--header 'Authorization: Bearer account=root&api_key=123456' \
--header 'Content-Type: application/json' \
--data-raw '{
    "database": "db_xiaosi"
}'



curl --location --request POST 'xxxxx.com:10000/collection/create' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer account=root&api_key=123456' \
--data-raw '{
    "database": "db_xiaosi",
    "collection": "t_bug",
    "replicaNum": 0,
    "shardNum": 1,
    "description": "BUG表关键字向量",
    "indexes": [
        {
            "fieldName": "id",
            "fieldType": "string",
            "indexType": "primaryKey"
        },
        {
            "fieldName": "bug_name",
            "fieldType": "string",
            "indexType": "filter"
        },
        {
            "fieldName": "is_deleted",
            "fieldType": "uint64",
            "indexType": "filter"
        },
        {
            "fieldName": "vector",
            "fieldType": "vector",
            "indexType": "HNSW",
            "dimension": 1536,
            "metricType": "COSINE",
            "params": {
                "M": 16,
                "efConstruction": 200
            }
        }
    ]
}'
5、封装http请求类
package com.ikscrm.platform.api.manager.bug;

import cn.hutool.core.date.DateUtil;
import com.ikscrm.platform.api.dao.vector.BugVector;
import com.tencent.tcvectordb.client.VectorDBClient;
import com.tencent.tcvectordb.model.Collection;
import com.tencent.tcvectordb.model.Database;
import com.tencent.tcvectordb.model.DocField;
import com.tencent.tcvectordb.model.Document;
import com.tencent.tcvectordb.model.param.dml.*;
import com.tencent.tcvectordb.model.param.entity.AffectRes;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;

/**
 * 向量数据库能力
 * 接口文档 https://cloud.tencent.com/document/product/1709/97768
 * 错误码 https://cloud.tencent.com/document/product/1709/104047
 * @Date 2024/3/6 13:49
 */
@Component
@Slf4j
public class VectorManager {


    @Resource
    private VectorDBClient vdbClient;

    /**
     * 根据向量查询相似数据。
     *
     * @param dbName    数据库名称
     * @param tableName 表名称
     * @param vector    向量
     * @return 返回更新操作影响的记录数
     * @throws RuntimeException 如果更新过程中发生业务异常
     */
    public List<BugVector> findBugList(String dbName, String tableName, List<Double> vector) {
        List<BugVector> resultList = new ArrayList<>();
        Database database = vdbClient.database(dbName);
        Collection collection = database.describeCollection(tableName);
        Filter filter = new Filter("is_deleted=0");

        //这部分的算法需要深入了解
        SearchByVectorParam searchByVectorParam = SearchByVectorParam.newBuilder()
                .addVector(vector)
                // 若使用 HNSW 索引,则需要指定参数ef,ef越大,召回率越高,但也会影响检索速度
                .withParams(new HNSWSearchParams(15))
                // 指定 Top K 的 K 值
                .withLimit(20)
                // 过滤获取到结果
                .withFilter(filter)
                .build();
        // 输出相似性检索结果,检索结果为二维数组,每一位为一组返回结果,分别对应 search 时指定的多个向量
        List<List<Document>> svDocs = collection.search(searchByVectorParam);
        for (List<Document> docs : svDocs) {
            for (Document doc : docs) {
                BugVector build = new BugVector();
                build.setId(doc.getId());
                build.setScore(doc.getScore());
                build.setVector(doc.getVector());
                for (DocField field : doc.getDocFields()) {
                    if (field.getName().equals("bug_name")) {
                        build.setBugName(field.getStringValue());
                    }
                    if (field.getName().equals("bug_title")) {
                        build.setBugTitle(field.getStringValue());
                    }
                    if (field.getName().equals("is_deleted")) {
                        build.setIsDeleted(Integer.valueOf(field.getStringValue()));
                    }
                    if (field.getName().equals("create_time")) {
                        build.setCreateTime(field.getStringValue());
                    }
                    if (field.getName().equals("update_time")) {
                        build.setUpdateTime(field.getStringValue());
                    }
                }
                resultList.add(build);
            }
        }
        return resultList;
    }


    /**
     * 将问题向量列表插入到指定的数据库和集合中。
     *
     * @param dbName    数据库名称,指定要操作的数据库。
     * @param tableName 集合名称,即数据表名称,指定要插入数据的表。
     * @param list      要插入的数据列表,列表中的每个元素都是TaskVector类型,包含了问题的向量信息及其他相关字段。
     */
    public Long insertBugList(String dbName, String tableName, List<BugVector> list) {
        try {
            Database database = vdbClient.database(dbName);
            Collection collection = database.describeCollection(tableName);
            List<Document> documentList = new ArrayList<>();
            list.forEach(item -> {
                documentList.add(Document.newBuilder()
                        .withId(item.getId())
                        .withVector(item.getVector())
                        .addDocField(new DocField("bug_name", item.getBugName()))
                        .addDocField(new DocField("bug_title", item.getBugTitle()))
                        .addDocField(new DocField("is_deleted", item.getIsDeleted()))
                        .addDocField(new DocField("create_time", DateUtil.now()))
                        .addDocField(new DocField("update_time", DateUtil.now()))
                        .build());
            });
            InsertParam insertParam = InsertParam.newBuilder().addAllDocument(documentList).build();
//       upsert 实际数据会有延迟
            AffectRes upsert = collection.upsert(insertParam);
            log.info("向量列表插入数量:{},完成:{}", list.size(), upsert.getAffectedCount());
            return upsert.getAffectedCount();
        } catch (Exception ex) {
            log.error("向量列表插入异常", ex);
            throw new RuntimeException("向量列表插入异常" + ex.getMessage());
        }
    }
}

腾讯云的向量库使用方式基本就是这样着,在这里简单的使用到了他的插入和向量查询功能。下一篇讲解GPT的如何与向量数据库结合使用

AI-知识库搭建(二)GPT-Embedding模式使用-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/687364.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

龙讯旷腾PWmat团队研发的开源机器学习力场PWMLFF升级,新增高效训练NEP模型

近几年来&#xff0c;一种结合了物理学、高性能并行计算和机器学习算法的新的科研范式——AI for science迅速崛起&#xff0c;并为解决精度与尺度无法并存的问题带来了曙光。基于机器学习力场&#xff08;machine learning force field, MLFF&#xff09;的分子动力学&#xf…

Vue2自定义拖拽指令-元素拖拽

Vue2自定义拖拽指令-元素拖拽-参数传递 v-canDraghtml部分/src/directive/canDrag/index.js然后注册到vue实例上就OK了 v-canDrag html部分 <template><div class"drag-container"><div class"drag-div" v-canDrag"{callback:callbac…

新能源集成灶怎么样?不需要燃料就能生火,是真的吗?

在当今的厨房电器领域&#xff0c;集成灶的出现引起了不少网友的广泛关注。这不&#xff0c;就在刚刚人民日报发布的一篇名为《中国新能源产业发展是全球性贡献和机遇》报道中提到&#xff1a;中国新能源产品销量突破万亿大关&#xff0c;中国新能源技术全球领先。从这样一份亮…

1501 - JUC高并发

须知少许凌云志&#xff0c;曾许人间第一流 看的是尚硅谷的视频做的学习总结&#xff0c;感恩老师&#xff0c;下面是视频的地址 传送门https://www.bilibili.com/video/BV1Kw411Z7dF 0.思维导图 1.JUC简介 1.1 什么是JUC JUC&#xff0c; java.util.concurrent工具包的简称…

433/315无线门铃解决方案,功耗超低,通信距离可达200米

无线门铃是一种常见的智能电子设备&#xff0c;提供了方便&#xff0c;安全的门铃解决方案&#xff0c;适用于各种住宅和商业环境。芯岭技术的无线门铃方案可适用于普通的433/315无线门铃应用&#xff0c;支持不同的语音选择&#xff0c;支持交流和直流应用&#xff0c;支持不同…

Python——泰坦尼克号数据分析

目录 🧾1.数据集(部分数据) ✏️ 2、导入数据集与必要模块 ⌨️ 3.数据预处理 1️⃣ isnull函数查看有无缺失值 2️⃣fillna函数填充缺失值 📍 Age字段使用平均值填充缺失值 📍 Embarked字段填充缺失值 3️⃣ 删除缺失值较多的字段 📊 4.数据可视化 1️⃣ di…

每日一练 2024.6.7

给你一个仅由 大写 英文字符组成的字符串 s 。 你可以对此字符串执行一些操作&#xff0c;在每一步操作中&#xff0c;你可以从 s 中删除 任一个 "AB" 或 "CD" 子字符串。 通过执行操作&#xff0c;删除所有 "AB" 和 "CD" 子串&#x…

【面试八股总结】死锁:产生条件、预防死锁、处理死锁、避免死锁

一、什么是死锁&#xff1f; 死锁是指两个&#xff08;或多个&#xff09;线程互相等待对方数据的过程&#xff0c;死锁的产生导致程序卡死&#xff0c;不解锁程序将永远⽆法进⾏下 去 二、死锁产生条件 死锁只有同时满足以下四个条件才会发生&#xff1a;互斥条件&#xff1b…

笔记-2024视频会议软件技术选型方案

一、背景 视频会议系统是一种现代化的办公系统&#xff0c;它可以使不同会场的实时现场场景和语音互连起来&#xff0c;同时向与会者提供分享听觉和视觉的空间&#xff0c;使各与会方有“面对面”交谈的感觉。随着社会的发展&#xff0c;视频会议的应用越来越广泛&#xff0c;…

【数据分析基础】实验四 matplotlib数据可视化处理

一&#xff0e;实验目的 掌握扩展库matplotlib及其依赖库的安装。了解matplotlib的绘图一般过程。熟练掌握折线图、散点图、柱状图、饼状图、雷达图的绘制与常用属性的设置。掌握绘图区域的切分、绘制不同子图的方法。熟悉坐标轴、图像标题、图例等对象的属性设置操作。 二、实…

新品!和芯星通全系统全频高精度板卡UB9A0首发

6月6日&#xff0c;和芯星通发布了UB9A0全系统全频高精度GNSS板卡&#xff0c;主要应用于CORS站、便携基站、GNSS全球监测跟踪站等。延续了上一代产品高质量原始观测量的特点&#xff0c;UB9A0在性能和稳定性方面均表现出众。 UB9A0基于射频基带及高精度算法一体化的GNSS SoC芯…

Django 开发也在用 React!

你好&#xff0c;我是坚持分享干货的 EarlGrey&#xff0c;翻译出版过《Python编程无师自通》、《Python并行计算手册》等技术书籍。 如果我的分享对你有帮助&#xff0c;请关注我&#xff0c;一起向上进击。 在前天的推文里&#xff0c;我们分享了《Django 2024 年度报告》&am…

一起学大模型 - 一起动笔练习prompt的用法

文章目录 前言一、代码演示二、代码解析1. 导入所需的库和模块&#xff1a;2. 设置日志记录和初始化模型&#xff1a;3. 定义一个函数用于清理GPU内存&#xff1a;4. 定义一个继承自LLM基类的QianWenChatLLM类&#xff0c;并实现对话生成的逻辑&#xff1a;5. 示例代码的主体部…

柏曼护眼台灯值得入手吗?明基、书客实测对比

早期的台灯主要是以白炽灯为主&#xff0c;但随着LED技术的成熟&#xff0c;LED台灯逐渐成为主流。目前&#xff0c;台灯行业已经进入了一个高速发展的阶段&#xff0c;市场竞争也越来越激烈。如何选购护眼台灯也是大家最常问的问题&#xff0c;柏曼护眼台灯值得入手吗&#xf…

HTML静态网页成品作业(HTML+CSS)—— 电影泰坦尼克号介绍网页(4个页面)

&#x1f389;不定期分享源码&#xff0c;关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 &#x1f3f7;️本套采用HTMLCSS&#xff0c;未使用Javacsript代码&#xff0c;共有4个页面。 二、作品演示 三、代…

2024年G3锅炉水处理证考试题库及G3锅炉水处理试题解析

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2024年G3锅炉水处理证考试题库及G3锅炉水处理试题解析是安全生产模拟考试一点通结合&#xff08;安监局&#xff09;特种作业人员操作证考试大纲和&#xff08;质检局&#xff09;特种设备作业人员上岗证考试大纲随机…

咖啡机器人如何精准控制液位流量

在如今快节奏的生活中&#xff0c;精确控制液位流量的需求愈发迫切&#xff0c;特别是在咖啡机器人等精密设备中。为了满足这一需求&#xff0c;工程师们不断研发出各种先进的技术&#xff0c;以确保液体流量的精准控制。其中&#xff0c;霍尔式流量计和光电式流量计就是两种常…

如何用Postman做接口自动化测试?5个步骤带你轻松实现!

什么是自动化测试 把人对软件的测试行为转化为由机器执行测试行为的一种实践。例如GUI自动化测试&#xff0c;模拟人去操作软件界面&#xff0c;把人从简单重复的劳动中解放出来本质是用代码去测试另一段代码&#xff0c;属于一种软件开发工作&#xff0c;已经开发完成的用例还…

基于函数计算部署GPT-Sovits语音生成模型实现AI克隆声音

GPT-Sovits是一个热门的文本生成语音的大模型&#xff0c;只需要少量样本的声音数据源&#xff0c;就可以实现高度相似的仿真效果。通过函数计算部署GPT-Sovits模型&#xff0c;您无需关心GPU服务器维护和环境配置&#xff0c;即可快速部署和体验模型&#xff0c;同时&#xff…

基于ensp的园区网络搭建综合实验

核心技术介绍 1、虚拟局域网&#xff08;VLAN&#xff09; 2、链路聚合&#xff08;E-trunk&#xff09; 3、多生成树协议&#xff08;MSTP&#xff09; 4、VLANIF三层逻辑接口 5、虚拟路由冗余协议&#xff08;VRRP&#xff09; 6、开放式最短路径优先&#xff08;OSPF&…