Agent学习
LLM(Large Language Model)
学习视频
从 LLM 到 Agent Skill,一期视频带你打通底层逻辑!_哔哩哔哩_bilibili
什么是LLM
大模型本质上是一个庞大的数学函数,大模型的运作逻辑一句话概括就是词语接龙,先吐出预测频率最高的,再一个一个拼词语,比如:特别-->得-->棒,直到完成一句话,加上结束符号
但因为它学的数据量实在太大了,这种「接龙」的效果好到令人吃惊
Token(运行的最基本单元)
LLM是以庞大数学函数运行的,他一直在进行矩阵运算,接受的是数字,吐出的也是数字,需要有人把数字进行编码和解码--Tokenizer
Tokenizer
Tokenizer需要完成两件事,编码和解码,编码需要切分和映射,句子被切分成词语,词语就是Token,被映射的数字就是Token ID,但并不是一个词语对应一个Token,Token是模型自己学会的一套文本切分规则,切出的每一块是他一次能处理的最小单元
1Token ≈ 0.75个单词、1.5-2个汉字

解码就只需要映射,将Token ID映射成token就行了
Context('临时'上下文)
Context包含对话历史、用户问题、当前输出、工具列表、System Prompt(系统提示词,但现在因为模型的性能提升在逐步减少提示词)

Context Window
Context Window表示Context能容纳的最大Token数量
RAG技术(Retrieval-Augmented Generation)
检索-增强-生成
为解决Context过长的问题,采用了RAG技术,大致是从一整套手册中提取用户问题最为匹配的几个片段,只把这几个片段发给大模型,LLM只根据这几个片段回答,这样整个手册就被拆成几个片段组成(Context小)且回答精度较高,成本也低
实际上是两步 先从资料库里检索相关内容,再基于这些内容来生成答案
RAG的基本运行流程
将大文本切割成多个片段,当用户问题命中某些片段时,将问题和片段一起发送给LLM,RAG流程主要包含两个部分
准备(提问前)
在这一部分,我们需要在用户提问前,把相关文档准备好并完成相应的预处理,主要包含分片和索引
分片
将文档分成多个片段,可按照字数分、段落分、章节分、页码分
索引
通过Embedding将片段文本转换为向量,再将片段文本和对应向量都存储在向量数据库中
Embedding
将文本转换为向量的一个过程,含义相近的一句话经过embedding后,他们对应的向量也是相近的,当用户提问时,可以将提问进行embedding,然后根据向量相似度把这个问题相关的文本找出来,最后把命中的文本和用户的问题一起发给大模型,embedding也是靠模型完成的,只不过是专门的embedding模型
一句话感觉就是整了个方便LLM查询的知识库,让LLM在上下文更短的情况下获取更关键的信息
回答(提问后)
在用户提问后,我们会走进召回->重排->生成 这个环节
召回
搜素与用户问题相关片段的过程

返回结果由向量相似度决定,现在有 余弦相似度、欧氏距离、点积等,特点是成本低耗时短、准确率低,只能作用于初步筛选
重排
重排,全程重新排序, 过程和召回是一样的,是从召回的结果里面在挑几份与用户问题最相似的作为重排的结果,相当于提纯了一遍,其计算逻辑和召回不一样
一般是使用cross-encoder模型将每个片段与用户问题 计算相似度,耗时长,成本高,准确率高
生成
现在我们有用户问题,与用户问题相关的几个片段,现在将这两部分一起发送给LLM,让他根据片段内容回答用户问题
Prompt
提示词,用户输入的东西,LLM接受并回答,越清晰具体的Promt越能决定LLM的输出质量(目前来说依旧如此,但我们的提示词工程已经越来越不需要了,或者说内置在模型里面了)
Prompt现在大致分为User Prompt和System Prompt
User Prompt 主要是用户输入,告诉LLM具体任务
System Prompt 是开发者后台配置的,主要是约束+执行的边界
MCP(Model Context Protool / 模型上下文协议
因为每个LLM平台的接入标准不一样,一个Tool可能需要写很多接入规范

为了方便使用,让所有平台遵循统一标准,这样开发者只需要写一次代码,于是诞生了MCP--统一的工具接入标准
mcphost
调用mcp的平台
MCP Server
就是一个程序,只不过该程序的执行符合mcp协议,大部分是本地通过node或者python启动,不一定完全需要联网
在mcpserver里面会内置tool(函数)
transportType
mcpserver的沟通方式,一般有两种,stdio和sse,使用stdio的话mcpserver会使用他的标配输入输出
mcp协议

mcp协议规定的是mcpserver和平台直接的交流格式,没有规定LLM如何与mcpserver交互
Tool
本质上是一个函数,该函数可以使LLM使用工具

整个对话是:用户->平台->LLM->天气查询Tool
LLM没有调用工具的能力,唯一能力就是输出文本,LLM需要使用工具就要向平台发送指令,然后由平台去调用Tool,拿到对应信息,发送给LLM,大概如下

该对话中,LLM职责是选择Tool和归纳总结发送信息,Tool需要完成平台发送的指令(该指令由LLM生成)并返回结果,平台负责告诉LLM哪些Tool可用,该Tool的命令方式
Agent

该次对话,LLM具备了自主规划能力、自主调用工具能力,持续工作直至完成用户任务,我们把具备该系统的LLM称为Agent
Agent 构建模式
skill
本质上是提前写好塞给Agent的一份说明文档,整体结构分为两部分--元数据层(相当于说明文档的封面,告诉Agent这份skill叫什么[name]、做什么[description])和指令层(无特定格式要求,只需要告诉Agent干嘛就行)

浙公网安备 33010602011771号