You need to enable JavaScript to run this app.
文档中心
向量数据库VikingDB

向量数据库VikingDB

复制全文
下载 pdf
知识库(Collection)
service_chat
复制全文
下载 pdf
service_chat
概述

service_chat 支持基于一个已创建的知识服务进行检索/问答。

请求参数
参数类型是否必选默认值参数说明

service_resource_id

str

是

--

知识服务唯一 ID
可通过知识服务创建结果或知识服务列表接口获取

messages

List[ChatMessage]

是

--

检索/问答多轮对话消息
格式为一问一答形式,发出消息的对话参与者角色,可选值包括:

  • user:User Message 用户消息
  • assistant:Assistant Message 对话助手消息
    其中 最后一个元素 role == user ,content 为当前最新的提问 query
    纯文本对话:
    例如:
[
{"role": "user", "content": "你好"},
{"role": "assistant", "content": "你好!有什么我可以帮助你的?"},
{"role": "user", "content": "当前轮次用户问题"}
]

图文对话:
例如:

[
{
"role": "user",
"content": [
{
"type": "text",
"text": "推荐一个类似的适合 3 岁小孩的玩具"
},
{
"type": "image_url",
"image_url": {
"url": "https://ark-project.tos-cn-beijing.volces.XXX.jpeg" # 客户上传的图片,支持 URL/base64 编码,协议详见:https://www.volcengine.com/docs/82379/1362931?lang=zh#477e51ce 和 https://www.volcengine.com/docs/82379/1362931?lang=zh#d86010f4
}
}
]
}
]

query_param

Optional[Dict[str, Any]]

否

nil

检索过滤条件
在创建知识服务时如果您已配置了过滤条件,那么和该附加过滤条件一起生效,逻辑为 and

  • 支持对 doc 的 meta 信息过滤
  • 详细使用方式和支持字段见 filter表达式,可支持对 doc_id 做筛选
  • 此处用作过滤的字段,需要在 collection/create 时添加到 index_config 的 fields 上
    例如:
    单层 filter:
doc_filter = {
"op": "must", // 查询算子 must/must_not/range/range_out
"field": "doc_id",
"conds": ["tos_doc_id_123", "tos_doc_id_456"]
}
query_param = {
"doc_filter": doc_filter
}

多层 filter:

doc_filter = {
"op": "and",   // 逻辑算子 and/or
"conds": [     // 条件列表,支持嵌套逻辑算子和查询算子
{
"op": "must",
"field": "type",
"conds": [1]
},
{
...         // 支持>=1的任意数量的条件进行组合
}
]
}
query_param = {
"doc_filter": doc_filter
}

stream

Optional[bool]

否

true

是否采用流式返回

  • true:按 SSE 协议流式返回;false:生成完成后一次性返回完整结果
    当创建的知识服务为问答类型服务时生效
响应消息

检索/问答/流式的差异体现在 data 内字段是否出现及返回时机:
count、rewrite_query、result_list 通常在首流返回;token_usage 通常在尾流返回;generated_answer、reasoning_content 在中间流分段返回(SSE)。

字段类型参数说明
codeOptional[int]状态码
messageOptional[str]返回信息
request_idOptional[str]标识每个请求的唯一标识符
dataOptional[ServiceChatData]ServiceChatData

ServiceChatData

字段类型参数说明
countOptional[int]检索结果返回的条数
rewrite_queryOptional[str]query 改写的结果
token_usageOptional[Any]Token 使用信息
result_listOptional[List[ServiceChatRetrieveItem]]检索返回的信息
generated_answerOptional[str]LLM 模型生成的回答
reasoning_contentOptional[str]推理模型生成的内容
promptOptional[str]prompt 内容
endOptional[bool]是否结束(流式场景用于标识最后一段)

ServiceChatRetrieveItem

字段类型参数说明
idOptional[str]索引的主键

content

Optional[str]

切片内容
1、非结构化文件:content 返回切片内容
2、faq 文件:content 返回答案
3、结构化文件:content 返回参与索引的字段和取值,以 K:V 对拼接,使用 \n 分隔

md_contentOptional[str]markdown 格式的解析结果(表格切片可通过 chunk_type == table 判断)
scoreOptional[float]向量化语义检索得分
point_idOptional[str]切片 id
origin_textOptional[str]原始文本
original_questionOptional[str]faq 数据检索召回的答案对应的原始问题
chunk_titleOptional[str]切片标题
chunk_idOptional[int]切片位次 id(代表在原始文档中的位次顺序)
process_timeOptional[int]检索耗时(s)
rerank_scoreOptional[float]重排得分
doc_infoOptional[ServiceChatRetrieveItemDocInfo]ServiceChatRetrieveItemDocInfo
recall_positionOptional[int]向量化语义检索召回位次
rerank_positionOptional[int]重排位次
chunk_typeOptional[str]切片所属类型(如 doc-image、image、video、table、mixed-table、text、structured、faq 等)
chunk_sourceOptional[str]切片来源
update_timeOptional[int]更新时间
chunk_attachmentOptional[List[ChunkAttachment]]检索召回附件的临时下载链接,有效期 10 分钟
table_chunk_fieldsOptional[List[PointTableChunkField]]结构化数据检索返回单行全量数据
original_coordinateOptional[Dict[str, Any]]切片在所属文档的原始位置坐标

ServiceChatRetrieveItemDocInfo

字段类型参数说明
doc_idOptional[str]文档 id
doc_nameOptional[str]文档名字
create_timeOptional[int]文档的创建时间
doc_typeOptional[str]知识所属原始文档的类型
doc_metaOptional[str]文档相关元信息
sourceOptional[str]知识来源类型
titleOptional[str]知识所属文档的标题

ChunkAttachment

字段类型参数说明
uuidOptional[str]附件的唯一标识
captionOptional[str]图片所属标题,若未识别到标题则值为 "\n"
typeOptional[str]image 等
linkOptional[str]临时下载链接,有效期 10 分钟
info_linkOptional[str]附件 info_link
column_nameOptional[str]附件列名

PointTableChunkField

字段类型参数说明
field_nameOptional[str]字段名
field_valueOptional[Any]字段值
请求示例

首次使用知识库 SDK,可参考 使用说明
本示例演示了知识库 Python SDK 中 ServiceChat 的基础使用方法,包含普通调用和流式调用两种方式;该功能需使用 API Key 鉴权,且需配置知识服务 ID。

import os
from vikingdb.knowledge import VikingKnowledge
from vikingdb.auth import APIKey
from vikingdb.knowledge.models.service_chat import ServiceChatRequest
from vikingdb.knowledge.models.chat import ChatMessage

def main():
    # Note: ServiceChat usually uses API Key auth
    api_key = os.getenv("VIKINGDB_API_KEY")
    endpoint = "api-knowledgebase.mlp.cn-beijing.volces.com"
    region = "cn-beijing"
    
    client = VikingKnowledge(
        host=endpoint,
        region=region,
        auth=APIKey(api_key=api_key),
        scheme="https"
    )
    
    # 1. Prepare messages
    messages = [
        ChatMessage(role="user", content="Help me find some documents.")
    ]
    
    # 2. Call ServiceChat
    try:
        resp = client.service_chat(ServiceChatRequest(
            service_resource_id=os.getenv("VIKING_SERVICE_RID", "<YOUR_SERVICE_RESOURCE_ID>"),
            messages=messages,
            stream=False
        ))
        print(f"Response: {resp}")
    except Exception as e:
        print(f"ServiceChat failed, err: {e}")

    # 3. Call ServiceChat stream
    try:
        resp = client.service_chat(ServiceChatRequest(
            service_resource_id=os.getenv("VIKING_SERVICE_RID", "<YOUR_SERVICE_RESOURCE_ID>"),
            messages=messages,
            stream=True
        ))
        for chunk in resp:
            print(f"Stream Response: {chunk}")
    except Exception as e:
        print(f"ServiceChat stream failed, err: {e}")


if __name__ == "__main__":
    main()
最近更新时间:2026.09.08 20:33:17
这个页面对您有帮助吗?
有用
有用
无用
无用