从零构建工作流驱动型 Writer Agent关键词:大语言模型 Agent、工作流编排、长文本写作、LangChain、Prompt 工程、向量检索、反思机制摘要:本文将像搭乐高机器人一样,从零开始构建一个能自主完成主题调研、大纲规划、多轮迭代写作、润色优化甚至适配不同场景风格的工作流驱动型 Writer Agent。文章会用生活中的“超级图书编辑+作家助手+图书馆馆长”组合来类比,讲解核心概念(Agent 大脑、工作流执行器、工具集、记忆库、反思墙),梳理问题背景(为什么普通 LLM 写不好长文/专业文?为什么需要工作流驱动?),设计完整的系统架构和 mermaid 交互流程,引入简单的数学模型来优化 Agent 决策,用 Python+LangChain 写出可运行的核心代码,最后做行业趋势分析和最佳实践总结。读完这篇,你不仅能拥有一个自己的 Writer Agent,还能理解如何用工作流思想去构建任何领域的 AI 助手!1 背景介绍1.1 目的和范围1.1.1 我们要解决什么“小麻烦”?想象你是个想写《如何用Python做美食推荐小程序》的程序员博主——第一步,你得去查Python美食推荐的技术栈:是用Flask还是FastAPI?向量检索用ChromaDB还是FAISS?推荐算法用协同过滤还是KNN?第二步,你要搭大纲:是不是得先有“需求分析”“技术选型”“开发环境”“核心功能实现”“上线部署”“后续优化”这几块?每块下面还要分小点,比如核心功能里的“爬取美食数据”“清洗数据入库”“训练推荐模型”“前端页面展示”?第三步,你要写正文:可刚写了第一章技术栈,发现突然忘了协同过滤的原理,还要查资料补进去;写第二章部署时,Docker Compose的配置写错了,得花时间改;写完初稿回头看,风格一会儿太学术一会儿太口语化,还有很多错别字和逻辑漏洞;第四步,你想润色成给小白看的版本,但小白可能看不懂什么是“余弦相似度”,你得把术语换成通俗的例子,但例子会不会太啰嗦?小白会不会跳过?这些麻烦事,要是有个超级助手团队帮你做就好了——比如:图书管理员(检索工具):帮你找靠谱的技术资料、案例、代码;策划编辑(大纲规划Agent):根据你的主题快速搭出合理的、有吸引力的大纲;实习作家(内容生成Agent):根据大纲和你补充的细节写初稿;资深编辑(润色反思Agent):检查风格、错别字、逻辑漏洞,还能给你提修改意见;排版经理(格式适配Agent):把内容适配成Markdown、公众号、简书等不同平台的格式。而这个超级助手团队的“指挥者”,就是我们今天要讲的——工作流驱动型 Writer Agent!1.1.2 我们的目标是什么?我们的目标不是写一个“万能的、能代替莫言写小说的Writer Agent”,而是写一个能帮你解决80%以上“重复性高、耗时久、但不需要顶级创造力”的写作任务的工具:比如写技术博客、产品说明书、课程大纲、演讲稿、工作总结、会议纪要;比如给长文做摘要、润色、翻译、风格转换;比如帮你整理资料、生成思维导图的文字稿。1.1.3 我们的范围是什么?为了让文章通俗易懂,我们会做一些简化,但不会影响核心功能的实现:工具集:我们只用到「网页搜索(用Serper API)」「本地/在线向量检索(用LangChain+ChromaDB本地版)」「代码执行(可选,用LangChain的PythonREPLTool)」这几个基础工具;记忆库:我们只用到「短期记忆(对话上下文)」「长期记忆(主题调研的资料)」「结构化记忆(大纲)」这三类;反思机制:我们只用到「单轮润色反思」「多轮迭代反思(最多3轮)」这两种;工作流引擎:我们不用复杂的工作流工具(比如Airflow、Prefect、Temporal),而是用LangChain的AgentExecutor结合自定义的StateGraph(LangGraph,LangChain团队专门为工作流Agent设计的库)来实现——LangGraph比普通的AgentExecutor更灵活,能实现更复杂的分支、循环、并行任务。1.2 预期读者这篇文章适合以下人群阅读:想入门大语言模型Agent开发的初学者:文章会用通俗易懂的语言讲解核心概念,不会有太复杂的数学公式和代码;经常需要写重复性高的文本的人:比如程序员博主、产品经理、运营人员、教师、学生;已经有一些LLM使用经验,但想进一步提高效率的人:比如已经用过ChatGPT写东西,但觉得它经常“失忆”“跑题”“写不好长文”;想了解LangChain/LangGraph的人:文章会用LangChain/LangGraph实现核心功能,有详细的代码解读。1.3 文档结构概述我们的文章结构就像刚才说的“超级助手团队的搭建流程”一样:背景介绍:先讲我们遇到的“小麻烦”,再讲我们的目标和范围;核心概念与联系:用“图书管理员+策划编辑+实习作家+资深编辑+指挥者”的类比,讲解核心概念,再画ER图和mermaid交互流程图;核心问题分析:为什么普通LLM写不好长文/专业文?为什么需要工作流驱动?我们要解决哪些核心技术问题?核心算法原理与操作步骤:讲解大纲规划算法、内容生成算法、润色反思算法、向量检索算法的原理,用简单的数学模型优化决策;项目实战:从零搭建Writer Agent:先讲开发环境搭建,再讲系统架构设计、接口设计、核心实现代码,最后做测试;实际应用场景:讲Writer Agent在技术博客、产品说明书、课程大纲、工作总结这几个场景的具体应用;最佳实践Tips:讲如何选择LLM、如何设计Prompt、如何优化向量检索、如何调整反思机制;行业发展与未来趋势:讲Writer Agent的发展历史、现状和未来趋势;总结:学到了什么?:用通俗易懂的语言回顾核心概念和核心步骤;思考题:动动小脑筋:提出一些思考题,鼓励读者进一步思考和应用;附录:常见问题与解答:讲开发过程中可能遇到的问题和解决方法;扩展阅读 参考资料:推荐一些相关的书籍、文章、课程、工具。1.4 术语表1.4.1 核心术语定义术语通俗易懂的定义专业定义大语言模型(LLM)一个住在电脑里的“超级书虫”,它读过几乎所有公开的书籍、文章、代码,能理解人类的语言,能回答问题、写文章、写代码一种基于Transformer架构的深度学习模型,通过在大规模文本语料上预训练,学习语言的统计规律和语义表示,从而具备文本生成、文本理解、推理等能力Agent(智能体)一个“有思想、会做事、能使用工具”的AI程序,就像刚才说的“超级助手团队的指挥者”或“单个超级助手”一个能感知环境、根据目标做出决策、采取行动、并能从经验中学习的自主系统工作流驱动型 Agent一个“按固定/半固定流程做事”的Agent,就像工厂里的流水线工人,每一步该做什么、用什么工具、怎么做,都有明确的规定(或部分由Agent自己决定)一种基于工作流引擎的Agent,它的行为受到预先定义或动态生成的工作流的约束,工作流由一系列任务节点和节点之间的连接关系组成LangChain一个“搭积木的工具包”,里面有很多现成的“积木”(比如LLM接口、工具接口、记忆接口、Agent接口),你可以用这些积木快速搭出各种AI应用一个用于构建大语言模型应用的开源框架,提供了模块化的组件和工具,简化了LLM应用的开发流程LangGraphLangChain团队专门为“复杂工作流Agent”设计的“升级版搭积木工具包”,比普通的LangChain Agent更灵活,能实现分支、循环、并行、状态持久化等功能一个用于构建状态化、循环式Agent工作流的开源库,基于有向图(StateGraph)来定义Agent的行为,每个节点代表一个任务,每个边代表任务之间的转移条件向量检索一个“按语义找资料的图书管理员”,不是按关键词找,而是按“内容的意思”找——比如你搜“Python美食推荐小程序的前端框架”,它能找到“用Vue3写Python美食推荐小程序的界面”这样的文章,哪怕关键词不完全匹配一种基于向量相似度的信息检索技术,先将文本转换成高维向量(嵌入向量),再通过计算查询向量和文档向量的相似度,找到最相关的文档反思机制一个“Agent的‘自我检讨’功能”,就像学生写完作业后检查有没有错别字、有没有做错题,或者像作家写完初稿后修改润色一种让Agent能够评估自己的行为和输出结果、并根据评估结果调整后续行为的机制1.4.2 相关概念解释Prompt Engineering(提示工程):给LLM“写指令”的艺术,就像给保姆写详细的“育儿指南”,指南写得越清楚、越具体,LLM的表现就越好;短期记忆(Short-Term Memory):Agent的“临时记事本”,用来存储最近的对话上下文,就像你刚才和朋友聊的话,过一会儿可能就忘了;长期记忆(Long-Term Memory):Agent的“日记本/图书馆”,用来存储所有重要的信息,比如主题调研的资料、之前写过的文章,就像你存在电脑里的文档;结构化记忆(Structured Memory):Agent的“思维导图/表格”,用来存储结构化的信息,比如文章大纲、待办事项,就像你画的思维导图;嵌入向量(Embedding Vector):文本的“数字身份证”,每个文本都有一个独一无二的(或几乎独一无二的)高维向量,用来表示文本的语义,就像每个人的身份证号;余弦相似度(Cosine Similarity):用来衡量两个向量“方向是否一致”的指标,范围在[-1,1]之间,数值越大,说明两个向量的语义越相似,就像两个人的“三观是否一致”,数值越大,越合得来。1.4.3 缩略词列表缩略词全称中文翻译LLMLarge Language Model大语言模型APIApplication Programming Interface应用程序编程接口RAGRetrieval-Augmented Generation检索增强生成Transformer无特殊全称,是一种深度学习架构无特殊中文翻译,直接用“Transformer”LangChain无特殊全称,是一个开源框架的名字无特殊中文翻译,直接用“LangChain”LangGraph无特殊全称,是LangChain团队开发的开源库的名字无特殊中文翻译,直接用“LangGraph”Serper API无特殊全称,是一个网页搜索API的名字无特殊中文翻译,直接用“Serper API”ChromaDB无特殊全称,是一个向量数据库的名字无特殊中文翻译,直接用“ChromaDB”FAISSFacebook AI Similarity SearchFacebook AI相似度搜索库REST APIRepresentational State Transfer API表现层状态转换APIJSONJavaScript Object NotationJavaScript对象表示法Markdown无特殊全称,是一种轻量级标记语言无特殊中文翻译,直接用“Markdown”2 核心概念与联系2.1 故事引入还记得我们刚才说的“超级助手团队”吗?让我们用更具体的故事来引入今天的主题:小明是个刚毕业的计算机专业学生,他想写一篇《如何用Python+Flask+ChromaDB做宠物领养推荐小程序》的技术博客,用来求职找工作。可是他从来没写过技术博客,也不知道该从哪里入手。这时,他收到了一个神秘的包裹,里面有一个“超级助手团队指挥中心”的遥控器,还有五个超级助手的“召唤卡片”:图书管理员小红(Serper API + ChromaDB):擅长找靠谱的技术资料、案例、代码,还能把找到的资料整理成“数字卡片”存起来,以后随时可以用;策划编辑小刚(大纲规划Agent):擅长根据主题和找到的资料,快速搭出合理的、有吸引力的大纲,还能根据小明的反馈调整大纲;实习作家小李(内容生成Agent):擅长根据大纲和找到的资料写初稿,每写完一个小节就会交给指挥中心检查;资深编辑老王(润色反思Agent):擅长检查初稿的风格、错别字、逻辑漏洞,还能给小明和小李提修改意见,最多可以修改3轮;排版经理小张(格式适配Agent):擅长把润色好的文章适配成Markdown、公众号、简书等不同平台的格式。小明按照遥控器上的“开始工作”按钮,指挥中心开始工作了:第一步:召唤图书管理员小红:指挥中心让小红去查“Python宠物领养推荐小程序的技术栈”“Flask快速入门”“ChromaDB向量检索入门”“宠物领养数据集”这几个关键词的资料,小红很快就找到了10篇靠谱的技术博客、2个GitHub开源项目、1个Kaggle数据集,还把这些资料整理成“数字卡片”存到了指挥中心的“图书馆”(长期记忆库)里;第二步:召唤策划编辑小刚:指挥中心把小明的主题和图书馆里的资料交给小刚,小刚很快就搭出了一个大纲,指挥中心把大纲发给小明看,小明觉得“需求分析”部分可以再加“用户画像”和“核心功能优先级”,指挥中心让小刚调整了大纲;第三步:召唤实习作家小李:指挥中心把调整后的大纲和图书馆里的资料交给小李,让小李按顺序写初稿,每写完一个小节就交给指挥中心,指挥中心再交给资深编辑老王检查;第四步:召唤资深编辑老王:老王检查了小李写的第一个小节“引言”,觉得风格太口语化,应该更专业一些,还有一个错别字“领样”应该改成“领养”,老王把修改意见发给指挥中心,指挥中心让小李修改,修改完再交给老王检查,直到老王满意为止;第五步:所有小节写完并润色好后,召唤排版经理小张:指挥中心让小张把润色好的文章适配成Markdown、公众号、简书三个平台的格式,小张很快就完成了任务;第六步:工作结束:指挥中心把所有格式的文章和图书馆里的资料都发给了小明,小明非常满意!这个“超级助手团队指挥中心”,就是我们今天要讲的——工作流驱动型 Writer Agent!2.2 核心概念解释(像给小学生讲故事一样)刚才的故事里已经提到了几个核心概念,现在我们用更通俗易懂的语言、更贴近小学生生活的例子来详细解释:2.2.1 核心概念一:LLM(超级书虫)LLM是什么?LLM就像一个住在电脑里的“超级书虫”,它从出生开始就一直在读书,读过的书比全世界所有图书馆加起来的书还要多——比如《西游记》《三国演义》《哈利·波特》《数学书》《语文书》《英语书》《Python编程书》《Java编程书》等等,几乎所有公开的书籍、文章、代码、漫画、电影剧本它都读过。LLM能做什么?因为读过的书太多了,所以LLM能做很多事情:比如回答问题:你问它“孙悟空的金箍棒有多重?”,它会马上告诉你“一万三千五百斤”;比如写文章:你让它写一篇《我的小猫》的作文,它会马上写出一篇生动有趣的作文;比如写代码:你让它写一个“打印1到100的数字”的Python代码,它会马上写出正确的代码;比如翻译:你让它把“Hello, World!”翻译成中文,它会马上告诉你“你好,世界!”;比如讲故事:你让它讲一个“奥特曼打怪兽”的故事,它会马上编出一个精彩的故事。LLM不能做什么?虽然LLM读过的书很多,但它也有一些“小缺点”:它会“失忆”:如果你和它聊了很多话,过一会儿它可能就忘了前面说的话了;它会“跑题”:如果你让它写一篇《我的小猫》的作文,它可能写着写着就写到《我的小狗》了;它会“撒谎”(幻觉):如果你问它“2024年的奥运会在哪里举办?”,它可能会告诉你“在东京举办”(其实2024年的奥运会在巴黎举办),因为它读的书里最新的资料可能是2023年的;它不会“查资料”:如果你问它“今天的天气怎么样?”,它不知道,因为它读的书里没有实时的天气数据;它不会“使用工具”:如果你让它“用计算器算一下123456789×987654321等于多少?”,它可能算错,因为它不会用计算器;它不会“写长文”:如果你让它写一篇“10000字的技术博客”,它可能写着写着就重复了,或者逻辑混乱了。2.2.2 核心概念二:Agent(超级助手)Agent是什么?Agent就像一个“有思想、会做事、能使用工具”的超级助手,就像故事里的“图书管理员小红”“策划编辑小刚”“实习作家小李”“资深编辑老王”“排版经理小张”一样。Agent的组成部分有哪些?每个Agent都有四个组成部分:大脑(LLM):用来思考、决策、理解人类的语言、生成文本;眼睛(感知器):用来感知环境,比如接收人类的指令、接收其他Agent的输出;手(工具集):用来使用工具,比如查资料、写代码、算算术;记事本(记忆库):用来存储信息,比如最近的对话上下文、重要的资料、之前做过的事情。Agent和LLM的区别是什么?LLM只是Agent的“大脑”,Agent比LLM更强大:Agent有“眼睛”,能感知环境;Agent有“手”,能使用工具;Agent有“记事本”,不会“失忆”;Agent能“按流程做事”,不会“跑题”;Agent能“自我检讨”,不会“犯同样的错误”。2.2.3 核心概念三:工作流驱动型 Agent(超级助手团队指挥中心)工作流驱动型 Agent是什么?工作流驱动型 Agent就像“超级助手团队的指挥中心”,它手里有一张“工作流程图”,知道每一步该做什么、该召唤哪个超级助手、该用什么工具、做完之后该交给谁。工作流程图是什么?工作流程图就像“工厂里的流水线图纸”或者“小学生的‘一天作息时间表’”——比如小学生的“一天作息时间表”:7:00-7:30:起床、刷牙、洗脸;7:30-8:00:吃早饭;8:00-11:30:上学;11:30-12:30:吃午饭;12:30-14:00:午休;14:00-17:30:上学;17:30-18:30:吃晚饭;18:30-20:30:写作业;20:30-21:30:看电视/玩游戏;21:30-7:00:睡觉。工作流程图也是一样的,由一系列“任务节点”和“节点之间的连接关系”组成:任务节点:就像“一天作息时间表”里的“起床、刷牙、洗脸”“吃早饭”等,每个任务节点代表一件要做的事情;连接关系:就像“一天作息时间表”里的“7:30”“8:00”等,代表做完一件事情之后该做什么,有些连接关系是“固定的”(比如做完“吃早饭”之后必须“上学”),有些连接关系是“有条件的”(比如写完作业之后如果是20:30之前,可以看电视/玩游戏,如果是20:30之后,必须睡觉)。2.2.4 核心概念四:LangChain(搭积木的工具包)LangChain是什么?LangChain就像一个“搭积木的工具包”,里面有很多现成的“积木”,比如:LLM积木:可以连接ChatGPT、Claude、Llama 2、Qwen等各种大语言模型;工具积木:可以连接Serper API(网页搜索)、ChromaDB(向量检索)、PythonREPLTool(代码执行)、CalculatorTool(计算器)等各种工具;记忆积木:可以实现短期记忆、长期记忆、结构化记忆等各种记忆功能;Agent积木:可以快速搭出各种类型的Agent,比如“通用型Agent”“工具调用型Agent”“对话型Agent”;链(Chain)积木:可以把多个积木连在一起,形成一个“链”,比如“检索增强生成链(RAG Chain)”“文档总结链(Document Summarization Chain)”“翻译链(Translation Chain)”。为什么要用LangChain?因为用LangChain搭AI应用就像“搭积木”一样简单,你不需要从0开始写代码,只需要把现成的积木连在一起就可以了——比如你想搭一个“检索增强生成型的问答机器人”,只需要:拿一个“文档加载积木”,加载你的文档;拿一个“文档分割积木”,把你的文档分成小块;拿一个“嵌入向量积木”,把文档小块转换成嵌入向量;拿一个“向量数据库积木”,把嵌入向量存起来;拿一个“LLM积木”,连接ChatGPT;拿一个“检索增强生成链积木”,把上面的积木连在一起;启动这个链,就可以用了!2.2.5 核心概念五:LangGraph(升级版搭积木工具包)LangGraph是什么?LangGraph是LangChain团队专门为“复杂工作流Agent”设计的“升级版搭积木工具包”,它比普通的LangChain Agent更灵活,能实现:分支任务:比如“如果大纲通过了,就开始写内容;如果大纲没通过,就调整大纲”;循环任务:比如“如果润色没通过,就修改,修改完再润色,最多循环3次”;并行任务:比如“同时查‘Python技术栈’和‘宠物领养数据集’的资料”;状态持久化:比如“保存Agent的工作状态,下次打开可以继续工作”;人工干预:比如“在大纲规划完成后,让人类检查并调整大纲”。为什么要用LangGraph而不是普通的LangChain Agent?因为普通的LangChain Agent是“基于ReAct(Reasoning+Acting)框架”的,它的行为是“动态的”——Agent每一步都会自己思考“该做什么”,然后采取行动,虽然很灵活,但也很容易“失控”(比如Agent会无限循环使用工具,或者做一些无关的事情)。而LangGraph是“基于有向图(StateGraph)框架”的,它的行为是“半固定的”——大部分任务是预先定义好的,只有部分任务是由Agent自己决定的,这样既保证了灵活性,又保证了可控性,非常适合用来构建“工作流驱动型的Agent”。2.2.6 核心概念六:向量检索(按语义找资料的图书管理员)向量检索是什么?向量检索就像一个“按语义找资料的图书管理员”,不是按关键词找,而是按“内容的意思”找——比如你去图书馆找“关于猫的书”,如果是按关键词找的图书管理员,只会找书名或作者名里有“猫”的书;如果是按语义找的图书管理员,会找所有和“猫”有关的书,比如《我的小猫》《猫的饲养方法》《加菲猫漫画》《猫和老鼠动画剧本》等等。向量检索的工作原理是什么?向量检索的工作原理可以分成三个步骤:第一步:把资料转换成“数字身份证”(嵌入向量):就像给每个人发一个身份证号,每个资料也有一个独一无二的(或几乎独一无二的)高维向量,用来表示资料的语义——比如《我的小猫》的“数字身份证”可能是[0.1, 0.2, 0.3, …, 0.999],《狗的饲养方法》的“数字身份证”可能是[0.1, 0.2, 0.3, …, 0.001],因为《我的小猫》和《狗的饲养方法》都是关于“宠物饲养”的,所以它们的“数字身份证”的方向比较接近;第二步:把“数字身份证”存到“数字图书馆”(向量数据库)里:就像把每个人的身份证号存到公安局的数据库里,把每个资料的“数字身份证”存到向量数据库里;第三步:把查询内容也转换成“数字身份证”,然后在“数字图书馆”里找“数字身份证方向最接近”的资料:就像你把自己的身份证号给公安局,公安局就能找到你这个人;你把查询内容的“数字身份证”给向量数据库,向量数据库就能找到最相关的资料——比如你查“如何养猫?”,它的“数字身份证”可能是[0.1, 0.2, 0.3, …, 0.998],和《我的小猫》的“数字身份证”的方向非常接近,所以向量数据库会把《我的小猫》排在第一位。2.2.7 核心概念七:反思机制(Agent的“自我检讨”功能)反思机制是什么?反思机制就像Agent的“自我检讨”功能,就像学生写完作业后检查有没有错别字、有没有做错题,或者像作家写完初稿后修改润色——比如实习作家小李写完《引言》之后,交给资深编辑老王检查,老王觉得风格太口语化,还有一个错别字,小李根据老王的意见修改,修改完再交给老王检查,直到老王满意为止,这个过程就是“反思机制”。反思机制的作用是什么?反思机制的作用是“提高Agent的输出质量”:它能检查出Agent输出中的错误,比如错别字、逻辑漏洞、格式错误;它能调整Agent输出的风格,比如从口语化改成专业,从专业改成通俗;它能补充Agent输出中缺失的内容,比如补充相关的案例、代码、数据;它能避免Agent“犯同样的错误”,比如把之前的修改意见存到记忆库里,下次写的时候就会注意。2.3 核心概念之间的关系(用小学生能理解的比喻)刚才我们已经讲解了七个核心概念,现在我们用“图书管理员+策划编辑+实习作家+资深编辑+指挥中心”的类比,来讲解它们之间的关系:2.3.1 LLM和Agent的关系LLM是Agent的“大脑”,就像图书管理员小红的“大脑”是住在她脑袋里的“超级书虫”一样——超级书虫帮小红思考“该找什么资料”“该整理什么资料”,小红的“眼睛”帮她找资料,“手”帮她整理资料,“记事本”帮她存资料。没有大脑的Agent就像“没有脑袋的苍蝇”,什么都做不了;没有Agent的LLM就像“只会读书的书呆子”,虽然很聪明,但不会做事。2.3.2 Agent和工作流驱动型 Agent的关系Agent是工作流驱动型 Agent的“超级助手”,就像图书管理员小红、策划编辑小刚、实习作家小李、资深编辑老王、排版经理小张是指挥中心的“超级助手”一样——指挥中心手里有一张“工作流程图”,知道每一步该召唤哪个超级助手、该用什么工具、做完之后该交给谁。没有超级助手的指挥中心就像“光杆司令”,什么都做不了;没有指挥中心的超级助手就像“一盘散沙”,各自为政,效率很低。2.3.3 LangChain和LangGraph的关系LangChain是“基础版搭积木工具包”,里面有很多现成的“积木”;LangGraph是“升级版搭积木工具包”,专门用来搭“复杂工作流Agent”——就像你用基础版搭积木工具包可以搭出一个简单的“房子”,用升级版搭积木工具包可以搭出一个复杂的“游乐园”。LangGraph是基于LangChain的,也就是说,你可以在LangGraph里使用LangChain的所有“积木”。2.3.4 向量检索和Agent的关系向量检索是Agent的“工具”,就像图书管理员小红的“工具”是“图书馆”和“放大镜”一样——图书馆用来存资料,放大镜用来找资料;向量检索的“工具”是“向量数据库”和“嵌入模型”——向量数据库用来存资料的“数字身份证”,嵌入模型用来把资料和查询内容转换成“数字身份证”。2.3.5 反思机制和Agent的关系反思机制是Agent的“功能”,就像资深编辑老王的“功能”是“检查润色”一样——老王检查小李写的初稿,然后给小李提修改意见;反思机制检查Agent的输出,然后给Agent提修改意见,或者让Agent自己修改。2.4 核心概念原理和架构的文本示意图(专业定义)现在我们用专业的语言,画一个核心概念原理和架构的文本示意图:工作流驱动型 Writer Agent 架构文本示意图 ┌─────────────────────────────────────────────────────────────────────────────┐ │ 外部交互层 │ │ ┌──────────────────┐ ┌──────────────────┐ ┌──────────────────┐ │ │ │ 用户输入接口 │ │ 人工干预接口 │ │ 输出结果接口 │ │ │ └──────────────────┘ └──────────────────┘ └──────────────────┘ │ └─────────────────────────────────────────────────────────────────────────────┘ ↕ ┌─────────────────────────────────────────────────────────────────────────────┐ │ 工作流引擎层(LangGraph) │ │ ┌───────────────────────────────────────────────────────────────────────┐ │ │ │ StateGraph(有向图) │ │ │ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ │ │ │ │ 任务节点1 │→ │ 任务节点2 │→ │ 任务节点3 │→ │ 任务节点4 │ │ │ │ │ │(调研) │ │(大纲规划) │ │(内容生成) │ │(润色优化) │ │ │ │ │ └─────────────┘ └─────────────┘ └─────────────┘ └─────────────┘ │ │ │ │ ↓ ↓ ↓ ↓ │ │ │ │ ┌───────────────────────────────────────────────────────────────────┐ │ │ │ │ │ 状态转移条件管理模块 │ │ │ │ │ └───────────────────────────────────────────────────────────────────┘ │ │ │ └───────────────────────────────────────────────────────────────────────┘ │ └─────────────────────────────────────────────────────────────────────────────┘ ↕ ┌─────────────────────────────────────────────────────────────────────────────┐ │ 核心服务层(LangChain) │ │ ┌──────────────────┐ ┌──────────────────┐ ┌──────────────────┐ │ │ │ LLM服务模块 │ │ 工具服务模块 │ │ 记忆服务模块 │ │ │ │ ┌────────────┐ │ │ ┌────────────┐ │ │ ┌────────────┐ │ │ │ │ │ ChatGPT │ │ │ │ Serper API │ │ │ │ 短期记忆 │ │ │ │ │ │ Claude │ │ │ │ ChromaDB │ │ │ │ 长期记忆 │ │ │ │ │ │ Qwen │ │ │ │ PythonREPL │ │ │ │ 结构化记忆 │ │ │ │ │ └────────────┘ │ │ └────────────┘ │ │ └────────────┘ │ │ │ └──────────────────┘ └──────────────────┘ └──────────────────┘ │ └─────────────────────────────────────────────────────────────────────────────┘ ↕ ┌─────────────────────────────────────────────────────────────────────────────┐ │ 数据存储层 │ │ ┌──────────────────┐ ┌──────────────────┐ ┌──────────────────┐ │ │ │ 向量数据库 │ │ 关系型数据库 │ │ 文件存储系统 │ │ │ │ ┌────────────┐ │ │ ┌────────────┐ │ │ ┌────────────┐ │ │ │ │ │ ChromaDB │ │ │ │ SQLite │ │ │ │ 本地文件 │ │ │ │ │ │ FAISS