使用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 文件。
# 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(??https://aistudio.google.com/apikey??)生成Google API密鑰,從Groq Console(https://console.groq.com/keys)生成Groq API密鑰,并從Tavily Home(https://app.tavily.com/home)獲取你的Tavily 密鑰。?
搭建完成后,運行以下命令(請確保已激活環境):
python manage.py migrate
python manage.py runserver
這應該會啟動服務器。
點擊應用程序正在運行的??http://127.0.0.1:8000/??鏈接。?
使用LangGraph設計聊天機器人邏輯
現在,設計下聊天機器人邏輯。你可能想知道為什么選擇LangGraph?我選擇 LangGraph,是因為它能夠靈活地構建適合用例的復雜工作流。它如同將多個函數拼接成一個對你的應用程序真正有意義的流程。下面,我們將討論核心邏輯。完整代碼可在 Github 上找到:??https://github.com/Badribn0612/chatbot_django_langgraph.git??。?
1. 狀態定義
class State(TypedDict):
messages: Annotated[list, add_messages]
該狀態模式負責聊天機器人。如果你的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, 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)中,并與用戶會話關聯,以實現連續性和分析。
- 實現智能消息窗口或摘要功能,以輕松應對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
