大模型 17/18 通过 Function Calling & RAG 让大模型连接外部系统和私有知识

167 阅读12分钟

十七、 FunctionCalling & RAG (工具调用 & 检索增强生成)

一、 FunctionCalling(工具调用)

截屏2025-07-02 13.55.20.png

  • 细节 :自主解析内容并结构化填槽,自主决策使用工具并结构化调用 (大模型解决不了问题的时候,可以调用工具)
填槽举例:
  • 用户:明天天气咋样?

填槽过程

  1. 识别意图:用户想查询天气(对应 get_weather 函数)。

  2. 提取参数(填槽)

    • city(城市)→  “北京”
    • date(日期)→  “明天” (需转换成具体日期,如 2025-07-03
  3. 调用函数: get_weather(city="北京", date="2025-07-03")

  4. 返回结果: "正在查询北京在2025-07-03的天气,天气请,湿度..."

  • 大模型:天气请,湿度...
1.1 FunctionCalling步骤
  1. System Prompt 中写明了都有哪些工具可以使用,使用的时候要给出什么参数,写成什么格式
  2. 意图识别:用户要求做什么任务
  3. 决定是否使用工具,使用哪个工具
  4. 调取工具设定的信息传递结构
  5. 调取所有上下文内容解析并填槽
  6. 缺少信息就发起追问,直至全部填完
  7. 按照槽的格式生成模型回复

经过微调训练而得到的一种按指令做任务的能力:

利用GPT 的生成能力输出某种特定格式的内容

DEMO(故事合成调用工具)

截屏2025-07-01 14.43.12.png

  • systempromat

角色

你是一个音频故事生成助手,你可以按照用户的要求,生成最终的内容,你工作时请注意:

要求

  1. 生成故事文字,不低于100字,不超过200字,并将故事的文字进行输出
  2. 用故事文字生成音频,将音频文件原始链接输出,不需要输出成可点击的文字链接
  3. 给故事的每一个场景生成图片,将图片输出,整个故事不超过3张图片,图片风格全部采用迪士尼风格

工具使用

你在完成用户任务的过程中可以使用以下几个工具:

  1. 语音合成 / speech_synthesis 工具,通过故事内容文字合成音频speaker_id:爽快思思/Skye(指定了一个音色【非默认,插件详情中有体现 】)
  2. 豆包图像生成大模型 / gen_image,给一段文字生成配图

二、 RAG(检索增强生成)(Retrieval-Augmented Generation)

  • 将参考资料、样例放在 Prompt 中,就叫做 In-Context-Learning
  • 但上下文窗口宽度毕竟有限,所以需要一个知识库, 需要的时候就去知识库里找一些有用的信息
2.1 RAG定义:
  • 是一种结合信息检索与大语言模型(LLM)的技术,旨在通过外部知识库增强模型的生成能力,解决传统LLM的局限性(如实时性错误、知识更新延迟等)
2.2. RAG的核心概念
  • 检索(Retrieval) :从外部知识库(如数据库、文档、网页等)中检索与输入问题相关的信息。
  • 生成(Generation) :将检索到的信息与大模型的内部知识结合,生成更准确、可靠的回答。
2.3 RAG与提示词(Prompt)、大模型的调用关系

三者的协作流程如下:

原始问题提示词 -》 rag检索后的文献 -》 根据检索后的文献,回答原始问题提示词

步骤1:用户输入提示词(Prompt)

  • 用户提交一个问题或指令(例如:"量子计算的最新进展是什么?")。
  • 这个提示词会同时触发检索和生成两个环节。

步骤2:检索外部知识

  • RAG系统通过向量数据库(如Elasticsearch、FAISS等)检索与提示词相关的文档或片段。
  • 例如,找到2023年关于量子计算的论文摘要或新闻。

步骤3:构建增强的提示词

  • 将检索到的信息(上下文)与原始提示词结合,形成新的提示词: 原始提示词:"量子计算的最新进展是什么?" 增强后的提示词:"根据以下信息回答:{检索到的文档}。问题:量子计算的最新进展是什么?"

步骤4:大模型生成回答

  • 大模型(如GPT-4、Llama 2)基于增强后的提示词生成回答,确保答案既依赖模型的知识,又结合了最新外部信息。

PS: 与大模型打交道的永远只有提示词prompt

2.4 构建知识库 & 模型调用知识库完成用户任务 细节

1 、构建可检索的知识库

1) 知识整理: 以文件格式存储, pdf、word 、ppt、excel为主

2) 数据清理及格式化: 将不同格式的数据内容提取为纯文本

3) 内容切分: 将文本内容按段落 、主题或逻辑单元切分成较小的知识片段(Chunk)

4) 向量化: 将每个知识片段转化为向量表示(如OpenAI  的Embedding 接口)

5) 关联元数据: 给每个向量关联相关元数据(如文档名称 、创建时间 、作者 、来源等) 

6) 载入向量数据库, 并建立索引: 向量数据库如FAISS 、Pinecone 、Weaviate

7) 部署集成: 将向量数据库集成到 AI 产品流程中, 生成模型搭配使用

截屏2025-07-02 13.44.36.png

coze中上传个qa文档,作为知识库好像听见的哈~

步骤专业开发需要做的Coze 为您做的
1. 知识整理自己收集、管理文件提供上传界面和云存储
2. 数据解析写代码调用各种解析库内置多格式解析器,自动处理((如PyMuPDF for PDF, python-docx for Word, openpyxl for Excel等,可能还需要处理OCR(如果PDF是扫描件))
3. 内容切分编写分块算法,调试大小和重叠内置智能分块策略,自动执行
4. 向量化申请API Key,调用Embedding接口,处理限速和错误内置Embedding模型,自动批量处理
5. 关联元数据设计数据结构,手动关联自动生成并关联标准元数据
6. 向量数据库购买、部署、维护数据库,编写索引代码提供托管式向量数据库,无缝集成
7. 部署集成编写整个RAG链路的API和业务逻辑提供可视化配置,一键启用

文本 -> embedding model ->向量

2 、模型调用知识库完成用户任务

1) System Prompt中写明哪些情况应该调用知识库

2) 模型解析用户意图, 判断是否需要调用知识库

3) 将User Prompt转成向量, 去向量数据库里比较相似度

4) 选取相似度较高的1条或多条知识片段, 并取出知识片段原文

5  将检索出的知识片段与原Prompt合并在一起组成新的Prompt

6) 模型生成最终回复(这一步 大语言模型开始干活 )

截屏2025-07-02 14.03.23.png

coze中回复流程~

步骤通用 RAG 流程描述在 Coze 平台中的实现方式Coze 用户需要做什么
1. 设定调用规则在 System Prompt 中定义何时及如何利用知识库回答问题。Coze 后台自动配置了检索阈值,只要用户问题与知识库内容足够相关,就会自动触发检索。用户只需在 Prompt 中设定回答风格和边界。在机器人 「人设与提示」 中编写 System Prompt,定义角色、知识来源、回答风格和无答案时的回应
2. 解析用户意图模型解析用户输入,判断问题是否属于知识库的范畴。此步骤被集成并简化。Coze 直接将用户问题用于向量化检索,由检索结果本身来隐式判断意图相关性(是否有匹配片段)。无需操作。平台自动处理。
3. 查询向量化将用户问题(User Prompt)转化为向量(Embedding)。全自动完成。Coze 使用内置的 Embedding 模型(如 text-embedding-ada-002)即时将用户问题转换为查询向量。无需操作。平台自动处理。
4. 检索知识片段将查询向量与向量数据库中的索引进行相似度比较,返回最相关的 Top K 个片段及其原文。全自动完成。Coze 在后台使用其托管的高效向量数据库(如 Weaviate 或自研方案)执行毫秒级的相似性搜索,并返回最相关的几个知识块及其原始文本。无需操作。仅在「知识库」页面上传文件并启用所需知识库。
5. 组合新 Prompt将检索到的知识片段原文与原始用户问题合并,组装成一个包含上下文的新 Prompt。全自动完成。Coze 使用一个固定的、优化过的内部模板将 System Prompt、检索到的知识片段、用户问题拼接成最终提示词,对用户完全不可见。无需操作。平台自动处理。
6. 生成最终回复将组装好的新 Prompt 发送给大语言模型,由模型生成最终回复。全自动完成。Coze 将组装好的最终 Prompt 发送给您在 「语言模型」 配置中选择的模型(如 GPT-4),并将返回的结果呈现给用户。在 「语言模型」 配置中选择一个模型(如 GPT-4)。
  • 知识库文件(骑手招聘 )

截屏2025-07-02 14.45.47.png

三 RAG检索相关问题

3.1 检索效率如何?

1 、不使用GPU的情况下,千万级知识片段,毫秒级返回

2 、使用GPU将得到更快的检索速度

3.2 不好用的常见原因:

1 、文档处理和切割情况 、颗粒度问题

2 、检索召回不准, 最希望被检索到的片段排序太靠后

3 、整合生成的过程有什么问题

3.3 提高准确率的常见方式:

1 、知识片段有明确主题 、交叠切分 、多颗粒度混合切分

2 、知识片段的上下相邻片段也可以一并取出,提高信息完整度

3 、检索时多召回一些结果, 再用单独的模型去做重排序

4 、向量+关键词混合检索(差几个字就差别非常大,除了匹配向量相似度,新增关键词检索)

5 、将User Prompt 重写成几种不同的表述方式(换个提示词表达 例如:薪资&工资&挣钱)

PS:

  • 1 交叠切分:相邻片段之间保留部分重叠内容(如后一段的开头重复前一段的结尾),避免因硬切分导致关键信息被截断。

  • 2 多颗粒度混合切分:将文本按不同长度切分(如短句、段落、章节),兼顾细粒度(细节)和粗粒度(上下文)的信息需求。

  • 3 检索时多召回一些结果,再用单独模型重排序

    • 多召回:初步检索时返回较多候选结果(如Top 100),而非直接限制为少量(如Top 3)。
    • 重排序:用更复杂的模型(如交叉编码器、LLM)对召回结果做精细化排序,综合考虑语义相关度、用户意图等。
      作用

    • 解决初步检索(如向量相似度)的粗粒度问题,避免漏掉低排名但实际相关的结果。

    • 重排序模型可融合更多特征(如关键词匹配、时效性、用户偏好)。

3.4 打通搜索引擎也是一种RAG

1 、搜索引擎是外部资料库

2 、向量数据库是内部资料库

3.5 向量数据库

截屏2025-07-02 15.21.57.png

3.6 RAG 的一些设计模式
  • Q: RAG 要不要联网? A 看怎么设计~!
  • Q: RAG 先搜索内部还是先连外网? A 看怎么设计~!

主流 RAG 设计方案对比总览

方案名称简要流程核心特点优点缺点典型应用/工具
1. 基础RAG (Basic RAG)用户提问 -> 向量化 -> 检索内部知识库 -> LLM生成答案 -> 输出结果最经典和基础的流程,完全依赖内部知识库。实现简单、速度快、成本低、安全性高(数据不出境)。无法回答知识库外的问题;完全依赖内部资料质量。早期客服机器人、企业Wiki问答助手。
2. 混合增强RAG (Hybrid Augmented RAG)用户提问 -> 向量化 -> [并行]检索内部知识库 + 搜索外部网络 -> 结果融合 -> LLM生成答案 -> 输出结果并行检索内部和外部资源,融合后生成答案,信息更全面。答案更全面、及时,能结合内外优势。架构复杂,延迟和API成本较高,需注意外部信息可靠性。行业分析助手、投资研究工具、支持最新信息的客服机器人。
3. 智能体路由RAG (Agentic Router RAG)用户提问 -> LLM判断意图 -> [需要内部知识?] -> 检索内部库 -> [需要外部知识?] -> 搜索网络 -> 组合信息 -> LLM生成答案 -> 输出结果引入“智能体”概念,由LLM主动判断是否需要以及如何调用内外部工具。智能化程度高,按需调用,资源利用率高,体验流畅。实现复杂度最高,依赖LLM的判断能力,可能决策错误。高级个人AI助理(如Cosmic、VS Code Cody)、复杂任务自动化。
4. 递归查询RAG (Recursive Query RAG)用户提问 -> 向量化 -> 检索内部知识库 -> [答案不完整?] -> LLM生成新查询 -> 再次检索 -> ... -> 组合所有信息 -> LLM生成最终答案 -> 输出结果通过多次、递归的检索-生成循环来逐步深化和完善答案,解决复杂问题。能回答复杂的、需要多步推理(Multi-hop)的问题。延迟高(多次检索和生成),成本高,流程控制复杂。深度研究报告生成、复杂技术问题排查、学术研究助手。
5. 摘要索引RAG (Summary-index RAG)用户提问 -> LLM理解问题 -> 检索内部知识库(粗粒度)-> [命中摘要?] -> 定位详情页 -> 检索详情 -> LLM生成答案 -> 输出结果知识库采用“摘要+详情”的多级结构,先检索摘要再定位详情,提高精度。检索精度高,尤其适合长文档、书籍、代码库等结构化知识。需要预先对知识库进行摘要处理,构建成本高。代码库问答(如ChatGPT for Code)、长文档问答(手册、论文)。