Ứng dụng LangGraph cơ bản với chatbot và công cụ
Mục tiêu của ứng dụng.
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]
- Đối với ví dụ này, lớp State của chúng ta sẽ được gọi là MessagesState và chỉ có một khóa có tên là "messages" với định dạng là danh sách AnyMessages.
- Khi chúng ta chạy ứng dụng, chúng ta muốn thêm các thông điệp vào khóa trạng thái thô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ản cập nhật vào khóa sẽ ghi đè lên khóa đó như chúng ta đã thấy trong bài tập trước.
- Để 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ệp hiện 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