""" 按招标文件类型(工程 / 服务 / 货物)区分的章节正文生成提示词模板。 与 modules.generator.BID_WRITING_SYSTEM 配合使用;自称以系统铁律为准,统一用「我方」。 """ import re from typing import Optional VALID_TENDER_KINDS = frozenset({'engineering', 'service', 'goods'}) DEFAULT_WORD_COUNT_SPEC = ( '- 一般小节:不少于 2000 字;核心技术/重点评分章节:不少于 4000 字\n' '- 字数须由实质方案内容支撑,禁止用重复项目背景或复述招标要求凑字数\n' '- 有实质细节的展开写,原则性描述可简洁处理;通过流程、节点、比选、管控展开满足篇幅' ) TENDER_KIND_CLASSIFY = """\ 你是一名招标文件分类专家。根据以下招标文件摘录,判断本项目技术标书应采用的「写作模板类型」。 只输出以下三个英文单词之一,不要输出任何其他文字、标点、换行或解释: engineering service goods 含义: - engineering:工程施工类(建筑、市政、公路、水利、装修、园林、拆除等,以现场施工组织、工艺、机械、进度网络为主) - service:服务类(咨询、设计、监理、运维、物业、保洁、餐饮配送、培训、安保、技术服务等,以人力/智力交付、流程、SLA 为主) - goods:货物类(设备、材料、车辆、家具、软硬件供货等,以产品规格、供货、质保、验收为主;含附带安装指导仍以供货为主可归此类) 判定规则: 若主要为施工安装且涉及土建/结构/施工机械与工期,归为 engineering。 若主要为服务过程、人员驻场、响应时效与服务质量体系,归为 service。 若主要为产品技术规格、供货批次、出厂检验与到货验收,归为 goods。 若施工与供货并重,以现场施工量与工期为主则 engineering,以设备物资交付为主则 goods。 【招标文件摘录】 {excerpt} """ def get_tender_kind_classify_prompt(excerpt: str) -> str: return TENDER_KIND_CLASSIFY.replace('{excerpt}', excerpt or '') def parse_tender_kind_response(response: str) -> str: """从模型返回中解析出 engineering / service / goods,失败则 engineering。""" if not response: return 'engineering' tokens = re.sub(r'[^a-zA-Z]+', ' ', response).lower().split() for w in tokens: if w in VALID_TENDER_KINDS: return w low = response.lower() for k in ('engineering', 'service', 'goods'): if k in low: return k return 'engineering' def normalize_tender_kind(kind: Optional[str]) -> str: k = (kind or '').strip().lower() return k if k in VALID_TENDER_KINDS else 'engineering' # ── 工程类 ─────────────────────────────────────────────────────────────── SECTION_DETAILS_ENGINEERING = """\ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ - 角色:资深工程施工组织设计专家 - 任务:撰写通用型工程施工组织设计技术章节 【核心定位】 - 通用施工模板,适用于建筑、市政、公路、水利等工程施工类项目 - 聚焦:施工方案、工艺方法、机械设备、进度计划、质量安全控制 - 正文为可直接提交的成稿语句:凡招标文件概要或工程量清单摘要已给出的工程量、地质、工期、指标等,可如实融入叙述;未给出的具体数值、型号、台数、吨位等,一律用通顺的中文概括表达(如"相应规格""与进度及作业面相匹配的台套""符合设计及规范要求的能级"),不得使用方括号或待填项留白 【内容特征】 - 施工工艺描述到"方法层面";可引用规范条文名称或编号(如"应符合JTG/T 3610要求");无依据处不写臆造数字 - 设备与资源配置:写清设备类别与用途,用"按工况与设计要求选配相应规格与数量""满足流水作业与峰值强度需要"等概括句式,禁止出现"[型号][数量]台"类占位 - 进度计划使用相对阶段("施工准备期"、"主体施工期")而非具体日期 - 技术措施可提供多方案比选,用"视地质与水文条件选用适宜工艺"等自然语言衔接现场条件,禁止方括号待填 【未定参数的写法(替代一切占位符)】 - 工程规模与结构:用"本工程相应单体与线路区段""按设计结构形式与跨度条件"等概括,不罗列未提供的具体数字 - 技术参数:已见于招标/清单的写具体值;未见者写"按设计强度等级与验收标准执行""压实度与分层厚度满足规范及设计要求" - 机械与劳动力:写"配置满足峰值强度与关键线路需要的机械组合""劳动力按施工阶段动态投入并保持关键岗位持证齐备" - 时间节点:写"在招标工期内划分准备、主体、收尾阶段并设置可控里程碑",无具体日历则不用臆造周数 【行文规范】 - 自称统一用「我方」,禁用「我们」「本公司」 - 招标人称「招标方」或「建设单位」 - 禁止前导句和AI套话(综上所述、高度重视等) - 列举用(1)(2)(3),禁用"首先其次" - 纯文本输出,段落间空行分隔 【防过拟合约束】 - 不绑定具体地名与局地气候细节,改为"结合项目环境与季节特点采取针对性措施" - 不绑定特定施工方法(如不说"必须用旋挖钻",改为"根据地质选用适宜桩基工艺") - 使用弹性表述:"按设计要求"、"视现场情况"、"符合规范规定" 【字数要求】 {word_count_spec} - 通过展开多方案比选、详细工艺流程、管控节点来满足篇幅 【输入】 - 招标文件概要:{summary} - 标书目录:{outline} - 子小节标题:{subsection_title} 直接输出正文,不含标题和解释。""" # ── 服务类 ─────────────────────────────────────────────────────────────── SECTION_DETAILS_SERVICE = """\ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ - 角色:资深服务方案架构师 - 任务:撰写通用型服务项目实施方案 【核心定位】 - 通用服务模板,适用于咨询服务、运维服务、技术服务、物业管理、培训服务等 - 聚焦:服务方案、实施流程、人员配置、质量保障、响应机制、服务标准 - 严禁出现工程施工技术参数(如混凝土标号、压实度等) - 正文为成稿:招标/采购文件已载明的服务范围、人数、响应时限、到场要求等可如实写入;未载明的不得用方括号待填,改用"按采购文件与服务等级要求配置""满足驻场与高峰时段人力需要""建立分级响应与升级机制"等概括表述写清含义 【内容特征】 - 服务流程:按"接收需求→分析评估→方案制定→实施执行→验收交付→持续改进"框架展开 - 人员配置:强调专业资质与岗位角色齐全,用"配备满足本项目服务范围与关键岗位持证要求的人员力量""项目经理及骨干具备相应执业或认证资格"等完整句子,禁止"[资质][岗位][数量]名"式占位 - 质量保障:使用服务体系标准(如ISO 9001、ITIL、ITSS)而非工程规范 - 响应机制:写清"受理—分派—处理—回访/关闭"闭环;时限已见于招标文件的写具体值,未见者写"按招标文件及行业通行服务等级划分响应与处理时限,并设置升级与应急通道" - 服务标准:可引用SLA框架,用自然语言描述指标层级与考核方式,禁止用方括号代替指标 【未定参数的写法】 - 服务范围与对象:用"采购文件约定的服务内容与交付边界""服务对象规模与业务场景按项目实际确定"等概括 - 人员与资源:用"与峰值并发与服务等级相匹配的人力与工具配置" - 场地与备件:用"按需设置服务场所与备件储备,保障连续性与可用性目标" 【行文规范】 - 自称统一用「我方」,禁用「我们」「本公司」 - 招标人称「招标方」「采购人」或「甲方」 - 禁止前导句和AI套话 - 列举用(1)(2)(3),禁用"首先其次" - 纯文本输出,段落间空行分隔 - 强调"服务承诺"与"保障措施"的可执行性,避免空泛 【防过拟合约束】 - 不预设具体行业细节(如不说"针对医院HIS系统",改为"针对采购人业务系统与数据环境") - 服务方案提供"标准模块+可选配置"结构("基础服务包包含...,增值服务可选...") - 使用"结合采购人行业特点与监管要求""参照同类项目成熟实践"等弹性表述 【内容禁区】 - 禁止出现:施工工艺、材料设备技术参数、工程量计算、施工机械配置 - 禁止出现:建筑结构、土木工程技术措施 【字数要求】 {word_count_spec} - 通过详细描述服务流程节点、人员职责分工、质量检查点、应急预案来满足篇幅 【输入】 - 招标文件概要:{summary} - 标书目录:{outline} - 子小节标题:{subsection_title} 直接输出正文,不含标题和解释。""" # ── 货物类 ─────────────────────────────────────────────────────────────── SECTION_DETAILS_GOODS = """\ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ - 角色:资深供货方案技术专家 - 任务:撰写通用型货物采购项目技术响应方案 【核心定位】 - 通用供货模板,适用于设备采购、材料供应、系统集成、软件采购等 - 聚焦:产品技术规格、供货方案、质量保证、安装调试(如有)、售后服务 - 正文为成稿:采购文件、技术规范书或清单中已列明的型号、数量、指标、交货期、质保期等可如实响应;未列明的不得臆造优于招标的数字,亦不得用方括号待填;用"不低于采购文件对应条款""满足招标文件列明的性能与符合性要求""供货批次与到货节奏与现场安装计划相衔接"等概括语言写全句 【内容特征】 - 技术规格:按"指标项—符合性说明"展开;已给出阈值的照写;未给出的写"满足招标文件技术指标与检测方法要求""与同类应用场景主流水平相当且不降低实质性响应" - 产品描述:强调功能特性、可靠性与标准符合性,避免绑定特定品牌(除非招标文件指定) - 供货方案:分阶段描述(签约后组织生产或备货、出厂检验、运输与到货验收);具体天数仅在有依据时写出,否则用"按合同与采购文件约定的供货周期执行" - 质量保障:强调"出厂检验+第三方检测(如要求)+质保期服务"分层体系 - 售后服务:写清质保责任边界、备件与技术支持渠道;时长以招标为准,无则写"按采购文件及国家相关规定执行" 【未定参数的写法】 - 性能与容量:用"满足采购文件规定的处理能力/精度/兼容性等关键指标" - 数量与批次:用"与合同清单及现场需求匹配的供货批次与配套件配置" - 服务时效:用"建立可追踪的报修、响应与闭环机制,时限不低于采购文件要求" 【行文规范】 - 自称统一用「我方」,禁用「我们」「本公司」 - 招标人称「招标方」「采购人」或「甲方」 - 禁止前导句和AI套话 - 列举用(1)(2)(3),禁用"首先其次" - 纯文本输出,段落间空行分隔 - 技术描述客观准确,避免夸大(不用"最先进"、"行业第一",改用"符合国家标准或采购文件引用标准的要求""满足招标文件实质性条款") 【防过拟合约束】 - 不绑定特定品牌(如不说"采用华为服务器",改为"提供满足采购文件性能与安全要求的服务器设备") - 无具体数值依据时,不写虚构的"≥某数值",改为对符合性与可检测性的承诺 - 供货方案考虑多种交付场景(国内供货、进口设备、定制生产等)时,用自然语言比较路径优劣与适用条件 【内容禁区】 - 禁止出现:施工组织、安装工艺(除非含安装服务)、土建工程、人员现场施工配置 - 禁止出现:工程管理流程(如施工进度网络图) 【字数要求】 {word_count_spec} - 通过详细展开技术参数说明、供货流程节点、质量检验程序、售后服务细则来满足篇幅 【输入】 - 招标文件概要:{summary} - 标书目录:{outline} - 子小节标题:{subsection_title} 直接输出正文,不含标题和解释。""" def build_section_detail_prompt( kind: str, summary: str, outline: str, title: str, word_count_spec: str = '', boq_summary: str = '', ) -> str: k = normalize_tender_kind(kind) if k == 'service': base = SECTION_DETAILS_SERVICE elif k == 'goods': base = SECTION_DETAILS_GOODS else: base = SECTION_DETAILS_ENGINEERING wc = word_count_spec.strip() or DEFAULT_WORD_COUNT_SPEC text = base.format( word_count_spec=wc, summary=summary or '(未提供)', outline=outline or '(未提供)', subsection_title=title or '', ) text += ( '\n\n【须同步遵守的全局写作禁忌】' '禁止复述招标要求后再作答;禁止各章重复工程量数字与项目背景;' '禁止无依据将参数写成优于招标文件;字数不得仅靠套话堆砌;' '禁止使用方括号、「待填」「TBD」等表示未完稿字段(如[型号][数量][数值]);' '未定信息须写成通顺的概括性中文整句。' '若本任务提示词末尾另有「图示/表格」专用输出规范,其中的结构化标记按该规范执行,' '不视为待填占位。' ) if boq_summary.strip(): text += ( '\n\n- 工程量清单关键信息(写作时按需引用清单中已有数量与单位,勿无故复读;' '清单未列明的分项用概括性施工组织语言描述,禁止使用方括号待填项):\n' + boq_summary.strip() ) return text # 对话模式:按类型追加的系统说明片段(与 app.py 中基础说明拼接) CHAT_KIND_INSTRUCTION = { 'engineering': ( '\n【本模板类型:工程施工】' '侧重施工组织、工艺与质量安全;未在招标文件或清单中出现的具体型号、台数、吨位等' '用概括性中文表述写清,禁止使用方括号待填;勿虚构优于招标的规格。' ), 'service': ( '\n【本模板类型:服务】' '侧重服务流程、人员与SLA;人数、时限等以招标/采购文件为准,无则概括表述,禁止方括号待填;' '禁止大段写混凝土标号、压实度、施工机械等工程参数。' ), 'goods': ( '\n【本模板类型:货物供货】' '侧重规格、供货、检验与质保;指标与交期以采购文件为准,无则概括表述,禁止方括号待填;' '禁止写施工组织与土建;勿绑定未指定的品牌。' ), }