Function Call 让模型从聊天到干活
作者:程序员马丁
note
Ragent AI —— 从 0 到 1 纯手工打造企业级 Agentic RAG,拒绝 Demo 玩具!AI 时代,助你拿个offer。
上一篇讲完了 RAG 的生成策略,你已经能搭建一个完整的 RAG 系统:用户问知识库里的问题,系统检索相关文档,生成答案,还能标注引用来源。看起来很完美,但实际跑起来你会发现——用户的需求不只是查文档。
假设你在一家公司做企业知识库助手,用户问“公司的年假制度是什么”,RAG 系统检索到《员 工手册》里的年假政策,回答得很好。但用户接着问“我还剩几天年假”,系统就懵了:知识库里有年假制度,但没有这个用户的具体年假数据。这需要查 HR 系统,而 RAG 系统只会检索文档,不会调接口。
再比如用户问“帮我查订单 #12345 的物流”,RAG 系统检索到物流查询的操作指南,但查不到这个订单的实时物流信息——这需要调物流系统的 API。
这就是 RAG 的能力边界:它能回答知识库里的问题,但干不了活。接下来要讲的 Function Call(函数调用),就是让 RAG 系统从只能查知识库升级到能查数据、能调接口、能干活。
从查知识库到干活:RAG 的能力边界
1. RAG 只能查知识库的局限
回顾一下 RAG 的工作流程:用户提问 → 向量检索 → 召回相关文档 → 生成答案。整个流程的数据来源是知识库(向量数据库里存的文档 chunk),所以 RAG 只能回答“知识库里有什么”。
但企业场景下,用户的需求远不止查文档:
- 查实时数据:我还剩几天年假?我这个月的考勤记录?我的销售业绩排名?
- 查业务状态:订单 #12345 的物流到哪了?工单 #678 处理到哪一步了?
- 执行操作:帮我请 3 天年假、帮我提交报销申请 、帮我发一条通知给项目组
这些需求的共同点是:答案不在知识库里,需要调用业务系统的接口或数据库查询。
2. 传统方案的问题
面对这种需求,传统的做法有两种:
2.1 方案一:在 Prompt 里写死兜底回复
如果用户问年假余额,请回复:"您可以访问 HR 系统查询年假余额,地址:https://hr.company.com"
如果用户问订单物流,请回复:"您可以在订单详情页查看物流信息"
这种方案太死板,用户体验差。用户问“我还剩几天年假”,系统回复“请访问 HR 系统查询”,用户心里想:你不就是个智能助手吗,为什么不能直接告诉我?