使用知识助手基于您的文档创建高质量的聊天机器人

本页介绍如何使用知识助手基于文档创建问答聊天机器人,并根据主题专家的自然语言反馈提高其质量。

什么是知识助手?

使用知识助手创建一个聊天机器人,该机器人可以回答有关文档的问题,并使用引文提供高质量的响应。 知识助手使用高级 AI,遵循 “指示检索器 ”方法来解决传统检索扩充生成(RAG)方法的限制,并根据提供的文档提供质量最高的答案。 它支持多种语言的文档。

知识助手非常适合支持以下用例:

  • 根据产品文档回答用户问题。
  • 回答与人力资源策略相关的员工问题。
  • 根据支持知识库回答客户查询。

借助知识助手,你可以改进聊天代理的质量,并根据主题专家的自然语言反馈调整其行为。 直接在体验中提供问题和指南,并共享智能助手,允许他人协作并提升智能助手的性能。

知识助手会创建一个代理终结点,可将该终结点用于应用程序的下游。 例如,下图显示了如何在 AI Playground 中通过聊天来与端点进行交互。 向代理询问与你的文档相关的问题,代理会附带引用进行回答。

知识助手在操场中的终结点。

知识助手使用 默认存储 来存储临时数据转换、模型检查点和为每个代理提供支持的内部元数据。 在代理删除时,将从默认存储中删除与代理关联的所有数据。

Requirements

创建知识助理代理

转到“代理”图标。工作区左侧导航窗格中的代理。 单击“ 创建代理”,然后选择“ 知识助手”。

步骤 1:配置代理

配置代理并提供用于回答问题的知识源。

  1. 在“ 名称” 字段中,输入代理的名称。

  2. 在 “说明” 字段中,描述你的代理能做什么。

  3. 在 “知识源 ”面板中,添加知识源。 你可以选择提供卷中的文件、表中的文件,或 AI 搜索索引。

    卷中的文件

    对于 Unity 目录卷或目录中的文件,支持以下文件类型:txt、pdf、md、ppt/pptx 和 doc/docx。 引入期间自动跳过大于 100 MB 的文件,并且不包括在知识库中。 页数超过 500 页的 PDF、DOC、DOCX、PPT 和 PPTX 文件也会被跳过。 对于PowerPoint文件,每个幻灯片都计为页面。 TXT 和 MD 文件没有页面限制。

    1. 在类型下,选择卷中的文件。
    2. 在“源”字段中,选择包含文件的 Unity Catalog 卷或卷目录。
    3. 在“ 名称” 字段中,输入知识源的名称。
    4. 在 “描述内容”下,描述知识源包含的内容,以帮助代理了解何时使用此数据源。

    表中的文件

    可以将 Unity 目录表中的文件用作知识源。 使用 Databricks 连接器从 SharePoint 或 Google Drive 引入的表会自动产生预期的格式。 对于从其他源(如 Jira 或 Confluence)引入的表,可能需要转换数据以匹配所需的架构。

    注释

    Unity 目录表必须满足以下要求:

    • 该表要么是流式表,要么是启用了变更数据源的表。
    • 表格包含一个BINARY或STRING类型的内容列。
    • 该表包含一个 metadata 或 _metadata 列,列类型为 STRUCT,包含以下字段:
      • file_path:字符串
      • file_name:字符串,包括文件扩展名
      • file_size:长
      • file_modification_time:时间戳
    1. 在 “类型”下,选择 表中的文件。
    2. 在 “源 ”字段中,选择包含数据的 Unity 目录表。
    3. (可选)在 “文件内容”列 字段中,选择包含文件内容的列。 如果未指定,将默认为 content 列。 仅显示 BINARY 和 STRING 类型的列。
    4. 在“ 名称” 字段中,输入知识源的名称。
    5. 在 “描述内容”下,描述知识源包含的内容,以帮助代理了解何时使用此数据源。

    AI 搜索索引

    注释

    仅当索引使用以下嵌入模型之一时,才支持 AI 搜索索引: databricks-gte-large-en或 databricks-bge-large-endatabricks-qwen3-embedding-0-6b。 创建索引时,请确保选择其中一个嵌入模型。 有关详细信息,请参阅 创建 AI 搜索索引。

    1. 在 “类型”下,选择 “AI 搜索索引”。
    2. 在 “源 ”字段中,选择要提供代理的索引。
    3. 在“ 名称” 字段中,输入知识源的名称。
    4. 在 文档 URI 列中,选择包含指向信息所在位置的链接或引用的列。 代理会在引用中使用此内容。
    5. 在 “文本列” 字段中,指定包含希望代理检索的原始文本的列。
    6. 在 “描述内容”下,描述知识源包含的内容,以帮助代理了解何时使用此数据源。
  4. (可选)如果要添加更多知识源,请单击“ 添加知识源”。 最多可以提供 10 个知识源。

  5. (可选)在 “说明” 字段中,指定代理响应方式的准则。

  6. 单击“ 创建代理”。

创建代理并同步你提供的知识源最多可能需要几个小时。 代理准备就绪后,右侧面板会显示同步的知识源。

Important

如果您更新了知识源中的文件或向其中添加了文件,您必须点击 同步图标同步,代理才能获取这些更改。 同步以增量方式完成。 例如,如果将新文件添加到以前同步的 Unity 目录卷,则同步仅处理新添加的文件。

具有 CAN MANAGE 知识助手权限的任何用户都可以同步知识源。

步骤 2:测试代理

智能体构建完成后,请通过与之对话进行测试。 代理应使用引文回答与其知识来源相关的问题。

  1. 直接在 “生成 ”选项卡中开始与代理聊天。
  2. (可选)还可以单击 “在 AI Playground 中打开”,在 AI Playground 中与之聊天。
  3. 为你的代理输入一个问题。
  4. 评估其响应:
    1. 单击“ 查看想法 ”以查看代理如何回答问题。
    2. 单击“ 查看跟踪 ”以查看完整跟踪。 可以在 UI 中将 标签添加到追踪,以便在开发过程中跟踪质量评估。
    3. 单击“ 查看源” 以查看代理引用的文件。 这将打开一个侧面板,其中包含供你查看的源列表。

如果对代理的性能感到满意,请继续原样使用该代理。

步骤 3:提高质量

知识助手可以根据自然语言反馈来调整代理的行为。 通过配置页面收集专家的反馈,以提高代理的质量。 为智能体收集标注数据可以提升其质量和行为表现。

在“ 示例 ”选项卡中,添加用户提出的问题或代理以前出错的问题。 或者,可以直接从 Unity 目录表导入标记的数据。

  1. 向标签添加问题:

    1. 单击“ + 添加” 以添加问题。
    2. 在 “添加问题 模式”中,输入问题。
    3. 单击 添加。 问题应显示在 UI 中。
    4. 重复操作,直到添加你想要评估的所有问题。
    5. 若要删除问题,请单击烤肉串菜单 Kebab 菜单图标。然后单击 “删除”。
  2. 添加完问题后,您可以将智能体分享给他人进行审核,以帮助您构建高质量的标注数据集。 要管理权限,请单击右上角的 kebab 菜单 Kebab 菜单图标。。

    若要让专家访问并提供反馈,需要向他们授予以下权限:

    • 从智能体配置页面获取 CAN_MANAGE 权限
  3. 共享“知识助手配置”页的链接,以收集专家的反馈。

  4. 若要标记数据,请单击问题并在显示的窗格中添加 “指南 ”。 指南在保存后立即适用。

  5. 在配置页或 AI Playground 中再次测试代理,以查看其性能的改进。 如果需要,请添加更多问题和指南,以继续改进行为。

(可选)导入和导出标记的数据

直接从 Unity 目录表导入新问题和反馈:

  1. 单击导入。

  2. 在 “源 ”字段中,选择包含已标记数据的 Unity 目录表。

    该表必须具有以下架构:

    • eval_id: string
    • request: string
    • guidelines: array
      • items: string
    • metadata: string
    • tags: string
  3. 单击导入。

新的问题和指南将合并到右侧标记的数据表中。

若要将标记的数据导出为 Unity Catalog 表,请执行以下步骤:

  1. 单击“ 导出”。
  2. 在 “架构 ”字段中,选择要将数据保存到的 Unity 目录架构位置。
  3. 在 “表名 ”字段中,输入表的名称。
  4. 单击“ 导出”。

使用标记的数据创建新表。

管理知识源

创建知识助理后,无需重新创建代理即可添加、删除和更新知识源。 只有知识助手的创建者才能添加或删除知识源。 任何具有 CAN MANAGE 权限的用户都可以更新知识源名称和说明,并同步知识源。

可以一次性起草多个更改(例如,添加新源、删除现有源并更新另一个更改的说明),然后在单击“ 保存和更新”时同时应用所有更改。

添加知识源

  1. 在代理配置页上,转到“ 源 ”选项卡。
  2. 单击现有知识源卡下方的 “+ 添加”。
  3. 选择要添加的知识源类型(Unity 目录卷中的文件、Unity 目录表中的文件或 AI 搜索索引),并按 步骤 1:配置代理中所述对其进行配置。
  4. 单击“ 保存并更新”。

代理开始同步新的知识源。 现有知识源及其数据不受影响。

注释

每个知识助理最多可以提供 10 个知识源。 添加文件源会启动一个引入作业,该作业可能需要一段时间,具体取决于数据量。

删除知识源

  1. 在代理配置页上,转到“ 源 ”选项卡。
  2. 将鼠标悬停在要删除的知识源卡上,然后单击右上角的删除图标回收站图标。
  3. 在确认对话框中,单击“ 确认 ”以删除源。
  4. 单击“ 保存并更新”。

知识源及其关联的数据将从代理中删除。 此操作不容易可逆,因为重新添加源需要重新引入数据。

Important

不能删除最后一个剩余的知识源。 知识助理必须始终至少有一个知识来源。

更新知识源详细信息

可以更新现有知识源的名称和说明。 这些详细信息可帮助代理了解何时使用每个源。

  1. 在代理配置页上,转到“ 源 ”选项卡。
  2. 将鼠标悬停在要编辑的知识源卡上,然后单击铅笔图标。
  3. 更新 “名称 ”或 “说明” 字段。
  4. 单击“ 保存并更新”。

管理权限

默认情况下,只有代理作者和工作区管理员有权访问代理。 若要允许其他用户编辑或查询代理,需要显式授予他们权限。

若要管理代理的权限,请执行以下步骤:

  1. 在 “代理 ”页上打开代理。
  2. 在顶部,单击 “Kebab”菜单图标。 烤肉串菜单。
  3. 单击“ 管理权限”。
  4. 在 “权限设置” 窗口中,选择用户、组或服务主体。
  5. 选择要授予的权限:
    • 可以管理:允许管理代理,包括设置权限、编辑代理配置以及提高其质量。
    • Can Query:可查询 AI Playground 中的代理终结点以及通过 API 进行查询。 仅具有此权限的用户无法在“代理”页上查看或编辑代理。
  6. 单击 添加。
  7. 单击“ 保存”。

Important

只有知识助手的创建者才能添加或删除知识源。 任何具有 CAN MANAGE 知识助手权限的用户都可以同步知识源并更新知识源名称和说明。

查询代理端点

在代理页上,单击 “终结点 ”打开代理终结点并查看详细信息。

可通过多种方式查询创建的知识助理终结点。 使用 AI Playground 中提供的代码示例作为起点:

  1. 点击在操场中打开。
  2. 在 Playground 中,单击“ 获取代码”。
  3. 选择如何使用终结点:
    • 选择 Curl API 作为代码示例,以使用 curl 查询终结点。
    • 选择 Python API 作为代码示例,以使用 Python 与终结点交互。

使用 Databricks SDK 管理知识助手

可以使用 Databricks SDK for Python以编程方式创建和管理知识助手及其知识源。 有关可用 API 操作的完整列表,请参阅 知识助理 API 参考。

创建知识助手

以下示例创建了一个新的知识助手,并附有显示名称、描述和指令。

from databricks.sdk import WorkspaceClient
from databricks.sdk.service.knowledgeassistants import KnowledgeAssistant

w = WorkspaceClient()

knowledge_assistant = KnowledgeAssistant(
    display_name="<display-name>",
    description="<description>",
    instructions="<instructions>",
)
created = w.knowledge_assistants.create_knowledge_assistant(knowledge_assistant=knowledge_assistant)
print(created)

将<display-name>、<description>和<instructions>替换为您的知识助手的相应值。

管理知识源

可以使用 SDK 在现有知识助手上添加、删除和更新知识源。

添加知识源

以下示例将 Unity Catalog 卷中的文件作为知识源添加到现有的知识助手。

from databricks.sdk import WorkspaceClient
from databricks.sdk.service.knowledgeassistants import KnowledgeSource, FilesSpec

w = WorkspaceClient()

files_source = KnowledgeSource(
    display_name="<knowledge-source-name>",
    description="<knowledge-source-description>",
    source_type="files",
    files=FilesSpec(
        path="<volume-path>",
    ),
)

created_source = w.knowledge_assistants.create_knowledge_source(
    parent="knowledge-assistants/<knowledge-assistant-id>",
    knowledge_source=files_source,
)
print(created_source)

若要添加 AI 搜索索引源,请使用 IndexSpec:

from databricks.sdk.service.knowledgeassistants import KnowledgeSource, IndexSpec

index_source = KnowledgeSource(
    display_name="<knowledge-source-name>",
    description="<knowledge-source-description>",
    source_type="index",
    index=IndexSpec(
        index_name="<catalog.schema.index-name>",
        text_col="<text-column>",
        doc_uri_col="<doc-uri-column>",
    ),
)

created_source = w.knowledge_assistants.create_knowledge_source(
    parent="knowledge-assistants/<knowledge-assistant-id>",
    knowledge_source=index_source,
)
print(created_source)

删除知识源

以下示例从知识助手中删除知识源。

from databricks.sdk import WorkspaceClient

w = WorkspaceClient()

w.knowledge_assistants.delete_knowledge_source(
    name="knowledge-assistants/<knowledge-assistant-id>/knowledge-sources/<knowledge-source-id>",
)

更新知识源

以下示例更新现有知识源的显示名称和说明。

from databricks.sdk import WorkspaceClient
from databricks.sdk.service.knowledgeassistants import KnowledgeSource

w = WorkspaceClient()

updated_source = w.knowledge_assistants.update_knowledge_source(
    name="knowledge-assistants/<knowledge-assistant-id>/knowledge-sources/<knowledge-source-id>",
    knowledge_source=KnowledgeSource(
        display_name="<new-name>",
        description="<new-description>",
    ),
    update_mask="display_name,description",
)
print(updated_source)

允许的字段: update_maskdisplay_name, description。

同步知识源

在基于文件的知识源(如 Unity 目录卷或表)中添加或更新文件后,触发同步以使用最新的文件内容更新知识助手的索引。

注释

基于索引的知识源自动更新,不需要手动同步。

from databricks.sdk import WorkspaceClient

w = WorkspaceClient()

w.knowledge_assistants.sync_knowledge_sources(
    name="knowledge-assistants/<knowledge-assistant-id>",
)

在工作区之间迁移知识助手

可以使用 SDK 将知识助理从一个工作区复制到另一个工作区。 以下示例从源工作区检索知识助手,并在目标工作区中重新创建该助手及其知识源。

注释

在创建知识源之前,目标工作区中引用的知识源(例如 AI 搜索索引或 Unity 目录卷)必须已存在于目标工作区中。

from databricks.sdk import WorkspaceClient
from databricks.sdk.service.knowledgeassistants import (
    Example,
    KnowledgeAssistant,
    KnowledgeSource,
    IndexSpec,
    FilesSpec,
)

# Retrieve the knowledge assistant from the source workspace
source_client = WorkspaceClient()
ka = source_client.knowledge_assistants.get_knowledge_assistant(name="<source-knowledge-assistant-name>")
print(ka.display_name, ka.description, ka.instructions)

# Set up the client for the target workspace
target_client = WorkspaceClient(
    host="<target-workspace-url>",
    token="<target-workspace-token>",
)

# Create the knowledge assistant in the target workspace
knowledge_assistant = KnowledgeAssistant(
    display_name=ka.display_name,
    description=ka.description,
    instructions=ka.instructions,
)
created = target_client.knowledge_assistants.create_knowledge_assistant(knowledge_assistant=knowledge_assistant)
print(created)

# Re-create knowledge sources in the target workspace
index_source = KnowledgeSource(
    display_name="<knowledge-source-name>",
    description="<knowledge-source-description>",
    source_type="index",
    index=IndexSpec(
        index_name="<catalog.schema.index-name>",
        text_col="<text-column>",
        doc_uri_col="<doc-uri-column>",
    ),
)

files_source = KnowledgeSource(
    display_name="<knowledge-source-name>",
    description="<knowledge-source-description>",
    source_type="files",
    files=FilesSpec(
        path="<volume-path>",
    ),
)

created_index_source = target_client.knowledge_assistants.create_knowledge_source(
    parent=created.name,
    knowledge_source=index_source,
)
print(created_index_source)

created_files_source = target_client.knowledge_assistants.create_knowledge_source(
    parent=created.name,
    knowledge_source=files_source,
)
print(created_files_source)

# Re-create examples in the target knowledge assistant
for ex in source_client.knowledge_assistants.list_examples(parent=ka.name):
    example = source_client.knowledge_assistants.get_example(name=ex.name)
    target_client.knowledge_assistants.create_example(
        parent=created.name,
        example=Example(
            question=example.question,
            guidelines=example.guidelines,
        ),
    )

请用源工作区和目标工作区的相应值替换占位符值。 <source-knowledge-assistant-name> 的格式遵循 knowledge-assistants/<knowledge-assistant-id>。

评估您的知识助手

此笔记本演示如何使用特选评估数据集和自定义评分器评估知识助手。

获取笔记本

Limitations

  • 引入期间自动跳过大于 100 MB 的文件,并且不包括在知识库中。
  • 引入期间会跳过包含超过 500 页的 PDF、DOCX、PPT 和 PPTX 文件。 对于PowerPoint文件(PPT、PPTX),每个幻灯片都计为页面。 TXT 和 MD 文件没有页面限制。 引入使用 ai_parse_document,每个文档的页数限制为 500 页。
  • 名称以下划线 (_) 或句点 (.) 开头的文件在摄取过程中会被自动跳过,且不会被纳入知识库。
  • 对于使用 Unity Catalog 表中文件的知识源,仅会摄取所选的内容列。 不使用表知识源中的其他列。
  • 仅支持使用以下嵌入模型之一的 AI 搜索索引:databricks-gte-large-en或databricks-bge-large-endatabricks-qwen3-embedding-0-6b。