
作为日常需要对接需求文档、技术方案、项目周报、对外交付说明书的研发从业者,相信很多人都深陷文档反复修改、多轮线上线下来回校对的低效循环里。过去很长一段时间,我的文档审阅流程基本依靠人工完成:写完初稿之后自己通读两三遍排查错别字、语句不通顺问题,再转发给同事交叉审核,等待对方空闲时给出修改批注,自己再逐条复制修改意见调整原文,偶尔还会出现批注遗漏、修改版本混乱、前后格式不统一的情况。
尤其是团队并行开发阶段,一份接口设计文档、测试方案需要经过撰写、内审、产品评审、对外交付四道审核环节,每一轮审核产生的零散修改意见没有统一归档渠道,经常出现改完这一轮,上一轮的格式错误、逻辑漏洞又被忽略,一份一两万字的技术文档,光校对、格式统一、错误修正就要耗费三四个小时。
最让人无奈的是人工审阅存在极强的主观性,语法错误、专业术语使用不规范、段落层级混乱、数据描述前后矛盾这类隐性问题,依靠人工很难一次性全部排查出来,往往要等到评审会现场才被指出,不仅拉长项目交付周期,还会因为文档疏漏导致开发理解出现偏差,衍生出不必要的线上 bug。
本次工作流落地的核心使用场景为企业后端研发团队技术文档全生命周期审阅,覆盖四类高频文档类型:接口设计说明书、数据库设计文档、项目上线变更方案、周报 & 阶段性技术总结文档。 团队现存的文档管理规则有明确约束:第一,必须遵循公司统一的 Markdown 文档层级规范,一级标题、二级标题使用固定格式,代码片段需要指定高亮语言,表格表头必须加粗;第二,技术术语必须使用团队统一约定的命名规则,禁止使用网络口语化表述、缩写不规范词汇;第三,文档内参数描述、状态码定义、数据库字段说明不能出现前后逻辑矛盾、数值冲突;第四,所有修改记录需要留存归档,方便后续溯源复盘,每一处错误必须附带修改原因、规范依据、优化后的参考写法。
在没有搭建自动化工作流之前,团队文档审阅存在四大核心痛点:
基于上述业务痛点,本次 WorkBuddy 文档审阅 + 纠错闭环工作流设定五大核心目标:
先梳理整套闭环工作流的整体执行链路,从用户上传文档开始,到最终归档生成统计报表,一共分为六个核心执行节点:
下面通过流程图直观展示整体架构:

整套工作流的核心能力来源于自定义文档审阅智能体,想要保证校验结果稳定、符合企业内部规范,不能直接使用通用对话模式,需要固定角色定位、约束输出格式、绑定专属知识库,同时设置强格式输出规则,避免 AI 自由发挥导致纠错报告无法被脚本解析。
你是企业内部专职技术文档审阅专员,仅依托绑定的知识库规则对待校验文档做合规审查,禁止自由创作、全文润色、主观化评价。
校验一共包含四个维度:
1.格式层级校验:检查标题层级混乱、Markdown语法错误、代码块未标注语言、表格格式不规范问题;
2.文字语法校验:排查错别字、标点符号错误、语句不通顺、口语化网络用语;
3.专业术语校验:比对知识库术语白名单,检查缩写不规范、自定义别名不统一、禁用词汇使用情况;
4.业务逻辑校验:核对参数范围、状态码、字段说明是否存在前后描述冲突、数值矛盾。
输出严格遵循以下要求:
1.最终结果只允许出现一张Markdown表格,无任何前置说明、结尾总结、问候语句;
2.表格固定表头:错误片段位置、错误原文、错误分类、修改建议、规范依据;
3.每一条错误必须精准标注所在章节大致位置,规范依据必须写明知识库对应的条款编号;
4.未发现任何错误时,表格仅保留表头,表格内容为空,禁止输出“文档合规无错误”这类文字描述。为了保证每次提交文档片段校验时输入格式统一,避免人为输入偏差导致校验规则失效,封装固定可复用的任务 Prompt 模板:
本次待校验文档片段内容:
{{document_content}}
本次需要严格遵循的约束规则来源:绑定的三份企业内部知识库文档,不允许脱离知识库自定义规则进行审核。
请按照系统设定的四个校验维度完成全量检查,输出固定格式的Markdown纠错表格。很多人在搭建自动化工作流时,容易忽略用户操作、WorkBuddy 云端任务、本地脚本执行三方的时序依赖关系,经常出现云端校验任务还未执行完成,本地脚本就开始读取空结果文件,导致流程报错。下面通过时序图清晰梳理三方交互的先后执行顺序,规避异步任务带来的时序 bug。
整套流程属于本地脚本驱动云端智能体异步任务的模式,核心关键点在于脚本必须通过轮询接口持续监听 WorkBuddy 任务状态,只有任务状态为成功结束之后,才能拉取纠错结果进行后续解析、文档修改操作,不能采用同步一次性调用的方式。
本次选取一份后端用户登录接口设计文档作为实测案例,文档类型属于团队高频审核的接口方案类文档,原始文档存在多处典型违规问题:Markdown 二级标题格式书写错误、多处错别字、自定义接口状态码描述前后矛盾、使用团队禁用的口语化技术缩写、代码块没有指定编程语言,非常适合用来验证整套审阅纠错工作流的落地效果。
原始文档中典型错误举例:
第一步:将原始接口设计 Markdown 文档上传至本地工作流目录,运行启动脚本,脚本自动执行文档预处理,将一万两千字的文档按照一级标题拆分为 7 个片段,规避 WorkBuddy 单次文本输入长度超限问题; 第二步:脚本自动读取本地存储的三份规范知识库文件,将规则片段随请求参数一并传入云端,确保每一段文档校验都严格绑定企业约束条件; 第三步:脚本通过 WorkBuddy 开放 API 依次提交 7 个文档片段异步校验任务,智能体并行执行格式、语法、术语、逻辑四类校验,全程无需人工介入等待; 第四步:所有分段任务执行完毕后,脚本汇总 7 份分段纠错表格,合并去重生成一份完整的全文档 Excel 纠错报告,本次一共识别出 26 处违规错误,每一条错误都附带知识库规范条款编号; 第五步:脚本解析 Excel 表格内的错误位置、原文、替换内容,在原始文档中精准匹配文本片段完成批量替换,自动修正所有格式、文字、术语、逻辑错误; 第六步:脚本将原始文档、纠错报告、修正后终版接口文档、26 条错误分类统计报表统一上传至团队飞书知识库归档,同时通过企微机器人推送工作流执行结果通知,附带错误 TOP3 类型统计。
人工审阅模式:完整校验 + 逐条修改 + 版本归档耗时 135 分钟,遗漏 3 处隐性逻辑冲突错误,最终一共修正 23 处显性错误; WorkBuddy 自动化闭环工作流:从启动脚本到全流程归档完成耗时 12 分钟,识别 26 处全部显性 + 隐性错误,无遗漏、无版本混乱,同时自动生成错误统计报表用于团队规范优化。
除了单份文档效率提升之外,这套工作流最大的价值在于团队复用,新人入职后只需要直接导入这套智能体配置、Prompt 模板、执行脚本,不需要花费大量时间熟悉零散的文档规范,就能输出符合企业标准的技术文档,从源头降低文档审核的人力成本。
下面基于 WorkBuddy 开放 API 封装核心执行脚本,主要实现三大能力:文档分段预处理、异步任务轮询获取纠错结果、基于结构化 Excel 报告批量修正 Markdown 文档,代码做了注释拆解,适配 Windows、Mac、Linux 多系统,团队成员可以直接修改配置参数复用。
# 所需第三方依赖库安装命令
# pip install requests pandas openpyxl markdown python-dotenv# WorkBuddy开放平台密钥配置
WB_ACCESS_KEY=你的平台访问密钥
WB_SECRET_KEY=你的平台密钥
WB_AGENT_ID=自定义文档审阅智能体ID
# 文件存储路径配置
ORIGIN_DOC_PATH=./docs/origin/login_api.md
CORRECT_REPORT_PATH=./report/doc_check_result.xlsx
FINAL_DOC_PATH=./docs/final/login_api_final.md
# 单次提交最大文本字符限制
MAX_CONTENT_LENGTH=3000import os
import time
import pandas as pd
import requests
from dotenv import load_dotenv
from markdown import markdown
# 加载环境配置
load_dotenv()
class DocAuditWorkFlow:
def __init__(self):
self.access_key = os.getenv("WB_ACCESS_KEY")
self.secret_key = os.getenv("WB_SECRET_KEY")
self.agent_id = os.getenv("WB_AGENT_ID")
self.origin_path = os.getenv("ORIGIN_DOC_PATH")
self.report_path = os.getenv("CORRECT_REPORT_PATH")
self.final_path = os.getenv("FINAL_DOC_PATH")
self.max_len = int(os.getenv("MAX_CONTENT_LENGTH"))
self.api_host = "https://open.workbuddy.qq.com/v1"
def split_markdown_content(self):
"""文档预处理:将长文档按照标题分段,避免文本超限"""
with open(self.origin_path, "r", encoding="utf-8") as f:
content = f.read()
sections = content.split("# ")
content_list = []
temp_text = ""
for section in sections:
if not section.strip():
continue
if len(temp_text + section) > self.max_len:
content_list.append(temp_text)
temp_text = "# " + section
else:
temp_text = temp_text + "# " + section
if temp_text:
content_list.append(temp_text)
return content_list, content
def create_audit_task(self, doc_segment):
"""调用WorkBuddy API创建异步文档校验任务"""
url = f"{self.api_host}/agent/async_task/create"
prompt_template = """
你是企业内部专职技术文档审阅专员,仅依托绑定的三份知识库规则做合规审查,禁止主观润色全文。
待校验文档片段:
{doc_content}
严格按照系统预设四个校验维度检查,仅输出固定五列表格格式的校验结果,无多余文字。
"""
params = {
"agent_id": self.agent_id,
"access_key": self.access_key,
"secret_key": self.secret_key,
"user_prompt": prompt_template.format(doc_content=doc_segment)
}
resp = requests.post(url, json=params)
return resp.json().get("data", {}).get("task_id")
def get_task_result(self, task_id, wait_times=60, interval=2):
"""轮询监听任务执行状态,直到任务完成返回校验结果"""
url = f"{self.api_host}/agent/async_task/get"
for _ in range(wait_times):
params = {
"access_key": self.access_key,
"secret_key": self.secret_key,
"task_id": task_id
}
resp = requests.get(url, params=params)
res_data = resp.json().get("data", {})
status = res_data.get("task_status")
if status == "SUCCESS":
return res_data.get("task_result")
elif status in ["FAIL", "CANCEL"]:
return None
time.sleep(interval)
return None
def merge_check_result(self, result_list):
"""合并多段文档校验结果,转换为结构化Excel纠错报告"""
all_rows = []
for md_table in result_list:
try:
df = pd.read_html(markdown(md_table))[0]
all_rows.append(df)
except Exception:
continue
if all_rows:
total_df = pd.concat(all_rows, ignore_index=True)
total_df.to_excel(self.report_path, index=False)
return total_df
return pd.DataFrame()
def batch_fix_document(self, origin_content, audit_df):
"""读取纠错报告,批量替换原始文档错误内容"""
fixed_content = origin_content
for idx, row in audit_df.iterrows():
error_text = str(row["错误原文"])
fix_text = str(row["修改建议"])
if pd.notna(error_text) and pd.notna(fix_text):
fixed_content = fixed_content.replace(error_text, fix_text, 1)
with open(self.final_path, "w", encoding="utf-8") as f:
f.write(fixed_content)
return fixed_content
def run_workflow(self):
"""启动完整文档审阅纠错闭环工作流"""
print("=====开始执行文档预处理分段=====")
seg_list, origin_full = self.split_markdown_content()
task_result_arr = []
print(f"文档拆分完成,一共{len(seg_list)}个待校验片段")
for index, seg in enumerate(seg_list):
print(f"正在提交第{index+1}段文档校验任务")
tid = self.create_audit_task(seg)
if not tid:
print(f"第{index+1}段任务创建失败,跳过该片段")
continue
res = self.get_task_result(tid)
if res:
task_result_arr.append(res)
print(f"第{index+1}段文档校验执行完成")
print("=====开始合并校验结果,生成纠错报告=====")
audit_data = self.merge_check_result(task_result_arr)
error_total = len(audit_data)
print(f"本次文档一共检测到{error_total}处合规错误")
if error_total > 0:
print("=====开始批量自动修正原始文档=====")
self.batch_fix_document(origin_full, audit_data)
print(f"文档修正完成,终版文档存储路径:{self.final_path}")
else:
with open(self.final_path, "w", encoding="utf-8") as f:
f.write(origin_full)
print("文档无合规错误,直接归档原始文档")
if __name__ == "__main__":
workflow = DocAuditWorkFlow()
workflow.run_workflow()第一类坑:知识库检索精度不足,AI 脱离规范自由给出修改建议。解决方案:在智能体配置中开启精准检索模式,同时在系统 Prompt 中强制要求每一条纠错内容必须绑定知识库条款编号,缺失依据的校验结果直接判定无效。 第二类坑:超长文档分段后,跨片段的逻辑冲突无法识别。解决方案:在分段之外增加一次全文摘要校验任务,提取文档参数、状态码、字段定义类核心信息做全局一致性比对,弥补分段校验的全局逻辑盲区。 第三类坑:相同文本多处重复出现,批量替换出现误修改。解决方案:脚本增加上下文匹配规则,不仅匹配错误原文,同时截取前后 10 个字符作为唯一匹配条件,只修改错误位置的片段。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。