0
0
Lập trình
Thaycacac
Thaycacac thaycacac

[LLM 101] Hướng Dẫn Tạo Bộ Nhớ Ngắn Hạn Cho LLM Agent Sử Dụng LangChain

Đăng vào 5 tháng trước

• 4 phút đọc

Chủ đề:

LLM

Giới thiệu

Trong thế giới chatbot hiện đại, bộ nhớ đóng vai trò thiết yếu trong việc tạo ra những cuộc hội thoại tự nhiên và gần gũi như giữa con người với nhau. Một chatbot thiếu khả năng ghi nhớ tên người dùng hoặc các chủ đề đã thảo luận sẽ làm suy yếu trải nghiệm người dùng và giảm đi sự chân thật của cuộc trò chuyện

Bộ nhớ là yếu tố quan trọng trong việc phát triển các hệ thống giao tiếp, đặc biệt là khi sử dụng thư viện LangChain. Nếu bạn là người đã từng trải nghiệm một sản phẩm chatbot, chắc hẳn bạn sẽ mong muốn rằng nó có khả năng ghi nhớ thông tin từ các cuộc trò chuyện trước đó để duy trì mạch giao tiếp.

Điều này có thể là việc ghi nhớ sở thích của người dùng, hiểu biết về các đại từ, hoặc theo dõi các ngữ cảnh phát triển của cuộc trò chuyện. Bộ nhớ sẽ trở thành yếu tố không thể thiếu để tạo ra những tương tác hấp dẫn và hiệu quả cho người dùng.

Trong bài viết này, chúng ta sẽ khám phá một số phương pháp để xây dựng bộ nhớ cho chatbot, sử dụng thư viện LangChain.

Các Phương Pháp Tạo Bộ Nhớ

1. Sử Dụng Buffer Memory

Một trong những cách đơn giản và hiệu quả nhất để xây dựng bộ nhớ cho chatbot là tạo một bộ đệm cho các cuộc trò chuyện. Với phương pháp này, mô hình sẽ ghi lại và tích hợp các tương tác giữa người dùng và hệ thống vào trong một tin nhắn. Đây sẽ là bản ghi của cuộc hội thoại đang diễn ra.

Ưu điểm của phương pháp này là tính đơn giản cũng như hiệu quả cho các cuộc đối thoại ngắn. Tuy nhiên, nó cũng gặp phải một số hạn chế khi phải xử lý các cuộc hội thoại kéo dài do bị giới hạn về số lượng token.

Code ví dụ:

python Copy
from langchain_openai import OpenAI
from langchain.chains import ConversationChain
from langchain.chains.conversation.memory import ConversationBufferMemory

llm = OpenAI(openai_api_key=OPENAI_KEY, temperature=0, max_tokens=512)

buffer_memory = ConversationBufferMemory()

conversation = ConversationChain(llm=llm, verbose=True, memory=buffer_memory)

conversation.predict(input="Do you know Donald Trump")
conversation.predict(input="Do you know AI")
conversation.predict(input="Do you know LLM")

# In buffer ra
print(conversation.memory.buffer)

ConversationBufferMemory giúp lưu lại lịch sử cuộc hội thoại, thể hiện rõ qua ví dụ trên.

2. Sử Dụng Buffer Window Memory

Chọn tất cả lịch sử trò chuyện có thể gây tốn nhiều token, do đó bạn có thể thực hiện theo cách giới hạn số tin nhắn được lưu lại bằng cách thêm một tham số "k". Thí dụ, nếu k=2, chỉ nội dung của hai tin nhắn gần nhất sẽ được lưu trữ.

Code ví dụ:

python Copy
from langchain.chains.conversation.memory import ConversationBufferWindowMemory
from langchain import OpenAI
from langchain.chains import ConversationChain

llm = OpenAI(openai_api_key=OPENAI_KEY, temperature=0, max_tokens=512)

window_memory = ConversationBufferWindowMemory(k=2)

conversation = ConversationChain(llm=llm, verbose=True, memory=window_memory)

conversation.predict(input="Do you know Donald Trump")
conversation.predict(input="Do you know AI")
conversation.predict(input="Do you know LLM")

# In buffer ra
print(conversation.memory.buffer)

3. Sử Dụng Summary Memory

Thay vì chỉ lưu lại các tin nhắn trong lịch sử, một phương pháp hiệu quả hơn là lưu một bản tổng hợp nội dung của lịch sử đó. Điều này giúp giảm thiểu lượng token sử dụng mà vẫn duy trì được sự mạch lạc trong cuộc trò chuyện.

Code ví dụ:

python Copy
from langchain.chains.conversation.memory import ConversationSummaryMemory
from langchain import OpenAI
from langchain.chains import ConversationChain

llm = OpenAI(openai_api_key=OPENAI_KEY, temperature=0, max_tokens=512)

summary_memory = ConversationSummaryMemory(llm=OpenAI(openai_api_key=OPENAI_KEY))

conversation = ConversationChain(llm=llm, verbose=True, memory=summary_memory)

conversation.predict(input="Do you know Donald Trump")
conversation.predict(input="Do you know AI")
conversation.predict(input="Do you know LLM")

# In buffer ra
print(conversation.memory.buffer)

4. Kết Hợp Summary Memory và Buffer Memory

Chúng ta cũng có thể kết hợp cả Summary Memory và Buffer Memory để tận dụng ưu điểm của cả hai phương pháp này.

Code ví dụ:

python Copy
from langchain.chains.conversation.memory import ConversationSummaryBufferMemory
from langchain import OpenAI
from langchain.chains import ConversationChain

llm = OpenAI(openai_api_key=OPENAI_KEY, temperature=0, max_tokens=512)

summary_buffer_memory = ConversationSummaryBufferMemory(llm=OpenAI(openai_api_key=OPENAI_KEY), max_token_limit=50)

conversation = ConversationChain(llm=llm, memory=summary_buffer_memory, verbose=True)

conversation.predict(input="Do you know Donald Trump")
conversation.predict(input="Do you know AI")
conversation.predict(input="Do you know LLM")

# In buffer ra
print(conversation.memory.moving_summary_buffer)

5. Sử Dụng Knowledge Graph

LangChain cũng hỗ trợ phương pháp bộ nhớ dựa trên đồ thị kiến thức. Tại đây, bạn sẽ có một cấu trúc đồ thị kết nối các thông tin với nhau, trong đó các node đại diện cho các thực thể và cạnh là những mối quan hệ giữa chúng.

Code ví dụ:

python Copy
from langchain.chains.conversation.memory import ConversationKGMemory
from langchain import OpenAI
from langchain.chains import ConversationChain
from langchain.prompts.prompt import PromptTemplate

llm = OpenAI(openai_api_key=OPENAI_KEY, temperature=0, max_tokens=512)

template = """
AI is a savant and it knows everything

Relevant Information: \n
{history}

Conversation: \n
Human: {input} \n
AI:"""

prompt = PromptTemplate(input_variables=["history", "input"], template=template)
kg_memory = ConversationKGMemory(llm=llm)

conversation = ConversationChain(llm=llm, verbose=True, prompt=prompt, memory=kg_memory)

Kết Luận

Trong bài viết này, chúng ta đã cùng nhau khám phá những phương pháp chính để xây dựng bộ nhớ ngắn hạn cho các LLM Agents sử dụng thư viện LangChain. Hãy áp dụng những kiến thức này một cách linh hoạt để tối ưu hóa hiệu quả của chatbot trong các bài toán cụ thể của bạn.
source: viblo

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào