我们先介绍简单的搭建,包括使用Pipenv安装依赖项,并克隆GitHub代码库。然后,我们将使用LangGraph定义聊天机器人的逻辑,围绕它构建一个基于Django的API,并连接一个基本的前端以便与其联系。
无论你想了解LangGraph如何与实际后端协同工作,还是想构建一个简单的聊天机器人,你都来对地方了。
快速入门:克隆并搭建项目
首先,克隆项目并搭建环境。确保你的系统上已安装Python 3.12和Pipenv。如果没有,可以使用以下命令安装pipenv:
pip install pipenv
现在,克隆代码库并进入项目文件夹:
bash
git clone https://github.com/Badribn0612/chatbot_django_langgraph.git
cd chatbot_django_langgraph
现在不妨使用Pipenv安装所有依赖项。
pipenv install
注意: 如果你收到错误消息,提示你的系统中没有Python 3.12,请使用以下命令:
css
pipenv --python path/to/python
pipenv install
要知道Python的路径,你可以使用以下命令:
bash
which python (linux and windows)
which python3 (mac)
要激活此环境,请使用以下命令:
pipenv shell
鉴于我们的需求已满足,接下来设置环境变量。使用以下命令创建一个.env 文件。
bash
touch .env
将你的API密钥添加到.env 文件。
ini
# Google Gemini AI
GOOGLE_API_KEY=your_google_api_key_here
# Groq
GROQ_API_KEY=your_groq_api_key_here
# Tavily Search
TAVILY_API_KEY=your_tavily_api_key_here
从Google AI Studio(aistudio.google.com/apikey)生成Google API密钥,从Groq Console(console.groq.com/keys)生成Groq%25E7%2594%259F%25E6%2588%2590Groq "https://console.groq.com/keys)%E7%94%9F%E6%88%90Groq") API密钥,并从Tavily Home(app.tavily.com/home)获取你的Ta...%25E8%258E%25B7%25E5%258F%2596%25E4%25BD%25A0%25E7%259A%2584Tavily "https://app.tavily.com/home)%E8%8E%B7%E5%8F%96%E4%BD%A0%E7%9A%84Tavily") 密钥。
搭建完成后,运行以下命令(请确保已激活环境):
python manage.py migrate
python manage.py runserver
这应该会启动服务器。

点击应用程序正在运行的http://127.0.0.1:8000/链接。
使用LangGraph设计聊天机器人逻辑
现在,设计下聊天机器人逻辑。你可能想知道为什么选择LangGraph?我选择 LangGraph,是因为它能够灵活地构建适合用例的复杂工作流。它如同将多个函数拼接成一个对你的应用程序真正有意义的流程。下面,我们将讨论核心逻辑。
1. 状态定义
kotlin
class State(TypedDict):
messages: Annotated[list, add_messages]
1.2.
该状态模式负责聊天机器人。如果你的Graph处于循环状态,它将主要跟踪消息历史记录;否则,它会有包含消息历史记录的输入,并将LLM的响应附加到之前的历史记录后面。
2. 初始化LangGraph
ini
graph_builder = StateGraph(State)
上面这行代码将初始化状态图。这个状态图实例负责维护聊天机器人的流程(对话流)。
3. 带有后备模型的聊天模型
ini
llm_with_fallbacks = init_chat_model("google_genai:gemini-2.0-flash").with_fallbacks(
[init_chat_model("groq:llama-3.3-70b-versatile")]
)
这基本上会将Gemini 2.0 Flash作为主LLM,将Llama 3.3 70B作为后备模型。如果谷歌服务器过载或API达到速率限制,它将开始使用Llama 3.3 70B。
4. 工具集成
ini
tool = TavilySearch(max_results=2)
llm_with_tools = llm_with_fallbacks.bind_tools([tool])
我们还将向LLM添加搜索工具。当LLM认为它对查询缺乏了解时,将使用这项功能。它基本上会使用该工具搜索信息,检索相关信息,并基于这些信息响应查询。
5. 聊天机器人节点逻辑
arduino
def chatbot(state: State):
return {"messages": [llm_with_tools.invoke(state["messages"])]}
这是负责调用LLM并获取响应的函数。使用LangGraph,你可以构建一个由多个类似这样的函数组成的状态图。你可以分支、合并,甚至并行运行函数(LangGraph中称为节点)。对了,我差点忘了,你甚至可以在图中创建循环。这就是LangGraph带来的那种灵活性。
6. 工具节点和条件流
makefile
tool_node = ToolNode(tools=[tool])
graph_builder.add_conditional_edges("chatbot", tools_condition)
graph_builder.add_edge("tools", "chatbot")
我们将为该工具创建一个节点,这样,每当聊天机器人搞清楚需要使用它时,它就可以简单地调用该工具节点并获取相关信息。
7. 图入口和出口
scss
graph_builder.add_edge(START, "chatbot")
graph = graph_builder.compile()
from IPython.display import Image, display
display(Image(graph.get_graph().draw_mermaid_png()))

上述代码给出了所需的可视化效果。
该LangGraph环境允许你构建一个结构化的聊天机器人,它可以处理对话,需要时调用网络搜索等工具,并在某个模型失败时后备到替代模型。它具有模块化,易于扩展。现在 LangGraph部分已完成,不妨学习如何使用Django为我们的聊天机器人创建API。
使用Django构建API
如果你是Django新手,可以使用本指南学习如何创建应用程序。为此,我们已创建:
- 项目:djangoproj
- 应用程序:djangoapp
第1步:应用程序配置
在djangoapp/apps.py 中,我们定义应用程序配置,以便Django能够识别它:
ini
from django.apps import AppConfig
class DjangoappConfig(AppConfig):
default_auto_field = "django.db.models.BigAutoField"
name = "djangoapp"
Now register the app inside djangoproj/settings.py:
INSTALLED_APPS = [
# default Django apps...
"djangoapp",
]
第2步:创建聊天机器人API
在djangoapp/views.py中,我们定义一个用于处理POST请求的简单API端点:
kotlin
from django.http import JsonResponse
from django.views.decorators.csrf import csrf_exempt
import json
from chatbot import get_chatbot_response
@csrf_exempt
def chatbot_api(request):
if request.method == "POST":
try:
data = json.loads(request.body)
messages = data.get("messages", [])
user_query = data.get("query", "")
messages.append({"role": "user", "content": user_query})
response = get_chatbot_response(messages)
serialized_messages = [serialize_message(msg) for msg in response["messages"]]
return JsonResponse({"messages": serialized_messages})
except Exception as e:
return JsonResponse({"error": str(e)}, status=500)
return JsonResponse({"error": "POST request required"}, status=400)
- 该视图接受用户输入,将其传递给基于LangGraph的聊天机器人,并返回响应。
- @csrf_exempt用于测试/演示,以允许外部POST请求。
第3步:将API连接到URL
在djangoproj/urls.py中,将视图连接到端点:
javascript
from django.urls import path
from djangoapp.views import chatbot_api, chat_interface
urlpatterns = [
path('', chat_interface, name='chat_interface'),
path('api/chatbot/', chatbot_api, name='chatbot_api'),
]
现在,向/api/chatbot/发送POST请求将触发聊天机器人并返回JSON响应。
第4步:部署基本的聊天用户界面
要显示简单的界面,请在djangoapp/views.py中添加以下内容:
python
from django.shortcuts import render
def chat_interface(request):
return render(request, 'index.html')
该视图渲染index.html,这是基本的聊天界面。
在djangoproj/settings.py中,告诉Django去哪里查找模板:
ini
TEMPLATES = [
{
"BACKEND": "django.template.backends.django.DjangoTemplates",
"DIRS": [BASE_DIR / "templates"],
# ...
},
]
我们已使用Django将LangGraph聊天机器人转变成了实用的API,仅用几行代码,甚至还添加了一个用于与其交互的基本用户界面。这种设计简洁、模块化且易于扩展,非常适合实际项目和演示。
你可以在此基础上构建的功能
以下是你可以在该应用程序基础上构建的一些功能:
- 设置系统提示和智能体角色来指导行为和响应。
- 创建多个专用智能体和一个路由智能体,以根据用户输入委派任务。
- 插入RAG工具以引入你自己的数据并丰富响应。
- 将对话历史记录存储在数据库(比如PostgreSQL)中,并与用户会话关联,以实现连续性和分析。
- 实现智能消息窗口或摘要功能,以轻松应对token限制。
- 使用提示模板或者Guardrails AI或NeMo等工具,进行输出验证和安全过滤。
- 使用Gemini 2.5 pro或GPT-4.1等功能强大的模型,添加支持图像或文件处理的功能。