【腾讯云云上实验室】用向量数据库融合AI技术:构建下一代智能客服平台

文章目录

    • 前言
      • 为什么说用好大模型离不开向量数据库呢?
      • AI训练中的向量维度
      • 快速检索非结构化数据的利器 --- 向量数据库
      • AI的海马体--腾讯云向量数据库
    • 一、腾讯云向量数据库介绍
      • 重磅组合,行业领先
      • 智能化能力
      • 产品亮点
    • 二、AI技术在智能客服中的作用
      • AI技术在智能客服平台中的关键作用
      • 融合AI技术与向量数据库的优势与挑战
    • 三、智能客服平台构建
      • 物料准备
        • 原始数据获取
      • 项目开发
        • 创建数据库
        • 创建 Collection
        • Embedding
        • 连接数据库写入原始数据
        • 相似度查询
        • 相似度查询本地化
        • 新增数据
    • 四、向量数据库api
      • 1. 搭建FastAPI 开启本地接口调用
    • 五、常见问题
    • 六、总结

前言

为什么说用好大模型离不开向量数据库呢?

回答这个问题之前我们先来理解一下什么是向量?

比如在我们看到这个水果时,我们知道它是一个苹果。但在“苹果”这个词被发明之前,人们是如何描述这个水果的呢?通过观察它的颜色、大小、形状、纹理等特征,我们可以更清晰地定义这个水果。将这些特征用数字来表达,我们就可以得到一个向量。

image.png
一旦复杂的图像被转换成计算机可识别的数字表示,计算机就可以“认识”这个苹果了。但是,当新的苹果出现时,计算机还能识别它吗?当然可以,因为新的图像在向量空间中与最接近的向量具有高相似性,计算机可以通过比较向量之间的相似度来进行识别。

AI训练中的向量维度

今天让我们惊叹不已的人工智能,往往通过上千个向量维度来学习训练,他们就像是AI大模型的眼睛,当AI大模型遇上庞大的向量数据,这组黄金搭档如何让硅基生物更聪明呢?

image.png
以大语言模型为例。简单来说在训练时, 喂给它的词句都会先转化为向量数据, 当训练数据里出现多组类似的语言时,在向量数据组成的高维空间,相近的词汇就会距离更近,语言模型就可以逐渐捕捉到词汇间的语意和语法。
举例说明: 它会更明白苹果西瓜语意上接近,但是和公交车相差甚远,接下来模型需要对上下文进行理解,此时Transformer架构就开始发挥作用,从每个词自身出发,观察和其他词之间的关系权重。
例如这句话里“我昨天买的苹果很好吃”, “很好吃”和“我”关系权重最大,权重结果被当作新的维度记录下来,一句更复杂的话,也转化成了带权重的向量,原模型经过查询计算。生成权重最高的答案输出给你,一次问答就完成了

快速检索非结构化数据的利器 — 向量数据库

大模型训练推理过程更为复杂,他们需要处理如文本图像,音视频等大量非结构化数据,并转化为向量数据进行学习,这些数据的规模动辄过亿,向量维度可能高达数千,在选择数据库时,传统数据库只能进行行列检索一一对应,
再输出精准的答案,但向量数据库,则是专门为非结构化数据检索而设计,它将项量数据组成一个立体高维空间,在空间中进行模糊检索,能够快速输出权重最高的答案。

AI的海马体–腾讯云向量数据库

image.png
业界的AI大模型采取预训练的模式,使用收集好的数据进行训练, 知识库难以做到实时更新,而接入向量数据库后,就像给模型插了个高性能外接硬盘,支持学习互联网等最新信息,比重新训练模型微调等方式更加便宜高效。
在线推理时,大模型其实是没有记忆功能的,只能通过重新输入之前的问答,实现短期记忆,而且输入的内容也是有长度限制的。
腾讯云向量数据库(Tencent Cloud VectorDB)作为一种专门存储和检索向量数据的服务提供给用户,可以充当AI的海马体,让人工智能拥有记忆历史,问答能够当成新的训练语料,进入向量数据库永久储存,甚至当用户提出了重复相似的提问,向量数据库会直接给出缓存答案,这就让AI大模型,越用越聪明,越用越迅捷。

一、腾讯云向量数据库介绍

重磅组合,行业领先

LLM+向量数据库,打造专属RAG应用

image.png

智能化能力

腾讯云向量数据库可以和大语言模型 LLM 配合使用。企业的私域数据在经过文本分割、向量化后,可以存储在腾讯云向量数据库中,构建起企业专属的外部知识库,从而在后续的检索任务中,为大模型提供提示信息,辅助大模型生成更加准确的答案。

image.png

产品亮点

高性能持百万级 OPS 及毫秒级查询延迟
低成本全流程平台托管,无需进行任何安装、部署、运维操作
大规模单索引支持 10 亿级向量数据规模
简单易用用户通过 API即可快速操作数据库,开发效率高
高可用提供多副本高可用特性,提高容灾能力
稳定可靠源自腾讯集团自研的向量检索引擎,近40个业务线上稳定运行

二、AI技术在智能客服中的作用

AI技术在智能客服平台中的关键作用

智能客服是一种基于AI技术的解决方案,通过向量数据库存储企业知识(如商品信息、游戏信息等),并利用LLM进行自然语言处理,从而准确、高效地回答客户问题,提高客户满意度、降低企业客服成本

融合AI技术与向量数据库的优势与挑战

挑战优势
推理问题生成答案通过向量数据库为LLM提供外部知识库,提高大模型回答的准确性
客服引导式话术LLM理解引导式话术,在用户问题不完整的情况下,通过与用户的互动,逐步引导用户提问,服务更加友好
多轮对话LLM通过对多轮的深入语义分析和精准理解,实现了自然、流畅的对话,增强了与用户的亲近感

三、智能客服平台构建

物料准备

  1. 访问腾讯云向量数据库, 点击立即体验

image.png

  1. 新建向量数据库实例, 配置完成后点击立即申请

image.png
提交完成后等待创建即可
image.png

  1. 创建完成后记得开启外网访问地址, 并配置白名单, 我这里配置的是0.0.0.0/0

image.png

原始数据获取

Git地址: https://github.com/SophonPlus/ChineseNlpCorpus
image.png
获取其中一个类目即可哦!!

项目开发

创建数据库

相关依赖引入

import tcvectordb
from tcvectordb.model.enum import FieldType, IndexType, MetricType, EmbeddingModel
from tcvectordb.model.index import Index, VectorIndex, FilterIndex, HNSWParams
from tcvectordb.model.collection import Embedding, UpdateQuery
from tcvectordb.model.enum import FieldType, IndexType, MetricType, ReadConsistency

创建数据库

client = tcvectordb.VectorDBClient(url='http://lb-esqjs4rv-35ijkpnybtm1fsuc******', username='root', key='gD0Ip*******', read_consistency=ReadConsistency.EVENTUAL_CONSISTENCY, timeout=30)
db = client.create_database(database_name='db-test')

print(db.database_name)

注意:

  1. VectorDBClient 中的 urlkey 填写成自己申请的向量数据库的哦 (key 就是 秘钥)

image.png

  1. read_consistency :设置读一致性 , 是非必填参数 , 默认取值 EVENTUAL_CONSISTENCY , 可取值如下:
    1. ReadConsistency.STRONG_CONSISTENCY:强一致性。
    2. ReadConsistency.EVENTUAL_CONSISTENCY:最终一致性。
创建 Collection
# 第一步,设计索引
index = Index(
            FilterIndex(name='id', field_type=FieldType.String, index_type=IndexType.PRIMARY_KEY),
            VectorIndex(name='vector', dimension=768, index_type=IndexType.HNSW,
              metric_type=MetricType.COSINE, params=HNSWParams(m=16, efconstruction=200)),

)

ebd = Embedding(vector_field='vector', field='text', model=EmbeddingModel.BGE_BASE_ZH)

# 第二步:创建 Collection
coll = db.create_collection(
            name='intelligent',
            shard=1,
            replicas=0,
            description='this is a collection of test embedding',
            embedding=ebd,
            index=index
        )
print(vars(coll))

注意:

  1. 向量数据库的Collection 是设计的索引而不是 设计表格的结构
  2. 必须的索引 : 主键 id、向量字段 vector 这两个字段目前是固定且必须的
  3. 除了id,vector这两个字段外,如果有其他字段是可以不用定义的, 直接通过 Embedding 添加即可
  4. create_collection 参数可以直接参考 腾讯云向量数据库 , 讲解的很清晰
  5. Embedding 的功能是腾讯云向量数据库(Tencent Cloud VectorDB)提供将非结构化数据转换为向量数据的能力。 这一点我真的是爱了 。
  6. 由于 BGE_BASE_ZH默认是 768 因此 在设置VectorIndexdimension 时 值为 768 , 否则会报错哦!

运行完上述代码之后 , 你的向量数据库 的库名以及集合都已经创建完了哦!

image.png

Embedding

关于 Embedding 我必须拿出来单独说一下, 腾讯云的工程师,简直就是太贴心了

image.png
要知道一个Embedding 将原始文本转换成向量进行数据插入, 这一点给开发者提供了多少的便利啊!(懂得都懂, 我是被折磨坏了!!)

连接数据库写入原始数据

引入依赖

import tcvectordb
import pandas as pd
from tcvectordb.model.document import Document, Filter, SearchParams
from tcvectordb.model.enum import FieldType, IndexType, MetricType, ReadConsistency

连接向量数据库

client = tcvectordb.VectorDBClient(url='http://lb-esqjs4rv-3**********', username='root', key='gD0Ips0RA***********9CBBE', read_consistency=ReadConsistency.EVENTUAL_CONSISTENCY, timeout=30)
# 指定写入原始文本的数据库与集合
db = client.database('db-test')
coll = db.collection('intelligent')

解析csv 数据并写入原始文本 (embedding)


documents = []
count = 1
for index, row in data.iterrows():
  st_info = '{}:{}'.format(row["title"], row["reply"])
  count += 1
  print(f'{st_info} /n 11')
  res = coll.upsert(
    documents=[
      Document(
        id=str(count),
        text=st_info,
        title=row['title'],
        reply=row['reply'],
      )
    ],
    build_index=True
  )

csv 部分数据如下

image.png

注意:

  1. 除了 id、text 字段必须写入,可以写入其他任意字段
  2. upsert 会执行覆盖写,若文档id已存在,则新数据会直接覆盖原有数据(删除原有数据,再插入新数据)
  3. 参数 build_index 为 True,指写入数据同时重新创建索引。
相似度查询

image.png

测试结果没有问题

相似度查询本地化

代码如下

import tcvectordb
from tcvectordb.model.enum import FieldType, IndexType, MetricType, EmbeddingModel, ReadConsistency
from tcvectordb.model.index import Index, VectorIndex, FilterIndex, HNSWParams
from tcvectordb.model.document import Document, Filter, SearchParams




client = tcvectordb.VectorDBClient(url='http://lb-esqjs4rv-*********', username='root', key='gD0Ips0RA********BBE', read_consistency=ReadConsistency.EVENTUAL_CONSISTENCY, timeout=30)
# 指定写入原始文本的数据库与集合
db = client.database('db-test')
coll = db.collection('intelligent')

searchword = input('请输入查询问题:')
doc_lists = coll.searchByText(
                 embeddingItems=[searchword],
                 params=SearchParams(ef=200),
                 limit=3,
                 retrieve_vector=False,
             )
# printf
for i, docs in enumerate(doc_lists.get("documents")):
                print(i)
                for doc in docs:
                        print(doc)

测试结果:

image.png

这里我是直接选择csv 中的一个问题进行提问的 , 可以看出返回三条中第一条匹配度是 0.9 , 完全没有问题, 而这个回答也是csv 中对应的回答

注意:

  1. searchByText 提供按照 embeddingItems 输入的文本批量进行相似性查询的能力
  2. limit 用于限制每个单元搜索条件的条数,如 vector 传入三组向量,limit 为 3,则 limit 限制的是每组向量返回 top 3 的相似度向量
  3. params 指定索引类型对应的查询参数,HNSW 类型需要设置 ef,指定查询的遍历范围;IVF 系列需要设置 nprobe,指定查询的单位数量
  4. retrieve_vector 指定是否输出向量字段
新增数据

对于数据库而言新增数据必不可少, 那么向量数据库如何实现数据插入呢 ?

代码如下 :


import tcvectordb
from tcvectordb.model.enum import FieldType, IndexType, MetricType, ReadConsistency
from tcvectordb.model.index import Index, VectorIndex, FilterIndex, HNSWParams
from tcvectordb.model.collection import UpdateQuery
from tcvectordb.model.document import Document, SearchParams, Filter


#create a database client object
client = tcvectordb.VectorDBClient(url='http://xxxxxxxxp-beijing.xxxxxx.com:40000', username='root', key='xxxxxxxx', read_consistency=ReadConsistency.EVENTUAL_CONSISTENCY, timeout=30)


# 指定写入数据的数据库与集合
db = client.database('db-test')
coll = db.collection('intelligent')

# 写入数据,可能存在一定延迟
res = coll.upsert(
            documents=[
                Document(id='0001', text="腾讯云向量数据库(Tencent Cloud VectorDB)是一款全托管的自研企业级分布式数据库服务,专用于存储、检索、分析多维向量数据。该数据库支持多种索引类型和相似度计算方法,单索引支持 10 亿级向量规模,可支持百万级 QPS 及毫秒级查询延迟。腾讯云向量数据库不仅能为大模型提供外部知识库,提高大模型回答的准确性,还可广泛应用于推荐系统、自然语言处理等 AI 领域。",title='腾讯云向量数据库', is_best='1' ),
                Document(id='0002',
                       text="数据写入/检索自动向量化,对齐传统数据库的使用体验,用户无需关注向量生成过程,极大降低使用门槛。",
                       title='Embedding功能', is_best='1'),
                Document(id='0003',
                       text="腾讯云向量数据库 Tencent Cloud VectorDB 基于腾讯集团每日处理千亿次检索的向量引擎 OLAMA,底层采用 Raft 分布式存储,通过 Master 节点进行集群管理和调度,实现系统的高效运行。同时,腾讯云向量数据库支持设置多分片和多副本,进一步提升了负载均衡能力,使得向量数据库能够在处理海量向量数据的同时,实现高性能、高可扩展性和高容灾能力。",
                       title='产品架构', is_best='1'),
            ],
            build_index=True
        )



我们自定一些数据进行写入, 看一下是否可以查询的到呢 ?

在这里插入图片描述
在这里插入图片描述
根据反馈的结果可以看到, 数据执行是完全没有问题的, 那么我们如和实现智能客服呢 ?
参考链接 腾讯云向量数据库这里给我们 提供了http api 的开发手册哦! 还等什么赶快去体验一下吧 !!

在这里插入图片描述

四、向量数据库api

通过上面的介绍我们已经了解了,腾讯云向量数据库的使用了, 接下来我们将启动本地服务完成接口调用, 从而实现智能客服的开发

1. 搭建FastAPI 开启本地接口调用


from fastapi import FastAPI

import tcvectordb
from tcvectordb.model.enum import ReadConsistency
from tcvectordb.model.document import SearchParams


app = FastAPI()

@app.get("/search")
async def search_docs(searchword: str):
    client = tcvectordb.VectorDBClient(
        url='http://lbxxxxxxx.com:40000',
        username='root',
        key='xxxxxxxx',
        read_consistency=ReadConsistency.EVENTUAL_CONSISTENCY,
        timeout=30
    )
    db = client.database('db-test')
    coll = db.collection('intelligent')

    doc_lists = coll.searchByText(
        embeddingItems=[searchword],
        params=SearchParams(ef=200),
        limit=1,
        retrieve_vector=False,
    )

    results = []
    for i, docs in enumerate(doc_lists.get("documents")):
        result = {}
        result["index"] = i
        result["docs"] = [doc for doc in docs]
        results.append(result)

    return results

将上述代码放入 main.py 中, 然后终端输入 uvicorn main:app --reload 来启动程序

效果如下图:

在这里插入图片描述

浏览器进行接口访问 :
在这里插入图片描述
到目前为止, 我们的接口已经没有问题了 , 但是如果接入前端程序的话,会出现一个问题 === 跨域
这个问题我们可以加入中间件来启用跨域资源共享

# 添加中间件以启用跨域资源共享
app.add_middleware(
    CORSMiddleware,
    allow_origins=["*"],  # 允许所有来源的跨域请求,你也可以指定具体的来源
    allow_credentials=True,
    allow_methods=["*"],  # 允许所有HTTP方法的请求
    allow_headers=["*"],  # 允许所有头部的请求
)

完整代码如下 :



from fastapi import FastAPI

import tcvectordb
from tcvectordb.model.enum import ReadConsistency
from tcvectordb.model.document import SearchParams


app = FastAPI()
# 添加中间件以启用跨域资源共享
app.add_middleware(
    CORSMiddleware,
    allow_origins=["*"],  # 允许所有来源的跨域请求,你也可以指定具体的来源
    allow_credentials=True,
    allow_methods=["*"],  # 允许所有HTTP方法的请求
    allow_headers=["*"],  # 允许所有头部的请求
)
@app.get("/search")
async def search_docs(searchword: str):
    client = tcvectordb.VectorDBClient(
        url='http://lbxxxxxxx.com:40000',
        username='root',
        key='xxxxxxxx',
        read_consistency=ReadConsistency.EVENTUAL_CONSISTENCY,
        timeout=30
    )
    db = client.database('db-test')
    coll = db.collection('intelligent')

    doc_lists = coll.searchByText(
        embeddingItems=[searchword],
        params=SearchParams(ef=200),
        limit=1,
        retrieve_vector=False,
    )

    results = []
    for i, docs in enumerate(doc_lists.get("documents")):
        result = {}
        result["index"] = i
        result["docs"] = [doc for doc in docs]
        results.append(result)

    return results

好啦 接下来 就可以正常的调用了 !!

五、常见问题

  1. embedding 在写入数据时 text字段是有长度限制的, 导致在写入数据时会报错 ,这一点需要注意一下
  2. 官网上部分参数讲解的并不是很清晰, 需要自己去摸索一下

六、总结

整体体验下来感觉腾讯云向量数据库真是个宝藏啊, 写入的速度也是杠杠的, 有项体验的宝贝抓紧体验一下吧

  1. 对于 embedding的设定节省了我很多的时间 , 再也不用担心我的原始数据如何转换向量啦
  2. 官方文档也比较多, 完全不用担心自己会被卡到哦!
    总之, 腾讯云向量数据库在用户体验上以及学习成本上做了很大的功夫, 完全不用担心使用以及操作上的问题。具体的信息大家也可以查看一下官方对腾讯云数据库的见解:

在这里插入图片描述

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

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

相关文章

【Docker】5. Dockerfile 构建和管理容器化应用程序

▒ 目录 ▒ 🛫 导读开发环境 1️⃣ Dockerfile介绍 基本语法 指令 2️⃣ 实战:Python 的 Flask Web 代码 编译运行 发布到服务器 🛬 文章小结📖 参考资料 🛫 导读 开发环境 版本号描述文章日期2023-12-15操作系统…

在vue3的js中将一组数据赋值的问题

代码: if (res.data) { myPrizeList.value res.data console.log(myPrizeList.value,myPrizeList.value) const giftList ref() console.log(JSON.parse(JSON.stringify(myPrizeList.val…

如何预防最新的.locked、.locked1勒索病毒感染您的计算机?

尊敬的读者: 近期,网络安全领域迎来一股新潮——.locked、.locked1勒索病毒的威胁,其先进的加密技术令人生畏。本文将深入剖析.locked、.locked1勒索病毒的阴谋,提供特色数据恢复策略,并揭示锁定恶劣行径的先锋预防手…

【已解决】解决无法找到sun.misc.BASE64Encoder的jar包的解决方法

idea中可能会出现没有sun.misc.BASE64Encoder的jar包。但是64位编码却需要用到.BASE64Encoder。有以下两种方法: 错误现象: 错误原因: 1.JDK改为8(原因是/lib/tool.jar和/lib/rt.jar已经从Java SE 9中删除)&#xff…

在线客服系统定价因素解析:影响价格的关键因素

跨境电子商务公司必不可少的工具就是在线客服系统。企业选择在线客服系统的时候免不了要对不同产品的功能性、价格、服务等因素进行考量。今天这篇文章,我们就来探讨一下在线客服系统的定价因素有哪些?探究市面上的在线客服系统价格各异的影响因素。为大…

《Kotlin核心编程》笔记:反射、注解和加锁

Kotlin 和 Java 反射 1)Kotlin 的 KClass 和 Java 的 Class 可以看作同一个含义的类型,并且可以通过.java和.kotlin方法在KClass和Class之间互相转化。2)Kotlin 的 KCallable 和 Java 的 AccessiableObject 都可以理解为可调用元素。Java 中构…

深入理解JVM设计的精髓与独特之处

这是Java代码的执行过程 从软件工程的视角去深入拆解,无疑极具吸引力:首个阶段仅依赖于源高级语言的细微之处,而第二阶段则仅仅专注于目标机器语言的特质。 不可否认,在这两个编译阶段之间的衔接(具体指明中间处理步…

Bifrost 中间件 X-Requested-With 系统身份认证绕过漏洞复现

0x01 产品简介 Bifrost是一款面向生产环境的 MySQL,MariaDB,kafka 同步到Redis,MongoDB,ClickHouse等服务的异构中间件 0x02 漏洞概述 Bifrost 中间件 X-Requested-With 存在身份认证绕过漏洞,未经身份认证的攻击者可未授权创建管理员权限账号,可通过删除请求头实现身…

HNU-计算机网络-实验4-网络层与链路层协议分析(PacketTracer)

计算机网络 课程基础实验四网络层与链路层协议分析&#xff08;PacketTracer&#xff09; 计科210X 甘晴void 202108010XXX 文章目录 计算机网络 课程基础实验四<br>网络层与链路层协议分析&#xff08;PacketTracer&#xff09;一、实验目的二、实验内容4.1 路由器交换…

Linux-常用实用操作

一、常用操作总结 1、各类小技巧&#xff08;快捷键&#xff09; ① ctrl c 强制停止 Linux某些程序的运行&#xff0c;如果想要强制停止它&#xff0c;可以使用快捷键ctrl c 命令输入错误&#xff0c;也可以通过快捷键ctrl c&#xff0c;退出当前输入&#xff0c;重新输…

HarmonyOS(十二)——全面认识HarmonyOS三种渲染控制

渲染控制概述 ArkUI通过自定义组件的build()函数和builder装饰器中的声明式UI描述语句构建相应的UI。在声明式描述语句中开发者除了使用系统组件外&#xff0c;还可以使用渲染控制语句来辅助UI的构建&#xff0c;这些渲染控制语句包括控制组件是否显示的条件渲染语句&#xff…

打工人副业变现秘籍,某多/某手变现底层引擎-Stable Diffusion涂鸦功能与局部重绘

在 StableDiffusion图生图的面板里,除了图生图(img2img)选卡外,还有局部重绘(Inpaint),涂鸦(Sketch),涂鸦重绘(Inpaint Sketch),上传重绘蒙版(Inpaint Uplaod)、批量处理(Batch)等功能。下面我就讲解一下这些功能的作用和使用。 涂鸦 Sketch 中文意思为素描,速写,草…

文本聚类——文本相似度(聚类算法基本概念)

一、文本相似度 1. 度量指标&#xff1a; 两个文本对象之间的相似度两个文本集合之间的相似度文本对象与集合之间的相似度 2. 样本间的相似度 基于距离的度量&#xff1a; 欧氏距离 曼哈顿距离 切比雪夫距离 闵可夫斯基距离 马氏距离 杰卡德距离 基于夹角余弦的度量 公式…

sectigo续费难吗

Sectigo是一家成立时间较长的CA认证机构&#xff0c;自成立以来&#xff0c;一直致力于提供安全、可靠的数字证书。这些证书被广泛应用于各种互联网应用中&#xff0c;如电子商务网站、企业内网、在线银行等等。事实上&#xff0c;购买了Sectigo的SSL证书的客户想要续费并不难&…

PyQt6 QDial旋钮控件

锋哥原创的PyQt6视频教程&#xff1a; 2024版 PyQt6 Python桌面开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili2024版 PyQt6 Python桌面开发 视频教程(无废话版) 玩命更新中~共计46条视频&#xff0c;包括&#xff1a;2024版 PyQt6 Python桌面开发 视频教程(无废话版…

蓝牙协议栈学习笔记

蓝牙协议栈学习笔记 蓝牙简介 蓝牙工作在全球通用的 2.4GHz ISM&#xff08;即工业、科学、医学&#xff09;频段&#xff0c;使用 IEEE802.11 协议 蓝牙 4.0 是迄今为止第一个蓝牙综合协议规范&#xff0c;将三种规格集成在一起。其中最重要的变化就是 BLE&#xff08;Blue…

深入理解Dubbo-7.服务消费调用源码分析

&#x1f44f;作者简介&#xff1a;大家好&#xff0c;我是爱吃芝士的土豆倪&#xff0c;24届校招生Java选手&#xff0c;很高兴认识大家&#x1f4d5;系列专栏&#xff1a;Spring源码、JUC源码、Kafka原理、分布式技术原理&#x1f525;如果感觉博主的文章还不错的话&#xff…

Linux权限(上)

目录 shell命令以及运行原理 Linux权限 Linux中的用户类别 文件类型 文件的访问权限 在讲权限之前&#xff0c;我们得先了解一下命令的执行原理。 shell命令以及运行原理 我们每次在打开Xshell执行相关命令时&#xff0c;通常会看到这样一段代码&#xff1a; [yjdhecs…

手工酸奶加盟店赚钱吗?一年有多少利润

手工酸奶以其新鲜、健康、美味的特点&#xff0c;受到了越来越多消费者的喜爱。 那开一家手工酸奶加盟店能赚钱吗&#xff1f;一年又能有多少利润呢&#xff1f; 作为经营酸奶店5年的创业者&#xff0c;我给大家分享下最真实的情况。&#xff08;可以点赞收藏&#xff0c;方便…

巨杉数据库入选“2023信创独角兽企业100强”

近日&#xff0c;《互联网周刊》、eNet研究院、德本咨询联合发布了“2023信创独角兽企业100强”榜单&#xff0c;巨杉数据库凭借卓越的技术实力和出色的研发能力荣登榜单&#xff0c;本次上榜既是对巨杉数据库长期深耕信创领域的高度认可&#xff0c;也是对其在分布式文档型数据…