AI专栏
MCP
RAG的局限性
对于AI来说,RAG仅仅是外部知识库,AI只起到一个总结效果。而总结的效果取决于向量相似度匹配,可能遗漏关键信息。
direction: right |
- 生成内容不完整:RAG处理的是文本的切片,因此无法看到整篇文档信息。
- RAG无法判断需要多少切片才能解决问题。
- 多轮检索能力弱。
MCP基础
Function Calling
Coze的Agent就是基于Function Calling思路封装的。
不过Function Calling成本比较高,需要模型经过专门训练微调才能稳定支持。
这导致有些模型不支持某些插件的调用(例如Trae只有选择Sonnet、GPT等模型才可以处理图片)。
另外,Function Calling不是一项标准,许多模型的实现细节不一样。
Model Context Protocol
MCP是一项标准协议,简单来说就是通用的接口,使AI-外部工具/数据源交互标准化、可复用。
Claude Desktop、Cursor这样的工具在内部实现MCP Client,这个Client通过MCP协议与MCP Server(由服务提供公司自己开发,实现访问数据、浏览器、本地文件等功能,最终通过MCP返回标准格式)交互,最终在MCP Host上展示。
MCP 传输方式
STDIO,本地环境
SSE,并发量不高,单向通信
Streamable HTTP,高并发,需要维护长连接
指标 | Function Calling | Model Context Portocol |
---|---|---|
协议 | 私有协议 | 开放协议 |
场景 | 单次函数调用 | 多工具协同 + 数据交互 |
接入方式 | 函数直接接入 | 需要MCP Server + MCP Client |
耦合度 | 工具与模型绑定 | 工具开发与Agent开发解耦 |
调用方式 | API | Stdio/SSE |
MCP五大能力
- Tools:提供功能,使LLM能与外部系统交互
- Resources:提供内容和数据,为LLM和Client提供上下文
- Prompts:提供Prompt模板,引导LLM交互
- Sampling:Server借助Client向LLM发起完成请求,实现复杂功能。
- Roots:Client为Server提供一些资源地址,使Server知道去哪里获取资源。
MCP Server
基本功能
- 文件、数据访问。如File System MCP Server
- Web自动化:操作浏览器,如Puppeteer MCP Server
- 三方工具集成。如高德地图MCP Server
MCP Server集合(官方)
MCP.so
MCP Market
Cherry Stdio可以自动安装MCP Server,但是Windsurf就需要手动安装。
场景:MCP + 数据库,更好的RAG
可以通过MCP使LLM接入数据库,无须手动调用sql接口。
{ |
{ |
通过这种方式,可以比简单地将数据库内容放到知识库中实现更好的效果。
缺点
MCP会真的调用sql,如果让AI检索大量数据,会消耗大量token,阻塞MCP Client。
许多MCP Client依靠大量系统提示词来实现与MCP的通信,使用MCP,token消耗一定增加。
向量数据库
向量数据库专门存储和查询向量,核心就是相似度查询。
向量数据的特点是单条数据维度高、存储空间占用大。
向量检索只能做到相似查找,返回前K条数据。
chunk: { |
- 文本向量化(分词、分chunk,通过向量模型转化为向量)。
- 将向量化数据和原始文本一起存储到向量数据库。
- 向量模型检索向量数据库,并传参给LLM回复。
为什么分块
首先大模型输入有限制,其次文本分块,只检索关键文本,可以减少token消耗。
建立向量索引
想要加速向量搜索速度就需要向量索引。
FLAT索引
将向量以列表形式存储,不压缩和聚类。简单但是效率低。
倒排文件索引(无聚类)
IVF, Inverted File Index
- 单词词典:以文档文本单词作为主键(也就是说是唯一的),每个单词关联一个或多个文档ID。
- 倒排列表:记录每个单词存储在哪些文档中,以及单词在文档中的位置。
IVF聚类索引
IVF将原始数据划分为多个簇,为每个簇建立倒排索引,从而加快检索效率。
IVF_FLAT:聚类倒排+Flat结构,适合高精度,性能不高。
PQ, Produce Quantizer,乘积量化,通过向量分割与量化
IVF_PQ:通过乘积量化压缩向量,加速搜索
KD树索引
二叉树结构,存储多维向量数据。按照层级组织数据从而实现高效的向量搜索。
Ball树索引
非平衡树结构,类似于球形。
HNSW索引
Hierarchical Navigable Small World
图结构,通过分层图加速效率。在每一层将向量连接成图,查询时从高层图到低层图,直到找到最近邻。
HNSW在召回率和索引性能之间有较好的平衡。
Locality Sensitive Hashing
LSH将相似向量映射到同一个桶来加速检索。适合高维稀疏向量数据。
向量库
向量库存储静态数据。向量库只存储Embeddeing向量嵌入,不存储Embedding关联对象(因此不需要修改)。
- FAISS
- HNSWLib
- ANNOY
相似度
欧几里得距离
欧式算法通过距离来匹配相似度
欧式算法可以反映向量绝对距离,适合需要量化数据的场景。
例如推荐系统,需要的不仅仅是历史行为,还要历史数据的数值。
二维欧式距离
三维
依此类推…
余弦相似度
余弦相似度通过角度匹配相似度
很明显,余弦相似度只关注角度,适合高维相似度检索,如语义搜索、文档分类
余弦相似度范围从-1到1,1表示完全相似0度、0表示垂直90度、-1表示完全相反180度
向量点积除以向量模长
高维算法
点积相似度(投影)
不除以模长,与角度无关;对长度敏感,两个向量长度不同,方向相同,点积会受影响。
点积正数,两个向量正相关;点积为0,无线性相关;点积负数,两个向量负相关
高并发下大模型性能
- 首包延迟:用户首次接收到模型响应的时间,对于一些思考模型来说,可能会很长。
- 模型并发能力:有的大模型/平台有并发数限制。
- 输出超限:要计算token,看模型是否一次返回的内容过多,超出限制导致无效调用。[1]
- 兜底返回:调用模型有时时间太长,不确定模型有没有响应,最好设置一个超时重试时间。
- 多线程:使用线程池来多线程批量请求。
批量请求是指凑齐token为512,确保批次张量维度一致。
隐私计算
SecretFlow
举个例子,A、B、C三个人想要知道他们的平均工资,但是又不希望透露隐私,他们可以这么做:
过程加密
MPC
Multi-Party Computation
MPC,多方安全计算:使用MPC三方分别加密自己的数据,其他人不能解密
- 秘密分享法(Secret Sharing):把数据切片分发。
- 加密协议法:用加密算法让多方协作计算。
- 布尔电路/算数电路法:把整个计算过程拆成很多小步骤,每一步都用安全协议保护。
HE
Homomorphic Encryption
HE,同态加密:使用加密数据运算,但是仍然能得出相同的加密后的结果
普通加密只能保密,不能计算,但是同态加密专门设计成可以计算的加密算法,保证加密后运算的结果密文,解密后和明文计算结果一致。
- 部分同态加密,只能加或者乘,如Paillier
- 全同态加密,同时支持加和乘,如Gentry方案、CKKS
TEE
Trusted Execution Environment
TEE,可信计算环境:计算过程放在一个可信的小黑盒里,不让外面看见
TEE会在OS内部抽象出一个小黑盒,黑盒以外的部分,OS无法窥视黑盒的内容。
数据在TEE之外是加密的,在TEE之内才会解密运算。
如何保证计算结果正确
Remote Attestation
RA,远程认证:TEE启动会生成一份报告,包括TEE身份指纹、当前程序Hash、运行环境信息。根据Hash可以验证是不是同一份程序。
结果加密
DP
Differential Privacy
DP,差分隐私:在数据里随机加入噪音,让人类无法识别。在数据量庞大的时候,整体的噪音量是很小的,不影响计算结果。
FL
Federated Learning
FL,多方想要统计一份数据,如果是把多方数据汇合到一处进行统计,那容易泄露隐私。
因此联邦学习是将初始模型分发给各方,各方在本地统计、训练,最终将训练成果反馈给总部。
问小白就有这个问题 ↩︎