Day 2: 从LangChain到LangGraph - 图形编程大师之路

1. 从LangChain到LangGraph

1.1 LangChain简介

LangChain是一个强大的框架,用于构建基于LLM的应用程序。它提供了丰富的工具和抽象,使得开发者可以更容易地构建复杂的AI应用。

1.2 为什么需要LangGraph?

  • 更灵活的控制流
  • 更好的状态管理
  • 更清晰的执行路径
  • 更容易实现复杂的对话逻辑

1.3 LangChain与LangGraph的关系

LangGraph是LangChain的扩展,它提供了基于图的工作流管理能力,使得我们可以:

  • 定义清晰的执行路径
  • 管理状态转换
  • 实现条件分支
  • 处理循环逻辑

2. LangGraph核心概念

2.1 图形编程基础

  • 节点(Node):执行特定任务的单元
  • 边(Edge):定义节点之间的连接关系
  • 状态(State):在节点之间传递的数据

2.2 状态管理

# 定义状态类型
class GraphState(TypedDict):
    messages: List[Dict]
    current_stage: str

2.3 节点函数

# 定义节点函数
def process_input(state: GraphState, config: RunnableConfig) -> Command[Literal[GraphConfig.GENERATE_RESPONSE, END]]:
    """处理输入节点"""
    messages = state.get("messages", [])
    if not messages:
        return Command(
            update={
                "current_stage": "error",
                "messages": [AIMessage(content="❌ 错误:没有用户输入")]
            },
            goto=END
        )
    
    user_input = messages[-1].content if messages else ""
    
    # 调用LLM处理输入
    system_instructions = PROCESS_INPUT_PROMPT.format(user_input=user_input)
    response = model.invoke([
        SystemMessage(content=system_instructions),
        HumanMessage(content="请处理这个输入")
    ])
    
    return Command(
        update={
            "messages": messages + [AIMessage(content=response.content)],
            "current_stage": "processing"
        },
        goto=GraphConfig.GENERATE_RESPONSE
    )

2.4 边的连接

# 添加边
builder.add_edge(START, GraphConfig.PROCESS_INPUT)
builder.add_edge(GraphConfig.GENERATE_RESPONSE, END)

3. 环境搭建

3.1 安装必要的包

pip install langgraph langchain-openai python-dotenv

4. 条件路由与流程控制

4.1 条件路由示例

if should_continue:
    return Command(
        update={
            "messages": state.get("messages", []) + [AIMessage(content="对话结束")],
            "current_stage": "completed"
        },
        goto=END
    )
    
else:
    return Command(
        update={
            "messages": state.get("messages", []) + [AIMessage(content=response.content)],
            "current_stage": "checking"
        },
        goto=GraphConfig.GENERATE_RESPONSE
    )

6. 实践项目

6.1 基础图示例 (basic_graph.py)

基础图示例展示了 LangGraph 的最基本用法,包含以下核心功能:

  • 创建简单的双节点图(输入处理和响应生成)
  • 实现基本的消息处理流程
  • 理解状态管理和节点间通信
  • 使用 TypedDict 定义状态类型
  • 实现基本的图构建和编译

6.2 条件路由示例 (conditional_graph.py)

条件路由示例展示了如何在 LangGraph 中实现条件分支:

  • 实现基于条件的路由逻辑
  • 处理不同的用户输入场景
  • 管理复杂的状态转换
  • 使用条件检查节点控制流程
  • 实现多路径选择

6.3 并行处理示例 (parallel_graph.py)

并行处理示例展示了如何同时处理多个任务:

  • 实现并行任务处理
  • 提高处理效率
  • 处理多个并发请求
  • 合并并行任务结果
  • 管理并行任务状态

6.4 循环处理示例 (loop_graph.py)

循环处理示例展示了如何实现迭代逻辑:

  • 实现循环执行逻辑
  • 控制迭代次数
  • 管理循环状态
  • 处理迭代过程中的状态转换
  • 实现循环终止条件

6.5 人机交互示例 (human_interaction_graph.py)

人机交互示例展示了如何实现人机交互流程:

  • 实现人机交互流程
  • 处理用户输入请求
  • 管理对话状态
  • 使用中断机制等待用户输入
  • 处理交互过程中的状态转换

每个示例都展示了 LangGraph 的不同特性,从基础到进阶,帮助开发者逐步掌握 LangGraph 的核心概念和实际应用。这些示例共同构成了一个完整的学习路径,涵盖了从简单的图构建到复杂的业务逻辑实现。

7. 进阶主题

  • 跟踪执行过程
  • 调试问题
  • 优化性能

8. 总结

通过本课程,我们学习了:

  1. LangGraph的基本概念和使用方法
  2. 如何构建和管理图工作流
  3. 实现条件路由和工具集成
  4. 处理复杂的状态管理
  5. 构建实用的AI应用

9. 下一步

  1. 尝试构建更复杂的图工作流
  2. 集成更多外部工具
  3. 优化性能和可靠性
  4. 探索更多高级特性