什么是大模型
大模型,LLM(large Language ),大语言模型
token
Token是大模型处理文本的”基本单位”,它既不是一个字,也不是一个词,你可以理解为把文字”切碎”后的一个个
小碎片。
比如”我今天心情很好”,不是一个字是一个token,而是”我”、“今天”、“心情”、“很好”对应1~2个token
上下文窗口
大模型每次对话时,能看到的内容总量上线,用token来衡量
就像黑板,没有记忆的话,之前讨论的东西就记不住了
除非压缩,即把写过的内容精简
无记忆
大模型不会记忆,它之所以给人记住了的感觉,是因为应用层的代码负责记忆,应用都会把你们之前的所有历史对话,给AI看
对话的角色结构
system、user、assistant
既然多轮对话是靠传历史列表实现的,那这个列表长什么样?
调用大模型 API 时,你传入的不是一段裸文字,而是一个有结构的消息列表,每条消息都有一个角色(role):
system:系统提示,给模型的身份设定和行为规则。比如「你是一个 OnCall 助理,只能回答和系统故障相关的问题,回答必须简洁」。这部分用户看不见,但模型会严格遵守user:用户的输入,就是你说的话assistant:模型之前的回复,多轮对话时,把历史回复也打包进来,模型才知道「之前说了什么」
用伪代码表示,大概长这样:
1 | messages = [ |
模型看到这整个列表,才能知道「用户在问什么、之前说过什么、我应该怎么回答」。
这个结构非常重要,后面学 Prompt 的时候,我们会专门讲怎么用好 system 角色,它是控制模型行为最核心的手段
这个角色就像是我们在写提示词的时候为什么要经常给AI说,你是什么什么,然后怎么怎么样,看到这里似乎我了解的更深了一点了
大模型不能做什么
能做什么我们丰富的工程经验已经很了解了
不能做什么?
1.没有执行能力,不能和外部世界交互。这个时候就需要很多的这个tool,MCP这些呀
2.知识有保质期,还容易瞎编,也就是它不知道的情况下不一定会说我不知道,而是可能瞎编,也就是我们说的幻觉
3.上下文窗口邮上线,内容太长了就记不住
我们RAG就是要解决这个问题,不把全部内容塞进窗口,而是按需检索最关键的片段
什么是prompt
prompt,这个概念应该是我24年刚高考完建立的,当时用mid画画那个,每次要画图都要先输入下/prompt
写好prompt的6个核心原则
1 | 1.首先就是前面说的,你要和AI说你是什么什么身份 |
在agent开发中,只有一个行为能控制大模型,就是prompt
什么是agent
我的理解是大模型,或者说几年前看到的那种AI,就是对话式的,只能回答问题,好的能生成图片视频啥的。更多方面的生产上还是没有用到
agent,用上了工具,可以在我们电脑本地写word或者网页直接上手写东西,都是一点问题没有的
agent的四个组件
1.LLM,大模型
2.tools,工具
3.Memory,记忆
4.Loop执行循环,不断重复思考,行动,观察这个循环,直到任务完成
agent的工具原理,ReAct,推理,观察,再推理的这样一个过程
agent的另外一个工作原理,Plan and execute
之前的这样一个逻辑是说,ReAct是边想边做,任务多了容易迷路,然后
token消耗的也比较多等等问题
ReAct=边开车边看导航:每走到一个路口,才决定下一步拐哪。灵活,但如果最开始方向就偏了,容易绕很
多冤枉路
PlanandExecute=出发前规划好完整路线:先打开地图,把走哪条路、哪里转弯、预计几点到全部规划
好,再出发。执行时按路线走,不用每个路口重新想
所以这个PlanandExecute就有两个阶段,一个是设定目标,另一个是执行
任务步骤少,就是ReAct
多就是PlanandExecute
再复杂就是PlanandExecute做外嵌,每个子任务内部跑ReAct
workflow(工作流),就是提前写好一个确定的流程
tool
这个可能就按照字面意思理解可能就足够了的
Function Call
一个工具就是:函数本体+名称+描述+参数定义,大模型靠工具描述来判断要不要调这个工具
但是大模型只会说话,agent调用工具的话就必须知道调哪个工具,什么参数
Function Call的本质是一套大模型和agent之间的标准化工具调用协议
用一套固定的json结构返回调用命令
大模型根据我们开发者写的文档,决定要不要调用某工具之类的
然后大模型调用的时候就会严格按照格式调用传参
然后工具返回结果,agent把结果回传给大模型
MCP
我初步的一个理解是,agent要用到浏览器或者BP抓包的时候,要配置个这玩意
这个就是类似type-c,现在手机充电都是这玩意,以前苹果有自己的,安卓有自己的,菠萝有自己的
然后又要有对应的线,电脑上又得支持这么多线
MCP就是统一起来了的。工具写一个MCP server 。然后AI应用各写一次MCP clicet,然后一个工具就只要一个了。就像只要一个type-c的线,各种手机都能冲上电了
MCP server的三种能力,其实也就像我觉得,用MCP连接上浏览器,确实有点像一个工具了
1.tools
2.resources
3.prompts
有无MCP对比
每个工具自己写Function Call
有就是直接接入已有MCP server,工具现成可用
skills
应该这样说,prompt是skill的灵魂,但不是全部。因为skills会有脚本啥的也算在其中呀,就肯定多了对应情况直接调用脚本的这个
RAG
我现在的理解就是先检索,再回答
中间的四个步骤也算是比较清楚
就是
1.加载文档
2.文本切块
3.向量化
4.存入向量数据库
没有RAG,无法访问,模型只有通用知识
有RAG,可以基于私有知识
向量数据库
这个就需要比较深厚的基础知识了
| 对比维度 | 普通数据库(MySQL) | 向量数据库(Milvus/Pinecone…) |
|---|---|---|
| 核心用途 | 结构化数据存储和精确查询 | 向量存储和相似度搜索 |
| 索引结构 | B+ 树(适合精确匹配/范围查询) | ANN 索引,如 HNSW(适合近邻搜索) |
| 查询类型 | id = 5、age > 18、LIKE 匹配 | 找 top-k 个最相似向量 |
| 向量相似度查询 | 不支持(只能暴力全表扫描) | 原生支持,毫秒级 |
| 百万级向量查询速度 | 数秒(暴力遍历,不可用) | 毫秒级(ANN 索引加速) |
| 数据形式 | 表格(行列结构) | 向量 + 元数据 |
| 适合 RAG 吗 | 存能存,查不行 | 专为这个场景设计 |
harness
prompt,更像是塑造模型的概率空间
context,管理上下文
harness,让模型在真实执行中,持续做对。
Prompt是Context的一部分,Context是Harness的一部分。
理解的话,就像是这个单词本来的一个意思,限制,马缰的这么个意思
模型就像是下线,然后Harness就像是下线
驾驭工程,从原来的提示词把问题讲清楚,到把信息搜队,再到让模型在真实环境中持续做对
之前模型没有做对,我们往往从提示词出发,可以再考虑说agent.md加一条规则,补一个自动化测试等等
loop
也像这个单词的字面意思
循环
发现任务,布置任务,检查结果,决定下一步
这一套流程设计成一个能自己运转的循环
一个提示词是本次得到的答案变好了,loop,收益是,之后每一次循环都变好