20250206
在学习agent的同时阶段性遇到的问题
什么是llm?
LLM(Large Language Model)是一个基于 Transformer 的概率语言模型,本质是:
给定上下文 token,预测下一个 token 的概率分布。
-
LangChain / LangGraph:目前最流行的框架。
LangChain提供了链、工具、记忆等基础组件;LangGraph则在它之上,专注于构建有状态的、复杂的工作流(比如循环、分支),是开发高级Agent的标配。 -
LlamaIndex:更擅长与私有数据结合,常用于构建具有深厚知识库的Agent。
-
AutoGen / CrewAI:支持多智能体协作,让多个AI角色分工合作完成任务。
什么是ai agent?
ai agent 基于llm实现的具备主动执行里的“智能助手”,而llm仅支持被动回答
AI Agent = LLM + 状态(State)+ 工具(Tools)+ 决策循环(Loop)
那么如何基于llm实现ai agent呢?
正常的llm一般都已经是经过一定的训练数据的模型,会根据用户提出的问题按训练的方式生成一个答案(因为目前开源的大模型一般训练数据都没有实时性的,所以一般使用的时候会搭载一个本地向量数据库,进行查询然后再给大模型进行结果增强生成(这个过程也可以称为RAG))
若是在代码里面定义并赋予给llm一定的权限便就是一个特定情况下的ai agent
例如:写了一段代码明确定义了一个购物的api,并告诉llm这个api的入惨和格式,下次有需要查询购物时,llm就可以短暂化身ai agent帮你购买一些物品
什么是RAG(检索增强生成)?
RAG 是一种架构模式,检索、增强、生成是一套流程
首先对私人数据存入向量数据库,然后根据用户问题去向量数据库检索到一个最相近的答案,最好交给大模型进行最终答案的生成,这套工作模式成为RAG
什么是向量数据库?
向量数据库存储的是高维向量(通常 128~1536 维),并基于距离函数进行近邻搜索,查询的时候会根据问题查询到最相似(值最近)的一个数据返回结果
它和传统数据库有什么区别?
传统的关系型数据库mysql或者oracle是为了处理精准查询的结果(不过最新9.0+的mysql好像也支持向量数据类型了),核心索引:B+树
而向量数据库Milvus (“图 + 分桶 + 压缩文件”的组合结构)是为了查找到最近的一个近似值,处理像不像的问题,核心索引:图
主流索引:
| FLAT | 数组 | 精确、慢 |
| IVF_FLAT | 聚类 + 数组 | 快、近似 |
| HNSW | 多层图 | 最快(内存) |
| IVF_PQ | 聚类 + 压缩 | 省内存 |
| DiskANN | 磁盘图 | 超大规模 |
结构
Collection(表)
└── Segment(数据文件)
└── Index(ANN)
2026 - 02-07
向量数据库是怎么存储和查询的?
在存储时会先把知识载体进行向量化,一般知识长度和密度足够集中的话是不需要切片的,除非是长文档或者多问题(长文档和多问题怎么定义的,他是怎么知道的,比如1+1等于多少2+2等于多少,也很短但是是两个问题),而且会以一个向量对象的结构进行存储,比如这个知识:“2026年2月7号河南天气是晴天”,
{
id: xxx,
vector: [0.012, -0.998, ...], ← 高维向量
metadata: {
text: "2026年2月7号河南天气是晴天",
date: "2026-02-07",
location: "河南"
}
}
然后当用户提问时:
一般会把整个问题进行向量化(多个问题会不会切片),然后到向量数据库ANN 搜索查询,查到向量相近一些的数据,然后结合 metadata内容以上下文的方式拼接到用户问题上面统一交给大模型回答,生成最终回答
注:向量数据库解决的是“语义相关性”,而不是“事实正确性”或“逻辑推导”。向量数据库只是用来增强模型的实时性的(模型自身拥有推理能力)
长文档和多问题怎么定义的,他是怎么知道的,比如1+1等于多少2+2等于多少,也很短但是是两个问题?
一般在入库前在代码逻辑中根据文件格式和token数量进行判断,然后才会给embedding模型进行向量化,而embedding模型一般都会选中与业务耦合度强的模型,这样切片时和向量化有更优的表现,并且会根据指定的一系列规则去判断
向量数据库一般怎么计算是否相似的?
一般会用三角函数和空间向量的公式计算,计算出来的值越趋近0离的越远,越趋近1离的越近
-
余弦相似度
-
假设:
Step1:点积
Step2:模长
Step3:余弦
说明:
-
-
或欧氏距离 / 内积
-
假设数据库里有三个向量(3维方便演示):
查询向量:
用欧氏距离计算
公式:
-
-
场景 推荐距离 图像特征 欧氏 推荐系统 内积 语义搜索 余弦 原因:
图像特征中:
所以距离有意义。
20260213
向量数据库是怎么知道谁和谁近似的?
首先在每个问题或者知识添加的时候都会形成一个高维度的向量,可以抽象的理解成一个点,当用户提出问题之后会把这个问题转化为向量坐标,然后根据这个坐标找到距离最近的top-k坐标然后就找到了相关的数据?
向量不是用来比较两个对象的吗?那为什么单条数据也能被向量化?
首先向量化的时候通常会选取一个专业的embedding模型,然后embedding模型会根据知识或者问题语义进行向量化转化,最好存到向量数据库中
embedding 模型负责把数据映射到语义向量空间;向量数据库负责在这个空间里找最近邻。
embedding 怎么“知道语义”?
这里其实涉及到了机器学习方面的知识暂时没有深究,embedding 不是提前存了一堆关键词,而是根据某个特定的规律计算的,
就像:
-
牛顿没存所有物体轨迹
-
他存的是运动规律
暂时理解为是一个公式吧
维度越大时会不会出现问题?
首先每个知识都会有一个维度,每个维度都由embedding转化的一个语义编码
目前主流 embedding 维度分布:
| 场景 | 推荐维度 |
|---|---|
| 搜索 / RAG | 384 – 768 |
| 推荐系统 | 64 – 256 |
| 多模态 | 512 – 1024 |
| 超高精度语义 | 1024 – 3072 |
| 任务 | 需要语义复杂度 |
|---|
| 商品推荐 | 低 |
| 文本理解 | 中 |
| 法律问答 | 高 |
| 科研检索 | 极高 |
embedding 默认是 768 或 1536
什么是skills?
非特殊说明,本博所有文章均为博主原创。
如若转载,请注明出处:https://jiaheming.cn/2026/02/ai-agent-rag/

共有 0 条评论