ai agent & RAG

Mr.Jia 2026-2-6 64 2/6

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离的越近

  • 余弦相似度

    • 假设:

      A = [1,2]
      B = [2,3]

      Step1:点积

      1×2 + 2×3 = 8

      Step2:模长

      |A| = √(1²+2²) = √5
      |B| = √(2²+3²) = √13

      Step3:余弦

      8 / (√5 × √13)
      = 8 / √65
      ≈ 0.992

      说明:

      几乎同方向 → 高相似
  • 或欧氏距离 / 内积

    • 假设数据库里有三个向量(3维方便演示):

      A = [1, 2, 3]
      B = [2, 2, 3]
      C = [9, 9, 9]

      查询向量:

      Q = [1, 2, 2]

      用欧氏距离计算

      公式:

      distance = √((x1−y1)² + (x2−y2)² + (x3−y3)²)
  • 场景 推荐距离
    图像特征 欧氏
    推荐系统 内积
    语义搜索 余弦

    原因:

    图像特征中:

    大小也代表特征强度

    所以距离有意义。

 

20260213

向量数据库是怎么知道谁和谁近似的?

首先在每个问题或者知识添加的时候都会形成一个高维度的向量,可以抽象的理解成一个点,当用户提出问题之后会把这个问题转化为向量坐标,然后根据这个坐标找到距离最近的top-k坐标然后就找到了相关的数据?

 

向量不是用来比较两个对象的吗?那为什么单条数据也能被向量化?

首先向量化的时候通常会选取一个专业的embedding模型,然后embedding模型会根据知识或者问题语义进行向量化转化,最好存到向量数据库中

embedding 模型负责把数据映射到语义向量空间;向量数据库负责在这个空间里找最近邻。

 

embedding 怎么“知道语义”?

这里其实涉及到了机器学习方面的知识暂时没有深究,embedding 不是提前存了一堆关键词,而是根据某个特定的规律计算的,

就像:

  • 牛顿没存所有物体轨迹

  • 他存的是运动规律

暂时理解为是一个公式吧

 

维度越大时会不会出现问题?

首先每个知识都会有一个维度,每个维度都由embedding转化的一个语义编码

目前主流 embedding 维度分布:

场景 推荐维度
搜索 / RAG 384 – 768
推荐系统 64 – 256
多模态 512 – 1024
超高精度语义 1024 – 3072
任务 需要语义复杂度
商品推荐
文本理解
法律问答
科研检索 极高

embedding 默认是 768 或 1536

 

什么是skills?

- THE END -

Mr.Jia

2月13日16:19

最后修改:2026年2月13日
0

非特殊说明,本博所有文章均为博主原创。

共有 0 条评论