AI在线 AI在线

使用Django和LangGraph构建一个对话式AI应用程序

译者 | 布加迪审校 | 重楼每个人都见过聊天机器人的实际应用,有些令人印象深刻,有些令人厌烦。 然而,如果你可以创建一个真正智能、组织良好且易于与你自己的应用程序集成的聊天机器人,会怎样呢? 我们在本文中将使用两个强大的工具从零开始构建一个聊天机器人:除了LLM外,LangGraph 可以帮助管理井然有序的多步骤工作流程。

使用Django和LangGraph构建一个对话式AI应用程序

译者 | 布加迪

审校 | 重楼

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

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

我们先介绍简单的搭建,包括使用Pipenv安装依赖项,并克隆GitHub代码库。然后,我们将使用LangGraph定义聊天机器人的逻辑,围绕它构建一个基于Django的API,并连接一个基本的前端以便与其联系。

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

快速入门:克隆并搭建项目

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

现在,克隆代码库并进入项目文件夹:

现在不妨使用Pipenv安装所有依赖项。

注意:如果你收到错误消息,提示你的系统中没有Python 3.12,请使用以下命令:

要知道Python的路径,你可以使用以下命令:

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

鉴于我们的需求已满足,接下来设置环境变量。使用以下命令创建一个.env 文件。

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

从Google AI Studio(https://aistudio.google.com/apikey)生成Google API密钥,从Groq Console(https://console.groq.com/keys)生成Groq API密钥,并从Tavily Home(https://app.tavily.com/home)获取你的Tavily 密钥。

搭建完成后,运行以下命令(请确保已激活环境):

这应该会启动服务器。

使用Django和LangGraph构建一个对话式AI应用程序

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

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

现在,设计下聊天机器人逻辑。你可能想知道为什么选择LangGraph?我选择 LangGraph,是因为它能够灵活地构建适合用例的复杂工作流。它如同将多个函数拼接成一个对你的应用程序真正有意义的流程。下面,我们将讨论核心逻辑。完整代码可在 Github 上找到:https://github.com/Badribn0612/chatbot_django_langgraph.git。

1. 状态定义

该状态模式负责聊天机器人。如果你的Graph处于循环状态,它将主要跟踪消息历史记录;否则,它会有包含消息历史记录的输入,并将LLM的响应附加到之前的历史记录后面。

2. 初始化LangGraph

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

3. 带有后备模型的聊天模型

这基本上会将Gemini 2.0 Flash作为主LLM,将Llama 3.3 70B作为后备模型。如果谷歌服务器过载或API达到速率限制,它将开始使用Llama 3.3 70B。

4. 工具集成

我们还将向LLM添加搜索工具。当LLM认为它对查询缺乏了解时,将使用这项功能。它基本上会使用该工具搜索信息,检索相关信息,并基于这些信息响应查询。

5. 聊天机器人节点逻辑

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

6. 工具节点和条件流

我们将为该工具创建一个节点,这样,每当聊天机器人搞清楚需要使用它时,它就可以简单地调用该工具节点并获取相关信息。

7. 图入口和出口

使用Django和LangGraph构建一个对话式AI应用程序

上述代码给出了所需的可视化效果。

该LangGraph环境允许你构建一个结构化的聊天机器人,它可以处理对话,需要时调用网络搜索等工具,并在某个模型失败时后备到替代模型。它具有模块化,易于扩展。现在 LangGraph部分已完成,不妨学习如何使用Django为我们的聊天机器人创建API。

使用Django构建API

如果你是Django新手,可以使用本指南学习如何创建应用程序。为此,我们已创建:

  • 项目:djangoproj
  • 应用程序:djangoapp

第1步:应用程序配置

在djangoapp/apps.py 中,我们定义应用程序配置,以便Django能够识别它:

第2步:创建聊天机器人API

在djangoapp/views.py中,我们定义一个用于处理POST请求的简单API端点:

  • 该视图接受用户输入,将其传递给基于LangGraph的聊天机器人,并返回响应。
  • @csrf_exempt用于测试/演示,以允许外部POST请求。

第3步:将API连接到URL

在djangoproj/urls.py中,将视图连接到端点:

现在,向/api/chatbot/发送POST请求将触发聊天机器人并返回JSON响应。

第4步:部署基本的聊天用户界面

要显示简单的界面,请在djangoapp/views.py中添加以下内容:

该视图渲染index.html,这是基本的聊天界面。

在djangoproj/settings.py中,告诉Django去哪里查找模板:

我们已使用Django将LangGraph聊天机器人转变成了实用的API,仅用几行代码,甚至还添加了一个用于与其交互的基本用户界面。这种设计简洁、模块化且易于扩展,非常适合实际项目和演示。

以下是聊天机器人的实际演示:

使用Django和LangGraph构建一个对话式AI应用程序

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

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

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

结论

全文就是这样!我们刚使用LangGraph和Django从零开始构建了一个功能齐全的聊天机器人,它拥有简洁的API、工具集成、带有后备模型的LLM 等等。最棒的是,它是模块化的,非常易于扩展。无论你是想为自己的产品构建智能助手、尝试多智能体系统,还是只是想试试LangGraph,本文都为你提供了一个坚实的起点。你还可以探究更多内容,比如添加图像输入、插入自己的知识库。所以,请继续尝试,在此基础上不断构建。

原文标题:Building a Conversational AI App with Django and LangGraph,作者:Badrinarayan M

相关资讯

AI新功能震惊网友:轻松破解照片拍摄位置

近日,OpenAI 推出的 o3模型因其能够精准猜测照片拍摄位置而引发广泛关注。 这一功能由 Django Web 框架的创始人 Simon Wilson 首次测试,他在自己的博客中详细记录了 o3的推理过程,称这一体验既超现实又令人不安。 Wilson 随意拍了一张看似平常的照片,包含了些许道路和房屋,却没有明显的标志性建筑。
4/28/2025 10:01:34 AM
AI在线

内存革命!LangGraph 0.3.19如何实现Python内存使用效率的飞跃?

在构建复杂 AI 应用或大规模分布式系统时,内存管理始终是开发者面临的痛点。 尤其在 Python 生态中,动态类型和垃圾回收机制虽然灵活,但对内存的高效利用提出了更高要求。 近日,LangGraph 团队宣布推出 0.3.19 版本,通过一系列内存优化技术,将 Python 应用的内存占用降低 40% 以上,并支持长期记忆存储,彻底解决了复杂场景下的性能瓶颈。
4/1/2025 12:33:03 AM
智Echo

LangGraph:如何用“图思维”轻松管理多Agent协作?

引言当AI任务变得复杂时,我们需要更好的“调度员”。 随着智能应用场景的深化,单一 Agent 在处理复杂任务(如电商智能客服、金融数据分析流水线)时显现出明显局限性。 传统链式调用框架(如 LangChain)依赖开发者手动编排流程,在面对任务分支、动态决策和资源复用等场景时,往往陷入维护成本高、扩展性差的困境。
4/1/2025 8:48:34 AM
张张
  • 1