文档首页/ 应用平台 AppStage/ API参考/ 应用示例/ 创建知识库并进行检索
更新时间:2025-05-19 GMT+08:00
分享

创建知识库并进行检索

操作场景

本文通过调用一系列知识中心的API,介绍从零开始创建知识库并进行检索的基本流程。API调用方法请参见如何调用API

前提条件

准备一篇名为“问题.txt”的文档,文档内容为:

“什么是量子计算?它是一种利用量子力学原理进行信息处理的计算方式。====

什么是RAG?它是一种通过整合检索系统和生成模型的优势,来提升模型生成文本的质量和上下文相关性。====”

步骤一:创建数据集

调用创建知识数据集接口创建数据集,示例如下:
{
"name": "测试",
"description": "测试",
"data_type": "TEXT",
"tags": [
"对话问答",
"文案生成"
],
"ingestion_config": {
"data_source": "FILE_UPLOAD",
"file_types": [
"txt"
]
},
"schedule_config": {
"schedule_type": "ONCE"
},
"preprocess_config": {
"cleaning_methods": [
"invisible"
],
"pdf_preprocess_type": "NO_PREPROCESS"
},
"chunk_config": {
"slicing_configs": {
"txt": {
"slicing_method": "sentence",
"sentence_slicing_config": {
"slicing_strategy": "equivalent",
"spec_symbols": [
"===="
],
"contain_separator": false,
"chunk_size": 26,
"chunk_overlap": 0
}
}
}
},
"extraction_config": {
"extraction_example": "今天天气如何?答:还不错哦。",
"extraction_mode": "RULE_EXTRACTION",
"rule_extraction_configs": [
{
"extraction_rule": "SEPARATOR",
"field_name": "question",
"separator_extraction": {
"contain_separator": false,
"extraction_code": 2,
"separator": "?"
}
},
{
"extraction_rule": "TEMPLATE",
"field_name": "answer",
"template_extraction": {
"contain_end": true,
"contain_start": false,
"end_with": "。",
"extraction_code": 1,
"start_with": "它是"
}
}
]
},
"index_config": {
"description": "索引配置",
"long_text_solution": "TRUNCATE_MODE",
"name": "索引配置",
"rag_type": "VECTOR_RAG",
"retrieval_configs": [
{
"category": "FULL_CHUNK",
"name": "chunk",
"retrieval_return": false,
"text_filter": false,
"vector_retrieval": false
},
{
"category": "CHUNK_FRAGMENT",
"name": "question",
"retrieval_return": true,
"text_filter": true,
"vector_retrieval": true
},
{
"category": "CHUNK_FRAGMENT",
"name": "answer",
"retrieval_return": true,
"text_filter": true,
"vector_retrieval": false
}
],
"vector_model_service_key": "GPT-4"
}
}

在创建知识数据集中,有几个参数需要注意:

  • ingestion_config内的data_source:表明数据来源,FILE_UPLOAD为文件上传,您需上传文件;OBS_INGESTION表示OBS接入,您需添加OBS信息的配置。
  • chunk_config:表示如何对文本进行切分。
  • extraction_config:表明要对切片做提取操作,切片提取出的字段可以在索引配置中使用。
  • index_config:索引配置,其中retrieval_configs配置完整切片内容,以及提取出的字段内容,在知识库检索时如何使用。
记录下接口返回的内容,该内容为知识数据集id。
{
"data" : "3f28e62-xxxxxxxx-a15be0d638a2"
}

步骤二:查询知识数据集创建结果

调用查询知识数据集最新执行记录接口查询创建结果,该接口所需的知识数据集id为步骤一:创建数据集返回的内容。

根据返回结果响应:

{
"data" : {
"id" : "djh28e62-3a81-4018-a48f-a15be0d63812",
"result" : "SUCCESS",
"progress" : 100.0,
"run_time" : 27684,
"start_time" : "2024-11-22T03:15:49.000+00:00",
"end_time" : "2024-11-22T03:16:17.000+00:00",
"log_detail" : "开始任务......结束任务"
}
}
  • 如果result字段值为SUCCESS,则表明数据集创建成功。
  • 如果result字段值为RUNNING,则表明数据集正在创建,请稍候。
  • 如果result字段值为FAILURE,则表明数据集创建失败,请检查文件是否符合要求。

步骤三:查询数据集版本和索引信息

知识数据集创建成功后,调用查询知识数据集详情接口,查询数据集版本和索引信息,响应示例如下:

{
"data" : {
"data_set_versions" : [ {
"id" : "askdjh28e62-xxxxxxxxx-a15be0d63812",
"version" : "v2024-11-21T11:36:55Z",
"created_date" : "2024-11-11 19:36:57",
"last_updated_date" : "2024-11-21 19:36:57"
} ],
"index_configs" : [ {
"id" : "d3f28e62-xxxxxxx-a15be0d638a2",
"name" : "索引配置名称",
"description" : "索引配置",
"data_set_id" : "d3f28e62-3a81-4018-a48f-a15be0d638a2",
"vector_model_service_key" : "service_key",
"index_vector_config" : {
"long_text_solution" : "TRUNCATE_MODE"
}
} ]
}
}

保存创建知识库对应的数据集版本id、版本号、索引配置id。数据集版本和索引可能有多个,可以任意组合。

步骤四:创建知识库

调用创建知识库接口创建知识库。根据保存的数据集id,数据集版本号,索引配置id,构建请求体,创建知识库即可。请求体如下:

{
"name": "知识库名称",
"description": "知识库描述",
"retrieval_status": "ENABLE",
"rag_type": "VECTOR_RAG",
"retrieval_config": {
"retrieval_modes": [
"SEMANTIC_RETRIEVAL",
"FULL_TEXT_RETRIEVAL"
],
"retrieval_hybrid_mode": "RRF"
},
"knowledge_data_sets": [
{
"data_set_id": "djh28e62-xxxxxxxxx-a15be0d63812",
"data_set_version": "v2024-11-21T11:36:55Z",
"index_config_id": "d3f28e62-xxxxxxx-a15be0d638a2"
}
]
}

注意:retrieval_status字段设置知识库是否启用检索,如果启用,则检索前不需要再调用修改知识库召回状态接口启用知识库。

将创建接口响应内容保存起来,该内容为知识库id:

{
"data" : "3f28e62-xxxxxxxx-a15be0d638a2"
}

步骤五:查询知识库创建结果

调用查询知识库最新执行记录接口查询创建结果。该接口所需的知识库id为步骤四:创建知识库返回的内容。

返回结果响应如下:

{
"data" : {
"id" : "djh28e62-3a81-4018-a48f-a15be0d63812",
"result" : "SUCCESS",
"progress" : 100.0,
"run_time" : 27684,
"start_time" : "2024-11-22T03:15:49.000+00:00",
"end_time" : "2024-11-22T03:16:17.000+00:00",
"log_detail" : "开始任务......结束任务"
}
}
  • 如果result字段值为SUCCESS,则表明知识库创建成功。
  • 如果result字段值为RUNNING,则表明知识库正在创建,请稍候。
  • 如果result字段值为FAILURE,则表明知识库创建失败,请检查文件是否符合要求。

步骤六:启用或停用知识库召回功能

调用修改知识库召回状态接口启用或停用知识库召回功能。

若创建知识库时已经启用知识库,则不需要执行此步骤。否则需启用知识库,请求体为:

ENABLE

若响应如下,则启用成功。

{
"data" : true
}

步骤七:检索知识库数据

调用检索知识库数据接口检索知识库(知识库召回状态需为启用),请求体示例如下:

{
"keyword" : "什么是",
"similarity_min" : "0.78",
"limit" : 10,
"filter" : {
"group_type" : "AND",
"expressions" : [ {
"field" : "metadata.answer",
"field_type" : "STRING",
"operator" : "EQUAL",
"values" : [ "一种利用量子力学原理进行信息处理的计算方式。" ]
} ]
},
"order_by" : {
"order_items" : [ {
"field" : "metadata.order",
"field_type" : "INT",
"order_type" : "DESC"
} ]
},
"data_sets" : [ {
"data_set_id" : "a31ed909-xxxx-xxxx-xxxx-10958c90b3f7"
} ]
}

根据索引配置,返回结果为:

{
"data" : [ {
"id" : "812857ef-xxxx-xxxx-xxxx-24ba9fd5e95c",
"document" : "什么是量子计算?它是一种利用量子力学原理进行信息处理的计算方式。",
"chunk" : "什么是量子计算?它是一种利用量子力学原理进行信息处理的计算方式。",
"chunk_fragments" : {
"question" : "什么是量子计算。",
"answer" : "一种利用量子力学原理进行信息处理的计算方式"
},
"similarity" : 0.87,
"metadata" : {
"order" : 10,
"file_name" : "问题.txt",
"path" : "问题.txt ",
"question" : "什么是量子计算。",
"answer" : "一种利用量子力学原理进行信息处理的计算方式。"
},
"download_addresses" : {
"xxx.png" : "https://xxxx"
},
"download_address" : null,
"data_set_id" : "3967c49d-xxxx-xxxx-xxxx-5eda056a1f1b"
} ]
}

响应参数解释:

  • document:表示向量化检索内容,索引配置时选择某个字段为向量化字段,检索命中时返回该字段内容,即vector_retrieval为true。
  • chunk:表示完整切片,索引配置时配置chunk作为附加字段返回时,该字段有内容,即索引配置中category为FULL_CHUNK,retrieval_return为true。
  • chunk_fragments:表示切片提取字段,索引配置时配置所提取的字段作为附加字段返回时,该字段有内容,即索引配置中category为CHUNK_FRAGMENT,retrieval_return为true。
  • metadata:默认包含order、file_name、path三个字段,若索引配置时配置所提取的字段作为文本过滤字段时,即索引配置中category为CHUNK_FRAGMENT,text_filter为true时,metadata下会新增该字段及其内容。

相关文档