Skip to main content
Cookbook

文件自动打标:用大模型生成文档标签

用知识问答服务基于文档全部切片自动抽取标签并写回,实现从导入到按标签检索的端到端自动打标

本实践基于知识问答服务的检索与生成能力,由大模型根据文档全部切片自动抽取标签并写回文档,形成从导入、自动打标到按标签检索的端到端流程。全流程在控制台完成,结果可复现。

方案概述

背景

人工为文档打标签存在三个问题:
  • 效率无法匹配入库速度:文档批量入库时,人工打标速度远低于入库速度
  • 从入库到可用存在延迟:文档入库后需等待人工打标,才能用于按标签检索与分发
  • 标签口径不统一:标注人员的理解存在差异,同类文档的标签易不一致,影响检索质量
由大模型根据文档内容自动抽取标签,可使打标随入库自动完成,并通过统一的提示词保持标签口径一致。

适用场景

场景说明自动打标的价值
企业文档管理为合同、项目资料、技术文档标注部门、项目、主题、密级等标签提升检索效率,支持权限管理与合规追溯
知识资产沉淀为技术文档、研究报告、行业白皮书标注领域、技术栈、应用场景等标签将散落的资料结构化,支持按标签精准问答与推荐
营销素材管理为产品手册、营销方案、客户案例标注产品线、行业、场景等标签快速定位相关素材,支持按标签筛选与复用

方案原理

知识问答服务本质是 RAG:检索召回切片,再由大模型基于切片生成回答。将生成目标从回答问题改为抽取标签,即为自动打标:为目标文档添加一个唯一标签,通过标签过滤仅召回该文档的切片,由大模型按打标提示词输出标签,再写回文档。
三个关键点:
  • 单文档召回:百炼的标签过滤按 tags 筛选,不支持按文档 ID 过滤;通过为目标文档添加唯一标签,实现仅召回该文档
  • 尽量完整覆盖:排序模型设为不使用模型,并将召回数量调至上限,使尽可能多的切片进入模型
  • 结构化输出:由提示词约束模型输出可解析、可直接写回的标签
知识问答的最大召回数量上限为 20,即单次问答最多有 20 个切片进入模型。目标文档切片数不超过 20 时,可一次覆盖全文;超过 20 的文档无法在一次问答中被完整读取,需拆分文档或分批打标。演示用的小文档通常在 20 个切片以内。

操作步骤

本实践使用 百炼技术文档样例 演示(含 92 篇百炼平台技术文档),以其中的《首次调用通义千问 API》为例打标,也可替换为自有文档。 以下标签在打标后写回,无需提前创建:
标签说明示例值
产品文档所属产品产品_百炼
主题文档主题主题_API调用
难度入门 / 进阶 / 专家难度_入门
关键词文档关键词(多值)关键词_环境变量关键词_curl
百炼的标签是字符串数组,没有字段类型的概念。标签仅支持中文、大小写英文字母、数字、下划线 _、中划线 -,不支持冒号、空格等其他字符,单个标签最多 32 个字符、每篇文档最多 100 个。因此使用 字段名_值 形式(如 产品_百炼)表达带含义的标签,多值标签(如关键词)拆成多个字符串。

1. 创建知识库并导入文档

进入 数据接入 → 知识管理,点击创建,选择旗舰版(自动打标需调大召回数量,旗舰版配额更高),按三步向导操作:
  1. 基础信息:填写知识库名称与描述;知识库类型选择文档搜索,使用场景选择基础文档问答
  2. 选择数据:依次配置,选择连接器(默认文件连接器),数据来源选择上传文件,配置类目,在文件上传区上传样例文档
  3. 索引设置:保持默认,完成创建
创建后进入知识库详情的文档列表,等待文档状态变为解析完成(系统自动完成解析、切片与向量化)。
选择数据步骤最下方的新增标签会对本次上传的所有文件批量生效,不适用于单文档定位;单文档的唯一标签在下一步单独添加。标签为自由文本,无需在此预先创建业务标签。

建库选择数据步骤:连接器、数据来源、配置类目、文件上传

建库选择数据步骤
详见创建知识库文档管理

2. 为目标文档添加唯一标签

标签过滤是仅召回目标文档的手段,因此需先为待打标文档添加一个唯一标签(如 auto_tag_temp):
  • 控制台:进入 数据接入 → 知识管理,对上一步创建的知识库点击查看详情进入文档列表,对目标文档点击 更多 → 标签,在标签管理弹窗中输入 auto_tag_temp,回车后确定
  • API:调用 batchUpdateFileTag,为该文档的 tags 写入 ["auto_tag_temp"]

3. 配置知识问答服务

  1. 进入 知识服务 → 知识问答,点击创建,绑定上一步的知识库
  2. 选择生成模型。标签抽取对理解与指令遵循能力要求较高,建议选用能力较强的模型(如 qwen3.7-plus
  3. 点击展开知识库配置,按下表设置检索参数:
参数设置原因
标签过滤输入或从下拉选择唯一标签 auto_tag_temp仅召回该文档的切片,实现单文档打标
初步向量检索 TopK调大(不小于文档切片数,默认 50)使该文档的切片尽量进入候选
初步关键词检索 TopK调大(不小于文档切片数,默认 50)覆盖关键词检索路径
排序模型选择不使用模型避免 rerank 按相关性筛除切片
最大召回数量调至上限 20使尽可能多的切片进入最终召回

知识库配置:标签过滤选唯一标签、TopK 调大、排序模型选不使用模型、最大召回数量调到 20

知识库检索参数配置
打标的核心是让模型读取尽量完整的文档。需将排序模型设为不使用模型,并将最大召回数量调至 20。受 20 上限约束,切片数超过 20 的文档需拆分或分批打标。

4. 设置打标提示词

在配置页的提示词输入框填入打标提示词模板。检索结果由服务自动拼接为上下文注入,提示词中无需写占位符。提示词直接要求模型输出可写回的 字段_值 标签数组:
# 任务
你是一名文档内容理解助手。当前提供的参考资料来自同一篇文档的多个切片,已尽可能覆盖该文档的全部内容。请将这些切片视为一份完整文档的不同部分进行整体理解,为该文档抽取标签。

# 行为要求
1. 综合理解所有切片内容,不要只依据某一段局部信息。
2. 所有标签值必须来源于参考资料本身,不得引入外部知识或主观推测。
3. 如果某个维度在内容中未明确体现,不要输出该维度的标签。
4. 不要复述原文,不要解释分析过程,只输出标签数组。

# 标签维度
- 产品:文档所属产品(如 百炼、通义千问)
- 主题:文档主题(如 API调用、模型推理、数据导入)
- 难度:入门 / 进阶 / 专家
- 关键词:1-5 个文档关键词

# 输出规范
- 每个标签用 字段名_值 的形式表示,多值维度(如关键词)输出多个标签。
- 标签只允许中文、字母、数字、下划线、中划线,不要出现冒号、空格等字符。
- 仅输出一个 JSON 字符串数组,不要输出 Markdown、注释或任何多余文字,例如:
["产品_百炼", "主题_API调用", "难度_入门", "关键词_环境变量", "关键词_curl"]

5. 控制台执行打标

在配置页右侧调试面板输入打标指令(例如 请为这篇文档抽取标签),发送后确认模型输出的标签数组是否符合预期。

调试面板:输入打标指令,模型返回标签数组

调试面板打标效果
批量打标多篇文档时,确认效果后点击发布获取服务 ID(agent_id),通过知识问答 API 发起打标请求(响应为 SSE 流式输出,解析方式见接口文档),再按下一步写回标签。批量场景下每篇文档的打标顺序见注意事项

6. 标签写入及检索

获得模型输出的标签数组后,调用 batchUpdateFileTag 写回文档(OVERWRITE 会覆盖第 2 步的临时唯一标签):
curl -X POST 'https://{workspaceId}.cn-beijing.maas.aliyuncs.com/api/v1/connector/dash/batchUpdateFileTag' \
  -H 'Authorization: Bearer $API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{
    "fileInfos": [
      {
        "fileId": "file-xxx",
        "tags": ["产品_百炼", "主题_API调用", "难度_入门", "关键词_环境变量", "关键词_curl"]
      }
    ],
    "updateMode": "OVERWRITE"
  }'
fileId 通过 listFile 获取,也可在控制台文档列表中通过 更多 → 标签 手工写回。写回后,在知识检索或问答服务的知识库配置 → 标签过滤中选择对应标签,即可按标签精准召回。

文档列表展示已写入标签,知识库配置标签过滤实现精准召回

按标签精准召回

注意事项

标签是字符串数组

百炼的标签是字符串数组(无字段类型),仅支持中文、字母、数字、下划线 _、中划线 -,不支持冒号、空格等字符,单个标签最多 32 个字符、每篇文档最多 100 个。带含义的标签用 字段名_值 表达(如 产品_百炼),多值维度拆成多个字符串。标签为自由文本,写回时无需预先创建。

单文档召回依赖唯一标签

百炼的检索与问答不支持按文档 ID 过滤,标签过滤按 tags 筛选。单文档打标需单独为目标文档添加唯一标签(如 auto_tag_temp)。建库时选择数据步骤的新增标签会对本次上传的所有文件批量生效,无法用于定位单篇文档。

受最大召回数量上限约束

知识问答最大召回数量上限为 20,单次问答最多 20 个切片进入模型。切片数超过 20 的文档无法一次覆盖,需拆分文档或分批打标。

标签过滤为服务级静态配置

问答服务的标签过滤在配置发布后固定,不随单次请求变化。批量打标多文档有两种方式:
方式做法适用场景
共用临时唯一标签所有文档先添加同一临时标签(如 auto_tag_temp),逐篇打标,完成后用业务标签覆盖文档数少,串行打标
多服务分权为每篇或每组文档建立独立问答服务,各自配置标签过滤大规模并行打标

常见问题

打标结果只覆盖部分内容? 确认排序模型已设为不使用模型、初步检索 TopK 与最大召回数量已调大;文档切片数超过 20 时需拆分或分批。 模型输出了多余文字,不是纯标签数组? 强化提示词中仅输出数组的约束;写回前可只取输出中的首个 [...] 数组再解析。 写回标签报错? 检查标签是否含冒号、空格等不支持的字符,以及单个标签是否超过 32 个字符。