腾讯云向量数据库(Tencent Cloud VectorDB)构建专属知识库问答服务

背景信息

大型语言模型 (LLM) 是自然语言处理 (NLP) 领域的关键技术,具备强大的 NLP 服务能力。然而,这些模型的训练数据主要覆盖了通用知识和常识,对于特定领域的专业知识处理存在一定的局限性。为了使 LLM 能够理解和利用其训练数据之外的专业知识,可以通过特定的提示来引导模型更好地理解和回答特定领域的复杂问题。本文通过结合腾讯云向量数据库 (VectorDB),构建一个针对特定领域的智能问答系统,以扩展 LLM 的知识范围。

实现思路

  1. 文档上传与处理
  • 使用腾讯云向量数据库的 AI 套件上传知识库文件,并将其拆分成更小的文本片段。

  • 对这些文本片段进行向量化处理,以便能够通过向量相似性进行检索。

  • 将文本片段及其对应的向量数据存储在腾讯云向量数据库中。

  1. 问题向量化与检索
  • 当用户提出一个问题时,使用腾讯云向量数据库的 Embedding 功能将问题转换为向量形式。

  • 在数据库中执行相似性检索,找到与问题最为相似的文本片段。

  1. 生成答案
  • 将用户的问题和检索到的相关文本片段组合起来,形成完整的上下文。

  • 将这个上下文送入 LLM 大模型中,以生成最符合上下文的答案。

架构示意图

请注意,架构示意图会在实际文档中展示,此处省略。 aaaaaaa

腾讯云向量数据库的AI套件为用户提供了一整套一站式向量检索解决方案,其中包括数据分割与Embedding服务。借助这些服务,用户无需手动编写用于数据拆分和向量化的代码,从而大大减少了在算法工程方面的投入,并显著简化了整个开发流程,降低了业务集成的复杂度。

同时,该解决方案通过利用相似性检索技术,使得上下文语料能够更有效地指导大型语言模型(LLM)生成更加精确的回答,进而提高了回答的质量与准确性。此外,腾讯云向量数据库还采用了灵活的存储策略,可以根据业务需求的变化实时优化和更新知识库,确保系统的稳定运行。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
import requests

import json

import tcvectordb

import os

from tcvectordb.model.enum import ReadConsistency

from tcvectordb.model.collection_view import Embedding

步骤2:创建客户端对象,连接数据库实例

1
vdbclient = tcvectordb.VectorDBClient(url='{your vdb url}', username='root', key='{your vdb key}')

步骤3:知识库初始化

声明 knowledgeInit() 函数,初始化知识库。

1. 为腾讯云向量数据库专有知识库创建一个 AI 类数据库 testdb

2. 在已创建的 AI 类数据库中,创建集合视图 knowledge

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
def knowledgeInit():

    db = vdbclient.create_ai_database(database_name='testdb')

    collView = db.create_collection_view(name='knowledge',embedding=Embedding(enable_words_embedding=True))

    file_path = "{/yourLocalPath/files/}"

    for file_name in os.listdir(file_path):

        if file_name.endswith(".md"):

            print("\n上传:"+file_name)

            collView.load_and_split_text(local_file_path=file_path+file_name)

    print('upload all file sucess')

步骤4:传入问题进行知识内容相似性检索

声明 searchKnowlege() 函数,传入用户 question,返回知识库中与用户 question 最相似的内容。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
def searchKnowlege(question):

    db = vdbclient.database('testdb')

    collView = db.collection_view('knowledge')

    doc_list = collView.search(

            content=question,

            limit=3

        )

    knowledge = ''

    print("查询向量数据库:")

    for count,doc in enumerate(doc_list):

            print("知识条目:", count, "----------------")

            print(doc.data.text)

            knowledge += doc.data.text

    return knowledge

步骤5:将用户问题与知识库检索的相似性语料送入大语言模型(LLM),生成问题答案

说明:

  • 示例模型:以Baichuan2-Turbo大模型为例。

  • 作用:检索所获取的相似性语料将更有效地指引大语言模型(LLM)进行逻辑推理,从而生成更准确的答案。

  • 注意点

  • 内容需要有条理性和结构性。

  • 使用markdown格式输出。

  • 将markdown中的换行符\n替换成aaaaaa

  • 遵循严格的JSON格式要求。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
def generate_answer(msg):

    url = "https://api.baichuan-ai.com/v1/chat/completions"

    api_key = "baichuan_api_key"

    data = {

        "model": "Baichuan2-Turbo",

        "messages": [{

                "role": "user",

                "content": msg

            }]

    }

    json_data = json.dumps(data)

    headers = {

        "Content-Type": "application/json",

        "Authorization": "Bearer " + api_key

    }

    response = requests.post(url, data=json_data, headers=headers,timeout=60)

    if response.status_code == 200:

        print("============================================")

        print("知识条目+大模型推理回答:\n", json.loads(response.text)["choices"][0]["message"]["content"])

    else:

        print(response.text)

        print("请求失败,状态码:", response.status_code)

步骤6:构建 main() 函数

3. 将检索结果的 Topk 条 knowledges 与 输入的问题 question 进行内容组装。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
if __name__ == "__main__":

    knowledgeInit()

    question = input("请输入你的问题:\n")

    print("问题:", question)

    print("============================================")

    knowledges = searchKnowlege(question)

    content = json.dumps({

            "请回答问题": question,

            "背景知识如下": knowledges

        },ensure_ascii=False)

    generate_answer(content)

在腾讯云向量数据库中,Embedding功能是指将文本数据转换为高维向量表示的过程。这一过程对于理解和处理自然语言至关重要。通过Embedding,可以捕捉到文本中的语义信息,并将其转化为机器可以处理的数值形式。这些高维向量能够有效地衡量文本之间的相似性,从而使得在大规模数据集中搜索和检索特定信息变得可能。Embedding功能是构建知识图谱、实现语义搜索等应用的基础技术之一。通过腾讯云向量数据库的AI套件,用户可以轻松地为自己的数据集创建高质量的Embedding,进而提升基于这些数据的应用和服务的性能和准确性。aaaaaaa当通用的大语言模型(LLM)在预训练阶段缺乏相关数据时,可能会出现幻觉问题,即模型会产生与事实不符的回答。而借助腾讯云向量数据库的知识库对LLM进行知识补充后,可以显著提高其回答问题的准确性。

经过向量数据库的 AI 套件从知识库中检索出相似的 TopK 条语料,再送入大模型,生成答案如下所示。

问题2:什么是腾讯云向量数据库中的 AI 套件?

直接给大语言模型(LLM)输入问题,生成答案如下所示。

经过向量数据库的 AI 套件从知识库中检索出相似的 TopK 条语料,再送入大模型,生成答案如下所示。

问题3:腾讯云向量数据库支持的最大 QPS

直接给大语言模型(LLM)输入问题,生成答案如下所示。

经过向量数据库的 AI 套件从知识库中检索出相似的 TopK 条语料,再送入大模型,生成答案如下所示。