2026-01-130

背景

随着各种LLM的普及,ai agent的开发逐渐成为后端开发的必备,所以需要掌握相关的知识是后端所必须的 这里主要记录一些agent开发相关的基础知识学习

参考文章

技术架构

  • python 相关框架 langChain LangGraph
  • golang 相关框架 eino 是字节跳动开源的一款基于 Go 语言 的大模型(LLM)应用开发框架

agent 和 workflow的区别

  • Workflow(工作流):人提前设计好流程,AI按固定步骤执行。
    • 特点
      • 可预测
      • 稳定
      • 容易测试
      • 适合重复性任务
    • 缺点
      • 无法处理未知情况
      • 流程复杂,维护会越来越苦难
  • Agent(智能体):人给目标,AI自己决定下一步做什么。
    • 通过不断执行:观察 → 思考 → 行动 → 再观察 的方式执行
    • 特点
      • 灵活
      • 能处理未知情况
      • 能调用工具(搜索、数据库、代码等)
    • 缺点
      • 成本高
      • 结果不可完全预测
      • 测试复杂

RAG(Retrieval-Augmented Generation 检索增强生成)

  • 描述:一种结合了信息检索和文本生成的技术

  • 核心思想:

    • 在生成回答之前,先从外部知识库中检索相关信息,
    • 然后将检索到的信息作为上下文提供给大语言模型,
    • 从而生成更准确、更可靠的回答。
  • 工作流程

    • 首先在数据准备阶段,系统通过数据提取、文本分割和向量化,将外部知识构建成一个可检索的数据库。
    • 随后在应用阶段,系统会响应用户的提问,从数据库中检索相关信息,将其注入Prompt,并最终驱动大语言模型生成答案。
  • 核心词汇拆解

    • Retriever (检索器): 这是 RAG 架构中的关键组件。它的任务是根据用户的问题,去向量数据库(如 Milvus, Pinecone)中寻找最相关的文档片段。
    • Knowledge Tool (知识工具): 在 Eino/ReAct 模式中,知识库搜索被封装成了一个 Function Call (函数调用)。Agent 并不是每次都去查知识库,而是当它觉得“我不知道这个信息,我需要查一下手册”时,才会主动调用这个工具。
  • 为什么agent需要记忆和rag

    • 无状态导致的对话遗忘
    • 模型内置信息的局限性
  • memory_tool负责存储和维护对话过程中的交互信息,

  • rag_tool则负责从用户提供的知识库中检索相关信息作为上下文,并可将重要的检索结果自动存储到记忆系统中

memory记忆分类

  • 工作记忆(当前会话的上下文)
  • 情景记忆(完整的交互过程中的上下文)
  • 语义记忆(用户偏好、需要长期执行的指令等)
  • 感知记忆(专门处理图像、音频等多模态信息,并支持跨模态检索)

遗忘机制

  • 基于重要性(删除重要性低于阈值的记忆)
  • 基于时间(删除过时的记忆)
  • 基于容量(当存储接近上限时删除最不重要的记忆)

RAG中文档切割的策略有哪些

  • 切割存在的问题
    • 切的太大,检索精度下降
    • 切的太小,导致丢失上下文
  • 策略
    • 固定大小切割
    • 递归字符切割(最常用)
      • 核心思想: 按照文本的自然边界来切
    • 基于文档结构的切割
      • 核心思想: 利用文档自身的格式结构(case: markdown、代码文件、pdf)
    • 语义切割
      • 基于内容的语义相似度来决定在哪切
    • Agent 驱动的智能切割
      • 思路: 用LLM 本身来判断应该怎么切

Prompt 太长会怎么样

  • 注意力稀释,导致出现幻觉
    • case : 会议太长,无法记住所有内容,迷失在中间(只能记住头尾记不住中间的所有内容)
  • 物理缓存瓶颈
    • case: 后台分配巨大的缓存空间

Function Calling 是什么

就是 LLM 输出一个结构化的 JSON,告诉你它想调用哪个函数、传什么参数。

  • 整个流程通常是这样的:
  1. 你告诉 LLM:"这里有一些函数可以调用,每个函数的名字、参数、用途是……"
  2. 用户发消息:"帮我查一下明天北京的天气。"
  3. LLM 回复:"我要调用 get_weather 函数,参数是 city='北京', date='明天'。"
  4. 你去调用这个函数(真的去查天气 API),得到结果。
  5. 你把结果塞回给 LLM:"刚才的函数调用返回了:温度 25 度,晴天。"
  6. LLM 基于这个结果,给用户一个自然语言回答:"明天北京晴天,温度 25 度,很舒适。"

prompt怎么写(怎么优化)

  • zero-shot 零样本提示 : 直接向模型提问,只能回答简单的问题,无法解决无法的场景,比如算术题
  • few-shot 少样本提示: 给出一些样本(几个高质量的问答),解决不了链路很长的场景
  • chain-of-thought(CoT) 思维链 (相当于给样本的时候,同时给出了解题步骤)

top K值怎么设置

  • 两阶段阈值
    • 先进行粗排Recall(保召回),然后进行精排ReRank(保质量)
  • 动态阈值
    • 定义一个分数线标准,如果任然不符合标准, 有多少符合,就选多少个

RAG检索阶段用的是双编码器(Bi-Encoder)

  • 把查询和文档分别编码为向量,然后通过计算向量之间的余弦相似度来判断相关性
  • 不足: 无法提前预判用户的问题,只能将文档生成为泛化、平均化的语义向量
  • 优势: 快,文档的向量一开始已经生成好了,查询时,只需要将查询向量化后,做向量相识度抖索就可以了

Re-rank(重排序)

  • 使用的是cross-Encoder(交叉编码器)
    • 把查询和文档拼在一起,让模型同时看到两者
  • 优点: 能更加精确的分析查询
  • 缺点:太慢,因为要将查询和所有候选文档都拼在一起推理一遍
    • 优化方式: 两阶段检索
      • 先用Bi-Encoder进行粗排
      • 再用cross-Encoder进行细排

Bi-Encoder的缺陷

  • 信息压缩损失
  • 缺乏查询意图感知

Step-back prompting(后退一步提问)

  • 先引导模型思考一个与当前具体任务相关的通用性问题,
  • 然后将该通用问题的答案作为上下文,
  • 输入到后续处理具体任务的prompt中,从而提升模型表现。

Top-K实战建议

  • 先检索50-100个候选
  • 再重排到top5 或top10
  • 使用重排的前提
    • 粗排top-1的分数低于某个阈值时,才启动重排序

一个工业级的 Prompt 通常包含( 如何写prompt):

  • Role (角色): 定义 AI 的专业背景(如:你是一个资深的 POI 数据清洗专家)。
  • Context (背景): 提供任务的具体场景、原始数据格式、业务限制。
  • Task (任务描述): 明确具体要干什么,避免歧义。
  • Constraint (约束): 规定不能做什么(如:禁止幻觉、输出长度限制、严禁返回非 JSON 格式)。
  • Output Format (输出格式): 强烈建议要求 JSON。在 Agent 开发中,结构化输出是后续代码处理的前提。
  • Few-shot (示例): 提供 2-3 个高质量的输入输出样本,这是提升模型稳定性最有效的方式。

怎么保证模型的输出稳定的保持结构化输出

  • 最直接的方法就是在prompt中明确要求格式输出,并提供格式示例
  • 但更通用的方式是现在的大部分框架都支持强制要求模型按照指定的格式进行输出
    • 原理是会把 JSON Schema 转换成 grammar,并且每生成一个 token 后动态判断下一批合法 token

工程理解

image.png

短期记忆和长期记忆

LLM 原生是失忆的——每一次对话都是全新的,除非你把上下文塞进去。 而 Agent 需要记住很多东西:

  • 短期记忆:刚才用户说了什么?我上一步调用了什么工具?得到了什么结果?
  • 长期记忆:用户的偏好是什么?过去类似任务是怎么处理的?有哪些经验教训?
记忆类型存储内容实现方式
短期记忆当前会话的对话历史、中间步骤直接放入 LLM 上下文窗口
长期记忆用户偏好、历史任务、知识文档向量数据库 + 相似度检索
摘要记忆压缩后的历史总结让 LLM 定期生成摘要

规划的常见策略:

  • 链式思考(Chain-of-Thought):一步一步想清楚,先做什么、后做什么。
  • 树状规划(Tree-of-Thought):同时考虑多个可能的路径,选最优的。
  • 反思(Reflection):做完一步后回头看看,有没有问题,需不需要调整。

什么是工具的 JSON Schema

要让 LLM 调用工具,你得先告诉它有哪些工具可用。这个告诉的过程,就是用 JSON Schema 描述函数。

本文作者:曹子昂

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!