Nhảy đến nội dung chính

Ứng dụng LangGraph cơ bản với chatbot và công cụ

Mục tiêu của ứng dụng.

image.png

Sử dụng LangGraph quyết định phản hồi bằng chatbot hoặc sử dụng công cụ

Chúng ta sẽ xây dựng một ứng dụng cơ bản thực hiện 4 thao tác
Sử dụng chat messages làm State

Sử dụng chat model làm Node

Liên kết một công cụ với chat model

Thực hiện lệnh gọi công cụ trong Node

I. Cài đặt

* cd project_name
* pyenv local 3.11.4
* poetry install
* poetry shell
* jupyter lab

tạo file .env

OPENAI_API_KEY=your_openai_api_key
* LANGCHAIN_TRACING_V2=true
* LANGCHAIN_ENDPOINT=https://api.smith.langchain.com
* LANGCHAIN_API_KEY=your_langchain_api_key
* LANGCHAIN_PROJECT=your_project_name

Bạn sẽ cần đăng ký tài khoản tại smith.langchain.com để lấy API key.

Kết nối với file .env nằm trong cùng thư mục của notebook

#pip install python-dotenv
import os
from dotenv import load_dotenv, find_dotenv
_ = load_dotenv(find_dotenv())
openai_api_key = os.environ["OPENAI_API_KEY"]
Cài  LangChain

#!pip install langchain-openai

from langchain_openai import ChatOpenAI

chatModel35 = ChatOpenAI(model="gpt-3.5-turbo-0125")
chatModel4o = ChatOpenAI(model="gpt-4o")

II. Xác định State schema

from typing_extensions import TypedDict
from langchain_core.messages import AnyMessage
from typing import Annotated
from langgraph.graph.message import add_messages

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

from 

typing_extensions import TypedDict
  • Đối với

    TypedDict cho dụ này, lớphép Statebạn củđịnh nghĩa chúmột kiểu dictionary có cấu trúc rõ ràng, giống tanhư sẽdataclass, nhưng dành cho dict.

  • typing_extensions được gọdùng để hỗ trợ các tính năng mới khi bạn đang dùng phiên bản Python cũ hơn

from langchain_core.messages import AnyMessage
  • AnyMessage  MessagesState và chỉ có một khóakiểu tin nhắn (message) tổng quát trong LangChain.

  • Có thể"messages"tin vớnhắn từ người địnhdùng dạ(HumanMessage), AI (AIMessage), hệ thống (SystemMessage)

from typing import Annotated
  • Annotateddanhmột ch AnyMessages.
    -để Khi chúng ta chạy ứng dụng, chúng ta muốgắn thêm các thông điệpmetadata vào khóakiểu trạdữ liệu.

  • Không tháthay đổi thôkiểu dữ liệu, nhưng điệp này. Chúng ta sẽ sử dụng hàm **reducer** .
    - Các hàm deducers cho phép chúng ta chỉ định cách thực hiện cập nhật trạng thái.
    -  Nếu không chỉ định hàm reducer, thì chúng ta cho rằng các bảcông cụ/phần cậpmềm nhậtxử vào khóa sẽ ghi đè lên khóakiểu đó như chúng ta đã thấy trong bài tập trước.
    - Đểbiết thêm các message, chúng ta có thể sử dụng  **pre-built add_messages reducer**. Điều này đảm bảo rằng mọi messages đều được thêm vào danh sách thông điệptin hiệnphụ.

    có.
    * Để thực hiện việc này, chúng ta cần chú thích khóa messages của mình bằng hàm reducer add_messages dưới dạng metadata

Metadata là gì? xem tại đây

Annotated là gì? Xem tại đây