You need to enable JavaScript to run this app.
导航
search_and_generate
最近更新时间:2024.06.19 19:40:56首次发布时间:2024.06.13 16:53:43

本节将说明如何基于一个已创建的知识库做在线检索,并使用大语言模型整合生成回答。

说明

  • 知识库创建完成、文档导入且处理完成后,即代表可以进行在线检索了。
  • 使用SDK前请先完成“安装与初始化“页面的前置步骤。

概述

search_and_generate 用于对知识库进行检索,并将检索到的文本片和用户问题组装到 prompt 当中,调用大语言模型生成问题的回答。

说明

知识库文档导入/删除后,知识库更新时间最长滞后5s,不能立即检索到,待知识库就绪后可正常检索。

请求参数

参数

类型

是否必选

子参数

类型

默认值

备注

collection_name

string

知识库的名字。

project

string

default

知识库所属项目,即在【访问控制】-【资源管理】-【项目】中创建的项目。

resource_id

string

知识库的唯一id。可选择直接传resource_id,或同时传name和project作为知识库的唯一标识。

query

string

要检索的文本,最大长度为1024,如超过模型支持的最大窗口会截断。

query_param

json

doc_filter

map

检索的过滤条件,支持对doc的meta信息过滤。

  • 使用方式和支持字段见向量数据库标量过滤设置,可以对doc_id做筛选。
  • 此处用过过滤的字段,需要在collection/create时添加到index_config的fields上。

retrieve_param

map

rerank_switch

bool

false

自动对结果做rerank。

retrieve_count

int

25

召回进重排模型的文本片数量。只有在rerank_switch为 true 时生效。retrieve_count需要大于等于 limit,否则会抛出错误。

limit

int

10

最终返回的文本片数量。

dense_weight

float

0.5

可选,只有索引为混合索引时可以配置,检索时的稠密向量权重,范围为[0.2, 1]。

chunk_diffusion_count

int

0

检索阶段返回命中文本片上下几片文本片。默认为 0,表示不进行 chunk diffusion。范围[0, 5]。

llm_param

map

model

string

"Skylark2-pro-turbo-8k"

使用的大语言模型的型号。
可选模型:
Skylark2-lite-8k
Skylark2-pro-4k
Skylark2-pro-turbo-8k(默认)
Skylark2-pro-32k

max_new_tokens

int

2000

最多生成多少个新Token。

min_new_tokens

int

1

最少生成多少个新 token。

temperature

float

0.7

生成温度。

top_p

float

0.9

用于控制输出tokens的多样性,TopP值越大输出的tokens类型越丰富,取值范围0~1。

top_k

int

0

选择预测值最大的k个token进行采样,取值范围0-1000,0表示不生效。

prompt

string

"使用以下的信息作为你学习到的知识,这些信息在 XML tags 之内.

{{ .retrieved_chunks }}

回答用户的问题,用户的问题在 XML tags 之内
回答问题时,如果 context 不能回答用户提出的问题,请直接说明你不知道。此外,回答问题时应该精简干练但又完整地回答用户的问题,避免过冗余的回答。

{{ .user_query }}
"

{{ .retrieved_chunks }}和{{ .user_query }}是占位符,由后端传入检索到的文本片和用户的问题。
prompt 中必须有且只有上述两个占位符,否则会抛出错误。

示例

请求参数
collection_name = "example"
project = ""
query = "DLSP: A Document Level Structure Parser for Multi-Page Digital Documents 这篇论文是关于什么的"

doc_filter = {
    "op": "must",
    "field": "doc_id",
    "conds": ["tos_doc_id_123", "tos_doc_id_456"]
}
query_param = {
    "filter": doc_filter
}

retrieve_param = {
    "rerank_switch": true,
    "retrieve_count": 30,
    "dense_weight": 0.7,
    "limit": 15
    "chunk_diffusion_count": 1    
}

llm_prompt_extra_context = {
    "self_define_fields": ["自定义元数据1", "自定义元数据2"],
    "system_fields": ["doc_name", "title", "chunk_title", "content"]
}
llm_param = {
    "model": "Skylark2-pro-turbo-8k",
    "max_new_tokens": 2500,
    "min_new_tokens": 5,
    "temperature": 0.8,
    "top_p": 0.95,
    "top_k": 10,
    "prompt": "使用以下的信息作为你学习到的知识,这些信息在 <context></context> XML tags 之内.\n\n<context>\n{{retrieved_chunks}}\n</context>\n\n回答用户的问题,用户的问题在<query></query> XML tags 之内\n回答问题时,如果你不知道,请直接说明你不知道。\n\n<query>\n{{user_query}}\n</query> "
}

refs = viking_knowledgebase_service.search_collection(collection_name, query, query_param, retrieve_param,llm_param)

返回值

Python 调用执行上面的任务,返回字典,包含的属性如下表所示。

参数

类型

说明

collection_name

string

知识库名称

count

int

检索返回的结果数量

generated_answer

string

使用大模型生成的内容

prompt

string

组装系统 prompt 和检索到的文本片后最终调用 LLM 时的完整 prompt

usage

map

使用大模型的用量信息

  • “prompt_tokens”:传入大模型的 token 数量
  • “completion_tokens”:大模型生成的新 token 数量
  • “total_tokens”:大模型调用总数

refs

List

检索到的points列表

Point实例包含的属性如下表所示。

属性

类型

说明

collection_name

string

collection名字

point_id

string

知识点id

chunk_title

string

知识点所在章节标题

original_question

string

文档为 faq类型的对应问题

process_time

string

知识点完成处理的时间

content

string

知识点内容

rerank_score

float

重排得分

score

float

检索得分

doc_info

Doc

知识点所在文档信息

chunk_id

string

知识点所在章节id