杂记 10
1 RAG
RAG 是检索增强生成(Retrieval-Augmented Generation)的缩写,是一种结合了信息检索与文本生成的技术框架。以下是关于 RAG 的详细介绍:
- 核心原理:RAG 的核心原理是通过动态引入外部知识来提升生成模型的效果。当输入问题或任务时,系统先从外部知识库中检索相关段落或信息,然后将检索到的信息与原始输入结合,为生成模型提供上下文支持,最后由生成模型基于增强后的上下文输出回答。
- 主要组成部分:
- 检索:查询外部数据源,如知识库、向量数据库或者网页搜索 API 等,常见的检索方法有全文检索、向量检索、图检索等。
- 生成:将检索到的信息提供给大语言模型(LLM),由 LLM 生成最终的回答。
- 发展历程:RAG 主要经历了 Naive RAG、Advanced RAG、Modular RAG、Graph RAG 和 Agentic RAG 等几种类型的发展。Naive RAG 是最基础的实现,Advanced RAG 在其基础上对检索前、检索、检索后分别进行优化,Modular RAG 是主流的工程化实现,Graph RAG 利用图检索能力增强了 multi - hop 检索和丰富上下文,Agentic RAG 则利用 Agent 能力让 RAG 有了智能化的思考分析,大大增强了检索能力。
- 优势:
- 动态知识更新:无需重新训练模型,只需更新知识库即可获取最新信息。
- 减少幻觉:生成内容基于检索结果,降低了编造事实的风险。
- 可解释性:答案可关联到具体文档来源,提高了回答的可信度。
- 挑战:
- 检索质量依赖:如果检索到的文档不相关,会导致生成的回答错误。
- 长文本处理:检索到的长文档可能包含冗余信息,需要进行摘要或截断处理。
- 延迟问题:大规模知识库检索可能会增加响应时间,影响用户体验。
- 应用流程:
- 构建知识库:从文本来源收集数据,利用特定管线提取文本、格式化内容并分块,通过嵌入模型将文本转换为矢量,最后存储在矢量数据库中。
- 查询和上下文检索:用户提交查询后,进行输入保护和查询矢量化,然后进行矢量搜索和重排序,检索出相关矢量。
- 响应生成:将顶层上下文与用户查询结合,通过预训练或调优的 LLM 进行处理,再进行后处理提升质量和安全性,最后将最终响应返回给用户。
- 产出监控:监控检索过程的时延和准确性、重排序的表现以及 LLM 推理的时延和质量等。
2 Embedding模型是什么?
要理解Embedding 模型,首先需要抓住其核心目标:将非结构化数据(如文本、图片、音频)或离散符号(如单词、ID) 转化为低维、稠密的数值向量(Vector),且向量的空间关系能精准反映原始数据的语义 / 特征关联。这种 “数值化” 的过程,是让机器理解、比较、计算原始数据的关键桥梁。
一、为什么需要 Embedding 模型?
机器无法直接 “理解” 文本(如 “猫” 和 “狗”)、图片这类非结构化数据,只能处理数值。但传统的数值化方式(如 One-Hot 编码)存在致命缺陷:
- 维度灾难:若有 10 万个单词,One-Hot 编码会生成 10 万维的向量(仅 1 个 1,其余全 0),计算成本极高;
- 无语义关联:“猫” 和 “狗” 的 One-Hot 向量完全正交(相似度为 0),但二者在语义上同属 “动物”,机器无法捕捉这种关系。
Embedding 模型正是为解决这些问题而生:它生成的向量不仅维度低(通常是几十到几千维,如 768 维),还能让语义 / 特征相似的数据在向量空间中距离更近(例如 “猫” 和 “狗” 的向量相似度远高于 “猫” 和 “电脑”)。
二、Embedding 模型的核心特性
一个优秀的 Embedding 模型,生成的向量需满足 3 个关键特性:
- 语义一致性原始数据的语义相似性 → 向量空间的距离相近。例:“苹果(水果)” 和 “梨” 的向量相似度高,“苹果(水果)” 和 “苹果(公司)” 的向量相似度低。
- 低维稠密性向量维度远低于原始数据的 “可能取值数”(如 10 万单词→768 维向量),且向量中每个元素都是连续数值(非 0 即 1 的稀疏向量),大幅降低计算成本。
- 任务适配性可根据目标任务(如文本检索、图片分类、推荐系统)优化,让向量更贴合任务需求(例如检索任务的 Embedding 会更侧重 “区分不同内容”,推荐任务会更侧重 “用户偏好匹配”)。
三、Embedding 模型的核心原理:如何生成向量?
Embedding 模型本质是基于深度学习的映射函数(可理解为 “翻译器”),输入是原始数据,输出是对应的向量。其训练逻辑围绕 “让相似数据的向量更近” 展开,主流实现方式分为两类:
1. 基于自监督学习的通用 Embedding(以文本为例)
这类模型无需人工标注数据,通过 “让模型从数据本身学习规律” 来生成向量,是目前最主流的方案(典型代表:BERT、Sentence-BERT、Word2Vec、GloVe)。以文本 Embedding 为例,核心训练思路是:
- 任务设计:通过 “掩码预测”(如 BERT 的 Masked Language Model)、“句子排序”(判断两句话是否连贯)等自监督任务,迫使模型理解文本语义;
- 向量提取:模型训练完成后,将文本输入模型,提取某一层(如 BERT 的 [CLS] token 层、Sentence-BERT 的句子均值层)的输出,即为该文本的 Embedding 向量。
例:输入句子 “我喜欢吃草莓”,Sentence-BERT 会输出一个 768 维的向量,这个向量就代表了这句话的语义。
2. 基于监督学习的任务特定 Embedding
若有标注数据(如 “文本 - 标签”“查询 - 相关文档” 对),可在通用 Embedding 基础上进一步微调,让向量更适配具体任务。例:在 “问答检索” 任务中,用 “用户问题 - 正确答案” 的标注对微调模型,让 “问题向量” 与 “正确答案向量” 的距离更近,提升检索准确率。
四、常见的 Embedding 模型类型(按数据类型划分)
不同类型的原始数据,对应不同的 Embedding 模型:
数据类型 | 典型模型 / 工具 | 应用场景 |
---|---|---|
文本 | Word2Vec、GloVe、BERT、Sentence-BERT、LangChain Embeddings | 文本检索(如 RAG)、文本分类、语义相似度计算 |
图片 | ResNet、ViT(Vision Transformer)、CLIP | 图片检索、图片分类、跨模态匹配(图 - 文) |
音频 | Wav2Vec、MFCC(传统方法,非深度学习) | 语音识别、音频分类(如区分音乐 / 人声) |
跨模态 | CLIP(Contrastive Language-Image Pre-training) | 跨模态检索(如 “用文字找图片”“用图片找文字”) |
五、Embedding 模型的核心应用场景
Embedding 的本质是 “将数据转化为可计算的向量”,因此所有需要 “比较、匹配、检索” 的场景,都离不开它:
- RAG(检索增强生成)这是文本 Embedding 最核心的场景之一:将知识库中的文档拆分为片段,用 Embedding 模型生成 “文档向量” 并存储到向量数据库;当用户提问时,将 “问题向量” 与 “文档向量” 计算相似度,快速召回最相关的文档,为 LLM 提供上下文。
- 推荐系统将 “用户” 和 “商品” 分别转化为 Embedding 向量,若用户向量与某商品向量距离近,说明用户可能喜欢该商品(如抖音推荐、电商推荐)。
- 语义搜索传统搜索基于 “关键词匹配”(如搜 “猫” 只能找到含 “猫” 的文本),而 Embedding 支持 “语义匹配”(搜 “可爱的小型宠物” 能召回含 “猫咪”“小狗” 的文本)。
- 去重与聚类计算文本 / 图片的 Embedding 向量相似度,将相似度高的归为一类(如新闻去重、图片聚类)。
六、主流的 Embedding 模型工具(实践中常用)
在实际开发中,无需从零训练 Embedding 模型,可直接使用成熟的开源模型或 API:
- 开源模型(本地部署):
- 文本:Sentence-BERT(轻量高效,适合句子级 Embedding)、BERT-base(通用单词 / 文本 Embedding)、Chinese-Sentence-BERT(中文优化版);
- 图片:ViT-B/32(轻量版视觉 Embedding)、ResNet-50;
- 跨模态:CLIP(支持文本 - 图片跨模态 Embedding)。
- 云服务 API(无需部署):
- OpenAI Embeddings(如 text-embedding-3-small,适合英文 / 多语言);
- 百度文心一言 Embedding、阿里通义千问 Embedding(中文优化更好);
- Hugging Face Inference API(直接调用开源模型的 API)。
七、关键指标:如何评估 Embedding 模型的好坏?
判断一个 Embedding 模型是否适合你的任务,主要看两个核心指标:
- 相似度准确性模型生成的向量相似度,是否与人类主观判断的 “原始数据相似度” 一致。例:人类认为 “医生” 和 “护士” 语义相近,若模型生成的二者向量相似度低,则模型效果差。
- 任务效果将 Embedding 向量应用到目标任务(如 RAG 检索准确率、推荐点击率)后,任务指标是否提升。这是最直接的评估标准(比单纯的相似度指标更重要)。
总结
Embedding 模型是 “机器理解世界的语言”—— 它将人类可感知的非结构化数据,翻译成机器可计算的数值向量,并且让向量的空间关系承载原始数据的语义 / 特征关联。无论是 RAG、推荐系统还是语义搜索,其核心能力都依赖于 Embedding 模型生成的高质量向量。
3 Agent Planning 范式是什么?
要理解Agent Planning 范式,首先需要拆解其核心概念:“Agent”(智能体)是具备自主决策、交互能力的 AI 实体;“Planning”(规划)是 Agent 为实现目标而制定多步行动序列的过程;“范式” 则是一套被广泛认可的、标准化的设计框架与方法论。
简言之,Agent Planning 范式的本质是:让 AI 智能体(Agent)像人类一样,通过 “目标拆解→步骤规划→动态调整” 的逻辑,自主制定并执行多步行动方案,以完成复杂任务。它解决了传统 AI“只能单步响应、无法全局规划” 的局限,是实现 “自主智能” 的核心技术框架。
一、为什么需要 Agent Planning 范式?
当任务从 “简单响应” 升级为 “复杂目标” 时,传统 AI(如单步工具调用、直接文本生成)会失效,核心痛点包括:
- 任务无法一步完成:例如 “帮我整理 2024 年 Q2 的销售数据,生成可视化图表并发送给老板”,需要拆解为 “获取数据→清洗数据→生成图表→发送邮件” 多步行动;
- 行动需要依赖上下文:例如 “根据用户昨天咨询的产品,推荐 3 个竞品”,需要先回忆(或查询)“用户昨天的咨询记录”,再执行 “竞品检索”;
- 过程中可能出现意外:例如调用数据接口时返回错误,需要规划 “重试接口→切换备用数据源→手动反馈” 等备选方案。
Agent Planning 范式正是为解决这些问题而生 —— 它让 Agent 具备 “全局思考” 能力,能自主拆解目标、规划步骤、应对意外,最终达成复杂任务。
二、Agent Planning 范式的核心要素
一个完整的 Agent Planning 范式,必须包含以下 4 个关键组件,它们共同支撑 “自主规划” 能力:
核心要素 | 作用说明 | 示例 |
---|---|---|
1. 目标(Goal) | 明确 Agent 需要完成的最终任务,是规划的起点与终点 | “生成 2024 年 Q2 部门费用分析报告”“帮用户预订下周上海的酒店 + 机票” |
2. 状态感知(State Awareness) | Agent 对 “当前环境 / 上下文” 的认知,包括初始信息、已执行行动、外部反馈等,是规划的依据 | - 初始状态:“用户提供了 Q2 费用的 Excel 表格路径”- 中间状态:“已完成表格数据清洗,发现 3 笔异常支出” |
3. 行动空间(Action Space) | Agent 可执行的所有 “原子行动”(即最小操作单元),是规划的 “工具库” | - 数据类:调用 Excel 工具读取数据、用 Python 处理异常值- 交互类:调用预订 API、发送邮件、向用户确认信息 |
4. 规划器(Planner) | 核心模块,负责将 “目标” 拆解为 “可执行的行动序列”,并能根据 “状态变化” 动态调整计划 | 针对 “费用分析报告”,规划器生成序列:1. 读取 Excel 数据 → 2. 清洗异常值 → 3. 计算各项费用占比 → 4. 生成柱状图 → 5. 撰写报告文本 → 6. 保存并发送 |
三、Agent Planning 范式的核心逻辑:“拆解 - 执行 - 调整” 循环
规划不是 “一次性制定完所有步骤”,而是一个动态迭代的过程,核心逻辑可概括为 3 步:
1. 目标拆解(Goal Decomposition)
规划器将 “复杂目标” 拆解为多个 “子目标”,直到每个子目标可对应一个 “原子行动”(即 “可执行” 的最小单位)。
- 例:目标 “帮用户规划上海 3 日游” → 拆解为子目标:子目标 1:确定用户出行日期(需向用户确认)子目标 2:查询日期内上海天气(需调用天气 API)子目标 3:根据天气推荐景点(需检索景点信息)子目标 4:规划每日行程路线(需调用地图工具)子目标 5:推荐附近酒店(需调用预订 API)
2. 行动执行(Action Execution)
Agent 按规划的 “行动序列” 逐步执行,每执行一步后,更新 “当前状态”(如记录 “已获取用户出行日期为 10 月 1-3 日”“天气为晴”)。
3. 动态调整(Adaptation)
若执行过程中出现 “意外状态”(如 API 调用失败、用户临时修改需求),规划器会重新评估当前状态,调整后续行动序列:
- 例:调用天气 API 时返回 “服务超时” → 规划器调整计划:“先尝试切换备用天气 API,若仍失败则向用户说明情况并建议稍后查询”。
四、常见的 Agent Planning 范式类型(按规划逻辑分类)
不同场景下,规划器的 “思考方式” 不同,形成了多种经典范式,其中最常用的包括:
1. ReAct 范式(思考 - 行动 - 观察循环)
- 核心逻辑:以 “自然语言推理(Thought)” 为核心,通过 “思考→行动→观察” 的迭代循环规划步骤 —— 先分析 “该做什么”,再执行行动,最后根据反馈调整思考。
- 特点:推理过程显式化(像人类 “自言自语”),适合需要频繁与外部工具交互的任务(如复杂问答、API 调用)。
- 示例:Thought:“用户要查上海 3 日游,首先得知道他的出行日期,我需要先问他。”Action:“向用户发送消息:‘请问您计划何时去上海游玩?’”Observation:“用户回复:‘10 月 1-3 日’”(进入下一轮循环:思考 “下一步查天气”→执行 API 调用→观察结果...)
2. 分层规划(Hierarchical Planning)
- 核心逻辑:将目标拆解为 “顶层目标→中层子目标→底层行动” 的层级结构,先规划高层框架,再逐步细化底层步骤。
- 特点:适合超复杂任务(如项目管理、机器人操作),避免 “一步规划所有细节” 导致的混乱。
- 示例:顶层目标:“完成上海 3 日游规划”中层子目标:“确定日期→查天气→选景点→规划路线→订酒店”底层行动:(针对 “选景点”)“调用旅游 API→筛选 10 月热门景点→排除用户过敏的花粉景区”
3. 基于反馈的规划(Feedback-Driven Planning)
- 核心逻辑:先生成初步行动序列,执行过程中持续接收 “外部反馈”(如用户评价、环境变化),实时修正规划。
- 特点:强调 “灵活性”,适合需求易变或环境不确定的场景(如个性化推荐、客服对话)。
- 示例:初步规划:“推荐上海迪士尼、外滩、豫园作为 3 日游景点”反馈:“用户说‘不想去人太多的乐园’”调整后规划:“替换迪士尼为上海科技馆,其他景点保留”
4. 基于知识库的规划(Knowledge-Based Planning)
- 核心逻辑:依赖预定义的 “领域知识库”(如规则库、流程手册)规划步骤,严格遵循行业规范或固定流程。
- 特点:稳定性高、误差小,适合强规则约束的任务(如医疗诊断、金融合规审核)。
- 示例:知识库规则:“医疗咨询需先确认用户症状→再询问病史→最后推荐科室”规划序列:“1. 问用户‘您有哪些不适症状?’→2. 问‘是否有慢性病病史?’→3. 根据回答推荐呼吸科 / 消化科”
五、Agent Planning 范式的核心价值与应用场景
核心价值
- 任务复杂度突破:从 “单步响应” 升级为 “多步目标达成”,能处理传统 AI 无法完成的复杂任务;
- 自主性与鲁棒性:无需人类干预,可自主拆解目标、应对意外(如 API 失败、需求变更);
- 可解释性提升:规划过程(如 ReAct 的 Thought、分层规划的子目标)可追溯,避免 “黑箱决策”。
典型应用场景
- 智能助手:如 “帮我整理邮件、生成周报、预订会议 room” 的办公助手;
- 复杂问答:如 “分析某公司 2024 年财报,对比竞品利润率并生成结论”;
- 机器人操作:如 “家用机器人打扫客厅→整理桌面→倒垃圾” 的多步任务;
- 行业解决方案:如 “医疗 AI 规划患者的‘问诊→检查→用药’流程”“金融 AI 规划‘客户风险评估→产品推荐→合同签署’流程”。
总结
Agent Planning 范式是 AI 从 “被动响应” 走向 “主动决策” 的关键技术框架 —— 它通过 “目标拆解、步骤规划、动态调整” 的逻辑,让智能体具备类似人类的 “问题解决能力”。
不同范式(如 ReAct、分层规划)适用于不同场景,但核心都是 “让 AI 能自主、可靠地完成复杂任务”。随着大语言模型(LLM)能力的提升,Agent Planning 范式正成为构建 “通用人工智能(AGI)” 的核心基础之一。
4 鲁棒性
“鲁棒性”(Robustness)是一个源于工程领域的概念,后被广泛应用于计算机科学、人工智能、数学等领域,核心含义是:系统或模型在面对 “不确定性干扰”(如输入异常、环境变化、噪声干扰等)时,依然能保持稳定功能或性能的能力。简单来说,就是 “抗干扰能力”—— 越鲁棒的系统,越不容易因为外界微小波动或内部局部问题而 “失效”。
一、为什么需要关注鲁棒性?
所有需要稳定运行的系统,都离不开鲁棒性的支撑。以日常生活和技术场景为例:
- 家用冰箱:即使电压偶尔波动(干扰),也能保持制冷功能(稳定性能),这就是鲁棒性;
- 导航软件:即使偶尔接收不到 1-2 颗卫星信号(干扰),也能通过其他信号推算位置(不迷路),这也是鲁棒性;
- AI 模型:如果输入一句语序混乱的提问(干扰),依然能理解核心需求并给出合理回答(不输出无意义内容),这同样是鲁棒性。
反之,缺乏鲁棒性的系统会非常 “脆弱”:比如一款 APP,只要输入含特殊符号的用户名就崩溃;一个自动驾驶模型,遇到雨天反光就识别不出红绿灯 —— 这些都是鲁棒性不足的典型问题。
二、鲁棒性在不同领域的具体体现
鲁棒性的含义会根据领域场景略有差异,但核心都是 “抗干扰、保稳定”,以下是几个核心领域的示例:
1. 人工智能(AI)与机器学习(ML)
这是当前鲁棒性讨论最集中的领域,主要针对模型的 “抗干扰能力”,常见场景包括:
- 输入噪声干扰:模型对 “不完美输入” 的耐受度。例:图像识别模型,即使输入的图片有轻微模糊、遮挡(如照片有污渍),依然能准确识别 “这是一只猫”;NLP 模型,即使输入文本有错别字(如 “我想去北惊旅游”),也能理解 “北惊” 是 “北京” 的笔误,不影响回答。
- 数据分布偏移:模型对 “训练数据与真实场景数据差异” 的适应度。例:训练时用的是 “白天拍摄的人脸数据”,但实际应用时遇到 “夜晚低光环境的人脸”(数据分布变化),若模型仍能准确人脸识别,说明鲁棒性强;反之则会 “认不出”。
- 对抗攻击:模型对 “恶意构造的微小干扰” 的抵抗能力。例:在 “stop” 交通标志上添加几处人眼几乎不可见的像素点(对抗干扰),若自动驾驶模型因此将其识别为 “限速 60”,则鲁棒性差;若能依然识别为 “stop”,则鲁棒性强。
2. 计算机系统与软件
主要关注系统在 “硬件 / 软件异常” 下的稳定运行能力:
- 硬件故障:如服务器集群中某一台机器突然宕机(干扰),系统能自动将任务切换到其他机器,不影响整体服务(如网站不崩溃),这是系统鲁棒性;
- 软件漏洞:如 APP 遇到异常的用户操作(如连续点击按钮 100 次),不会出现闪退、卡死,而是能正常处理或提示 “操作频繁”,这是软件鲁棒性。
3. 控制工程(如工业设备、机器人)
主要关注 “控制系统在环境变化或参数波动时的稳定性”:
- 工业机械臂:即使车间温度略有变化(导致机械部件轻微热胀冷缩),仍能精准定位并完成焊接、组装动作(不偏离目标),这是控制鲁棒性;
- 无人机:遇到轻微气流干扰(环境变化),仍能保持既定航线飞行(不偏离或坠毁),这也是鲁棒性。
三、如何提升系统 / 模型的鲁棒性?
不同领域的提升方法不同,但核心思路都是 “提前预判干扰、增强抗干扰设计”,以 AI 模型为例,常见手段包括:
- 数据增强:在训练阶段主动加入 “模拟干扰数据”,让模型提前 “适应不完美输入”。例:训练图像模型时,对图片进行随机模糊、旋转、添加噪声;训练 NLP 模型时,随机替换部分词语为近义词或模拟错别字。
- 鲁棒性优化训练:通过特殊的训练方法增强模型抗干扰能力。例:使用 “对抗训练”(在训练中主动生成对抗样本,让模型在对抗干扰下仍能学习正确特征);或采用 “正则化” 技术(避免模型过度依赖局部细节,减少对微小干扰的敏感)。
- 冗余设计:在系统层面增加 “备份机制”,即使某一部分失效,其他部分也能补位。例:服务器集群的 “多机热备”;AI 模型的 “多模型融合”(多个模型同时预测,取多数结果,避免单个模型因干扰出错)。
- 输入校验与异常处理:在系统前端对输入进行 “过滤和修正”,减少干扰进入核心模块。例:APP 对用户输入的文本进行 “错别字检测与修正”;自动驾驶系统对摄像头采集的图像先进行 “去噪处理” 再输入识别模型。
四、鲁棒性与 “准确性”“稳定性” 的区别
很多人会混淆这几个概念,这里用一句话明确差异:
- 准确性:模型 / 系统 “做对事情的能力”(如识别猫的准确率 99%);
- 稳定性:模型 / 系统 “在相同条件下重复做一件事,结果一致的能力”(如每次输入同一张猫的图片,都识别为猫);
- 鲁棒性:模型 / 系统 “在不同条件(有干扰)下,依然能做对事情的能力”(如输入模糊的猫图,仍能识别为猫,且结果稳定)。
简单来说:准确性是 “做对”,稳定性是 “重复做对”,鲁棒性是 “在干扰下依然做对” —— 鲁棒性是比 “准确性 + 稳定性” 更全面的性能指标。
总结
鲁棒性的本质是 “系统对抗不确定性的能力”,是衡量系统 “可靠性” 和 “实用性” 的核心标准之一。无论是 AI 模型、软件系统还是工业设备,鲁棒性不足都会导致其在真实场景中 “不堪一击”;而高鲁棒性的系统,才能在复杂、多变的环境中稳定发挥作用,这也是为什么在技术研发中,“鲁棒性优化” 往往与 “性能优化” 同等重要。
5 ReAct 范式
“经典的 ReAct Agent” 是指遵循ReAct 范式设计的智能体(Agent),是 AI 领域中一种让模型通过 “思考 - 行动 - 观察” 循环来解决复杂任务的框架。它的核心思想是让模型像人类一样,通过语言推理(Reasoning) 规划步骤,然后执行具体行动(Action),再根据行动结果观察(Observation) 调整策略,最终完成任务。
为什么需要 ReAct Agent?
传统的大语言模型(LLM)擅长生成文本,但在需要多步推理或与外部环境交互的任务中(如复杂问答、工具使用、决策规划)存在局限:
- 无法动态调整思路(例如遇到新信息时不会修正之前的判断);
- 难以衔接外部工具(如调用 API、查询数据库);
- 推理过程不透明,容易产生 “幻觉”(编造不存在的步骤)。
ReAct 范式通过结构化的 “思考 - 行动 - 观察” 循环,解决了这些问题,让模型具备更接近人类的问题解决能力。
ReAct Agent 的核心循环:Reasoning → Action → Observation
ReAct 的名字由Reasoning(推理)和Action(行动)组合而来,其核心是一个不断迭代的三步循环:
推理(Reasoning)模型基于当前任务和已有信息,用自然语言 “自言自语” 式地分析问题、规划下一步行动。例如:“用户问‘今天北京的天气如何,适合穿什么衣服?’,我需要先查北京的实时天气。首先应该调用天气 API,获取温度和天气状况。”
行动(Action)模型根据推理结果,执行具体的外部行动(通常通过结构化指令调用工具)。例如:调用天气查询 API,参数为 “北京”,格式可能是:
json
{"action": "get_weather", "parameters": {"city": "北京"}}
观察(Observation)模型获取行动的返回结果(如工具的输出、环境的反馈),作为新的信息输入。例如:API 返回:“北京今天晴,气温 15-25℃,风力 3 级”。
之后,模型会将 “观察结果” 纳入下一轮循环,继续推理→行动→观察,直到完成任务(如整理天气信息,给出穿衣建议)。
ReAct 与其他 Agent 范式的区别
相比纯 “生成式”(直接输出答案)或纯 “工具调用”(无显式推理)的方法,ReAct 的核心优势是显式的推理过程:
- 生成式:直接输出 “北京今天晴天,适合穿薄外套”,但无法解释如何获取信息,也无法处理更复杂的任务(如 “对比北京和上海未来 3 天的天气”);
- 纯工具调用:可能直接调用 API,但缺乏对任务的拆解(如用户问 “适合穿什么”,可能只返回天气数据而不给出建议);
- ReAct:先推理 “需要查天气→需要根据温度建议穿衣”,再调用工具,最后结合结果生成完整回答,过程可解释、可修正。
经典 ReAct 的实现要点
结构化输出格式模型需要遵循固定格式输出,区分 “推理内容” 和 “行动指令”,例如:
plaintext
Thought: 我需要先查询北京的天气 Action: {"name": "get_weather", "parameters": {"city": "北京"}}
这样程序才能解析并执行行动。
工具接口定义需要提前定义 Agent 可调用的工具(如 API、数据库、计算器等),并明确工具的输入输出格式,让模型知道 “可以做什么”。
多轮迭代机制系统会自动将 “观察结果” 反馈给模型,触发下一轮循环,直到模型判断 “任务已完成” 并输出最终答案(通常用
Final Answer
标记)。
应用场景
ReAct Agent 特别适合需要多步推理 + 外部交互的任务:
- 复杂问答(如 “分析某公司近 3 年财报并预测明年营收”,需要调用数据库、计算工具);
- 智能助手(如 “订明天从北京到上海的高铁票,再推荐一家外滩附近的酒店”,需要调用票务 API、地图工具);
- 科研辅助(如 “查找某领域最新论文,总结核心观点并生成参考文献”,需要调用学术数据库)。
总结
经典的 ReAct Agent 是一种让 AI 通过 “思考(分析任务)→行动(调用工具)→观察(获取结果)” 的循环来解决问题的框架。它的核心是显式的推理过程,让模型像人类一样逐步拆解任务、利用外部资源,并根据反馈调整策略,从而更可靠地完成复杂任务。这种范式在需要透明度、可解释性和动态交互的场景中尤为重要。
6 prompt是不是就是提示词
是的,在 AI 领域(尤其是大语言模型 LLM、生成式 AI 场景中),Prompt 就是 “提示词”,二者是完全对应的概念 ——“Prompt” 是英文术语,“提示词” 是其最通用、直观的中文翻译。
不过需要注意:“提示词” 的含义可进一步延伸,它不只是 “单个词语”,更准确地说,是用户输入给 AI 模型的 “指令、问题、上下文描述或任务要求” 的统称,目的是引导 AI 生成符合预期的输出。
一、为什么不只是 “词”?——Prompt(提示词)的形态多样
虽然叫 “提示词”,但实际使用中,它的形式远不止 “单个词”,常见形态包括:
- 单个词 / 短语:如给 AI 绘画模型输入 “日落海滩”,给 LLM 输入 “写一首诗”;
- 完整问题:如 “解释什么是 RAG 技术?”“帮我规划上海 1 日游路线”;
- 带上下文的指令:如 “以下是我的工作总结初稿,请帮我润色,要求语言简洁、突出数据成果:[此处粘贴工作总结文本]”;
- 结构化提示:如用 “角色 - 任务 - 要求” 框架编写:“假设你是一名小学数学老师,任务是用生活化例子讲解‘分数的意义’,要求步骤清晰、适合 10 岁学生理解”。
本质上,所有能 “告诉 AI‘做什么’‘怎么做’” 的输入内容,都属于 Prompt(提示词)。
二、Prompt(提示词)的核心作用:给 AI “明确的行动指南”
大语言模型(如 GPT、文心一言)、生成式 AI(如 MidJourney、Stable Diffusion)的核心能力是 “根据输入生成内容”,但它们无法主动理解人类的 “隐性需求”——Prompt 的作用就是将 “隐性需求” 转化为 AI 可理解的 “显性指令”,具体体现在 3 个层面:
- 定义任务目标:明确 AI 要做什么(如 “写邮件”“做总结”“画插画”);
- 提供上下文信息:补充 AI 需要的背景(如 “基于以下数据写报告:[数据内容]”“针对学生群体写宣传文案”);
- 约束输出格式 / 风格:规定 AI 生成内容的形式(如 “用表格呈现结果”“语言要正式”“绘画风格为宫崎骏动画风”)。
例如,同样是 “写关于‘春天’的内容”:
- 模糊 Prompt:“写春天”→ AI 可能生成零散的句子,不符合预期;
- 清晰 Prompt:“以‘校园里的春天’为主题,写一段 200 字的散文,突出樱花、学生活动两个元素,语言清新”→ AI 能精准生成符合要求的内容。
三、延伸:“提示词工程(Prompt Engineering)” 是什么?
随着 AI 的普及,“Prompt” 衍生出一个重要概念 ——提示词工程,指通过 “优化 Prompt 的编写逻辑、结构、细节”,让 AI 更高效、更精准地完成任务的技术。
简单说,提示词工程是 “‘怎么写好 Prompt’的方法论”,核心思路包括:
- 明确角色(如 “假设你是资深产品经理”);
- 拆分任务(复杂任务拆成多步指令,如 “先分析以下文案的问题,再给出修改建议”);
- 补充示例(如 “按照‘问题 + 原因 + 解决方案’的结构写,参考示例:[示例内容]”)。
例如,让 AI “批改作文” 时,普通 Prompt 是 “批改这篇作文”,而提示词工程优化后的 Prompt 是:“假设你是初中语文老师,从‘主题明确性、段落逻辑、语法错误’三个维度批改以下作文,先指出问题,再给出具体修改建议,最后打分(满分 100):[作文文本]”—— 后者能让 AI 的输出更专业、更有条理。
总结
- Prompt = 提示词:是 AI 场景中 “用户输入的指令 / 需求” 的统称,形态包括词、句子、段落等;
- 核心价值:将人类的隐性需求转化为 AI 可理解的显性指令,引导 AI 生成符合预期的内容;
- 延伸应用:通过 “提示词工程” 优化 Prompt 的编写,可进一步提升 AI 的任务效果。
7 workflows用yml文件格式是什么,这是什么工程规范吗,为什么要用这个写,为什么在项目里写workflow?
在软件开发和自动化领域,Workflow(工作流)使用 YAML(.yml)文件格式是一种非常普遍的实践。这种方式并非某个强制的 “工程规范”,而是行业形成的高效、通用的技术选型,背后有其特定的设计逻辑和实用价值。
一、什么是 YAML 格式的 Workflow 文件?
- YAML:是一种简洁的文本格式,语法类似 “键值对 + 缩进”,比 JSON 更易读,比 XML 更简洁,适合描述结构化配置(例如:
key: value
或列表- item1
)。 - Workflow 文件:用 YAML 编写的、定义 “一系列自动化步骤” 的配置文件。例如:
yaml
# 一个简单的CI/CD工作流示例 name: 构建并测试项目 on: [push] # 当代码推送时触发 jobs:test:runs-on: ubuntu # 在Ubuntu环境运行steps:- name: 拉取代码uses: actions/checkout@v4- name: 安装依赖run: npm install- name: 运行测试run: npm test
二、为什么用 YAML 写 Workflow?
选择 YAML 的核心原因是它完美适配了 Workflow 的场景需求:
可读性强,贴近自然语言Workflow 本质是 “步骤的有序组合”,需要人能快速理解 “先做什么、后做什么”。YAML 的缩进式语法(类似伪代码)比 JSON 的大括号、XML 的标签更直观,非技术人员也能看懂大致逻辑。
结构化能力适配工作流的层次关系Workflow 通常包含 “触发条件、运行环境、多个任务、每个任务的步骤” 等多层结构,YAML 的嵌套键值对和列表天然适合表达这种层次(如上述示例中的
jobs
包含test
,test
包含steps
)。支持注释,便于维护复杂工作流需要注释说明 “为什么要这么设计”,YAML 原生支持
#
注释,而 JSON 不支持注释,这让 YAML 在配置维护上更有优势。生态兼容性主流的工作流工具(如 GitHub Actions、GitLab CI、Jenkins Pipeline、Airflow)都默认支持 YAML 格式,形成了行业共识。
三、为什么项目里需要写 Workflow?
项目中引入 Workflow(工作流)的核心目的是将 “重复性人工操作” 自动化,解决传统开发中的效率、一致性和可靠性问题。具体价值体现在:
消除 “人肉操作” 的低效与错误例如:
- 传统方式:开发者每次提交代码后,需手动在本地跑测试、打包、部署到服务器,步骤繁琐且易漏操作(比如忘了跑测试就上线)。
Workflow 方式:用 YAML 定义 “提交代码→自动测试→自动打包→自动部署” 的流程,触发后全流程自动执行,无需人工干预。【意思是这个操作都会自动按照yml文件里面直接执行吗?不需要人为读文档配环境吗?】
保证流程的标准化与一致性团队中不同成员的操作习惯可能不同(比如 A 用
npm test
,B 用yarn test
),而 Workflow 通过 YAML 文件 “固化” 流程,确保所有人提交的代码都经过相同的测试、打包步骤,避免因操作差异导致的问题。支撑复杂场景的协作与集成现代项目常需要多环节协作,例如:
- 代码提交后,自动触发 “单元测试 + 代码风格检查 + 安全漏洞扫描”;
- 测试通过后,自动通知团队成员(如 Slack 消息);
- 每周五自动生成项目周报并发送邮件。这些场景通过 YAML 定义的 Workflow 可以轻松串联,无需人工协调。
可追溯与版本化Workflow 的 YAML 文件和代码一起存入 Git 仓库,能像代码一样被版本控制(查看历史修改、回滚错误配置),且每次运行的日志可记录,便于排查问题(例如:“昨天的部署失败是因为 Workflow 中某个步骤配置错误”)。
四、常见的 YAML Workflow 应用场景
- CI/CD(持续集成 / 持续部署):如 GitHub Actions、GitLab CI,用 YAML 定义代码提交后的自动化测试、构建、部署流程。
- 数据处理流程:如 Apache Airflow,用 YAML 定义 “数据抽取→清洗→分析→入库” 的批处理工作流。
- 自动化运维:如 Ansible Playbook,用 YAML 定义服务器部署、配置更新的步骤。
- 项目管理:如 GitHub Projects,用 YAML 定义 “任务从‘待办’→‘进行中’→‘完成’” 的状态流转规则。
总结
- YAML 是 Workflow 的主流格式:因其易读、结构化强、支持注释,完美适配工作流的配置场景。
- 项目中写 Workflow 的核心价值:将重复性操作自动化,保证流程一致,提升效率和可靠性,尤其适合团队协作和复杂场景。
- 这不是强制规范,而是行业实践中形成的高效方案 —— 通过 “代码化” 的方式管理工作流,让流程可维护、可追溯、可复用。
【意思是这个操作都会自动按照yml文件里面直接执行吗?不需要人为读文档配环境吗?】
是的,通过 YAML 定义的 Workflow 流程,一旦触发(如代码提交),整个 “提交代码→自动测试→自动打包→自动部署” 的过程会完全自动执行,无需人工干预,也不需要开发者手动对照文档配置环境。
这背后的核心是工作流引擎(如 GitHub Actions、GitLab CI、Jenkins 等)会解析 YAML 文件,并按照定义的规则自动完成所有步骤。!!!!!!
为什么不需要人工配置环境?
Workflow 的 YAML 文件会预先定义所有环境依赖和操作指令,工作流引擎会根据这些定义自动准备环境、执行命令。例如:
yaml
# 以GitHub Actions为例的自动部署流程
name: 自动测试与部署
on: [push] # 代码推送时自动触发jobs:deploy:runs-on: ubuntu-latest # 自动使用Ubuntu系统环境steps:- name: 拉取代码uses: actions/checkout@v4 # 自动拉取当前仓库代码- name: 安装Node.js环境uses: actions/setup-node@v4 # 自动安装指定版本Node.jswith:node-version: 20.x # 明确指定版本,无需人工安装- name: 安装项目依赖run: npm install # 自动执行依赖安装命令- name: 运行测试run: npm test # 自动执行测试命令- name: 打包项目run: npm run build # 自动打包- name: 部署到服务器uses: some-deploy-action@v1 # 自动调用部署工具with:server: ${{ secrets.SERVER_ADDR }} # 从密钥库读取服务器地址token: ${{ secrets.DEPLOY_TOKEN }} # 自动使用加密的认证信息
在这个例子中:
- 环境自动准备:
runs-on: ubuntu-latest
告诉引擎使用 Ubuntu 系统,setup-node
会自动安装指定版本的 Node.js,无需开发者手动在服务器上配置环境; - 命令自动执行:
npm install
、npm test
等命令由引擎自动在准备好的环境中运行,无需人工敲命令; - 敏感信息自动注入:服务器地址、认证 token 等通过 “密钥库” 自动传入,无需人工输入或写在代码里。
开发者需要做什么?
开发者的工作集中在 **“定义 YAML 文件”**,而不是 “执行流程”:
- 按照工作流引擎的语法,在 YAML 中写清楚 “步骤顺序”(先测试后打包)、“环境需求”(需要 Node.js 20.x)、“执行命令”(
npm run build
); - 将 YAML 文件存入代码仓库(如
.github/workflows/deploy.yml
); - 后续只要触发条件满足(如 push 代码、合并分支),流程会自动启动。
核心优势:“一次定义,处处执行”
这种方式彻底解决了传统开发中的两个痛点:
- 无需 “读文档配环境”:新人加入项目时,不需要对照文档手动配置测试环境、部署工具,因为 Workflow 会自动搞定一切;
- 避免 “环境不一致” 问题:开发者本地环境、测试环境、生产环境的差异常导致 “本地能跑,线上报错”,而 Workflow 使用标准化的环境(如固定版本的 Ubuntu、Node.js),确保流程在一致的环境中执行。
总结
YAML 定义的 Workflow 本质是 **“用代码描述操作流程”**,工作流引擎会像 “机器人” 一样严格按照这个 “代码说明书” 自动执行所有步骤,包括准备环境、运行命令、处理依赖等,全程无需人工参与。这也是 “基础设施即代码(IaC)” 理念的体现 —— 将原本需要人工操作的环境配置、流程步骤,全部转化为可版本控制的代码,从而实现高效、一致、可靠的自动化。
8 mod
在计算机领域,“mod” 最常见的含义有两种:取模运算(Modulo Operation) 和 模块(Module),具体含义取决于上下文场景。
1. 取模运算(Modulo Operation)
这是编程和数学中最常用的含义,指计算两个整数相除后的余数,通常用符号 %
表示(不同编程语言可能有细微差异)。
核心作用:
- 计算余数:例如
7 mod 3 = 1
(7 除以 3,商为 2,余数为 1),在代码中通常写作7 % 3
。 - 场景应用:
- 判断奇偶性:
n % 2 == 0
表示n
是偶数; - 循环计数:如数组下标循环(
index % array.length
确保下标不越界); - 时间计算:如
total_seconds % 60
可从总秒数中提取 “秒”; - 哈希算法、加密解密等领域的基础运算。
- 判断奇偶性:
注意:
不同编程语言对 “负数取模” 的处理可能不同(结果符号可能与除数或被除数一致),例如:
- Python 中:
-7 % 3 = 2
(结果与除数同号) - JavaScript 中:
-7 % 3 = -1
(结果与被除数同号)
2. 模块(Module)
在软件开发中,“mod” 也可作为 “module” 的缩写,指具有独立功能的代码单元或组件,用于拆分复杂程序、提高复用性。
常见场景:
- 编程语言中的模块:如 Python 的
.py
文件、Java 的class
、JavaScript 的import/export
模块,每个模块封装特定功能,可被其他代码调用。例:import math
(导入 Python 的数学模块,使用其内置的math.sqrt()
等函数)。 - 硬件 / 系统模块:如计算机中的 “无线模块”“存储模块”,或嵌入式系统中的功能组件(如传感器模块、通信模块)。
- 软件插件 / 扩展:某些软件中,“mod” 指非官方的功能扩展模块(类似插件),如浏览器的扩展模块、游戏的功能模块。
总结
在计算机领域:
- 当涉及数学计算、编程逻辑时,“mod” 通常指取模运算(求余数);
- 当涉及代码组织、组件设计时,“mod” 通常指模块(独立功能单元)。
需要根据具体场景(如代码片段、技术讨论主题)来判断其含义。