模型分类,代码保证:一个AI Agent实战踩坑总结

DevWolf 高级 4小时前 更新于 2026年7月26日 520 浏览 13 点赞 约 2 分钟

很多搞AI Agent的人习惯把所有逻辑都塞进Prompt,试图通过优化提示词来解决所有问题。但我通过给本田经销商做SMS自动化助手(处理预约、查手册、核对保修)才发现,一个极其残酷的真相:LLM在处理逻辑判断和数值计算时,即便你把指令写得再详细,它依然会随机掉链子。

最核心的实战经验就是:让模型负责分类和自然语言交互,而把确定性的逻辑交给代码。

分享三个我掉坑后的解决方案,希望能给正在做大模型实战的朋友避坑:

一、 别让模型做日期比对


我曾遇到一个Bug:客户的保修期已过,但Agent读取了上下文中的过期日期后,居然告诉客户“在保修范围内”。我尝试在System Prompt里强调今天的日期,要求它仔细对比,结果依然失败。

结论: LLM不擅长日期比对。现在的方案是在Python端预先处理好,直接给模型传“已过期”或“有效”的结论。

def _annotate_expirations(in_md: str) -> str:
    """
    在门户数据的所有过期日期旁标注计算后的‘已过期/有效’结论。
    因为LLM在日期比对上不可靠,所以由代码完成比对,模型仅负责传达结果。
    """
    # 具体的比对逻辑在 Python 中实现,而非 Prompt 中
    ...

二、 算钱的事,绝不能交给模型


如果让模型计算税费或零件总价,它可能会在四舍五入或百分比计算上出错。我把所有费用公式直接硬编码在函数里,模型只负责识别用户在问总价,然后把计算结果像人一样说出来。

def calculate_total(subtotal):
    """
    费用计算的唯一事实来源,确保Prompt和代码之间不会出现偏差:
    杂费 = min(小计 × 10%, $59.50)
    税费 = (小计 + 杂费) × 7%
    """
    shop_supplies = min(subtotal * 0.1, 59.50)
    tax = (subtotal + shop_supplies) * 0.07
    return subtotal + shop_supplies + tax

三、 别相信模型的“自我检查”


我使用了 Pydantic 来强制执行结构化输出,模型返回一个 complete 标志位来告知预约是否完成。但早期出现过一个诡异问题:模型标记了 complete: True,但实际提交的数据里缺失了服务类型。

现在的逻辑是:模型说“完成了”只是一个建议,服务器在写入数据库前必须独立运行一次字段校验。

总结下来,一个鲁棒的AI Agent工作流应该是:LLM → 结构化输出 → 代码校验 → 确定性执行 → LLM反馈。

提示词AILLMpythonPrompt

全部回复 (4)

阿福在路上 高级 10小时前
要是想做更复杂的条件分支,是用LangGraph这种框架还是自己写if-else?
0 回复
折腾党小雨 中级 10小时前
建议把分类结果定义成枚举值,代码端好校验,省得模型乱起名字。
0 回复
前端大山 专家 10小时前
确实,尤其是多轮对话状态管理,还是得靠代码存变量。
0 回复
老阿伟的日常 初级 10小时前
@前端大山 感觉Prompt在长对话里太不稳定了,你那边是用Redis存的吗?
0 回复

发表回复

支持 Markdown 格式