掘金 人工智能 07月24日 11:48
使用Django和LangGraph构建一个对话式AI应用程序
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

本文详细介绍了如何利用LangGraph构建复杂的聊天机器人逻辑,并结合Django框架将其封装为API,同时提供了一个基础的前端界面。教程涵盖了从项目搭建、环境配置(Pipenv)、API密钥设置,到LangGraph的核心概念,如状态定义、模型选择(支持后备模型)、工具集成(TavilySearch)以及节点间的条件流。随后,文章演示了如何使用Django创建API端点,将LangGraph的聊天机器人功能暴露出来,并通过URL配置实现访问。最后,还提到了基于此框架可扩展的功能,如系统提示、多智能体协作、RAG集成等,为构建更强大的AI应用提供了思路。

🏗️ **项目搭建与环境配置**:文章首先指导用户通过克隆GitHub代码库和使用Pipenv安装依赖项来快速搭建项目。重点强调了Python 3.12环境的配置,并展示了如何激活虚拟环境。此外,还包括了设置`.env`文件以存储Google Gemini、Groq和Tavily Search的API密钥,为后续功能实现打下基础。

🧠 **LangGraph核心逻辑设计**:LangGraph被选为构建聊天机器人逻辑的核心框架,因为它能够灵活地将多个函数(节点)拼接成有意义的工作流。文中阐述了状态定义(跟踪消息历史)、图的初始化、支持后备模型的LLM集成(Gemini 2.0 Flash为主,Llama 3.3 70B为后备)、工具(TavilySearch)绑定以及节点间的条件流设计,最终通过`graph.get_graph().draw_mermaid_png()`可视化整个流程。

🚀 **Django API封装与部署**:利用Django框架,文章展示了如何为LangGraph聊天机器人创建一个API。这包括在`djangoapp/views.py`中定义处理POST请求的`chatbot_api`视图,该视图接收用户消息,调用LangGraph机器人获取响应,并返回JSON格式的结果。同时,通过在`djangoproj/urls.py`中配置URL,使得API可被外部访问。此外,还通过`chat_interface`视图和`index.html`模板部署了一个基础的用户交互界面。

💡 **功能扩展与应用前景**:文章最后展望了基于此项目可扩展的功能,包括设置系统提示、创建多智能体协作、集成RAG(检索增强生成)以引入自定义数据、数据库存储对话历史、实现智能消息窗口、输出验证及安全过滤,以及支持图像或文件处理的更强大模型。这些都为开发者提供了广阔的创新空间。

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

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

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

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

pip install pipenv

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

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

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

pipenv install

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

pipenv --python path/to/pythonpipenv install

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

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

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

pipenv shell

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

touch .env

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

# Google Gemini AIGOOGLE_API_KEY=your_google_api_key_here# GroqGROQ_API_KEY=your_groq_api_key_here# Tavily SearchTAVILY_API_KEY=your_tavily_api_key_here

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

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

python manage.py migratepython manage.py runserver

这应该会启动服务器。

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

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

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

1. 状态定义

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

该状态模式负责聊天机器人。如果你的Graph处于循环状态,它将主要跟踪消息历史记录;否则,它会有包含消息历史记录的输入,并将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作为后备模型。如果谷歌服务器过载或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, displaydisplay(Image(graph.get_graph().draw_mermaid_png()))

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

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

使用Django构建API

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

第1步:应用程序配置

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

from django.apps import AppConfigclass 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 JsonResponsefrom django.views.decorators.csrf import csrf_exemptimport jsonfrom chatbot import get_chatbot_response@csrf_exemptdef 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)

第3步:将API连接到URL

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

from django.urls import pathfrom djangoapp.views import chatbot_api, chat_interfaceurlpatterns = [ 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 renderdef 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,仅用几行代码,甚至还添加了一个用于与其交互的基本用户界面。这种设计简洁、模块化且易于扩展,非常适合实际项目和演示。

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

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

Fish AI Reader

Fish AI Reader

AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

FishAI

FishAI

鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

联系邮箱 441953276@qq.com

相关标签

LangGraph Django 聊天机器人 AI应用 API开发
相关文章