简介:本文面向开发者、数据工程师与架构师,介绍如何将结构化数据处理能力与生成式人工智能能力结合,构建更可信、可落地的智能应用。文章不依赖特定品牌工具,围绕通用架构、数据准备、流程设计、结果验证与问题排查展开,帮助读者掌握从数据治理、语义接入到代理式任务执行的完整实施方法。
本教程要帮助读者完成一项明确任务:在一个已有的业务系统中,把结构化数据源接入生成式人工智能应用,并通过规则校验、流程编排和代理式执行机制,构建一个“可信AI”的最小可用版本。完成本教程后,你将能够:
本教程适合具备一定后端开发经验、正在探索生成式AI落地的开发者、数据工程师、算法工程师以及需要评估技术可行性的技术负责人阅读。
以下场景特别适合采用本教程的思路:
上述场景的共同特点是:单纯依赖生成模型容易出现“看似合理但不准确”的回答。因此,必须引入结构化数据作为事实来源,并为生成结果增加校验与约束。
在开始实施之前,你需要确认以下条件:
在构建可信AI时,推荐采用以下分层架构:
用户输入│▼意图识别层:判断用户需要查询、计算、执行还是对话│▼数据编排层:根据意图决定是否访问结构化数据、访问哪些表│▼查询执行层:生成受限查询语句,执行并获取结果│▼上下文构建层:将结构化结果与必要提示信息组合│▼生成层:调用生成模型产生回答或执行决策│▼校验层:规则校验、数值校验、业务合法性检查│▼输出层:返回结果或进入下一轮代理式执行
这套架构的核心思想是:生成模型负责理解、表达与规划,但不直接充当事实数据库;结构化数据负责提供可验证的事实,但不直接决定表达方式。 两者通过“受控查询”和“结果校验”连接起来,从而提升整体可信度。
先不要急着接入模型。第一步应当是对现有结构化数据进行分类和评估。你需要回答以下问题:
建议为每一类数据建立元数据描述,例如表用途、字段含义、取值范围、更新时间、访问频率等。这些元数据后续将作为生成模型理解数据结构的重要输入。
注意事项:不要将完整的数据库Schema一次性全部塞给模型。只暴露与当前任务相关的表结构,可以降低提示词长度,同时减少信息泄露风险。
生成模型直接编写复杂数据库查询语言可能会产生语法错误,更重要的是可能产生越权或大范围扫描。因此,推荐采用“白名单模板”的方式。
具体做法是:
示例模板定义如下(通用伪代码,非特定语言):
模板ID:ORDER_STATUS_QUERY允许表:订单表允许字段:订单号、客户编号、订单状态、创建时间必填过滤条件:客户编号必须等于传入参数返回条数上限:50参数定义:- customer_id:字符串,必填- start_date:字符串,选填- end_date:字符串,选填
这种设计可以显著降低生成模型写出危险查询的概率,同时便于后续审计和权限控制。
在实际查询执行时,建议增加一层数据接入服务。该服务负责:
例如,查询返回的多余内部字段应在此层过滤,只保留生成模型真正需要的字段。对于数值型结果,可以进行单位标准化;对于日期型结果,可以统一时区;对于枚举型状态码,可以在输出前转换为业务含义。
完成结构化数据获取后,需要把数据结果与用户原始问题组合成提示词。一个好的融合提示词通常包含以下部分:
以下是一个通用示意片段:
系统角色:你是一个企业订单查询助手。任务:根据用户问题回答订单状态。结构化数据查询结果:订单号:A20260317-001;状态:已发货;创建时间:2026-03-17订单号:A20260317-002;状态:待支付;创建时间:2026-03-17用户问题:最近有两个订单现在什么情况?输出要求:用简洁中文回答,先给出订单号,再说明状态。如果结果为空,明确说明未查询到记录。边界约束:不要虚构任何订单信息。
提示词的稳定性会直接影响输出质量。建议将模板固化在代码中,只替换变化部分,而不是每次都重新生成完整提示词。
生成模型输出之后,不应该直接返回给用户或写入系统。需要经过一道校验层。校验层的检查项目可以包括:
对于关键业务场景,还可以采用“二次生成验证”的方式:让生成模型再次检查自己的输出是否与给定结构化数据一致。虽然这会增加一次调用成本,但对可信度要求较高的场景是值得的。
单次查询与回答只是起点。当业务需要多步执行时,可以引入代理式流程。代理式AI的核心特征是:系统不仅理解用户意图,还能持续规划下一步动作,并根据上一步结果决定后续行为。
一个典型的多步代理流程如下:
用户问:帮我查一下最近三个订单,如果有待支付的,就生成一个提醒话术。│├─> 步骤1:识别需要查询订单├─> 步骤2:执行订单查询,返回三条记录├─> 步骤3:发现其中一条状态为“待支付”├─> 步骤4:进入提醒话术生成分支├─> 步骤5:生成提醒内容└─> 步骤6:输出查询结果与提醒话术
实现代理式流程时,建议引入状态机或任务队列来管理步骤之间的依赖。每一步的输出应记录在上下文中,避免代理在长流程中遗忘关键信息。同时,为代理设置最大执行步数,防止死循环或无限调用。
在实现过程中,几个关键配置需要特别关注:
单次返回给生成模型的结构化数据不宜过长。建议将查询结果限制在2000个字符以内。如果结果过大,应进行截断或聚合。过长的上下文会稀释模型注意力,也可能导致生成质量下降。
对于查询类、事实类任务,建议将生成温度设置在较低区间,通常在0到0.3之间,以降低随机性和事实漂移风险。对于话术润色、摘要生成等任务,可以适当提高到0.5到0.7。
结构化查询、生成调用等外部请求都应设置明确超时。对于查询失败,可以选择重试一次;对于生成失败,建议保留部分结果并返回明确错误提示,而不是静默重试。
对于变化较慢的结构化数据,例如产品目录、组织架构等,可以在数据接入层设置短时缓存。缓存时间应根据数据更新频率确定,避免用户长时间看到过期信息。
下面通过一个完整示例,串联上述步骤。假设场景是“查询某客户最近订单并生成服务提醒”。
用户输入:帮我查一下客户C1001最近的订单,如果有异常状态就提醒一下。
ORDER_STATUS_QUERY模板。customer_id = C1001。该示例展示了一个从结构化数据到可信生成、再到代理式执行的完整链路。
可能原因:提示词中缺少明确边界约束;查询模板未限制返回范围;生成温度过高。
排查思路:检查提示词是否包含“不要虚构数据”的约束;确认数据接入层是否只返回了必要字段;降低生成温度后复测。
可能原因:缺少输出格式要求;状态枚举值含义未被模型正确理解。
排查思路:在提示词中补充枚举值的业务含义;明确要求先输出关键字段,再输出解释;增加一轮格式校验。
可能原因:每步生成的上下文过大,后续步骤被截断;代理没有显式记录已完成步骤。
排查思路:在每一步执行后生成简短摘要,只保留必要信息进入下一轮;限制单次任务的最大步骤数;将关键状态写入独立的任务状态存储。
可能原因:缺少索引;查询模板允许大范围扫描;数据接入层未做缓存。
排查思路:为常用过滤字段增加索引;在查询模板中限制返回条数和可选时间范围;对高频只读数据设置短时缓存。
将结构化数据分为高频、中频和低频三层。高频数据通过缓存和预聚合降低查询压力;低频数据保持实时查询;敏感数据单独管理,默认不进入生成上下文。
将提示词模板纳入版本管理,记录每次修改的原因和效果。不同业务场景使用不同提示词模板,避免共用一套提示词带来的冲突。
对每一次生成调用记录:使用的查询模板、返回数据条数、生成耗时、校验是否通过、是否触发异常兜底。这些日志是后续优化和问题定位的基础。
代理式AI在初期不建议直接开放写操作。可以先允许只读查询和内容生成,等稳定运行一段时间后再逐步开放建单、通知等写操作,并且所有写操作都应保留人工确认入口。
通过缓存减少重复查询;通过模板约束减少无效生成;通过校验层拦截低质量输出,避免因错误结果造成业务损失。这些手段通常比单纯降低生成模型调用频率更有效。
本文围绕“如何构建可信AI”这一核心任务,给出了一条从结构化数据梳理、受控查询、融合提示词、结果校验到代理式执行的中立实施路径。
完成本教程后,读者可以获得一个可落地的参考架构:它不依赖特定生成模型或数据库品牌,而是通过“模板化查询、受控上下文、结果校验、代理式编排”等方式,让结构化数据成为生成式AI的事实基础,从而减少幻觉、提升答案可信度和业务可用性。
下一步,建议从一个小范围业务场景开始试点,先跑通“查询—生成—校验—输出”的基本链路,再逐步引入多步代理流程和自动化工单能力。真实业务中的反馈和错误日志,将是提升系统可信度最重要的依据。