---
title: "LangGraph教程(一)：从零开始构建你的第一个AI聊天机器人"
description: "本文是 《LangGraph入门全解》系列的第一篇。在这篇文章中，我们将基于LangGraph构建一个聊天机器人。并学习查看Graph的图结构。如果出你是新手，建议先阅读主指南以了解LangGraph的全貌。LangGraph入门, LangGraph教程, LangGraph聊天机器人, StateGraph使用"
image: "https://wileyzhang.com/posts/cover/264605ee-e889-8089-81f9-d9bc9bb64ee8_80a0584fd6e256fd14aefae7618f47d9.png"
url: "https://wileyzhang.com/posts/langgraph-ai"
date: "2025-09-04"
updated: "2025-09-04"
type: "blog-post"
tags: ["LangGraph", "LLM", "AI"]
reading_time_minutes: 2
estimated_tokens: 902
---

# LangGraph教程(一)：从零开始构建你的第一个AI聊天机器人

本文是 **《LangGraph入门全解》[LangGraph介绍](https://wileyzhang.com/posts/langgraph) **系列的第一篇。在这篇文章中，我们将构建一个聊天机器人。如果出你是新手，建议先阅读主指南以了解LangGraph的全貌。

# 基于LangGraph开发一个聊天bot

## bot Agent 代码

```python
from typing import Annotated
from typing_extensions import TypedDict
from langchain_openai import ChatOpenAI
from langgraph.graph import StateGraph, START, END
from langgraph.graph.message import add_messages
from pydantic import SecretStr

# 此处定义你自己的模型
llm = ChatOpenAI(base_url="http://127.0.0.1:8000/v1", api_key=SecretStr("123123"), model="qwen3_32")

# 定义图状态
class State(TypedDict):
    messages: Annotated[list, add_messages]  # 此处维护完整的消息历史

graph = StateGraph(State)

def chatbot(state: State):
    return {"messages": [llm.invoke(state["messages"])]}

graph.add_node("chatbot", chatbot)
graph.add_edge(START, "chatbot")
graph.add_edge("chatbot", END)

app = graph.compile()

if __name__ == "__main__":
    messages = []
    while True:
        user_input = input("👨💻: ")
        if user_input.lower() in ["quit", "exit", "q"]:
            print("Exiting...")
            break
        messages.append({"role": "user", "content": user_input})
        response = app.invoke({"messages": messages})
        messages = response["messages"]
        print(f'🤖: {response["messages"][-1].content}')
```

## 查看bot图结构

使用下面的代码，保存图结构，此代码会反复用到

```python
from PIL import Image
import io
png_data = app.get_graph(xray=True).draw_mermaid_png()
img_io = io.BytesIO(png_data)

# 使用PIL的Image打开BytesIO对象
image = Image.open(img_io)

# 指定保存的本地文件路径
save_path = 'local_image.png'

# 保存图像到本地
image.save(save_path)

```

![image.png](https://wileyzhang.com/posts/images/264605ee-e889-8089-81f9-d9bc9bb64ee8/264605ee-e889-8089-81f9-d9bc9bb64ee8_f7156c639e27a15f0c960e7d21620dde.png)

## 运行示例

![output.gif](https://wileyzhang.com/posts/images/264605ee-e889-8089-81f9-d9bc9bb64ee8/264605ee-e889-8089-81f9-d9bc9bb64ee8_09024bb7b9c6e3468f278ed482a70f7e.gif)

---

> 本文由 WileyZhang 原创，首发于 [Wiley Blog](https://wileyzhang.com/posts/langgraph-ai)。

```json
{
  "@context": "https://schema.org",
  "@type": "BlogPosting",
  "headline": "LangGraph教程(一)：从零开始构建你的第一个AI聊天机器人",
  "datePublished": "2025-09-04T00:00:00.000Z",
  "dateModified": "2025-09-04T00:00:00.000Z",
  "author": [
    {
      "@type": "Person",
      "name": "WileyZhang",
      "url": "https://wileyzhang.com/about"
    }
  ],
  "image": "https://wileyzhang.com/posts/cover/264605ee-e889-8089-81f9-d9bc9bb64ee8_80a0584fd6e256fd14aefae7618f47d9.png",
  "description": "本文是 《LangGraph入门全解》系列的第一篇。在这篇文章中，我们将基于LangGraph构建一个聊天机器人。并学习查看Graph的图结构。如果出你是新手，建议先阅读主指南以了解LangGraph的全貌。LangGraph入门, LangGraph教程, LangGraph聊天机器人, StateGraph使用",
  "mainEntityOfPage": {
    "@type": "WebPage",
    "@id": "https://wileyzhang.com/posts/langgraph-ai"
  }
}
```
