围绕 [具体场景,如智能客服 / 代码助手],用 LLM 做决策,结合工具(Function Call)+ 记忆(短期对话 + 长期知识库(向量数据库等))实现任务的智能体
名词介绍:
LLM:
主要擅长于推理,但是对于一些特地领域,缺少对应的训练的数据,可能会存在幻觉问题;解决方法:1、模型微调;2、RAG索引增强;
Function Call:
由于大模型并不是一个全能选手,比如上网,订机票这种场景无法实现,便有了工具去辅助大模型去实现,即是符合MCP协议的工具方法,本质也是一个函数,定义类大模型调用的入参,返回参数,具体逻辑根据业务实现;分为MCP client,server,即调用端,服务端;
Token:
是文本处理的基础语义单元,是模型理解、生成和处理语言的最小 “砖块” ,它的拆分规则由分词策略决定,常见情况:
- 单词级:简单词可能直接成 Token,如 “hello” 作为 1 个 Token 。
- 子词级:复杂词会拆成子词,像 “unsmiling” 拆成 “un” + “smil” + “ing” ;像 GPT 系列用 BytePair Encoding(BPE),依据字符对频率合并生成子词 。
- 字符级:特殊场景(如低资源语言)按字符拆分,比如 “cat” 拆成 “c”“a”“t”
| 粒度类型 | 单位示例 | 应用场景 |
|---|---|---|
| Utterance | “今天下午开会。” | 对话系统、多轮交互分析 |
| 句子(Sentence) | “她喜欢读书,也喜欢运动。” | 文本摘要、机器翻译 |
| 词(Word) | “苹果”“跑步” | 词向量模型、词性标注 |
| 篇章(Document) | 一篇完整文章 | 文档分类、主题模型 |
简单说,分词器把输入文本拆成一个个 Token ,模型基于 Token 序列理解语义、生成内容,输出时再转回人类可读文本 。
向量数据库:
向量数据库是专门存储、管理高维向量数据的系统,核心通过向量相似性(如余弦相似度、欧氏距离)实现检索。它将文本、图像、音频等非结构化数据,经模型(如大语言模型)转换为 “向量嵌入”(高维数字数组,可分为不同维度,维度越大,运算量越大),再存储这些向量并为其建立索引,支持快速相似性搜索
核心指标:
-
检索性能
- Top-K 召回率 = (\frac{R}{M})(衡量 Top-K 结果覆盖了多少真正相关数据)。
- Top-K 准确率 = (\frac{R}{K})(衡量 Top-K 结果中有多少是真正相关的)
- 查询延迟:从发起查询到返回结果的时间,直接影响用户体验(实时推荐场景需亚秒级响应)。
-
存储能力
- 向量规模:支持存储的向量总量(如亿级、十亿级),决定系统对数据增长的承载能力。
- 压缩效率:通过量化(如 PQ 压缩)等技术减少存储占用,平衡精度与成本。
度量方式(即向量坐标相似度的计算)
| 数据类型 | 推荐度量 | 原因 |
|---|---|---|
| 文本 / 语义向量 | 余弦相似度 | 关注语义方向,忽略词频差异(长度)。 |
| 空间坐标 / 数值特征 | 欧氏距离、曼哈顿距离 | 关注绝对位置或线性差异。 |
| 二进制编码 / 哈希向量 | 汉明距离 | 直接计算二进制位差异。 |
| 高维稀疏向量 | 余弦相似度、曼哈顿距离 | 避免高维下欧氏距离的 “维度灾难”。 |
记忆
- 短期存对话窗口(如最近 5 轮,粒度是 utterance),用列表 / 缓存;大模型本身具有上下文,但是限于token限制,时间维度长了之后,自己本身无法筛选有效信息,可以利用列表筛选符合自己的上下文;或者记录对应的历史动作,通过提示词传入
- 长期存向量库(Embedding 历史关键信息),检索相似上下文辅助决策。
- 总结为如下:
| 场景类型 | 纯依赖大模型上下文 | 手动实现短期记忆 | 推荐方案 |
|---|---|---|---|
| 闲聊机器人 | ✅ 简单可用 | ❌ 没必要 | 列表缓存 |
| 多轮任务协作 | ❌ 超窗口会断逻辑 | ✅ 需精准控制历史 | 结构化记忆 |
| 高成本场景(如 GPT-4) | ❌ Token 费爆炸 | ✅ 压缩历史降低成本 | 向量压缩 |
提示词
指如何与大模型沟通的原则,说的越好,越理解你的需求,主要原则如下
- System 定位清晰:需明确具体功能定位,如 “你是一个关键词生成器”“你是一个摘要提取工作者” ,避免模糊表述(如 “你是一个智能助手” )。
- 输入信息有明确介绍:要清晰说明输入内容,像 “输入文件 XXX.txt 记录了用户的属性信息”“目前两份埋点设计资料 sheet,第一个埋点事件属性 sheet 为分场景及业务下的埋点方案,第二个场景通用 sheet 为系统预置的通用埋点” ,不能简单说 “这是输入文件” 。
- 详细具体的学习步骤:需明确学习及后续操作步骤,例如 “请你学习以上资料和 sheet 文件,后面你将根据资料进行埋点设计,设计步骤如下:步骤 1:提炼关键词并挖掘可能发生的事件信息;步骤 2:关联学习文档并挑选关联埋点数据;步骤 3:根据关联埋点数据,输出埋点设计方案” ,避免步骤模糊(如 “请你根据历史文件和业务描述提炼本次业务中可能涉及的埋点信息” )。
- 详细的输出方式和样式:明确输出格式要求,如 “根据关联埋点数据,输出 JSON 格式的埋点方案” ,而非笼统说 “根据关联埋点数据,输出埋点设计方案” 。
- 重要内容 “举例说明” :对输出等重要内容,需举例清晰说明格式,如说明输出 JSON 格式埋点方案时,列举 “行业:xxx,板块:xxx,事件名:xxx(事件名命名参照大蛇模式命名法),事件显示名:xxx,属性名:xxx(蛇形命名法(snake case,属性显示名:XXX,属性类型:xxx)的 JSON 格式。其中输出必须包含行业、板块、事件名、事件显示名、属性名,属性显示名,属性类型” ,不能仅说 “根据关联埋点数据,输出 JSON 格式的埋点方案” 。
- 英语提示优于中文提示效果:如功能定位用 “You are a Keyword Generator” 比 “你是一个关键词生成器” 效果好 。
所以一个智能体调用的大致逻辑为
输入--->查询向量数据||调用tool--->筛选向量数据,生成提示词--->输入给大模型--->返回结果
当然这个链可以非常多节点,节点的输出可以作为下个节点的输入;有兴趣可以看看LangChain框架