使用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,這個設定都能為您提供一個堅實的起點。您還可以探索更多內容,從新增影像輸入到插入您自己的知識庫。所以,繼續吧,調整它,打破它,在此基礎上構建。可能性無限。讓我知道您構建了什麼。

評論留言