LangGraph核心架构深度解析
LangGraph核心架构深度解析
【免费下载链接】langgraph 项目地址: https://gitcode.com/GitHub_Trending/la/langgraph
LangGraph是一个基于图计算模型的智能体工作流框架,其核心架构由Pregel执行模型、通道系统、检查点持久化机制和运行时配置四大组件构成。本文深度解析了LangGraph的分布式计算引擎如何通过超步迭代实现节点编排,通道系统如何提供类型安全的数据流管理,检查点机制如何确保长期运行的状态一致性,以及运行时配置如何优化系统性能和资源利用率。
Pregel执行模型与节点编排机制
LangGraph的核心执行引擎基于Google Pregel模型构建,这是一个专门为大规模图计算设计的分布式计算框架。Pregel执行模型采用"超步"(Superstep)的概念,通过消息传递机制实现节点间的异步通信和状态更新,完美契合了复杂Agent工作流的执行需求。
Pregel执行模型架构
LangGraph的Pregel实现采用了分层架构设计,核心组件包括:
| 组件 | 职责 | 关键特性 |
|---|---|---|
| PregelLoop | 执行循环控制 | 管理超步迭代、任务调度 |
| PregelNode | 节点定义 | 封装处理逻辑、输入输出映射 |
| Channel系统 | 数据通道 | 状态管理、消息传递 |
| Runner系统 | 任务执行 | 并发控制、错误处理 |
超步执行流程
Pregel模型的执行过程通过一系列超步(Superstep)完成,每个超步包含三个主要阶段:
节点编排机制
节点定义与配置
在LangGraph中,节点通过PregelNode类进行定义,支持灵活的输入输出配置:
class PregelNode:
def __init__(
self,
channels: str | list[str], # 订阅的通道
triggers: list[str], # 触发条件
tags: list[str], # 标签元数据
metadata: dict[str, Any], # 元数据
writes: list[ChannelWriteEntry], # 输出写入配置
bound: Runnable, # 执行逻辑
retry_policy: list[RetryPolicy], # 重试策略
cache_policy: CachePolicy | None # 缓存策略
):
# 初始化逻辑
通道系统设计
LangGraph实现了多种类型的通道来支持不同的数据流模式:
| 通道类型 | 用途 | 特性 |
|---|---|---|
| LastValueChannel | 最新值存储 | 保存最后一次写入的值 |
| TopicChannel | 消息主题 | 支持消息累积和批量处理 |
| EphemeralChannel | 临时数据 | 不持久化,仅当前超步有效 |
| ManagedChannel | 托管值 | 支持复杂状态管理 |
执行流程详解
1. 任务准备阶段
在执行每个超步前,系统会准备需要执行的任务:
def prepare_next_tasks(
checkpoint: Checkpoint,
pending_writes: list[PendingWrite],
processes: Mapping[str, PregelNode],
channels: Mapping[str, BaseChannel],
managed: ManagedValueMapping,
config: RunnableConfig,
step: int,
stop: int,
*,
for_execution: bool,
store: BaseStore | None,
checkpointer: BaseCheckpointSaver | None,
manager: ParentRunManager | None,
trigger_to_nodes: Mapping[str, Sequence[str]] | None,
updated_channels: set[str] | None,
retry_policy: Sequence[RetryPolicy],
cache_policy: CachePolicy | None
) -> dict[str, PregelTask | PregelExecutableTask]:
# 任务准备逻辑
2. 节点执行阶段
节点执行采用统一的接口设计,支持同步和异步模式:
class PregelRunner:
def tick(
self,
tasks: Iterable[PregelExecutableTask],
*,
reraise: bool = True,
timeout: float | None = None,
retry_policy: Sequence[RetryPolicy] | None = None,
get_waiter: Callable[[], concurrent.futures.Future[None]] | None = None,
schedule_task: Callable[
[PregelExecutableTask, int, Call | None],
PregelExecutableTask | None,
]
) -> Iterator[None]:
# 执行一批任务
3. 状态持久化机制
LangGraph提供了强大的状态持久化能力,支持检查点(Checkpoint)机制:
def create_checkpoint(
checkpoint: Checkpoint,
channels: Mapping[str, BaseChannel] | None,
step: int,
*,
id: str | None = None,
updated_channels: set[str] | None = None
) -> Checkpoint:
# 创建检查点逻辑
高级特性
条件分支与路由
Pregel模型支持复杂的条件分支逻辑,通过add_conditional_edges实现动态路由:
def add_conditional_edges(
self,
source: str,
path: Callable[..., Hashable | Sequence[Hashable]]
| Callable[..., Awaitable[Hashable | Sequence[Hashable]]]
| Runnable[Any, Hashable | Sequence[Hashable]],
path_map: dict[Hashable, str] | list[str] | None = None
) -> Self:
# 添加条件边逻辑
错误处理与重试
系统内置了完善的错误处理机制:
def run_with_retry(
task: PregelExecutableTask,
retry_policy: Sequence[RetryPolicy] | None,
configurable: dict[str, Any] | None = None
) -> None:
# 带重试的任务执行
并发控制
Pregel支持精细的并发控制,通过max_concurrency参数限制同时执行的节点数量:
def test_max_concurrency(async_checkpointer: BaseCheckpointSaver) -> None:
# 并发控制测试逻辑
性能优化策略
1. 缓存机制
系统实现了多级缓存策略,包括节点输入缓存和结果缓存:
class CachePolicy:
def default_cache_key(*args: Any, **kwargs: Any) -> str | bytes:
# 默认缓存键生成逻辑
2. 懒加载与按需执行
节点只有在输入数据就绪时才会触发执行,避免不必要的计算:
def _triggers(
channels: Mapping[str, BaseChannel],
versions: ChannelVersions,
seen: ChannelVersions | None,
null_version: V,
proc: PregelNode
) -> bool:
# 触发条件检查逻辑
3. 批量处理优化
支持批量消息处理和状态更新,减少IO开销:
def apply_writes(
checkpoint: Checkpoint,
channels: Mapping[str, BaseChannel],
tasks: Iterable[WritesProtocol],
get_next_version: GetNextVersion | None,
trigger_to_nodes: Mapping[str, Sequence[str]]
) -> set[str]:
# 批量写入应用逻辑
实际应用示例
以下是一个完整的Pregel工作流配置示例:
# 定义节点处理函数
def process_node(state: dict) -> dict:
# 节点处理逻辑
return {"result": state["input"] * 2}
# 创建Pregel图
graph = Pregel(
nodes={
"processor": PregelNode(
channels=["input_channel"],
triggers=["input_channel"],
writes=[ChannelWriteEntry("output_channel")],
bound=RunnableLambda(process_node)
)
},
channels={
"input_channel": LastValueChannel(int),
"output_channel": LastValueChannel(int)
},
input_channels="input_channel",
output_channels="output_channel"
)
# 执行图计算
result = graph.invoke({"input_channel": 42})
Pregel执行模型为LangGraph提供了强大的分布式计算能力,使得复杂Agent工作流能够高效、可靠地执行。通过超步迭代、消息传递和状态持久化机制,系统能够处理大规模、长时间运行的AI应用场景,为生产环境中的Agent系统提供了坚实的技术基础。
通道(Channel)系统与数据流管理
LangGraph的通道系统是其数据流管理的核心机制,为复杂工作流提供了灵活、类型安全的状态管理能力。通道作为数据容器,负责在图的节点间传递和存储状态信息,支持多种数据模式和处理策略。
通道基础架构
LangGraph的通道系统基于抽象基类BaseChannel构建,定义了统一的接口规范:
class BaseChannel(Generic[Value, Update, Checkpoint], ABC):
"""所有通道的基类"""
def __init__(self, typ: Any, key: str = "") -> None:
self.typ = typ # 值类型
self.key = key # 通道标识符
@abstractmethod
def get(self) -> Value:
"""获取当前通道值"""
@abstractmethod
def update(self, values: Sequence[Update]) -> bool:
"""更新通道值"""
def checkpoint(self) -> Checkpoint | Any:
"""序列化通道状态"""
def from_checkpoint(self, checkpoint: Checkpoint | Any) -> Self:
"""从检查点恢复通道状态"""
核心通道类型
LangGraph提供了多种内置通道类型,每种类型针对不同的使用场景:
1. LastValue - 最后值通道
最基本的通道类型,存储最近写入的值:
class LastValue(Generic[Value], BaseChannel[Value, Value, Value]):
"""存储最后接收到的值"""
def __init__(self, typ: Any, key: str = "") -> None:
super().__init__(typ, key)
self._value: Value | None = None
def get(self) -> Value:
if self._value is None:
raise EmptyChannelError()
return self._value
def update(self, values: Sequence[Value]) -> bool:
if values:
self._value = values[-1] # 只保留最后一个值
return True
return False
使用场景:适用于需要保持最新状态的场景,如用户输入、配置参数等。
2. Topic - 发布订阅主题通道
支持消息发布订阅模式的通道,可配置是否累积消息:
class Topic(Generic[Value], BaseChannel[Sequence[Value], Value | Sequence[Value], list[Value]]):
"""配置化的发布订阅主题"""
def __init__(self, typ: type[Value], accumulate: bool = False):
super().__init__(typ)
self.accumulate = accumulate # 是否累积消息
self._values: list[Value] = []
def update(self, values: Sequence[Value | Sequence[Value]]) -> bool:
flattened = []
for value in values:
if isinstance(value, Sequence) and not isinstance(value, str):
flattened.extend(value)
else:
flattened.append(value)
if self.accumulate:
self._values.extend(flattened)
else:
self._values = flattened
return bool(flattened)
配置选项:
accumulate=True:累积所有消息,适合日志记录accumulate=False:每次更新替换消息,适合实时通知
3. BinaryOperatorAggregate - 二元操作聚合通道
支持通过二元操作符进行值聚合的高级通道:
class BinaryOperatorAggregate(Generic[Value], BaseChannel[Value, Value, Value]):
"""通过二元操作符聚合值的通道"""
def __init__(self, typ: type[Value], operator: Callable[[Value, Value], Value]):
super().__init__(typ)
self.operator = operator
self._value: Value | None = None
def update(self, values: Sequence[Value]) -> bool:
if not values:
return False
current = self._value
for value in values:
if current is None:
current = value
else:
current = self.operator(current, value)
self._value = current
return True
使用示例:
# 数值累加
total_channel = BinaryOperatorAggregate(int, operator.add)
# 字符串连接
concat_channel = BinaryOperatorAggregate(str, operator.concat)
# 列表合并
merge_channel = BinaryOperatorAggregate(list, operator.add)
通道生命周期管理
LangGraph通道系统提供了完整的生命周期管理机制:
状态序列化与恢复
消费控制机制
通道支持消费通知机制,防止重复处理:
def consume(self) -> bool:
"""通知通道值已被消费"""
# 实现消费逻辑,如标记消息为已读
return updated
def finish(self) -> bool:
"""通知工作流结束"""
# 实现清理逻辑
return updated
通道配置与使用
在StateGraph中配置通道:
from langgraph.graph import StateGraph
from langgraph.channels import LastValue, Topic, BinaryOperatorAggregate
import operator
# 定义状态Schema
class WorkflowState(TypedDict):
input: str
messages: list[str]
total_count: int
processed_data: dict
# 创建图并配置通道
graph = StateGraph(WorkflowState)
graph.add_node("processor", process_data)
graph.add_node("aggregator", aggregate_data)
# 配置不同的通道行为
graph.configure_channels({
"input": LastValue(str), # 最后输入值
"messages": Topic(str, accumulate=True), # 累积所有消息
"total_count": BinaryOperatorAggregate(int, operator.add), # 计数累加
"processed_data": LastValue(dict) # 最后处理结果
})
高级特性
1. 类型安全
所有通道都支持泛型类型注解,确保类型安全:
# 类型安全的通道配置
messages: Topic[str] = Topic(str) # 只能存储字符串
count: LastValue[int] = LastValue(int) # 只能存储整数
2. 条件触发
通道更新可以触发节点执行:
# 当messages通道有新值时触发processor节点
graph.add_edge("messages", "processor")
# 条件边,根据通道值决定执行路径
graph.add_conditional_edges(
"processor",
lambda state: "success" if state["processed_data"] else "retry",
{"success": "aggregator", "retry": "processor"}
)
3. 性能优化
通道系统针对大规模工作流进行了性能优化:
- 惰性求值:只在需要时计算通道值
- 增量更新:支持批量更新操作
- 内存管理:提供EphemeralValue等临时通道
实际应用场景
实时数据处理流水线
class DataProcessingState(TypedDict):
raw_data: list[dict]
processed_data: list[dict]
statistics: dict
errors: list[str]
graph = StateGraph(DataProcessingState)
# 配置通道
graph.configure_channels({
"raw_data": Topic(dict, accumulate=True),
"processed_data": Topic(dict, accumulate=True),
"statistics": LastValue(dict),
"errors": Topic(str, accumulate=True)
})
# 构建处理流水线
graph.add_node("validator", validate_data)
graph.add_node("transformer", transform_data)
graph.add_node("analyzer", analyze_data)
graph.add_node("reporter", generate_report)
graph.add_edge("raw_data", "validator")
graph.add_edge("validator", "transformer")
graph.add_edge("transformer", "analyzer")
graph.add_edge("analyzer", "reporter")
多代理协作系统
class MultiAgentState(TypedDict):
task: str
agent_messages: dict[str, list[str]]
final_result: str
status: str
graph = StateGraph(MultiAgentState)
graph.configure_channels({
"task": LastValue(str),
"agent_messages": Topic(dict, accumulate=True),
"final_result": LastValue(str),
"status": LastValue(str)
})
# 多个代理并行处理
graph.add_node("research_agent", research_task)
graph.add_node("analysis_agent", analyze_findings)
graph.add_node("synthesis_agent", synthesize_results)
graph.add_conditional_edges(
"task",
lambda state: state["task"].split(":")[0],
{"research": "research_agent", "analyze": "analysis_agent"}
)
graph.add_edge("research_agent", "synthesis_agent")
graph.add_edge("analysis_agent", "synthesis_agent")
LangGraph的通道系统通过提供灵活、类型安全的数据流管理机制,为复杂工作流的构建提供了强大的基础。不同的通道类型满足了各种场景下的数据管理需求,从简单的状态保持到复杂的消息聚合,都能找到合适的解决方案。
检查点(Checkpoint)持久化策略
LangGraph的检查点持久化策略是其实现长期运行、状态化智能体工作流的核心机制。该策略通过BaseCheckpointSaver抽象基类提供了一套完整的持久化接口,支持多种存储后端,确保智能体状态能够在故障恢复、系统重启或长时间运行过程中保持一致性。
检查点数据结构与生命周期
LangGraph的检查点系统采用精心设计的数据结构来捕获智能体的完整状态快照:
class Checkpoint(TypedDict):
v: int # 检查点格式版本
id: str # 唯一且单调递增的检查点ID
ts: str # ISO 8601时间戳
channel_values: dict[str, Any] # 通道值的快照
channel_versions: ChannelVersions # 通道版本映射
versions_seen: dict[str, ChannelVersions] # 节点看到的通道版本
updated_channels: list[str] | None # 本次更新的通道列表
检查点的生命周期管理通过以下关键操作实现:
多存储后端支持架构
LangGraph设计了灵活的存储后端架构,通过统一的接口支持多种持久化方案:
| 存储类型 | 实现类 | 适用场景 | 特点 |
|---|---|---|---|
| 内存存储 | InMemorySaver | 开发测试 | 快速易用,重启丢失 |
| PostgreSQL | PostgresSaver | 生产环境 | 高可用,支持事务 |
| SQLite | SqliteSaver | 轻量级应用 | 文件存储,易于部署 |
| Redis | RedisSaver | 高性能需求 | 内存缓存,快速访问 |
序列化与版本控制机制
检查点系统采用强大的序列化机制来处理复杂的数据类型:
class JsonPlusSerializer:
"""增强的JSON序列化器,支持Python特殊类型"""
def _default(self, obj: Any) -> str | dict[str, Any]:
# 处理datetime、UUID、numpy数组等特殊类型
if isinstance(obj, datetime):
return {"__ext__": "datetime", "value": obj.isoformat()}
if isinstance(obj, UUID):
return {"__ext__": "uuid", "value": str(obj)}
# ... 其他类型处理
版本控制系统确保通道状态的一致性:
线程安全的并发访问控制
在多线程环境下,检查点系统通过精细的锁机制确保数据一致性:
def put(
self,
config: RunnableConfig,
checkpoint: Checkpoint,
metadata: CheckpointMetadata,
new_versions: ChannelVersions,
) -> RunnableConfig:
"""线程安全的检查点存储操作"""
thread_id = config["configurable"]["thread_id"]
with self._get_lock(thread_id): # 获取线程级锁
# 序列化检查点数据
checkpoint_data = self.serde.dumps_typed(checkpoint)
metadata_data = self.serde.dumps_typed(metadata)
# 存储到后端
return self._storage_put(config, checkpoint_data, metadata_data, new_versions)
高效的检查点查询与检索
系统提供丰富的查询接口支持各种使用场景:
def list(
self,
config: RunnableConfig | None,
*,
filter: dict[str, Any] | None = None,
before: RunnableConfig | None = None,
limit: int | None = None,
) -> Iterator[CheckpointTuple]:
"""多条件检查点查询"""
# 支持按线程ID、时间范围、元数据过滤等多种条件
# 返回迭代器避免内存溢出
容错与恢复机制
检查点系统内置完善的容错处理,确保系统在各种异常情况下都能正确恢复:
async def aput(
self,
config: RunnableConfig,
checkpoint: Checkpoint,
metadata: CheckpointMetadata,
new_versions: ChannelVersions,
) -> RunnableConfig:
"""异步检查点存储,支持异常回滚"""
try:
# 尝试存储检查点
result = await self._async_storage_put(config, checkpoint, metadata, new_versions)
return result
except Exception as e:
logger.error(f"检查点存储失败: {e}")
# 记录失败但不影响主流程
raise
性能优化策略
为了最小化检查点操作对系统性能的影响,LangGraph实现了多种优化策略:
- 增量检查点:只存储发生变化的状态部分
- 懒加载:通道值按需加载,减少内存占用
- 批量操作:支持批量写入提高吞吐量
- 缓存机制:频繁访问的检查点缓存在内存中
实际应用示例
下面是一个使用检查点系统的完整示例:
from langgraph.checkpoint.memory import InMemorySaver
from langgraph.graph import StateGraph
# 创建状态图
builder = StateGraph(dict)
builder.add_node("process", lambda state: {"result": state["input"] * 2})
builder.set_entry_point("process")
builder.set_finish_point("process")
# 配置检查点器
checkpointer = InMemorySaver()
graph = builder.compile(checkpointer=checkpointer)
# 执行并自动检查点
result = graph.invoke(
{"input": 42},
{"configurable": {"thread_id": "test-thread-1"}}
)
print(result) # 输出: {'result': 84}
# 从检查点恢复
recovered = graph.invoke(
{},
{"configurable": {"thread_id": "test-thread-1"}}
)
print(recovered) # 输出: {'result': 84}
通过这套完善的检查点持久化策略,LangGraph能够为长期运行的智能体工作流提供可靠的状态管理保障,确保业务连续性和数据一致性。
运行时(Runtime)配置与优化
LangGraph的运行时配置与优化是构建高性能、可扩展智能代理系统的核心。通过合理的运行时配置,开发者可以充分利用LangGraph的持久化执行、内存管理和并发控制能力,确保复杂工作流在长时间运行中保持稳定性和高性能。
运行时配置架构
LangGraph的运行时配置基于Runtime类,它封装了运行时的关键组件和上下文信息:
@dataclass(**_DC_KWARGS)
class Runtime(Generic[ContextT]):
context: ContextT = field(default=None) # 运行时上下文
store: BaseStore | None = field(default=None) # 存储组件
stream_writer: StreamWriter = field(default=_no_op_stream_writer) # 流写入器
previous: Any = field(default=None) # 前次运行结果
运行时上下文管理
运行时上下文允许在Graph执行过程中传递和访问运行时的依赖项和状态信息:
配置注入机制
LangGraph提供多种配置注入方式,支持灵活的运行时配置:
| 配置方式 | 适用场景 | 示例代码 |
|---|---|---|
| Graph编译时配置 | 全局配置 | .compile(store=store, cache=cache) |
| 运行时参数注入 | 每次调用配置 | .invoke(input, context=context) |
| 节点内动态获取 | 运行时访问 | get_store(), get_stream_writer() |
存储配置与优化
存储配置是运行时优化的关键环节,LangGraph支持多种存储后端:
from langgraph.checkpoint.postgres import PostgresSaver
from langgraph.checkpoint.redis import RedisSaver
from langgraph.checkpoint.sqlite import SqliteSaver
from langgraph.checkpoint.memory import InMemorySaver
# 内存存储(开发环境)
memory_store = InMemorySaver()
# PostgreSQL存储(生产环境)
postgres_store = PostgresSaver.from_conn_string(
"postgresql://user:pass@localhost:5432/langgraph"
)
# Redis存储(高性能缓存)
redis_store = RedisSaver.from_url("redis://localhost:6379/0")
存储性能优化策略
针对不同工作负载特点,推荐以下存储配置策略:
| 工作负载类型 | 推荐存储 | 配置参数 | 优化建议 |
|---|---|---|---|
| 高并发读取 | Redis | max_connections=50 |
启用连接池 |
| 大数据量 | PostgreSQL | pool_size=20 |
分区表设计 |
| 开发测试 | SQLite | journal_mode=WAL |
内存模式 |
| 简单应用 | InMemory | N/A | 定期快照 |
检查点配置与恢复
持久化执行依赖于检查点机制,LangGraph提供灵活的检查点配置:
# 配置检查点策略
graph = StateGraph(State).compile(
checkpointer=PostgresSaver.from_conn_string(CONN_STR),
interrupt_before=["llm_node"], # 在LLM节点前中断
interrupt_after=["tool_node"], # 在工具节点后中断
durability="ephemeral" # 持久化级别
)
检查点优化参数
并发控制与资源管理
LangGraph提供细粒度的并发控制机制,确保资源高效利用:
# 配置并发参数
graph = graph.compile(
max_concurrency=10, # 最大并发数
step_timeout=30.0, # 单步超时时间
retry_policy=[ # 重试策略
RetryPolicy(max_attempts=3, backoff=1.0)
]
)
并发优化策略表
| 并发场景 | 推荐配置 | 监控指标 | 调优建议 |
|---|---|---|---|
| CPU密集型 | max_concurrency=CPU核心数 |
CPU使用率 | 增加工作节点 |
| IO密集型 | max_concurrency=50-100 |
IO等待时间 | 异步IO优化 |
| 混合型 | max_concurrency=CPU核心数*2 |
综合负载 | 动态调整 |
| 内存敏感 | max_concurrency=较低值 |
内存使用 | 限制批处理大小 |
运行时监控与诊断
有效的监控是运行时优化的基础,LangGraph集成多种监控机制:
# 启用详细监控
graph.stream(
input_data,
stream_mode=["values", "updates", "messages"],
debug=True, # 启用调试模式
print_mode=["values"] # 实时输出监控信息
)
监控指标体系
高级优化技巧
1. 内存优化策略
# 使用高效的数据结构
from langgraph.channels.ephemeral_value import EphemeralValue
from langgraph.channels.topic import Topic
# 针对不同数据类型选择合适的Channel
channel_config = {
"messages": Topic(list), # 消息列表使用Topic
"state": EphemeralValue(dict), # 状态使用EphemeralValue
"results": LastValue(list) # 结果使用LastValue
}
2. 缓存策略优化
from langgraph.func import task
from langgraph.cache.base import BaseCache
from langgraph.cache.redis import RedisCache
# 配置多级缓存
redis_cache = RedisCache.from_url("redis://localhost:6379/1")
memory_cache = InMemoryCache()
@task(cache_policy=CachePolicy(
ttl=3600, # 缓存有效期
key_fn=lambda *args, **kwargs: f"task_{hash(args)}"
))
def expensive_computation(data):
# 昂贵的计算任务
return process_data(data)
3. 自适应并发控制
# 基于负载的动态并发调整
def adaptive_concurrency_control():
current_load = get_system_load()
if current_load < 0.7:
return 20 # 高并发
elif current_load < 0.9:
return 10 # 中等并发
else:
return 5 # 低并发
# 运行时动态调整
graph = graph.with_config(
max_concurrency=adaptive_concurrency_control()
)
通过合理的运行时配置和优化策略,LangGraph能够支持从简单工作流到复杂多智能体系统的各种应用场景,确保系统在高负载下依然保持稳定和高效。这些优化技巧需要结合实际业务场景进行调优,以达到最佳的性能表现。
总结
LangGraph通过其精心设计的四层架构提供了构建复杂智能体系统的完整解决方案。Pregel执行模型为分布式计算提供了坚实基础,通道系统实现了灵活的数据流管理,检查点机制确保了状态持久化和故障恢复,运行时配置则提供了性能优化的各种手段。这种架构设计使得LangGraph能够支撑从简单工作流到复杂多智能体协作的各种应用场景,为生产环境中的AI系统提供了可靠的技术保障。
【免费下载链接】langgraph 项目地址: https://gitcode.com/GitHub_Trending/la/langgraph
更多推荐


所有评论(0)