文章摘要
AI生成售前方案时,最危险的问题不是文案不够漂亮,而是把系统不存在的功能、没有承诺的接口和尚未验证的性能写进方案。本文从功能基线、证据绑定、声明分类、结构化输出、规则校验和人工审批六个层面,给出一套防止售前方案幻觉的工程方案,并提供功能证据模型、Prompt约束和自动校验示例。
一、售前方案中的幻觉为什么特别危险
普通内容文章出现错误,通常只需要修改。
售前方案中的错误可能直接进入:
- 客户承诺;
- 招标响应;
- 合同范围;
- 项目报价;
- 实施计划;
- 验收标准;
- 法律责任。
例如,现有系统只支持:
经销商收货
终端扫码
基础库存查询
模型却生成:
平台支持全渠道实时库存预测、自动补货和动态价格优化。
这段话可能很像专业方案,但三个能力都不存在。
一旦客户将其理解为正式承诺,后续会产生:
- 范围失控;
- 研发临时插单;
- 项目延期;
- 交付成本上升;
- 验收争议;
- 客户信任受损。
因此,售前AI系统的第一目标不是“写得快”,而是:
所有能力声明都必须有来源、有状态、可验证。
二、根因一:功能资料本身没有统一口径
企业内部通常同时存在:
- 产品白皮书;
- 历史方案;
- 投标文件;
- 销售PPT;
- 研发需求;
- 客户定制说明;
- 培训手册;
- 老版本产品介绍。
这些资料可能互相冲突。
例如同一个功能出现四种描述:
已正式上线
部分客户试点
需要二次开发
未来版本规划
模型如果没有版本和状态信息,只会选择最像答案的一段。
解决方案:建立功能基线库
每个功能至少包含:
{
"feature_id": "F-WMS-012",
"product_line": "仓储产品线",
"feature_name": "批次效期管理",
"status": "GA",
"version": "V4.2",
"available_from": "2026-03-01",
"standard_or_custom": "STANDARD",
"description": "支持批次、生产日期和有效期管理",
"limitations": [
"不包含自动需求预测"
],
"evidence_ids": [
"DOC-WMS-042-3.2"
],
"owner": "产品经理"
}
功能状态建议统一为:
GA:正式可交付
BETA:试点能力
CUSTOM:需要定制
PLANNED:规划中
DEPRECATED:已下线
UNKNOWN:尚未确认
只有GA功能可以默认写成“平台支持”。
三、第一层防护:功能白名单
生成方案前,先根据客户需求筛出允许引用的功能。
from dataclasses import dataclass
from enum import StrEnum
class FeatureStatus(StrEnum):
GA = "GA"
BETA = "BETA"
CUSTOM = "CUSTOM"
PLANNED = "PLANNED"
@dataclass(frozen=True)
class Feature:
feature_id: str
name: str
status: FeatureStatus
description: str
limitations: tuple[str, ...]
def can_commit(feature: Feature) -> bool:
return feature.status == FeatureStatus.GA
Prompt中不要直接提供整个历史资料库,而应提供经过筛选的:
本次允许承诺的功能
本次可作为定制建议的功能
本次禁止写入的功能
四、第二层防护:每一条能力必须绑定证据
不要让模型只输出自然语言段落。
先让模型生成结构化能力声明:
{
"claim_id": "C-001",
"claim": "平台支持商品批次和有效期管理",
"claim_type": "SUPPORTED",
"feature_id": "F-WMS-012",
"feature_status": "GA",
"evidence_ids": [
"DOC-WMS-042-3.2"
],
"confidence": 0.94
}
生成正文时再把Claim渲染为段落。
如果:
evidence_ids为空
则该能力不能进入正式方案。
校验代码:
def validate_claim(claim: dict) -> list[str]:
errors: list[str] = []
if not claim.get("feature_id"):
errors.append("缺少feature_id")
if not claim.get("evidence_ids"):
errors.append("缺少证据")
if claim.get("claim_type") == "SUPPORTED":
if claim.get("feature_status") != "GA":
errors.append("非GA功能不能表述为已支持")
return errors
五、第三层防护:区分五类声明
售前方案中的文字不应该全部使用“支持”。
1. 已支持
平台支持……
系统提供……
仅适用于GA功能。
2. 可配置
可通过规则配置实现……
前提是现有配置能力确实覆盖需求。
3. 可集成
可通过标准接口与客户ERP对接……
必须明确:
- 是否已有接口;
- 数据方向;
- 调用频率;
- 认证方式;
- 对方是否开放接口。
4. 需定制
该能力需要结合客户现有流程进行定制开发。
不能模糊成“平台可灵活支持”。
5. 建议规划
建议在第二阶段建设……
不能写成当前交付范围。
结构化枚举:
from enum import StrEnum
class ClaimType(StrEnum):
SUPPORTED = "SUPPORTED"
CONFIGURABLE = "CONFIGURABLE"
INTEGRATION = "INTEGRATION"
CUSTOM = "CUSTOM"
ROADMAP = "ROADMAP"
六、第四层防护:使用严格的输出Schema
方案生成的中间结果可以定义为:
{
"section_title": "库存与批次管理",
"claims": [
{
"claim": "平台支持批次和效期管理",
"claim_type": "SUPPORTED",
"feature_id": "F-WMS-012",
"evidence_ids": ["DOC-WMS-042-3.2"],
"limitations": []
}
],
"unresolved_questions": [
"客户是否需要与现有ERP进行双向库存同步"
]
}
模型必须把不确定问题写入:
unresolved_questions
而不是自己补全。
Pydantic模型:
from pydantic import BaseModel, Field
class ProposalClaim(BaseModel):
claim: str = Field(min_length=1, max_length=300)
claim_type: ClaimType
feature_id: str | None = None
evidence_ids: list[str] = Field(default_factory=list)
limitations: list[str] = Field(default_factory=list)
class ProposalSection(BaseModel):
section_title: str
claims: list[ProposalClaim]
unresolved_questions: list[str] = Field(default_factory=list)
七、第五层防护:确定性规则校验
模型Reviewer不能替代程序规则。
至少检查:
是否出现未登记产品名称
是否出现不存在的模块
是否引用非GA功能
是否缺少证据
是否把定制功能写成标准功能
是否出现绝对化性能承诺
是否出现未经确认的项目周期
是否出现未经批准的价格
绝对化词语扫描
RISKY_WORDS = {
"完全支持",
"无缝对接",
"百分之百",
"绝对准确",
"零风险",
"实时同步",
"无需改造",
"开箱即用"
}
def find_risky_phrases(text: str) -> list[str]:
return [
word
for word in RISKY_WORDS
if word in text
]
这些词不是全部禁止,但必须有证据和适用条件。
性能承诺扫描
以下内容必须绑定测试报告:
每秒处理10万次请求
准确率达到99.9%
查询响应低于100毫秒
支持千万级数据实时分析
性能数字不能来自模型常识。
八、第六层防护:人工审批
建议按风险等级审批:
| 内容 | 审批人 |
|---|---|
| 标准功能描述 | 产品经理抽检 |
| 定制范围 | 产品经理+研发负责人 |
| 系统集成 | 架构师或接口负责人 |
| 项目周期 | 项目经理 |
| 报价 | 商务负责人 |
| 验收指标 | 产品、实施、法务 |
| 安全合规承诺 | 安全或法务负责人 |
AI可以生成草稿,但不能自动提交正式投标文件。
审批状态:
DRAFT
AI_REVIEWED
PRODUCT_REVIEWED
TECH_REVIEWED
BUSINESS_APPROVED
FINAL
只有FINAL版本可以对外。
九、Prompt应该如何写
推荐System Prompt:
你是企业售前方案助手。
你只能基于提供的功能清单和证据生成内容。
规则:
1. 不得创造功能、模块、接口、性能和案例。
2. status=GA的功能可以表述为已支持。
3. status=CUSTOM必须明确写为需要定制。
4. status=PLANNED只能写入后续规划。
5. 每一条能力声明必须返回feature_id和evidence_ids。
6. 信息不足时写入unresolved_questions,不得自行补全。
7. 禁止使用“完全支持、无缝对接、零风险”等绝对化表达。
用户Prompt应包含:
客户背景
客户需求
本次范围
允许功能清单
禁止功能清单
证据片段
输出Schema
十、建立“事实—证据—表述”链路
完整链路:
客户需求
→ 检索功能基线
→ 检索证据
→ 生成结构化Claim
→ 规则校验
→ 生成自然语言
→ Reviewer复核
→ 人工审批
任何对外表述都可以反向追踪:
方案段落
→ Claim ID
→ Feature ID
→ Evidence ID
→ 原始文档和负责人
这样客户提出疑问时,不需要重新寻找来源。
十一、如何处理客户提出但系统不支持的需求
错误写法:
平台可灵活满足客户需求。
正确输出应该包括:
需求:自动预测各经销商补货量
当前能力:
系统已支持库存、出库和动销数据采集。
差距:
当前标准版本不包含自动补货预测模型。
建议:
第一阶段完成数据采集和指标建设;
第二阶段基于历史销量、库存和促销计划建设预测模型。
范围属性:
二阶段定制能力,不纳入本次标准产品范围。
诚实说明差距并不会降低专业度,反而能减少后期风险。
十二、建议统计的质量指标
无证据Claim比例
非GA功能误承诺率
绝对化表达命中数
人工退回率
产品经理修改率
定制范围识别准确率
需求待确认项召回率
最终方案事实错误数
目标不是让文章更像人写,而是降低错误承诺。
十三、常见错误做法
1. 直接把历史方案全部丢给模型
历史方案中可能包含过期和定制内容。
2. 让模型自行判断功能是否存在
模型无法访问真实产品状态。
3. 只做一次RAG检索
召回文档不代表表述一定准确。
4. 只使用另一个模型审核
两个模型可能共享相同错误倾向。
5. 没有功能负责人
知识库内容过期后无人修正。
总结
AI生成售前方案的核心风险不是语言质量,而是把不确定信息包装成确定承诺。
生产级防护应该包括:
功能基线
+证据绑定
+声明分类
+结构化输出
+确定性校验
+人工审批
只有当每一条能力都能追溯到产品状态和证据,AI售前方案才具备真正的企业可用性。
延伸阅读
如果你正在关注企业级 AI 应用、Agent、RAG、MCP 与大模型工程化落地,欢迎访问 智元界:
https://www.zyentor.com/
智元界将持续分享可运行的技术实战、架构设计、问题排查与企业应用案例。