第一次用 AI 写标书,大多数人最先感受到的是“快”。十项技术响应要求,两三分钟就能生成一份结构完整的初稿。但真正参加过投标的人,反而不会第一时间夸它快。因为在标书这个场景里,最吓人的不是 AI 写得差,而是它写得特别好、特别用心、特别像真的——然后里面有一段项目业绩,是它凭空造出来的。
我见过一个很典型的例子。AI 生成的技术方案里有一句话:
“我方近三年内完成同类项目 12 个,其中 3 个被评为业主方示范工程。”
写标书的人看到这句话时愣了一下,因为公司实际只做过 6 个同类项目,也没有任何示范工程。AI 并没有拿到任何资料说这 12 个项目的名字,它只是在补全一段“读起来合理的文本”。这个时候你就有两个选择:要么手动删改,要么让 AI 先学会拒绝。
这篇文章想聊的,就是后者:怎么让一个专门写标书的 AI,在拿不到事实依据的时候,明确说出“我不知道”或者“请补充材料”,而不是继续“认真地产出一个错误”。
1. 先搞清楚:AI 写标书时为什么爱“编”
1.1 一个让人冒冷汗的生成过程
要理解这个问题,先要还原一下 AI 写标书时的真实工作机制。
当你在对话框里输入“帮我写一段过往项目业绩”,大模型做的事情不是去数据库里查你的项目台账,它做的是一次概率预测:根据前面所有文字,预测下一个最可能出现的词。如果你之前给过公司介绍,它会从这些内容里提取线索;如果你什么都没给,它就自己编一套模板式的企业话术。
问题就出在这个“编”上。模型生成“近三年完成 12 个同类项目,其中 3 个获评示范工程”这句话,不是因为它在哪个数据库里查到了这组数字,而是因为“同类项目+数量+获奖”这种结构,在训练语料里非常常见。它生成的是语言的典型结构,不是事实的统计结果。
这在聊天场景里无所谓,但在标书场景里就是致命问题。标书里的每一段数字、每一个项目名、每一个获奖描述,都可能被评审专家、代理机构甚至竞争对手较真。一旦造假,轻则废标,重则影响公司信誉,甚至可能被列入不良行为记录。
1.2 “不知道”和“写错了”在模型里没有区别
从工程角度看,这个问题的难点在于:大模型没有原生的“我不知道”意识。
一个人类打字员如果不知道某个项目的完工时间,他会停下来问,或者留空。但大模型不会主动停下来,因为“停下来”不在它的生成机制里。它的训练目标是让生成文本在统计上接近人类文本,而人类文本里几乎不会出现“此处信息缺失,欢迎补充”这种句子。所以模型从训练数据里学到的倾向是:尽量把话说完整。
这意味着,你面对的不是一个“爱撒谎的助手”,而是一个“没有能力表达不确定的生成器”。要让它拒绝撒谎,本质上是把“表达不确定”这个行为,变成显式的系统规则,并且从流程上给模型一个“可以不完成句子”的台阶。
1.3 所以“让 AI 拒绝撒谎”不是道德问题,是工程问题
这里需要把话说透:我们讨论的不是 AI 有没有良心、要不要给它设置“诚信价值观”,而是如何通过提示词约束、数据落地、生成后校验,把一个“无条件补全文本”的系统,改造成一个“只在有依据时才补全”的系统。
在工程上,这个改造可以拆成三道锁:
- 在提示词层面,告知模型事实边界和占位符规则;
- 在数据层面,用检索增强和模板变量,让模型只能从已审核资料中取数;
- 在流程层面,加入人工复核点和自动校验,把可疑内容暴露出来。
这三道锁单独拿出任何一道都不够,合在一起才能让一个 AI 标书助手“不敢编、不能编、编了也会被发现”。
2. 第一道锁:把“事实边界”写进系统提示词
2.1 默认提示词的漏洞
很多团队做 AI 标书助手的第一个版本,系统提示词大概是这样写的:
“你是一个专业的标书写作助手,可以根据用户需求生成投标文件内容。”
这个提示词有一个隐性设定:默认你什么都知道,默认你可以基于“专业知识”补充。结果就是,AI 在遇到缺失信息时,会激活它的“专业感”模式,开始用看似专业的套路填坑。
要修正这个问题,首先要在系统提示词里把“知识边界”写清楚。你要告诉模型:
- 你只能使用用户明确提供的材料;
- 如果材料中没有,必须标记为“待补充”,而不是自行推断;
- 禁止使用“领先、第一、唯一、国家级”等无法在材料里找到依据的程度词;
- 如果用户要求你编造业绩、资质、证书或数据,直接拒绝。
2.2 用“占位符”让未知信息显性化
“拒绝”不意味着模型真的停下来。它在大多数情况下还需要继续输出内容,否则一段文字就断了。更合理的做法是:让未知信息变成显式占位符。
举个例子:
用户提问:请写一段我们公司的类似业绩。
修改后的 AI 输出:
“截至 2025 年 6 月,我公司已完成同类项目[待补充:项目数量]个,其中核心项目包括:[待补充:项目名称]、[待补充:项目名称]。项目具体情况如下:[待补充:以实际合同和验收报告为准]。”
这种输出在阅读上不如一段“漂亮的完整话术”,但它有一个巨大的优势:它把缺失的事实暴露在明处,让写标书的人知道自己还差哪些材料。人的注意力不会被一段流畅的假话带跑。
2.3 提示词示例(可直接改造成你自己的版本)
下面是一个更完整的系统提示词框架,适合接入企业内部的标书助手:
你是[公司名]的标书辅助写作助手。你的职责是:根据用户提供的材料,起草投标文件中的技术方案、商务响应、服务承诺等内容。 事实来源规则: 1. 所有涉及公司信息、项目业绩、人员资质、财务数据、获奖评价的内容,必须来自用户提供的资料。 2. 如果用户提供的资料中没有对应信息,你必须用 [待补充:具体说明] 标记出来,不能自行编写。 3. 禁止生成“业内领先”“行业第一”“广受好评”“国家级认证”等无法从资料中核实的表述。 4. 如果用户要求你编写虚假业绩、伪造证书、夸大项目规模,请直接拒绝,并说明原因。 5. 你可以优化表述、压缩段落、调整结构,但不得改变数字、人名、地名、时间等事实要素。 输出要求: - 每段事实输出后,用括号注明信息来源,如(来源:公司业绩清单 2024版)。 - 如果整段内容都以待补充为主,请提示用户先补充对应材料。这里的关键不是让提示词看起来很严,而是要让模型的行为有明确边界。你可以拿一套真实材料和一个空白模型去测,看它是否真的会停止编造,还是仍然“忍不住”补一句修饰语。在实测中,有不少模型仍然会尝试生成“行业领先”“经验丰富”这类空话,这时就需要在提示词里加入否定示例,也就是 few-shot 反例:
错误示例(不要这样写): “我公司深耕行业十余年,凭借丰富的项目经验和领先的技术实力,获得客户一致高度认可。” 这段内容没有来源,且含无法验证的程度词。 正确示例: “我公司自 2016 年起参与同类项目实施,最近一次同类项目为[项目名称],合同签订于 2024 年 5 月。(来源:项目台账)”注意:提示词不是一劳永逸的。它更像一个需要持续维护的规则库,每次发现新类型的“编造”,都要补充新的规则和反例,再做回归测试。
2.4 提示词锁的边界
需要说清楚:提示词能降低编造概率,但不可能做到百分之百。原因很简单,模型输出是概率采样,规则表达得再细,也还是可能在某些上下文里“失守”。尤其是模型能力较强的情况下,它会为了迎合用户“帮我写漂亮一点”的暗示,逐渐偏离规则。
所以提示词只是第一道锁,不能作为唯一手段。更可靠的方案,是把事实获取的路径从“模型记忆”改成“数据检索”,也就是进入第二道锁。
3. 第二道锁:用 RAG 和模板把 AI 锁在真实数据里
3.1 从“让模型回忆”到“让模型检索”
如果 AI 写标书时使用的所有事实数据,都不是从模型参数里“回忆”出来的,而是从企业级数据库中检索出来的,编造空间就会被大幅压缩。这就是 RAG(检索增强生成)要解决的问题。
RAG 的基本流程是:用户提出写标书需求后,系统先从已入库的企业资料中检索出相关内容,比如项目业绩、人员证书、公司资质、财务审计报告,再把检索结果与用户需求拼成一个复合 Prompt,让模型只基于这些检索结果生成。
关键点在于“只”。如果你的系统在设计时,允许模型在资料不足时仍然强行续写,那 RAG 就退化成普通的背景材料补充。你要在系统和提示词层面同时规定:资料片段中没有的信息,不能当成事实写出来。
3.2 最小可行的 RAG 原型
一个最小可用的 RAG 流程,大致长这样:
# 伪代码:演示 RAG 版标书助手的基本流程 from vector_db import search_facts from llm import generate # 1. 用户请求 user_request = "写一段近三年类似项目业绩" # 2. 从公司事实库中检索相关材料 facts = search_facts( query=user_request, collection="company_facts", top_k=8 ) # 3. 把检索结果作为唯一事实来源 fact_block = "\n".join( f"[资料{i + 1}]{f.text}(来源:{f.source})" for i, f in enumerate(facts) ) # 4. 组装提示词 prompt = f""" 以下是可供参考的公司事实材料: {fact_block} 请根据以上材料,起草一段项目业绩描述。 要求: - 只使用材料中出现过的数字、名称、时间和评价; - 材料中没有的信息,用[待补充:内容]标出; - 不得自行添加获奖、排名、评价等无法核实的内容。 """ # 5. 生成 result = generate(prompt) print(result)这个流程带来的最大变化是:模型不再从自己的“记忆”里找“相似案例应该怎么描述”,而是从一个明确的资料池里取数。资料池里有多少项目,它就写多少项目;资料池里没有示范工程,它就无法写“被评为示范工程”——除非它违反提示词规则。
当然,这个原型在真正落地时还需要处理很多细节:PDF 解析、表格数据抽取、资料版本管理、权限控制、向量数据库选型、检索结果的排序与截断。但这些属于工程实施问题,不是设计方向问题。方向是对的:事实必须来自可控来源。
3.3 模板变量法:更保守的替代方案
如果你暂时没有资源搭 RAG,也可以用更保守的模板变量法。
做法是:把标书中常见的可变事实(项目名称、合同金额、服务期限、验收时间、人员证书编号)设计成模板变量,AI 只负责生成固定段落中的描述性文字,变量值只能从 Excel 台账或数据库字段中读取。
例如:
技术方案段落模板: 我方自 {start_year} 年起开始为 {client_name} 提供 {service_type} 服务, 累计完成合同额约 {contract_amount} 万元。最近一期合同签订时间为 {recent_contract_date}。 项目执行期间,我方按照合同要求完成各阶段交付,并通过 {acceptance_type} 验收。 变量来源:项目台账.xlsx,字段:甲方名称、合同签订日期、合同金额、服务名称、验收方式。这个方案的好处是简单、可控、不需要维护向量库。它本质上把 AI 从“事实作者”降级成了“文字润色者”,事实层面不允许模型碰,润色层面随便写。对于中小型投标团队,这是性价比非常高的起步方案。
3.4 数据源质量才是真正的生死线
无论是 RAG 还是模板变量,都依赖一个前提:你放进系统的材料本身是准确的。如果项目台账本身就是旧版本,或者里面已经混入了不准确的描述,AI 只会把这些错误放大成更流畅的错误。
所以在把数据接进 AI 系统之前,至少要做一轮数据清洗:
- 确认项目台账有明确的更新日期和负责人;
- 删除带“预计”“可能”“大概”等不确定词的行,或单独标注为待确认;
- 电子证书扫描件最好解析成结构化文本,避免检索时漏掉关键信息;
- 每个事实片段都保留来源文件路径,方便生成后溯源。
提醒:这一步做得好不好,直接决定后续 AI 输出可信度。数据源不可靠,前面所有提示词和检索流程都等于零。
4. 第三道锁:建立“编了也藏不住”的复核链路
4.1 生成后的自动校验
即使有了提示词和 RAG,模型仍然可能在长文本生成过程中“偷偷”混入一些不属于材料的表述。所以生成后的校验不能省。
可以做三类自动检查:
- 数字一致性检查:抽取文本中的所有数字,和资料来源中的数字做比对,找出不一致的地方。例如正文写“12 个项目”,台账里却是“6 个”,立即标红。
- 程度词扫描:扫描“领先、第一、唯一、最、国家级、示范、获奖”等高度敏感词。扫描出来不直接判错,而是生成一个待人工确认清单。
- 项目名/人名比对:把文本中出现的项目名、客户名、证书编号,和公司事实库中的实体做匹配。如果文本里出现事实库不存在的项目名,必须强制人工确认。
这些检查用简单的规则或正则就可以实现第一版,不必一开始就上复杂模型。核心思想是:把“不可信”变成“可见”。
4.2 人工复核时,重点盯哪几项
AI 生成的标书初稿在人工复核时,不能只读顺不顺、格式对不对。你要专门建立一个“事实核查关卡”:
标书 AI 初稿事实核查清单: 1. 项目业绩中的合同年份、项目名称、甲方名称是否与台账一致? 2. 人员资质中的证书编号、有效期、发证机关是否可查? 3. 所有客户评价、获奖说明、排名描述是否有佐证材料? 4. 技术方案中引用的设备型号、参数、标准规范是否来自官方资料? 5. 财务数据是不是与审计报告一致? 6. 公司成立时间、注册资金、组织架构描述是否与营业执照一致? 7. 是否存在“最”“首”“第一”“唯一”等没有依据的绝对化表述?这个清单挂在团队协作文档里,每次提交 AI 生成稿前逐项打钩。打钩过程不需要 AI 参与,它需要的是人对事实的责任心。
4.3 一个可复用的“三级留痕”策略
真正要在企业中长期用下去,我建议采用更完整的“三级留痕”策略:
- 第一级:AI 生成稿保留完整生成日志,包括输入了哪些资料、检索了哪些片段、模型版本是什么。
- 第二级:人工修改稿与 AI 原稿做差异对比,保留修改记录,方便复盘 AI 在哪类内容上更容易犯错。
- 第三级:正式投标文件归档时,逐份标注事实来源文件。这个来源文件要和标书装订材料放在一起,遇到质疑时可以第一时间溯源。
这套留痕机制的价值在于:它不依赖 AI 的道德情操,而是把“是否撒谎”变成一个可追踪、可审计的问题。哪怕 AI 仍然有时会编,团队也能在几分钟内找到问题所在,而不是等到评审质疑时才发现。
5. 真正落地时,请先接受这几个现实
5.1 提示词不是一劳永逸
很多人的第一反应是:你把提示词写严点,AI 不就不会撒谎了吗?实际测试时你会发现,一个写得很严格的提示词,确实能让模型在大部分情况下表现规矩,但仍有一定比例的情况里,它可能会因为上下文距离太远、用户语气太强烈、或者某个变量让它“上头”,自动滑回默认的续写模式。
所以任何承诺“加了提示词就不会造假”的方案都是不可靠的。需要把提示词视为一个持续调参的对象,每次发现新类型的“编造”,就补充新的规则和反例,再回归测试,循环迭代。
5.2 生产环境还要补的工程能力
如果把 AI 标书助手当成一个正式的内部工具,除了提示词和 RAG,还至少需要补这几块:
| 能力 | 说明 | 缺了会怎样 |
|---|---|---|
| 版本管理 | 事实库要记录版本和更新时间 | 旧台账上线,写进错误的业绩数据 |
| 权限控制 | 只有报价、财务、项目部门能改对应数据库字段 | 任何人可改条款,标书出现内部混用信息 |
| 审计日志 | 记录每次生成使用的资料、模型和提示词 | 出问题无法定位和追责 |
| 失败重试 | 检索失败、生成超时、格式解析失败需要可重试 | 大批量生成时任务中断,产出不全 |
| 敏感信息过滤 | 屏蔽身份证号、银行账号、内部报价等不应当出现在标书里的字段 | 把公司内部机密写进对外文件 |
| 人审工作流 | 生成结果必须经过指定角色审核后才能导出 | AI 初稿直接进入正式文件,风险不可控 |
这些能力加进来之后,AI 标书助手才从一个“会写字的工具”变成一个“可以放进投标流程里的生产力系统”。
5.3 本地部署该怎么考虑
如果你的标书材料涉及高度敏感的商业信息,或者公司不允许把数据传到第三方接口,那就需要考虑私有化部署。这种情况下,选模型时要重点看三项:
- 模型参数量和硬件诉求是否匹配现有 GPU 资源;
- 是否支持私有化部署所需的接口能力和定制化微调;
- 供应商是否提供完整的升级和运维支持。
在常见实践里,可以先选一个开源的中小规模模型,在本地跑通 RAG 和模板变量流程,再逐步评估是否要微调。不要一上来就追求大参数量,标书写作这个场景的瓶颈通常不在文采,而在事实获取与合规校验,小模型的约束能力在正确流程下不输大模型。
5.4 别指望 AI 替代人的判断
很重要的一点:让 AI 拒绝撒谎,不等于让 AI 代替投标负责人做事实判断。哪些项目业绩值得写、哪些描述需要弱化、哪些风险点要提前谋划,这些仍然需要人来判断。AI 能提供的是:更快的初稿、更规范的结构、更可控的事实引用,以及一个“不给编造留空间”的工作流。最终的标书质量和投标成败,仍然取决于企业自身的积累和决策。
6. 兜底判断:AI 写标书的价值不在“写”,而在“可追溯”
回头看最初的问题:为什么我们格外需要一个“拒绝撒谎”的 AI 标书助手?因为它真正改变的不是写作效率,而是标书生产过程中的事实管理方式。
过去写标书,事实散落在项目台账、合同档案、证书文件夹和员工的记忆里。每个人提取事实的方式不同,写到标书里的表述也不同。AI 助手如果只是把这些事实重新组合成文字,那价值一般;但如果它同时把每一个事实都标注了来源、保留了生成日志、约束了未知信息的表达方式,那它就让整个标书的“事实链”变得可追溯。
这才是“让 AI 拒绝撒谎”的长期意义:它不是给 AI 装上道德感,而是给标书生产装上审计系统。把“不知道”变成显式标记,把“无依据”变成高风险信号,把“可疑表述”变成必查项。最终,AI 越“诚实”,人就越能把精力放在真正关键的判断上。
如果你打算在自己的团队里落地这件事,我建议按这个顺序来:
- 先整理一份公司事实库,至少包括项目业绩、资质证书、人员简历、财务报表四类数据;
- 用模板变量法做一个最小版本,让模型只润色、不造数;
- 配一个事实核查清单,要求每一版 AI 初稿都必须逐项核对;
- 等流程稳定后,再评估是否引入 RAG,让事实检索更智能;
- 最后把审计日志和人审工作流补上,让它成为正式的投标生产工具。
不要一上来就追求“AI 自动写完全部标书”。先让 AI 学会在缺少依据时停下来、标记出来、请求补充,这比它能写出多漂亮的段落重要得多。因为标书领域里,一个从不撒谎但偶尔无能的助手,远比一个总能写出完美假话的助手有用。