0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

langGraphの使い方(compile)

Posted at

在 LangGraph 中,workflow.compile() 是一个至关重要的步骤。它的作用是将你构建的图结构(StateGraph)转换成一个可执行的应用程序(CompiledGraph)。

简单来说,在调用 .compile() 之前,你只是在定义流程图;调用之后,你就拥有了一个可以运行、可以流式输出、甚至可以拥有记忆的“机器”。

以下是关于 compile() 的详细用法和参数说明。

  1. 核心作用

    • 验证图结构: 检查是否有孤立节点,是否定义了入口点(START)等。
    • 生成 Runnable: 返回的对象是一个标准的 LangChain Runnable,支持 .invoke(), .stream(), .batch() 等方法。
      • 注入功能: 在这一步,你可以注入记忆(Persistence)和断点(Interrupts)。
  2. 常用参数 (Parameters)

    • workflow.compile() 主要接收以下几个关键参数,用于增强 Agent 的能力:
      A. checkpointer (持久化/记忆)这是最常用的参数。它允许图保存每一步的状态(State)。
      作用: 实现“记忆”功能,支持长时间运行的任务,允许从特定的状态恢复(Time Travel)。
      类型: BaseCheckpointSaver (例如 MemorySaver, AsyncSqliteSaver, PostgresSaver 等)。

      B. interrupt_before (执行前中断)作用:
      在执行特定节点之前暂停。常用于“人机回圈”(Human-in-the-Loop),例如在执行敏感操作(如写入数据库、发送邮件)前等待用户批准。
      类型: list[str] (节点名称的列表)。

      C. interrupt_after (执行后中断)
      作用: 在执行特定节点之后暂停。常用于让用户检查某个步骤的输出结果,然后再决定是否继续。
      类型: list[str] (节点名称的列表)。

      D. store (存储)作用: (较新版本) 用于跨不同 thread (对话) 共享数据,而不仅仅是当前对话的上下文。
      类型: BaseStore。

workflow.compile() 生成的 CompiledGraph 对象(即你的 rag_agent)是 LangGraph 的核心执行单元。它不仅是一个简单的函数,更是一个能够管理状态、支持流式输出和能够“时间旅行”的复杂对象。以下是它的主要方法、具体区别和使用场景的详细对比:1. 核心执行方法对比这三个方法用于“运行”你的图,但交互方式不同。方法核心特点适用场景返回值.invoke()同步/阻塞后台任务、自动化脚本、不需要即时反馈的 API最终状态 (Final State).stream()流式/实时聊天机器人 UI、通过 SSE 推送消息、长任务进度展示生成器 (yields updates).batch()并发/批量批量处理文档、评测 (Evaluation)、数据清洗状态列表 (List of States)2. 具体代码示例假设我们有一个简单的图,状态包含 messages 列表。A. invoke (一次性拿结果)程序会“卡住”,直到图执行完所有步骤(或者遇到断点),然后一次性返回最终结果。Pythoninputs = {"messages": [("user", "你好,请介绍一下 LangGraph")]}

执行并等待

final_state = rag_agent.invoke(inputs)

直接获取最终回复

inputs = {"messages": [("user", "你好,请介绍一下 LangGraph")]}

# 执行并等待
final_state = rag_agent.invoke(inputs)

# 直接获取最终回复
print(final_state["messages"][-1].content)

循环获取每一个节点的输出

for event in rag_agent.stream(inputs):
    # event 的格式通常是: {'节点名称': {'key': 'value'}}
    for node_name, state_update in event.items():
        print(f"--- 正在执行: {node_name} ---")
        print(state_update) 

C. batch (并行处理)LangGraph 会利用线程池并行处理多个输入,比写 for 循环调用 invoke 快得多。

Pythoninputs_list = [
    {"messages": [("user", "1+1等于几?")]},
    {"messages": [("user", "今天天气如何?")]},
    {"messages": [("user", "讲个笑话")]}
]

并行运行

results = rag_agent.batch(inputs_list)

# results 是一个列表,包含3个最终状态
for res in results:
    print(res["messages"][-1].content)
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?