大语言模型(LLM)的真正价值,不只是生成漂亮的文本,更重要的是连接外部世界的能力——能够调用工具、利用外部知识、执行任务。这种连接能力主要通过两种技术实现:Function Calling(函数调用) 和 RAG(检索增强生成) 。本文将从原理、流程、误区到实战案例,全面剖析这两个关键技术。
一、Function Calling:让大模型“动手干活”
1. 核心概念
Function Calling 是指大模型根据用户输入自动判断是否需要调用某个“外部工具”,如天气 API、数据库、计算函数等。如果需要调用,就结构化地解析输入,生成调用参数,再根据工具返回的结果生成最终回答。
这个过程不是简单的接口调用,而是结合语言理解、意图识别、数据结构化和上下文管理的一整套机制。
2. 原理解析与流程详解
步骤拆解如下:
-
System Prompt 配置:
指定有哪些函数可用、每个函数需要哪些参数、参数格式及示例。 -
意图识别:
大模型读取用户输入,判断:- 是直接生成回答,还是调用函数?
- 如果调用,使用哪一个函数?
-
参数提取与结构化:
- 如果已提供足够参数:直接组装成 JSON 结构;
- 如果缺少关键信息:主动追问用户补全。
-
调用外部工具:
根据结构化数据实际发起函数调用,等待返回结果。 -
再次交由大模型处理:
将 system prompt + tool response + user prompt 作为新的输入,最终由模型生成响应。
举个例子:
用户提问: 「明天北京天气怎样?」
流程如下:
- 模型识别意图是查天气;
- 判断需要调用
getWeather(city, date)
; - 提取参数:
city=北京
,date=明天
; - 若参数不完整(如没说日期),就追问;
- 调用接口返回结果,例如「晴,最高温度25°C」;
- 模型根据原问题 + 返回结果进行自然语言生成:「明天北京是晴天,最高温度25°C。」
3. 常见误区
-
误区1:Function Calling 只是语法功能。
→ 实则是语言理解 + 任务规划 + 结构化表达的能力测试。 -
误区2:Function Calling = 插件机制。
→ 插件是部署层的机制,Function Calling 是语言建模能力的一部分。二、RAG:让大模型“读懂你的知识库”
1. 核心概念
RAG 全称是 Retrieval-Augmented Generation,即“检索增强生成”。它是解决大模型无法记住所有知识、又需要具备专有知识的典型方法:让大模型在生成回答前,先去知识库里“找资料”。
尤其适用于以下场景:
- 私有资料问答(如企业文档、员工手册);
- 法律、医学等专业场景;
- 数据量大、频繁更新的知识体系。
2. 流程与关键步骤
(1)构建知识库
-
资料收集与格式化
- 支持多种格式:PDF、Word、PPT、Excel等;
- 使用工具转成纯文本;
- 表格类信息若结构复杂,可以截图+多模态模型提取文字。
-
文本切片
- 按逻辑单元拆分为片段(段落/标题/章节);
- 可以交叠切分,提升召回精度。
-
向量化 Embedding
- 每段文本生成一个向量,表示其语义;
- 常用模型:OpenAI Embedding、BGE、E5等。
-
附加元信息
- 文件名、来源、创建时间等;
- 便于后续排序、溯源与展示。
-
向量数据库存储
- 常见库:FAISS(本地)、Pinecone、Weaviate、Milvus等;
- 可用于高速相似度检索。
(2)RAG 推理过程
-
用户提问
→ 输入 User Prompt。 -
是否需要查知识库?
- 大模型判断用户的问题是否需要外部知识;
- System Prompt 中定义触发条件(如“涉及产品知识”)。
-
语义检索
- 将 User Prompt 向量化;
- 在向量库中检索相似文本片段;
- 通常召回 Top-K(如前5条)。
-
构建 Prompt
将:- System Prompt + 检索片段 + User Prompt
合并成完整输入,送入大模型生成回答。
- System Prompt + 检索片段 + User Prompt
举例说明:
用户提问:「公司请假流程是怎样的?」
→ 用户问题向量化 → 检索出知识库中“请假流程”的段落 →
→ 构建 Prompt:
markdown
复制编辑
System Prompt: 遇到员工政策相关的问题请从知识库中寻找答案;
知识片段:
1. 请假需先填写OA系统申请;
2. 部门主管审批;
3. HR最终备案。
User Prompt: 公司请假流程是怎样的?
→ 模型输出:「您需登录OA系统填写申请,等待主管审批,HR备案后即可请假。」
三、Function Calling vs RAG 的对比与结合
特性 | Function Calling | RAG(检索增强生成) |
---|---|---|
用途 | 执行具体任务 / 工具调用 | 提供专业、丰富的上下文知识 |
数据来源 | 实时API、数据库、函数 | 预先构建的私有知识库 |
返回内容 | 工具返回结构化结果 | 文本段落(知识片段) |
示例 | 查天气、订票、计算税率 | 企业问答、政策解析、法规解读 |
可否组合 | ✅ 可在一个流程中结合使用 | ✅ 可与Function Calling配合使用 |
例如:用户说“查下北京天气,并说明我是否需要带伞”,
- Function Calling 查天气;
- RAG 检索天气常识(下雨就要带伞);
- 模型综合输出。
四、进阶知识与优化策略
1. 提高RAG准确率的技巧
- 知识切片精细化:主题明确、上下文交叠;
- 多粒度混合:有短段,也保留长段备用;
- 多片段召回 + 重排序:用 reranker 模型做二次打分;
- Hybrid检索:向量 + 关键词混合召回;
- Prompt多样化:同一问题生成多种表达方式检索。
2. Embedding模型的选择
- 语言相关:中文推荐 BGE、E5-multilingual;
- 向量维度:高维更精确,但检索慢,需平衡;
- Embedding质量影响最终结果:建议定期评估效果并更新模型。
五、总结
技术 | 意义 |
---|---|
Function Calling | 让模型“干活”,做结构化任务或执行调用 |
RAG | 让模型“有知识”,解决上下文短板与专业知识问题 |
二者结合使用 | 大模型既能调API又能读文档,成为真正的AI智能体 |
这两项技术已经成为大模型应用中的“发动机”和“油箱”,一个解决执行力问题,一个解决知识储备问题。理解它们,就是理解大模型从“聊天机器人”到“智能体”的跨越。