LangChain + LangGraph 环境搭建与快速入门:从零构建你的第一个 AI Agent

LangChain + LangGraph 环境搭建与快速入门:从零构建你的第一个 AI Agent
图片来源网络,侵权联系删。
在这里插入图片描述

文章目录

引言:为什么这个问题值得关心?

你是否曾想过,如何让大模型(LLM)不只是“回答问题”,而是能像人一样分步骤思考、调用工具、循环修正?2024 年起,LangChain 生态中的 LangGraph 正在成为构建复杂 AI Agent 的标准范式。它基于状态机(State Machine)模型,让开发者能清晰定义“推理-行动-反思”的闭环流程。然而,许多工程师卡在第一步:环境配置混乱、示例跑不通、日志看不懂。本文将带你用最简路径完成 LangChain + LangGraph 的本地部署,并运行你的第一个可调试的智能体程序。


在这里插入图片描述

背景与挑战

LangChain 早期版本以链式调用(Chains)为主,适合线性任务。但真实场景中,AI 需要循环决策(如:查天气 → 发现下雨 → 建议带伞 → 用户追问品牌 → 调用电商 API)。传统 Chains 无法表达这种图结构逻辑。

LangGraph(由 LangChain 官方于 2024 年初推出)正是为解决此问题而生——它将工作流建模为有向图,每个节点是函数,边代表状态转移。但新手常遇到三大障碍:

  1. 依赖冲突:LangChain v0.2+ 与旧版不兼容,且需特定 Pydantic 版本
  2. 概念混淆:StateGraph、CompiledGraph、Node 等抽象层级不清
  3. 调试困难:默认日志过于简略,难以追踪状态变化

💡 专家点评:LangGraph 的核心价值不是“更强大”,而是“更可控”。它把 LLM 的黑盒行为转化为可审计、可中断、可重试的状态机,这对金融、医疗等高风险场景至关重要。


在这里插入图片描述

核心机制解析

1. 环境安装要点(Python ≥ 3.9)

# 创建干净虚拟环境(强烈推荐) python -m venv langchain-env source langchain-env/bin/activate # Linux/Mac# langchain-env\Scripts\activate # Windows# 安装核心库(截至 2025 年 11 月,LangChain v0.2.13 + LangGraph v0.1.8) pip install langchain-core langchain-community langgraph # 若需使用 OpenAI 模型(示例所需) pip install openai 
⚠️ 注意:避免同时安装 langchain 全家桶(含 deprecated 模块),应按需引入子包以减少依赖冲突。

2. 最小验证示例(Hello World)

from langchain_openai import ChatOpenAI from langgraph.graph import StateGraph, END # 定义状态结构(使用 TypedDict 更安全)from typing import TypedDict classState(TypedDict): message:str# 定义节点函数defgreet(state: State)->dict:return{"message":f"Hello, {state['message']}!"}# 构建图 builder = StateGraph(State) builder.add_node("greet", greet) builder.set_entry_point("greet") builder.add_edge("greet", END)# 编译并运行 graph = builder.compile() result = graph.invoke({"message":"Alice"})print(result)# 输出: {'message': 'Hello, Alice!'}

💡 关键原理StateGraph 是一个声明式构建器compile() 后生成可执行的 CompiledGraph。每次 .invoke() 都会完整走完图流程,状态在节点间传递。


在这里插入图片描述

实战演示:构建一个带循环的简单 Agent

我们扩展上例,实现“用户输入名字 → 模型问候 → 若名字含数字则重试”:

from langgraph.graph import StateGraph, END from typing import TypedDict, Annotated import re classState(TypedDict): name:str attempts:intdefvalidate_name(state: State):if re.search(r'\d', state["name"]):return{"name":"INVALID","attempts": state["attempts"]+1}return{"name": state["name"],"attempts": state["attempts"]}defrespond(state: State):if state["name"]=="INVALID":return{"name":"Please enter a valid name (no digits):"}return{"name":f"Hi {state['name']}!","attempts": state["attempts"]}defshould_retry(state: State)->str:return"respond"if state["name"]!="INVALID"or state["attempts"]>=3else"respond"# 构建图 builder = StateGraph(State) builder.add_node("validate", validate_name) builder.add_node("respond", respond) builder.set_entry_point("validate") builder.add_conditional_edges("validate",lambda s:"retry"if s["name"]=="INVALID"and s["attempts"]<3else"done",{"retry":"respond","done": END}) builder.add_edge("respond","validate")# 形成循环 graph = builder.compile()# 测试 result = graph.invoke({"name":"Alice123","attempts":0})print(result)
日志输出将显示多次状态流转,直到达到最大尝试次数或成功。
---

最佳实践与避坑指南

  1. 状态设计原则
    • 使用 TypedDict 明确字段类型,避免运行时错误
    • 状态应包含所有决策所需信息(如 attempts 计数器)
  2. Jupyter 集成技巧
    在 Notebook 中运行 .compile().get_graph().draw_mermaid_png() 可可视化流程图(需安装 pygraphviz 或使用 Mermaid Live Editor)。

调试利器:Rich Logger
安装 pip install rich,并在代码开头加入:

from rich.logging import RichHandler import logging logging.basicConfig(level="INFO", handlers=[RichHandler()])

可清晰看到每一步的输入/输出状态。

⚠️ 常见坑

  • 忘记 set_entry_point() 导致图无起点
  • 条件边返回值必须严格匹配目标节点名
  • 状态更新必须返回完整新状态字典,而非增量
在这里插入图片描述

总结

LangGraph 正快速演进:2025 年 Q3 将支持异步节点外部事件触发,使 Agent 能响应实时数据流。国内阿里通义实验室已在其 Qwen-Agent 框架中集成类似图引擎,用于电商客服场景。

下一步建议

  • 尝试集成 Tool Calling(如 TavilySearchAPIWrapper
  • 探索 Checkpointing 机制实现对话持久化
  • 关注 LangGraph 官方文档 获取最新模式
技术的本质不是炫技,而是可控的智能。从今天这个“Hello World”开始,你已站在构建下一代 AI 应用的起跑线上。

Read more

04_Dify 单独启动前端 Docker 容器

04_Dify 单独启动前端 Docker 容器

前言 本文介绍了在前后端分离开发场景下,部署Dify前端服务的两种Docker化方案。一是直接使用官方DockerHub镜像启动前端容器,支持最新版或指定版本,并配置后端API地址;二是通过源码本地构建自定义镜像后再启动。两种方法均通过环境变量配置控制台与应用的API连接,并提供了本地访问验证方式,适合后端开发者专注业务逻辑时快速启用前端界面。 一、直接使用 DockerHub 镜像 当单独开发后端时,可能只需要源码启动后端服务,而不需要本地构建前端代码并启动,因此可以直接通过拉取 docker 镜像并启动容器的方式来启动前端服务。 1.1 启动后端服务 查看教程:👉 Dify开源版使用源代码本地启动(一至五部分) 查看教程:👉 dify-plugin-daemon使用源码启动图文教程 1.2 使用 DockerHub 镜像启动前端 Docker 容器 获取最新版本 docker run -it -p 3000:3000 -e CONSOLE_API_URL=http://127.0.0.

Qwen3-VL-4B Pro一键部署:Docker+GPU驱动自动检测+WebUI直连

Qwen3-VL-4B Pro一键部署:Docker+GPU驱动自动检测+WebUI直连 1. 这不是普通“看图说话”,而是真正能读懂图像逻辑的AI 你有没有试过给AI传一张超市货架照片,让它不仅说出“这是零食区”,还能指出“第三排左数第二个蓝色包装是进口海苔脆,保质期还剩17天”?或者上传一张电路板图片,它能准确识别出烧毁的电容位置并解释可能的故障原因?这些不再是实验室里的演示效果——Qwen3-VL-4B Pro 就是为此而生。 它不是又一个调用API的网页工具,也不是需要你手动编译、改配置、查报错的“工程挑战赛”。这是一个从镜像拉取到浏览器打开、全程不到3分钟就能开始图文对话的完整闭环。没有Python环境冲突,不纠结CUDA版本,不手动下载模型权重,甚至不需要知道“device_map”是什么意思。你只需要有显卡、有Docker、有浏览器——剩下的,它自己搞定。 更关键的是,它真的“懂图”。不是靠OCR扫文字、不是靠分类标签堆关键词,而是把图像当作和文字同等重要的信息源,进行跨模态对齐与联合推理。比如你问:“如果把图中穿红衣服的人换成穿西装的,背景灯光该怎么调整才自然

深入剖析云原生Service Mesh数据平面Envoy核心架构:基于xDS协议与WebAssembly实现动态流量管理与安全策略的微服务治理实战指南

深入剖析云原生Service Mesh数据平面Envoy核心架构:基于xDS协议与WebAssembly实现动态流量管理与安全策略的微服务治理实战指南

深入剖析云原生Service Mesh数据平面Envoy核心架构:基于xDS协议与WebAssembly实现动态流量管理与安全策略的微服务治理实战指南 在云原生微服务架构的演进中,Service Mesh(服务网格)已成为处理服务间通信的标准基础设施。而在这一架构中,Envoy 凭借其高性能的 C++ 实现、可扩展的架构以及作为 Istio 默认数据平面的地位,成为了事实上的“Sidecar之王”。 本文将深入剖析 Envoy 的核心架构,重点解析其如何通过 xDS 协议 实现动态配置,以及如何利用 WebAssembly (Wasm) 技术突破传统的扩展瓶颈,实现微服务的流量管理与安全策略治理。 1. Envoy 核心架构全景:高性能的“四层”模型 Envoy 本质上是一个高性能的边缘/服务代理,其设计核心在于将网络处理逻辑分解为清晰的层级。这种设计不仅保证了极高的吞吐量,也使得配置极其灵活。 1.1 逻辑架构分层 Envoy 的逻辑架构自上而下分为四个核心层次: Level 1: 线程模型与I/

Axum: Rust 好用的 Web 框架

Axum: Rust 好用的 Web 框架

Axum 是 Rust 生态中基于 Tokio 异步运行时和 Tower 中间件体系打造的高性能 Web 框架,以“类型安全、无宏入侵、轻量高效”为核心优势,广泛应用于云原生、微服务、API 网关等场景。它摒弃了传统 Web 框架的宏魔法,完全依赖 Rust 的类型系统实现路由匹配、请求解析、响应处理,兼顾了开发效率与运行性能。 本文将从环境搭建、核心概念、路由设计、请求处理、中间件开发到生产级实战,全方位拆解 Axum 的使用技巧,每个知识点均配套可运行的示例代码,帮助开发者从入门到精通,快速构建高性能的 Rust Web 应用。 一、环境准备与项目初始化 1.1 前置条件 * 安装 Rust 环境: