Viking AI 搜索 是一款基于生成式 AI 的企业级 AI 搜索产品,基于大模型的多模态语义表征和理解能力,结合字节跳动信息检索领域多年最佳实践,为客户提供开箱即用的 AI 搜索搭建平台服务,帮助客户轻松搭建和集成端到端的多模态图文搜索和推荐能力。 想要体验更多 Viking AI 搜索能力,点击前往: Viking AI 搜索引擎,企业搜推问一体化智能引擎
在应用中配置且生效物品数据后,您可以在体验页面中体验对话式搜索,并通过对接chat_search和search接口,在您的客户端或网页端实现与体验页面相似的交互。
Replay
Play
00:00
/
00:00
Live
Fullscreen
Cssfullscreen
1x
话式搜索提供2类交互:
在对话中搜索: 专注于在对话中进行内容搜索、内容推荐,在电商、视频媒体平台的导购和推荐助手的场景中,为用户提供内容发现和内容资讯的服务。
打开边搜边问: 在对话的同时可展示基于用户的需求搜索到的所有内容,适合在图片素材库、通类电商等场景下,为用户提供精准的推荐、问答的同时,提供可翻页的搜索列表 本文介绍如何配置和使用Chat Search接口来集成对话和边搜边问的交互。
在对话体验页面可以看到右侧的配置栏,配置栏中展示2类配置:
通用搜索配置: 控制在对话中调用搜索时的搜索策略,会同时在搜索接口和对话接口中生效 对话配置: 控制对话的输出,提供对人设和回复风格的配置能力,以及对于禁答词的设置 您可以在体验页面通过调整这些配置项来调节对话的搜索、问答效果。
好的对话效果依赖搜索工具搜索到精确的可匹配用户意图的内容,在对话配置中您可以针对不同的数据集来调整搜索的匹配策略等,来优化搜索的效果,使搜索助手可以更精确地对用户问题做出回复。
搜索功能中内置基于关键词和文本语义的匹配能力,您可以基于您的搜索场景微调语义匹配和关键词匹配的权重。
提升语义匹配权重: 语义匹配可以实现自然语言query中的抽象和隐含意图匹配,在对话搜索的场景下有较好的表现。
提升关键词匹配权重: 在电商、新闻场景下,适当提升关键词匹配的权重有助于提升对专属实体和术语的匹配能力(如产品名、人名地名、公司机构、科学术语等)。
集成对话场景时建议您开启语义重排,选择召回的内容中的前N个物品,将这些物品的文本介绍内容与用户的问题做语义的相关性计算,可更好地捕捉到用户问题中的概念性、隐藏意图,并圈选出最匹配的物品内容进入回复阶段。
注意:语义重排会增加搜索结果和回复返回的耗时,重排物品量和物品包含字符数越多,重排耗时越大。对话场景下建议将重排量控制在20个物品以内。
对话搜索场景会默认提供助手的角色设定,并定义助手回复的语言风格基准:
如果您的场景对助手角色的名称、人设以及回复时的语言使用和语气风格有特定需求,可直接对角色设定进行修改。
角色设定:
定义角色的名称
定义角色的人设(角色职能、核心性格特点等)
... ...
回答风格:
回复的语言风格和语气,比如用词偏好、句式要求、口头禅等
写作回复的详尽、精简程度
... ...
您可以在体验界面随时更改配置,同时体验配置更改带来的效果变更。配置调优后点击右上方 生效当前配置 按钮可以将配置生效至search和chat_search在线接口。
配置完成并生效后,您可以通过接入chat_search接口集成对话式搜索体验。
调用接口时需要使用火山的AK鉴权机制生成鉴权信息,建议集成火山引擎鉴权SDK,集成方案详见: 鉴权机制 参考以下方法调用Chat Search接口:
参数解析:
application_id : 您创建的应用ID
会话ID String: 对话session由您的服务维护,每次新对话上传一个新建的session_id,在同一个对话中保障每次请求的session_id一致
输入类型 (String): 可传入"text"或"image"
(类型为"text"时) Query文本 (String): 输入用户的Query文本 (类型为"image"时) 图片文件 (String - Base64): 以base64形式上传Query图片,在对话中进行以图搜图并生成回复 当用户的输入为图片+文本,例如“{{image_file}}有没有同款商品”,在content参数中上传一个2个元素的列表,分别传入文本内容和图片Base64文件
搜索分页大小 (Int): 可不传,决定调用搜索工具时分页的逻辑
搜索过滤条件 : 对话中调用数据集搜索时进行预置的前置过滤,在视频媒体对话场景可通过将filter设置为仅搜索parent_content_id为空来控制仅返回父级内容。filter的写法详见: 搜索接口-Filter 用户ID (String) :上传此次调用对应的用户ID,非必传项
是否开启建议追问 (Bool) :在每次回复时给用户一些建议问题,默认开启
可参考以下调用样例:
Chat_search接口的返回采用流式输出,接口调用后,输出流程如下:
调用接口后,对话式搜索agent会经过一系列思考、判断、工具调用流程,最终执行大模型回复的输出。在回复输出之前所有步骤都会返回步骤的事件和中间过程输出,供您去监控输出流程,或在您的界面显示中间处理过程的交互。
使用对话体验页面中的交互设计作为示例,讲解模型的输出内容如何集成至您自己的终端界面。
以下针对每个步骤的输出内容进行详解。
返回示例:
调用搜索工具
在图文数据集中,会调用搜索工具来进行多源数据检索。对于视频搜索场景,当用户在搜索媒资、推荐媒体内容等场景上,模型会触发调用搜索工具进行媒资搜索。
返回示例:
调用视频深度搜索
在视频搜索中,当分析阶段判断需要深入到视频的详细内容去做问答和详解,那么会触发视频深度检索工具,工具的调用阶段输出如下
返回示例:
在调用搜索工具和视频深度搜索工具时,会返回初步的搜索结果。
搜索工具:搜索结果给到大模型进行思考、判断并最终生成回复 视频深度搜索工具:搜索到一批媒体内容,用于后续模型进行进一步的筛选和视频知识查询 搜索工具返回内容:
首先返回步骤信息
返回示例:
随后,使用payload返回搜索结果列表,作为 中间结果 输出。 搜索列表中的内容会进入模型的思考和意图匹配判断,最终在输出阶段输出满足用户需求的最终结果。
返回示例:
视频深度搜索工具返回内容
视频深度搜索工具返回以下内容
返回示例:
仅展示step_info内的结构
获取搜索结果后,模型分析搜索结果并判断结果内的物品与用户查询的相关性,并准备输出最终回复。
此步骤为大模型处理,耗时为秒级,您可能需要做一些等待加载交互来维持一个流畅的用户体验。
返回示例:
视频深度问答链路中,模型会分析搜索结果,并锁定与用户的问题最为相关的视频或视频系列,用于进行最终的分析和回复。
返回示例:
当检测到step为"reply"时会开始进行输出。
即:
回复阶段会输出以下内容,按搜索工具和视频深度搜索问答工具的输出分别讲解:
使用content返回流式输出的回复文本 (图文搜索)
返回示例:
使用payload返回回答中引用的全部物品内容(图文搜索)
返回示例:
返回示例:
使用content返回流式输出的回复文本(视频深度搜索)
返回示例:
使用payload返回与用户问题相关的视频看点(视频深度搜索)
看点(snippets)中包含的字段:
返回示例:
使用payload返回推荐问题(视频深度搜索)
返回示例:
边搜边问体验指的是在对话式搜索的过程中,在对话之外展示每次对话触发搜索的全部搜索列表。对话助手起到辅助搜索和提供答案的作用,用户可以在对话过程中基于模型的回复引导逐步细化和发散搜索需求,全部搜索结果的展示交互使用户可以充分发掘每次搜索的详尽内容,提升用户发现商品、内容的效率。
边搜边问交互通过集成搜索接口(Search)和对话式搜索接口(Chat Search)来配合实现。
下面用以下示例说明边搜边问的集成方法
Replay
Play
00:00
/
00:00
Live
Fullscreen
Cssfullscreen
1x
调用chat_search接口,开始进行对话搜索。
您可以在调用接口时在search_param参数中指定搜索结果的列表分页大小。分页设置不会影响模型生成内容的效果,可用于后续获取搜索列表
Step 2:监听流式输出内容,获取搜索调用信息
用户的query经过模型的意图判断和加工,结合上下文中抽取的历史用户查询意图,会改写为新的查询query。在执行搜索工具调用时将使用改写后的query进行搜索。您需要监听流式输出中的搜索调用信息,以备进行后续搜索列表的翻页、排序、过滤等搜后操作。
step_info.step为"tool call"时,获取step_info.step_payload中的搜索参数
搜索参数在step_payload.param.search_request中:
search_request是一个列表,当您的应用关联了多个数据集时,模型会动态选择合适的数据集进行搜索。当选择了多个数据集进行扇出搜索时,search_request会包含多个元素,每一个元素中包含:
您可以监听到step_info.step为"get results"时,获取接下来输出的payload中的第一页搜索结果。
搜索结果在 payload.search中返回,返回被搜索的每个数据集的返回结果列表:
您也可以使用在step_payload.param.search_request中返回的搜索参数,自行调用search接口获取搜索列表,来控制搜索列表的长度
当展示搜索列表后,用户在前端进行翻页、过滤或排序等操作时,您需要使用获取到的搜索参数调用search接口来进行操作,以翻页为示例,当用户在前端点击下一页:
用户触发搜后过滤、排序等操作时,也可以通过传入filter或sort_by参数执行,详见 Search - 搜索 。