下载地址
https://www.zhengdianxue.com/wp-content/uploads/skills/org-fgk3whmi--zbwj.zip将提示词发送给你的 AI 安装该 skills
请根据 https://skillhub.cn/install/skillhub.md,安装 @org-fgk3whmi/zbwj。招标文件修改/批量修改招标文件。当用户上传要修的招标文档(docx/pdf)后,指定信息修改替换和填写,批量修改,并标注成蓝色,禁止重写和改变格式、对风险条款仅提醒。调用触发词:招标文件修改、修改招标文件、改一下招标文件、改招标文件、招标条款调整、按模板改修改、把代理机构或代理公司换成…、按我们公司模板调。当用户上传招标文档(pdf),输出 docx 格式,其他输出格式保持不变。
阅读全文 (展开查看完整说明)
概述
一、什么时候用
- 用户传了招标文件(.docx / .pdf)并说"招标文件修改""修改招标文件""改一下招标文件""改招标文件""招标条款调整"、"按模板改修改""把代理机构或代理公司换成…""按我们公司模板调"
二、接活步骤(严格按顺序)
- 先 Read 用户上传的招标文件路径,确认是 docx 还是 pdf
- 若是老版二进制
.doc:用 PowerShell + Word COM 把它另存为.docx,转完再按 docx 流程读/改。转换稿是中间产物,改完可删除。 - 编辑/标蓝用 python-docx。替换文字要保留 run 格式并把改动段
w:color设0000FF。 - 目标串常跨多个 run,必须用「段落级定位 + run 手术」的鲁棒替换,按 old→new 在全文档段落+所有表格单元格段落上全局执行,保证前后一致。
- 鲁棒替换与标蓝模板:
- 若是老版二进制
“`python import copy from docx.oxml.ns import qn from docx.oxml import OxmlElement
def _make_run(rPr_clone, text): r = OxmlElement('w:r') if rPr_clone is not None: r.append(copy.deepcopy(rPr_clone)) t = OxmlElement('w:t'); t.set(qn('xml:space'), 'preserve'); t.text = text r.append(t); return r
def _set_blue(r_el): rPr = r_el.find(qn('w:rPr')) if rPr is None: rPr = OxmlElement('w:rPr'); r_el.insert(0, rPr) for c in rPr.findall(qn('w:color')): rPr.remove(c) color = OxmlElement('w:color'); color.set(qn('w:val'), '0000FF'); rPr.append(color)
def replace_in_paragraph(p, old, new): runs = p.runs if not runs: return 0 changes = 0 while True: full = "".join(r.text for r in runs) idx = full.find(old) if idx < 0: break e = idx + len(old) acc = 0; si = ei = None; so = eo = 0 for i, r in enumerate(runs): L = len(r.text) if si is None and acc + L > idx: si, so = i, idx – acc if acc + L >= e: ei, eo = i, e – acc; break acc += L if si is None or ei is None: break anchor = runs[si] rPr = anchor._element.find(qn('w:rPr')) rPr_clone = copy.deepcopy(rPr) if rPr is not None else None if si == ei: before, after = runs[si].text[:so], runs[si].text[eo:] runs[si].text = before nr = _make_run(rPr_clone, new); _set_blue(nr); anchor._element.addnext(nr) if after: ar = _make_run(rPr_clone, after); nr.addnext(ar) else: runs[si].text = runs[si].text[:so] runs[ei].text = runs[ei].text[eo:] for i in range(si + 1, ei): runs[i]._element.getparent().remove(runs[i].._element) nr = _make_run(rPr_clone, new); _set_blue(nr); anchor._element.addnext(nr) changes += 1; runs = p.runs if changes > 100: break return changes “`
- 用法:先按 (old,new) 建替换表(先替换更具体的组合串),再遍历
doc.paragraphs与每个table.cell.paragraphs调用replace_in_paragraph。 - 改完跑核查:旧串残留应为 0;含
w:color val=0000FF的 run 数 ≥ 实际改动处。
- 向用户确认三件事(一次性问完):项目名称、招标编号、代理机构信息(名称/地址/电话/邮箱)、招标人或采购人信息、需填写的概算/最高限价/招标范围。
- 首次调用时,向用户问是否把代理机构信息设为默认信息,后续调用不再询问。
- 招标文件公告及封面落款时间改成当天时间。
- 不改文件底层结构或格式,只做替换和按指示填写,不擅自删改。
- 改完后输出格式中修改的内容标注成蓝色。
- 改完后用表格列出「原句 → 新句 → 标注成蓝色」。
- 当用户上传招标文档(pdf),输出按 docx 格式,其他输出格式保持不变。
- 若发现排他性条款/废标风险/参数指品牌/违反法律法规/上下文不一致/分值计算错误,单独开一段「⚠️风险提醒」,不擅自删改,只提示。
三、格式铁律
- 标题层级不动,字体不动,别把原字体整段换掉
- 章节编号(如 3.2.1)不动,严禁重排
- 金额、日期、工期、资质等级这些数字型字段,用户没明说改,绝对不改
- 不编造招标方没写过的资质名称、标准号、法规条文
- 不改文件底层结构或格式,只做替换和按指示填写,不擅自删改
- 不改输出格式
四、禁止事项
- 禁止"顺手把整份标书重写"
- 禁止把采购人名称、项目名称、编号私自替换
- 禁止在没拿到模板时说"已按贵司模板改完"