1. 项目概述:LangChain与LangGraph开发框架实战
作为一名长期从事AI应用开发的工程师,我最近在探索如何快速构建基于大语言模型的智能体系统。在这个过程中,LangChain和LangGraph这两个框架给我带来了极大的便利。今天我想分享一个完整的实战案例,展示如何从零开始搭建一个具备联网搜索、数据分析能力的智能体系统。
这个项目将涵盖以下核心技术点:
- LangChain基础组件的使用(模型调用、工具集成)
- LangGraph工作流编排的实现
- LangSmith调试与追踪平台的接入
- Agent-Chat UI的快速搭建
通过这个案例,你将掌握如何将这些技术有机结合,构建一个完整的智能体开发流水线。无论你是想快速验证AI应用创意,还是需要构建生产级的智能体系统,这套技术栈都能提供强有力的支持。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 环境准备与项目初始化
2.1 开发环境配置
首先我们需要准备Python开发环境。由于项目会用到较新的Python特性,建议使用Python 3.11或更高版本。我个人的开发环境配置如下:
bash复制# 创建conda虚拟环境
conda create -n langgraph-demo python=3.12
conda activate langgraph-demo
验证环境是否激活成功,可以查看命令行提示符前是否显示虚拟环境名称。接下来创建项目目录结构:
code复制langchain-demo/
├── .env # 环境变量配置文件
├── requirements.txt # 依赖清单
├── src/ # 源代码目录
└── README.md # 项目说明文档
2.2 依赖安装与配置
在requirements.txt中添加以下依赖项:
code复制langchain-core==0.1.0
langchain-community==0.0.1
langgraph==0.0.1
langsmith==0.1.0
tavily-python==0.1.0
deepseek-chat==0.1.0
python-dotenv==1.0.0
安装依赖:
bash复制pip install -r requirements.txt
在.env文件中配置API密钥:
code复制DEEPSEEK_API_KEY=your_api_key_here
TAVILY_API_KEY=your_api_key_here
LANGCHAIN_API_KEY=your_api_key_here
LANGCHAIN_TRACING_V2=true
LANGCHAIN_PROJECT=langgraph-demo
这些密钥需要到各平台申请:
- DeepSeek:提供大模型API服务
- Tavily:提供联网搜索功能
- LangSmith:提供调试追踪平台
3. 核心组件实现
3.1 LangChain基础功能实现
我们先实现最基本的问答功能,使用LangChain的ChatDeepSeek组件:
python复制from langchain_community.chat_models import ChatDeepSeek
from langchain_core.prompts import ChatPromptTemplate
chat = ChatDeepSeek(api_key=os.getenv("DEEPSEEK_API_KEY"))
prompt = ChatPromptTemplate.from_template("回答以下问题:{question}")
chain = prompt | chat
response = chain.invoke({"question": "天空为什么是蓝色的"})
print(response.content)
这段代码展示了LangChain的核心设计理念 - 通过管道操作符(|)将不同组件连接起来。ChatPromptTemplate负责格式化输入,ChatDeepSeek负责调用模型API。
3.2 搜索功能集成
接下来我们集成Tavily搜索工具:
python复制from langchain_community.tools import TavilySearchResults
search = TavilySearchResults(api_key=os.getenv("TAVILY_API_KEY"))
def search_online(query: str):
return search.invoke({"query": query})
# 测试搜索功能
results = search_online("今天的热点AI新闻")
print(results)
搜索工具可以返回最新的网络信息,弥补大模型知识时效性的不足。
3.3 LangGraph工作流编排
现在我们将这些功能整合到一个有状态的工作流中:
python复制from langgraph.graph import Graph
from langgraph.prebuilt import ToolNode
# 定义工作流状态
from typing import TypedDict, List
from langchain_core.messages import HumanMessage, AIMessage
class State(TypedDict):
messages: List[Union[HumanMessage, AIMessage]]
# 创建工具节点
tools = [search]
tool_node = ToolNode(tools)
# 构建工作流
workflow = Graph()
workflow.add_node("chat", chat)
workflow.add_node("tools", tool_node)
# 定义路由逻辑
def router(state: State):
last_msg = state["messages"][-1]
if "搜索" in last_msg.content:
return "tools"
return "chat"
workflow.add_conditional_edges("chat", router)
workflow.add_edge("tools", "chat")
workflow.set_entry_point("chat")
# 编译并运行工作流
app = workflow.compile()
result = app.invoke({"messages": [HumanMessage(content="搜索今天的热点AI新闻")]})
这个工作流会根据用户输入自动判断是否需要调用搜索工具,实现了智能的条件分支。
4. LangSmith集成与调试
4.1 配置追踪
LangSmith的集成非常简单,只需正确配置环境变量即可。我们在.env中已经设置了:
code复制LANGCHAIN_TRACING_V2=true
LANGCHAIN_API_KEY=your_api_key_here
现在所有工作流执行都会自动记录到LangSmith平台。
4.2 本地调试
安装langgraph-cli工具:
bash复制pip install -U "langgraph-cli[inmem]"
启动开发服务器:
bash复制langgraph dev --tunnel
这个命令会启动本地服务并通过Cloudflare创建隧道,使LangSmith可以访问你的本地环境。
4.3 平台功能使用
访问LangSmith平台,你可以:
- 查看完整的工作流执行轨迹
- 检查每个节点的输入输出
- 进行在线调试
- 分析性能指标

5. Agent-Chat UI搭建
5.1 前端项目部署
克隆官方Agent-Chat项目:
bash复制git clone https://github.com/langchain-ai/agent-chat-ui
cd agent-chat-ui
pnpm install
pnpm dev
5.2 后端连接配置
在UI界面配置:
- 后端地址:http://localhost:2024
- LangSmith API密钥
- 项目名称:langgraph-demo
5.3 功能测试
现在你可以通过友好的UI界面与智能体交互:
- 输入问题"地球为什么是圆的"
- 观察完整的回答过程
- 查看生成的数据分析图表
6. 项目架构深度解析
6.1 技术选型考量
为什么选择这套技术栈?
-
LangChain:提供了统一的AI应用开发接口,避免了重复造轮子
- 标准化的大模型调用方式
- 丰富的工具集成(搜索、文档处理等)
- 内置的记忆管理和提示词模板
-
LangGraph:解决复杂工作流编排问题
- 可视化的工作流设计
- 完善的状态管理
- 支持条件分支和循环
-
LangSmith:提升开发效率
- 完整的执行轨迹记录
- 方便的调试功能
- 生产环境监控
6.2 性能优化技巧
在实际开发中,我总结了以下优化经验:
-
缓存策略:
- 对频繁查询的内容添加缓存层
- 使用Redis缓存搜索结果和模型响应
-
异步处理:
python复制async def process_query(query): response = await chain.ainvoke({"question": query}) return response -
批量处理:
python复制responses = chain.batch([{"question": q} for q in questions]) -
超时控制:
python复制from langchain_core.runnables import RunnableConfig config = RunnableConfig(timeout=10.0) response = chain.invoke({"question": query}, config=config)
7. 常见问题与解决方案
7.1 部署问题排查
问题1:LangSmith无法连接到本地服务
解决方案:
- 确保使用
--tunnel参数启动 - 检查防火墙设置,允许Cloudflare隧道
- 验证LangSmith API密钥是否正确
问题2:Agent-Chat UI无法获取响应
解决方案:
- 确认后端服务正在运行
- 检查CORS配置
- 查看浏览器控制台错误信息
7.2 性能问题优化
问题:响应速度慢
优化方案:
- 实现流式响应
python复制for chunk in chain.stream({"question": query}): print(chunk.content, end="", flush=True) - 启用模型端的缓存
- 优化提示词设计,减少不必要的输出
7.3 功能扩展建议
-
多模态支持:
python复制from langchain_community.document_loaders import ImageLoader loader = ImageLoader() documents = loader.load("image.png") -
自定义工具:
python复制from langchain.tools import tool @tool def calculator(expression: str): """计算数学表达式""" return eval(expression) -
知识库增强:
python复制from langchain_community.vectorstores import FAISS vectorstore = FAISS.from_texts(["文本内容"], embedding_model) retriever = vectorstore.as_retriever()
8. 项目总结与进阶方向
通过这个项目,我们实现了一个完整的智能体系统开发生命周期:
- 基础功能:使用LangChain集成大模型和工具
- 工作流编排:通过LangGraph实现复杂逻辑
- 调试追踪:利用LangSmith提升开发效率
- 用户界面:快速搭建Agent-Chat UI
这套技术栈的优势在于:
- 开发效率高:避免重复造轮子
- 扩展性强:支持各种自定义扩展
- 可视化程度高:方便调试和监控
对于想要进一步深入学习的开发者,我建议探索以下方向:
- 复杂Agent系统:实现多Agent协作
- 模型微调:定制专属的大模型
- 生产部署:考虑性能、安全和监控
- 领域特定应用:结合垂直行业需求
智能体开发是一个快速发展的领域,LangChain生态提供了强大的工具支持。掌握这套技术栈,你将能够快速实现各种AI应用创意。
