元素码农
基础
UML建模
数据结构
算法
设计模式
网络
TCP/IP协议
HTTPS安全机制
WebSocket实时通信
数据库
sqlite
postgresql
clickhouse
后端
rust
go
java
php
mysql
redis
mongodb
etcd
nats
zincsearch
前端
浏览器
javascript
typescript
vue3
react
游戏
unity
unreal
C++
C#
Lua
App
android
ios
flutter
react-native
安全
Web安全
测试
软件测试
自动化测试 - Playwright
人工智能
Python
langChain
langGraph
运维
linux
docker
工具
git
svn
🌞
🌙
目录
▶
LangGraph基础概念
什么是LangGraph
核心特性解析
典型应用场景
▶
快速入门指南
环境安装配置
第一个LangGraph应用
执行流程演示
▶
核心组件解析
图结构基础
节点(Node)详解
边(Edge)的类型
执行引擎原理
路由策略配置
状态容器使用
错误处理机制
输入输出管道
配置管理系统
发布时间:
2025-04-01 15:11
↑
☰
# 第一个LangGraph应用 ## 构建你的第一个LangGraph应用 本文将指导您创建第一个LangGraph应用程序,通过一个简单的对话助手示例,帮助您快速掌握LangGraph的基本用法。我们将逐步构建一个能够记忆对话历史并提供个性化回复的智能助手。 ## 准备工作 在开始之前,请确保您已经完成了[环境安装配置](/article/langgraph/quickstart/setup)。您需要安装以下依赖: ```bash pip install langgraph langchain langchain_openai ``` 如果您使用本地模型,可以安装: ```bash pip install langchain-community ``` ## 项目结构 我们的第一个LangGraph应用将有以下结构: ``` hello_langgraph/ ├── main.py # 主应用程序 └── README.md # 项目说明 ``` ## 步骤1:定义状态结构 首先,我们需要定义应用程序的状态结构。在LangGraph中,状态是图执行过程中传递的数据。 创建`main.py`文件,添加以下代码: ```python from typing import TypedDict, List, Dict, Any from langgraph.graph import StateGraph from langchain_openai import ChatOpenAI from langchain.schema import HumanMessage, AIMessage, SystemMessage import os # 设置OpenAI API密钥(如果使用OpenAI) os.environ["OPENAI_API_KEY"] = "your-api-key" # 替换为您的API密钥 # 定义状态类型 class ChatState(TypedDict): messages: List[Dict[str, Any]] # 对话历史 current_input: str # 当前用户输入 user_info: Dict[str, Any] # 用户信息 ``` 这里我们定义了一个`ChatState`类型,包含对话历史、当前用户输入和用户信息。 ## 步骤2:定义节点函数 接下来,我们定义图中的节点函数,每个节点负责特定的任务: ```python # 初始化LLM llm = ChatOpenAI(model="gpt-3.5-turbo") # 或使用其他模型 # 节点1:处理用户输入 def process_input(state: ChatState) -> dict: """处理用户输入,添加到消息历史""" # 获取当前输入 current_input = state["current_input"] # 添加到消息历史 return { "messages": state["messages"] + [{ "role": "user", "content": current_input }] } # 节点2:生成回复 def generate_response(state: ChatState) -> dict: """使用LLM生成回复""" # 准备消息格式 messages = [ SystemMessage(content="你是一个友好的AI助手,提供有用的回复。尽量个性化你的回答,考虑用户的背景信息。"), ] # 添加用户信息作为上下文 if state["user_info"]: user_info_str = "用户信息: " + ", ".join([f"{k}: {v}" for k, v in state["user_info"].items()]) messages.append(SystemMessage(content=user_info_str)) # 添加对话历史 for msg in state["messages"]: if msg["role"] == "user": messages.append(HumanMessage(content=msg["content"])) elif msg["role"] == "assistant": messages.append(AIMessage(content=msg["content"])) # 生成回复 response = llm.invoke(messages) # 返回更新 return { "messages": state["messages"] + [{ "role": "assistant", "content": response.content }] } ``` 这里我们定义了两个节点: - `process_input`:处理用户输入,将其添加到消息历史 - `generate_response`:使用LLM生成回复,并将回复添加到消息历史 ## 步骤3:创建图结构 现在,我们创建图结构并定义节点之间的连接: ```python # 创建图 graph = StateGraph(ChatState) # 添加节点 graph.add_node("process_input", process_input) graph.add_node("generate_response", generate_response) # 添加边(定义执行顺序) graph.add_edge("process_input", "generate_response") # 设置入口点 graph.set_entry_point("process_input") # 编译图 app = graph.compile() ``` 这个简单的图结构定义了从`process_input`到`generate_response`的执行流程。 ## 步骤4:创建交互接口 最后,我们创建一个简单的交互接口来测试我们的应用: ```python def chat_interface(): """简单的聊天界面""" print("欢迎使用LangGraph聊天助手!输入'退出'结束对话。") # 初始化状态 state = { "messages": [], "current_input": "", "user_info": { "name": "张三", "interests": "人工智能、编程、音乐", "occupation": "软件工程师" } } while True: # 获取用户输入 user_input = input("\n你: ") if user_input.lower() in ["退出", "exit", "quit"]: print("\n助手: 再见!祝您有愉快的一天!") break # 更新当前输入 state["current_input"] = user_input # 执行图 state = app.invoke(state) # 显示助手回复 assistant_message = state["messages"][-1]["content"] print(f"\n助手: {assistant_message}") # 运行聊天界面 if __name__ == "__main__": chat_interface() ``` ## 完整代码 以下是完整的`main.py`文件内容: ```python from typing import TypedDict, List, Dict, Any from langgraph.graph import StateGraph from langchain_openai import ChatOpenAI from langchain.schema import HumanMessage, AIMessage, SystemMessage import os # 设置OpenAI API密钥(如果使用OpenAI) os.environ["OPENAI_API_KEY"] = "your-api-key" # 替换为您的API密钥 # 定义状态类型 class ChatState(TypedDict): messages: List[Dict[str, Any]] # 对话历史 current_input: str # 当前用户输入 user_info: Dict[str, Any] # 用户信息 # 初始化LLM llm = ChatOpenAI(model="gpt-3.5-turbo") # 或使用其他模型 # 节点1:处理用户输入 def process_input(state: ChatState) -> dict: """处理用户输入,添加到消息历史""" # 获取当前输入 current_input = state["current_input"] # 添加到消息历史 return { "messages": state["messages"] + [{ "role": "user", "content": current_input }] } # 节点2:生成回复 def generate_response(state: ChatState) -> dict: """使用LLM生成回复""" # 准备消息格式 messages = [ SystemMessage(content="你是一个友好的AI助手,提供有用的回复。尽量个性化你的回答,考虑用户的背景信息。"), ] # 添加用户信息作为上下文 if state["user_info"]: user_info_str = "用户信息: " + ", ".join([f"{k}: {v}" for k, v in state["user_info"].items()]) messages.append(SystemMessage(content=user_info_str)) # 添加对话历史 for msg in state["messages"]: if msg["role"] == "user": messages.append(HumanMessage(content=msg["content"])) elif msg["role"] == "assistant": messages.append(AIMessage(content=msg["content"])) # 生成回复 response = llm.invoke(messages) # 返回更新 return { "messages": state["messages"] + [{ "role": "assistant", "content": response.content }] } # 创建图 graph = StateGraph(ChatState) # 添加节点 graph.add_node("process_input", process_input) graph.add_node("generate_response", generate_response) # 添加边(定义执行顺序) graph.add_edge("process_input", "generate_response") # 设置入口点 graph.set_entry_point("process_input") # 编译图 app = graph.compile() def chat_interface(): """简单的聊天界面""" print("欢迎使用LangGraph聊天助手!输入'退出'结束对话。") # 初始化状态 state = { "messages": [], "current_input": "", "user_info": { "name": "张三", "interests": "人工智能、编程、音乐", "occupation": "软件工程师" } } while True: # 获取用户输入 user_input = input("\n你: ") if user_input.lower() in ["退出", "exit", "quit"]: print("\n助手: 再见!祝您有愉快的一天!") break # 更新当前输入 state["current_input"] = user_input # 执行图 state = app.invoke(state) # 显示助手回复 assistant_message = state["messages"][-1]["content"] print(f"\n助手: {assistant_message}") # 运行聊天界面 if __name__ == "__main__": chat_interface() ``` ## 运行应用 保存`main.py`文件后,在终端中运行: ```bash python main.py ``` 您将看到一个简单的聊天界面,可以与您的LangGraph应用进行交互。 ## 示例对话 ``` 欢迎使用LangGraph聊天助手!输入'退出'结束对话。 你: 你好,我是谁? 助手: 您好!根据我的记录,您是张三,一位对人工智能、编程和音乐感兴趣的软件工程师。有什么我可以帮助您的吗? 你: 你能推荐一些与我兴趣相关的活动吗? 助手: 当然可以,张三!基于您对人工智能、编程和音乐的兴趣,这里有一些推荐活动: 关于人工智能和编程: 1. 参加本地或线上的AI/编程黑客马拉松 2. 加入开源AI项目的贡献者社区 3. 订阅AI研究论文通讯或技术博客 4. 参加编程语言或AI框架的线上课程 5. 加入技术社区如GitHub讨论组或Stack Overflow 关于音乐: 1. 尝试使用AI作曲工具创作音乐 2. 参加将编程与音乐结合的工作坊(如使用Python创作音乐) 3. 探索音乐可视化编程项目 4. 加入音乐爱好者社区或参加线下音乐活动 作为软件工程师,您可能会特别喜欢探索AI音乐生成、音频处理库或开发音乐相关应用程序。这些活动不仅能满足您的兴趣,还能拓展您的专业技能! 你: 退出 助手: 再见!祝您有愉快的一天! ``` ## 扩展应用 这个简单的应用只是LangGraph功能的冰山一角。您可以通过以下方式扩展它: 1. **添加更多节点**:例如,添加情感分析、主题提取等节点 2. **实现条件路由**:根据用户输入类型选择不同的处理路径 3. **添加记忆组件**:实现更复杂的上下文管理 4. **集成外部工具**:添加网络搜索、数据库查询等功能 5. **实现持久化**:保存对话历史到文件或数据库 ## 下一步 恭喜!您已经成功创建了第一个LangGraph应用。接下来,您可以: 1. 学习[执行流程演示](/article/langgraph/quickstart/execution),了解更复杂的执行流程 2. 深入了解[核心组件](/article/langgraph/core/graph-structure),掌握LangGraph的高级特性 3. 探索[典型应用场景](/article/langgraph/basic/usecases),获取更多应用灵感 通过这个简单的例子,您已经了解了LangGraph的基本概念和用法。随着您对框架的深入学习,您将能够构建更加复杂和强大的AI应用程序。