1009 字
3 分钟
LangGraphlanggraph
LangGraph 应用思路 02:典型工作流与 Agent 模式

Prompt Chaining、Parallelization、Routing、Orchestrator-worker 与 Evaluator-optimizer 的结构化落地。

用LangGraph实现典型工作模式#

这一章介绍常见的工作流和agent模式。

  • 工作流具有预设的代码路径,设计上按特定顺序运行。
  • 智能体则具备动态性,可自主定义执行流程与工具使用方式。

LangGraph 在构建智能体与工作流时具备多项优势,包括持久化、流式输出,同时支持调试以及部署功能。

alt text

1. Prompt Chaining#

提示词链式调用是指每次大语言模型调用都会处理上一次调用的输出结果。它通常用于执行可拆解为更小、可验证步骤的明确任务。例如:

  • 将文档翻译成不同语言
  • 验证生成内容的一致性

alt text

Python3 点击展开代码
80 lines 展开代码
flowchart TD A([START]) --> B[generate_joke<br/>根据 topic 生成初始 joke] B --> C{check_punchline<br/>joke 是否包含 ? 或 !} C -- Pass --> D([END<br/>直接输出 joke]) C -- Fail --> E[improve_joke<br/>基于 joke 做改写] E --> F[polish_joke<br/>基于 improved_joke 再润色] F --> G([END<br/>输出 final_joke]) B -.-> H[(state.joke)] E -.-> I[(state.improved_joke)] F -.-> J[(state.final_joke)]

2. Parallelization#

借助并行化,大语言模型可同时处理一项任务。实现方式包括同时运行多个独立子任务,或多次运行同一任务以校验不同输出结果。并行化通常用于:

  • 拆分子任务并并行执行,从而提升处理速度
  • 多次运行任务以校验不同输出结果,从而提高结果可信度

相关示例包括:

  • 运行一个子任务提取文档关键词,同时运行另一个子任务检查格式错误
  • 多次运行任务,依据不同标准(如引用数量、使用来源数量及来源质量)对文档准确性进行评分

alt text

Python3 点击展开代码
66 lines 展开代码
flowchart TD A([START<br/>输入 topic]) --> B[call_llm_1<br/>生成 joke] A --> C[call_llm_2<br/>生成 story] A --> D[call_llm_3<br/>生成 poem] B --> E[aggregator<br/>汇总 joke / story / poem] C --> E D --> E E --> F([END<br/>输出 combined_output]) B -.-> G[(state.joke)] C -.-> H[(state.story)] D -.-> I[(state.poem)] E -.-> J[(state.combined_output)]

3. Routing#

路由工作流会处理输入内容,然后将其导向对应上下文的特定任务。这使你能够为复杂任务定义专用流程。例如,一个用于解答产品相关问题的工作流,可先处理问题类型,再将请求路由至定价、退款、退换货等专属处理流程。

alt text

Python3 点击展开代码
104 lines 展开代码
flowchart TD A([START<br/>输入 input]) --> B[llm_call_router<br/>LLM 进行结构化路由判断] B --> C{route_decision<br/>decision = story / joke / poem} C -- story --> D[llm_call_1<br/>生成 story] C -- joke --> E[llm_call_2<br/>生成 joke] C -- poem --> F[llm_call_3<br/>生成 poem] D --> G([END<br/>输出 output]) E --> G F --> G B -.-> H[(state.decision)] D -.-> I[(state.output)] E -.-> I F -.-> I

4. Orchestrator-worker#

在协调器 - 工作节点架构中,协调器负责:

  • 将任务拆解为子任务
  • 将子任务分配给工作节点执行
  • 整合各工作节点的输出结果形成最终成果

alt text

Python3 点击展开代码
22 lines 展开代码

协调器 - 工作流模式十分常见,LangGraph 已内置对该模式的支持。Send API 可动态创建工作节点并向其发送指定输入。每个工作节点拥有独立状态,所有工作节点的输出都会写入一个共享状态键,协调器图可访问该键。这使得协调器能够获取所有工作节点的输出,并将其整合为最终输出。下面的示例会遍历章节列表,并通过 Send API 将每个章节分发给对应工作节点。

Python3 点击展开代码
100 lines 展开代码
flowchart TD A([START<br/>输入 topic]) --> B[orchestrator<br/>规划报告 sections] B --> C{assign_workers<br/>为每个 section 创建一个 worker} C --> D[llm_call Worker 1<br/>写 section 1] C --> E[llm_call Worker 2<br/>写 section 2] C --> F[llm_call Worker N<br/>写 section N] D --> G[synthesizer<br/>汇总 completed_sections] E --> G F --> G G --> H([END<br/>输出 final_report]) B -.-> I[(state.sections)] D -.-> J[(state.completed_sections += section.content)] E -.-> J F -.-> J G -.-> K[(state.final_report)]

5. Evaluator-optimizer#

在评估器 - 优化器工作流中,一个大语言模型生成响应,另一个则对该响应进行评估。若评估器或人工介入环节判定响应需要优化,系统会提供反馈并重新生成响应。该循环持续进行,直至生成符合要求的响应。

评估器 - 优化器工作流常用于任务存在明确成功标准、但需通过迭代才能达标的场景。例如,两种语言间的文本翻译往往难以一次完美匹配,可能需要多次迭代,才能生成语义一致的译文。

alt text

Python3 点击展开代码
80 lines 展开代码
flowchart TD A([START<br/>输入 topic]) --> B[llm_call_generator<br/>生成 joke] B --> C[llm_call_evaluator<br/>评价 joke 并给出 feedback] C --> D{route_joke<br/>funny_or_not?} D -- Accepted --> E([END<br/>输出 joke]) D -- Rejected + Feedback --> B B -.-> F[(state.joke)] C -.-> G[(state.funny_or_not)] C -.-> H[(state.feedback)]

6. Agents#

智能体通常由大语言模型实现,通过工具执行操作。它们在持续的反馈循环中运行,适用于问题与解决方案均不可预测的场景。智能体比工作流具有更高的自主性,能够自主决定使用何种工具以及如何解决问题。你仍可定义可用的工具集及智能体的行为准则。

alt text

Python3 点击展开代码
75 lines 展开代码
flowchart TD A([START<br/>输入 messages]) --> B[llm_call<br/>LLM 决定直接回答还是调用工具] B --> C{should_continue<br/>last_message.tool_calls ?} C -- Yes --> D[tool_node<br/>执行工具并生成 ToolMessage] D --> B C -- No --> E([END<br/>输出最终 AIMessage]) B -.-> F[(AIMessage<br/>可能包含 tool_calls)] D -.-> G[(ToolMessage<br/>工具执行结果)] E -.-> H[(messages 完整对话历史)]

专题阅读

LangGraph

这篇文章属于同一条阅读链。你可以直接在这里切换,不用再回到列表页重新找。

当前进度11 / 11

留言区

留言

欢迎纠错、补充、交流。昵称和评论内容必填;如果你愿意,也可以留下联系方式,仅站主可见。

0

正在加载评论...

0 / 2000

阅读导航

文章目录

当前阅读位置将在这里显示

0 节