算法基础概念
算法
梯度消失和梯度爆炸
梯度消失是深层神经网络中梯度逐层衰减接近于零的现象,导致浅层参数无法更新;
梯度爆炸则是梯度指数级增长至无穷大,造成训练不稳定甚至数值溢出
二者均源于反向传播的链式连乘效应
梯度消失的典型原因:
激活函数
- Sigmoid/Tanh:导数最大仅0.25 / 1,多层叠加后梯度指数衰减
$$ \sigma(x)=\frac{1}{1+e^{-x}}\qquad \sigma'(x)=\sigma(x)(1-\sigma(x))\\ \tanh(x)=\frac{e^x-e^{-x}}{e^x+e^{-x}} \qquad \tanh'(x)=\frac{4}{(e^x+e^{-x})^2} $$- ReLU:正区间导数为1,但负区间导数为0,可能导致神经元“死亡”引发梯度消失
网络层数太深
权重初始化不当
- 过小权重:前向输出小 → 激活函数饱和区→ 梯度消失;
- 过大权重:前向输出大 → ReLU输出爆炸 → 梯度爆炸;
大模型
弱模型无法结构化输出,怎么改进?
从 Prompt 约束、输出约束、错误重试和模型优化解决
可以通过 System Prompt 明确输出格式,并提供 Few-shot 示例,让模型学习字段结构和输出规范
如果推理框架支持,可以使用 Structured Outputs,将 JSON Schema 转换为生成过程中的语法约束,限制模型只能生成符合格式要求的 Token
在程序侧对输出的JSON进行校验,判断字段是否缺失、数据类型是否异常
如果校验失败,可以将错误信息反馈给模型,让它修复输出,并设置最大重试次数,避免 Agent 无限循环
提示词里的约束怎么设计?
- 规则具体化
- 规定正向与失败行为
- 减少冲突,明确优先级
- 将关键约束放到程序层执行
RAG
为什么既要 Embedding 又要 Rerank
- Embedding(向量检索):负责从海量文档中快速召回可能相关的候选文档,强调召回率(Recall)和检索效率
- Reranker(重排序):负责对召回的候选文档进行更精细的相关性判断,强调排序质量和准确率
Embedding 通常使用双编码器(Bi-Encoder),将 Query 和 Document 分别编码成向量,通过向量相似度进行快速检索
但这种方式将文本压缩成固定维度向量,可能损失细粒度信息,导致语义相似但无法回答问题的文档排名靠前
因此,我们使用 Reranker 对候选文档进行更细致的 Query-Document 相关性评估,把真正包含答案的证据排在前面
核心就是:Embedding 负责快速找到候选,Reranker 负责精细排序
为什么不能全部 Rerank
理论上可以,但在大规模文档库中计算成本过高
Agent
Agent loop
最典型的是 Reasoning → Action → Observation → Reasoning,也就是常说的 ReAct 模式
一个完整的 Agent Loop 包含
| 阶段 | 负责方 | 主要操作 |
|---|---|---|
| 1. Context | Runtime | 组织 Prompt、历史信息和工具定义 |
| 2. Reasoning | LLM | 分析任务,决定下一步行动 |
| 3. Tool Selection | LLM | 输出 Tool Name 和 Tool Arguments |
| 4. Tool Execution | Runtime | 检查权限并执行工具 |
| 5. Observation | Runtime → LLM | 返回工具结果、报错等 |
| 6. Iteration | Runtime | 更新消息历史,再次调用 LLM |
| 7. Termination | LLM / Runtime | 完成回答、请求用户介入或停止执行 |
LLM 负责决定调用什么工具,但工具并不是由 LLM 自己执行的
Agent任务结束
正常情况下,Agent 在每一轮根据当前上下文决定是否继续调用工具。当 LLM 认为信息足够、不再发起 Tool Call,而是生成 Final Answer 时,Agent Loop 就可以正常结束。
另外,Runtime 通常会设置最大迭代次数、超时、Token 预算等限制,防止 Agent 陷入无限循环。用户主动中断或不可恢复的工具错误也可能导致任务终止。


.webp)



 (1).png)