使用Django和LangGraph构建对话式AI应用

使用Django和LangGraph构建对话式AI应用

文章目录

  • 快速入门:克隆并设置项目
  • 使用LangGraph设计聊天机器人逻辑
  • 使用Django构建API
  • 步骤 1:应用程序配置
  • 步骤 2:创建聊天机器人API
  • 步骤 4:提供基本聊天界面
  • 您可以在此基础上构建的功能
  • 小结

使用Django和LangGraph构建对话式AI应用

每个人都见过聊天机器人的实际操作;有些令人印象深刻,有些则令人厌烦。然而,如果您可以创建一个真正智能、组织良好且易于与您自己的应用程序集成的聊天机器人,那会怎样呢?在本文中,我们将使用两个强大的工具来从零开始构建一个聊天机器人:

  • 除了 LLM 之外,LangGraph 还有助于管理有序的多步骤工作流程。
  • 聊天机器人可以使用 Django(一个可扩展且简洁的 Web 平台)以 API 的形式公开。

我们将从简单的设置开始,包括使用 Pipenv 安装依赖项并克隆 GitHub 代码库。然后,我们将使用 LangGraph 定义聊天机器人的逻辑,围绕它构建一个由 Django 驱动的 API,并连接一个基本的前端以便与其通信。

无论您是想了解 LangGraph 如何与实际后端协同工作,还是想设置一个简单的聊天机器人,您都来对地方了。

快速入门:克隆并设置项目

首先,克隆项目并设置环境。请确保您的系统上已安装 Python 3.12 和 pipenv。如果没有,您可以使用以下命令安装 pipenv:

pip install pipenv

现在,克隆存储库并进入项目文件夹:

git clone https://github.com/Badribn0612/chatbot_django_langgraph.git
cd chatbot_django_langgraph

现在让我们使用 pipenv 安装所有必需的组件。

pipenv install

注意:如果出现错误,提示您的系统中没有 Python 3.12,请使用以下命令:

pipenv --python path/to/python
pipenv install

要了解 Python 的路径,可以使用以下命令

which python (linux and windows) 
which python3 (mac)

要激活此环境,请使用以下命令:

pipenv shell

现在我们的要求已经设置好了,让我们设置环境变量。使用以下命令创建一个 .env 文件。

touch .env

将您的 API 密钥添加到 .env 文件

GEMINI API 密钥:Google Gemini AI API 密钥可用于访问用于自然语言处理、图像创建和其他 AI 驱动功能的复杂 AI 模型,该密钥用于对 Google Gemini AI 服务进行身份验证和连接。

# Google Gemini AI
GOOGLE_API_KEY=your_google_api_key_here

GROQ API KEY:此密钥授予对 Groq 高性能 AI 硬件和软件的访问权限,从而促进使用 Llama 等开源 LLM。

# Groq
GROQ_API_KEY=your_groq_api_key_here

TAVILY API 密钥:通过连接到 Tavily 的搜索平台,此密钥可以集成搜索功能、检索搜索结果并通过其 API 获取来自多个数据源的洞察。

# Tavily SearchTAVILY_API_KEY=your_tavily_api_key_here

Google AI Studio 生成 Google API 密钥,从 Groq Console 生成 Groq API 密钥,并从 Tavily Home 获取您的 Tavily 密钥。

设置完成后,让我们运行以下命令(请确保您已激活环境)

python manage.py migrate
python manage.py runserver

这应该启动服务器

启动服务器

点击应用程序正在运行的链接:http://127.0.0.1:8000/

使用LangGraph设计聊天机器人逻辑

现在,让我们深入设计聊天机器人逻辑。你可能想知道,为什么选择 LangGraph?我选择 LangGraph 是因为它能够灵活地构建根据用例定制的复杂工作流。你可以把它想象成将多个函数拼接成一个真正适合你的应用程序的流程。下面,我们来讨论一下核心逻辑。完整代码可在 Github 上获取。

1. 状态定义

class State(TypedDict):
    messages: Annotated[list, add_messages]

所以这个状态模式负责整个聊天机器人。如果你的图处于循环状态,它将主要跟踪消息历史记录;否则,它将输入消息历史记录,并将 LLM 的响应附加到之前的历史记录中。

2.初始化LangGraph

graph_builder = StateGraph(State)

上面这行代码将初始化状态图。这个状态图实例负责维护聊天机器人的流程(对话流)。

3. 具有回退功能的聊天模型

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 作为后备。如果 Google 服务器过载或 API 达到速率限制,它将开始使用 Llama 3.3 70B。

4. 工具集成

tool = TavilySearch(max_results=2)
llm_with_tools = llm_with_fallbacks.bind_tools([tool])

我们还将为法学硕士 (LLM) 添加搜索工具。当法学硕士 (LLM) 认为自己对查询缺乏了解时,将会使用此功能。它基本上会使用该工具搜索信息,检索相关信息,并据此响应查询。

5. 聊天机器人节点逻辑

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

这是负责调用 LLM 并获取响应的函数。这正是我所说的。使用 LangGraph,您可以构建一个由多个类似这样的函数组成的图。您可以分支、合并,甚至并行运行函数(在 LangGraph 中称为节点)。是的,我差点忘了,您甚至可以在图中创建循环。这就是 LangGraph 带来的灵活性。

6. 工具节点和条件流

tool_node = ToolNode(tools=[tool])
graph_builder.add_conditional_edges("chatbot", tools_condition)
graph_builder.add_edge("tools", "chatbot")

我们将为该工具创建一个节点,以便聊天机器人在需要使用该工具时,只需调用该工具节点并获取相关信息即可。

7. 图表的进入和退出

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 能够识别它:

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 端点:

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 中,将视图连接到端点:

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:

from django.shortcuts import render
def chat_interface(request):
    return render(request, 'index.html')

此视图呈现 index.html,一个基本的聊天界面。在 djangoproj/settings.py 中,告诉 Django 在哪里寻找模板:

TEMPLATES = [
    {
        "BACKEND": "django.template.backends.django.DjangoTemplates",
        "DIRS": [BASE_DIR / "templates"],
        # ...
    },
]

我们使用 Django 将 LangGraph 聊天机器人转换为功能齐全的 API,仅需几行代码,甚至还包含一个基本的用户界面用于与其交互。这种架构简洁、模块化且易于扩展,非常适合实际项目和演示。

以下是聊天机器人的运行演示:

您可以在此基础上构建的功能

以下是您可以在应用程序基础上构建的一些功能:

  • 设置系统提示和代理角色来指导行为和响应。
  • 创建多个专用代理和一个路由代理,根据用户输入委派任务。
  • 插入 RAG 工具以引入您自己的数据并丰富响应。
  • 将对话历史记录存储在数据库(如 PostgreSQL)中,并与用户会话链接,以确保连续性和分析能力。
  • 实现智能消息窗口或摘要,以优雅地处理令牌限制。
  • 使用提示模板或 Guardrails AINeMo 等工具进行输出验证和安全过滤。
  • 添加对图像或文件处理的支持,使用 Gemini 2.5 pro 或 GPT-4.1 等功能强大的模型。

小结

就这样!我们刚刚使用 LangGraph 和 Django 从零开始构建了一个功能齐全的聊天机器人,它配备了简洁的 API、工具集成、备用 LLM 等等。最棒的是?它是模块化的,而且非常易于扩展。无论您是想为自己的产品构建智能助手,尝试多智能体系统,还是只是想尝试 LangGraph,这个设置都能为您提供一个坚实的起点。您还可以探索更多内容,从添加图像输入到插入您自己的知识库。所以,继续吧,调整它,打破它,在此基础上构建。可能性无限。让我知道您构建了什么。

评论留言

闪电侠

(工作日 10:00 - 18:30 为您服务)

2025-12-05 13:32:53

您好,无论是售前、售后、意见建议……均可通过联系工单与我们取得联系。

您也可选择聊天工具与我们即时沟通或点击查看:

您的工单我们已经收到,我们将会尽快跟您联系!
取消
选择聊天工具: