279 lines
15 KiB
Python
279 lines
15 KiB
Python
"""
|
||
按招标文件类型(工程 / 服务 / 货物)区分的章节正文生成提示词模板。
|
||
与 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【本模板类型:货物供货】'
|
||
'侧重规格、供货、检验与质保;指标与交期以采购文件为准,无则概括表述,禁止方括号待填;'
|
||
'禁止写施工组织与土建;勿绑定未指定的品牌。'
|
||
),
|
||
}
|