96SEO 2026-08-14 20:03 3
在简单的线性工作流中,一个节点执行完成后通常只会进入下一个节点。但真实业务往往需要把一个任务拆成多个分支同时处理。例如并行查询多个数据源、同时调用多个工具,或让多个 Agent 分别完成不同任务。
使用者痛点:很多开发者在设计并行工作流时会遇到以下困惑:

Annotated 与 reducer 的作用模糊,导致状态聚合不符合预期;thread_id 与检查点之间的关系,导致持久化失效。这里通过一个可直接运行的 LangGraph 示例,演示以下能力:
Annotated 为状态字段绑定 reducer;operator.add 聚合多个节点返回的列表;thread_id 与 checkpointer 的关系。整个示例不调用大模型。不需要 API Key,适合用来理解 LangGraph 的状态更新机制。
这篇文章建立的图可以表示为:
START -> step1 -> step2 -> step3 -> END
-> step4 -> END
step2 有两条出边,所以执行完 step2 后step3 和 step4 都会被调度执行。
这是一种 fan‑out结构,而不是“二选一”的条件分支。
实际生成的流程图:
Pain point: 环境依赖不一致常导致代码在本地跑不通。 不过,下面给出已验证可运行的环境配置。
Python 3.10+
langgraph
typing-extensions
建议为项目创建独立虚拟环境:
python -m venv .venv
source .venv/bin/activate # macOS / Linux
# Windows PowerShell:
# .venv\Scripts\Activate.ps1
pip install -U langgraph typing-extensions
Pain point: 当多个并行节点写入同一字段时如果没有明确的合并规则,会抛出“并发更新冲突”。按理说,LangGraph 提供了 Annotated` 来解决这个问题。
import operator
from typing import Annotated,Any
from typing_extensions import TypedDict
class State:
aggregate: Annotated。operator.add]
: 表示 alertate `aggregate` 是一个列表。: 新值写入时使用加法进行合并。Pain point: 如果省略了 reducer。两个并行节点都尝试覆盖同一字段,LangGraph 将报错。使用 reducer 后每个节点只需返回自己的增量结果,框架负责自动拼接。怎么说呢,
def step1:
print
return {"aggregate": } # 增量列表
def step2:
print
return {"aggregate": }
Pain point: 很多人误以为控制台打印顺序代表业务执行顺序。并行任务的日志顺序是非确定性的,只要状态聚合正确即可。如果业务必须严格有序,请改为线性链或添加显式依赖边。
from langgraph.graph import END,START。StateGraph
graph_builder = StateGraph
graphbuilder.addnode.addnode.addnode.add_node
# 线性部分
graphbuilder.addedge
graphbuilder.addedge
graphbuilder.addedge
Pain point: 如果想实现条件路由而误用了普通边,会导致所有目标都被执行。老实说,此时应改用 add_conditional_edges.
graph = graph_builder.compile
The compiled graph.invoke。
pngbytes = graph.getgraph.drawmermaidpng
with open as f:
f.write
If PNG generation fails。check network connectivity or configure a local Mermaid renderer.
res = graph.invoke(
{"aggregate": },{"configurable": {"thread_id": ""}} # 当前示例未配置 checkpointer → 不持久化
)
print
Pain point: 很多人把 `thread_id` 当成必填项,却忘记在编译阶段提供 `checkpointer`。没有检查点,`thread_id` 只能用于路由上下文。而不会自动保存历史状态,下面给出带内存检查点的完整写法:
from langgraph.checkpoint.memory import InMemorySaver
checkpointer = InMemorySaver graph = graph_builder.compile
res = graph.invoke( {"aggregate": },{"configurable": {"thread_id": "demo-run-01"}} )
。作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback