Làm cách nào để kết hợp Đại lý và Cửa hàng Vector trong LangChain?

Lam Cach Nao De Ket Hop Dai Ly Va Cua Hang Vector Trong Langchain



LangChain là framework thiết kế các mô hình ngôn ngữ. Một lượng lớn dữ liệu huấn luyện các mô hình này bằng ngôn ngữ tự nhiên. Có nhiều cơ sở dữ liệu hoặc cửa hàng vectơ như Chroma, v.v. để quản lý các bộ dữ liệu này. Bằng cách kết hợp các cửa hàng tác nhân và vectơ, mô hình hoạt động tốt hơn với dữ liệu từ các miền khác nhau. LangChain cho phép sử dụng nhiều cửa hàng vectơ để đào tạo mô hình ngôn ngữ hoặc chatbot.

Phác thảo nhanh

Bài đăng này sẽ hiển thị:







Cách sử dụng tác nhân để trả về kết quả có cấu trúc trong LangChain



Cách 1: Kết hợp Agent với Vector Store



Phương pháp 2: Sử dụng Tác nhân làm Bộ định tuyến





Cách 3: Sử dụng Agent với Multi-Hop Vector Store

Phần kết luận



Làm cách nào để sử dụng tác nhân để trả về kết quả có cấu trúc trong LangChain?

Nhà phát triển sử dụng các tác nhân để định tuyến giữa các cơ sở dữ liệu chứa dữ liệu huấn luyện cho các mô hình. Tác nhân có bản thiết kế chi tiết của quy trình hoàn chỉnh bằng cách lưu trữ tất cả các bước. Tác nhân có các công cụ để thực hiện tất cả các hoạt động này để hoàn tất quy trình. Người dùng cũng có thể sử dụng tác nhân để lấy dữ liệu từ các kho dữ liệu khác nhau để làm cho mô hình trở nên đa dạng.

Để tìm hiểu quy trình kết hợp các đại lý và cửa hàng vector trong LangChain, chỉ cần làm theo các bước được liệt kê:

Bước 1: Cài đặt Framework

Đầu tiên, cài đặt mô-đun LangChain và các phần phụ thuộc của nó để kết hợp các tác nhân và cửa hàng vectơ:

pip cài đặt langchain

Trong hướng dẫn này, chúng tôi đang sử dụng cơ sở dữ liệu Chroma có thể lưu trữ dữ liệu ở các vị trí hoặc bảng khác nhau:

pip cài đặt chromadb

Để hiểu rõ hơn về dữ liệu, hãy chia các tệp lớn thành các phần nhỏ hơn bằng cách sử dụng mã thông báo tiktoken:

pip cài đặt tiktoken

OpenAI là mô-đun có thể được sử dụng để xây dựng mô hình ngôn ngữ lớn trong khung LangChain:

cài đặt pip openai

Bước 2: Môi trường OpenAI

Bước tiếp theo ở đây là thiết lập môi trường sử dụng khóa API của OpenAI có thể được trích xuất từ ​​tài khoản chính thức của OpenAI:

nhập khẩu Bạn
nhập khẩu vượt qua

Bạn . khoảng [ 'OPENAI_API_KEY' ] = vượt qua . vượt qua ( 'Khóa API OpenAI:' )

Bây giờ, hãy tải dữ liệu từ hệ thống cục bộ lên cộng tác viên của Google để sử dụng dữ liệu đó trong tương lai:

từ Google. ET AL nhập khẩu các tập tin

đã tải lên = các tập tin. tải lên ( )

Bước 3: Tạo một cửa hàng Vector

Bước này định cấu hình thành phần đầu tiên trong nhiệm vụ của chúng ta là kho lưu trữ vectơ để lưu trữ dữ liệu đã tải lên. Việc định cấu hình các cửa hàng vectơ yêu cầu các thư viện có thể được nhập từ các phần phụ thuộc khác nhau của LangChain:

từ langchain. phần nhúng . openai nhập khẩu OpenAIEmbeddings

#Vector lưu trữ phần phụ thuộc để lấy cơ sở dữ liệu hoặc vectơ cần thiết

từ langchain. cửa hàng vector nhập khẩu sắc độ

#Bộ chia văn bản được sử dụng để chuyển đổi văn bản lớn thành các đoạn nhỏ hơn

từ langchain. bộ chia văn bản nhập khẩu Bộ chia văn bản ký tự

từ langchain. llms nhập khẩu OpenAI

từ langchain. tài liệu_loaders nhập khẩu Trình tải WebBase

từ langchain. dây chuyền nhập khẩu Truy xuấtQA


ừm = OpenAI ( nhiệt độ = 0 )

Bước 4: Thiết lập đường dẫn

Sau khi nhập thư viện, chỉ cần đặt đường dẫn truy cập vào kho lưu trữ vectơ trước khi lưu trữ dữ liệu trong đó:

từ đường dẫn nhập khẩu Con đường

có liên quan_parts = [ ]
P TRONG Con đường ( '.' ) . tuyệt đối ( ) . các bộ phận :
có liên quan_parts. nối thêm ( P )
nếu như có liên quan_parts [ - 3 : ] == [ 'chuỗi lang' , 'tài liệu' , 'mô-đun' ] :
phá vỡ
#Câu lệnh có điều kiện bên trong vòng lặp để đặt đường dẫn cho mỗi cơ sở dữ liệu
doc_path = str ( Con đường ( *phần_có liên quan ) / 'state_of_the_union.txt' )

Bước 5: Tải và chia dữ liệu

Bây giờ, chỉ cần tải dữ liệu và chia dữ liệu thành các phần nhỏ hơn để dễ đọc và dễ hiểu hơn. Tạo các phần nhúng dữ liệu bằng cách chuyển đổi văn bản thành các số tạo thành các không gian vectơ của chúng và lưu trữ nó trong cơ sở dữ liệu Chorma:

từ langchain. tài liệu_loaders nhập khẩu Trình tải văn bản

#Đang tải tập dữ liệu từ đường dẫn của nó và lưu trữ các phần nhỏ hơn của nó trong cơ sở dữ liệu

người nạp đạn = Trình tải văn bản ( doc_path )

các tài liệu = bộ nạp. trọng tải ( )

bộ chia văn bản = Bộ chia văn bản ký tự ( chunk_size = 2000 , chunk_overlap = 0 )

văn bản = văn bản_split. chia_tài liệu ( các tài liệu )

#Chuyển văn bản thành số và lưu trữ phần nhúng trong cơ sở dữ liệu

phần nhúng = OpenAIEmbeddings ( )

tìm kiếm tài liệu = Sắc tố. từ_tài liệu ( văn bản , phần nhúng , tên bộ sưu tập = 'nhà nước liên bang' )

Bước 6: Tạo một Retriever

Để kết hợp các cửa hàng tác nhân và vectơ, cần phải tạo một công cụ truy xuất bằng phương thức RetrievalQA() từ khung LangChain. Phương pháp truy xuất này được khuyến nghị để lấy dữ liệu từ các cửa hàng vectơ bằng cách sử dụng các tác nhân làm công cụ làm việc với cơ sở dữ liệu:

bang_of_union = Truy xuấtQA. từ_chain_type (

ừm = ừm , chuỗi_type = 'chất liệu' , người săn mồi = docsearch. as_retriever ( )

)

Tải một tập dữ liệu khác để tích hợp tác nhân với nhiều tập dữ liệu hoặc kho vectơ:

người nạp đạn = Trình tải WebBase ( 'https://beta.ruff.rs/docs/faq/' )

Lưu trữ tập dữ liệu ruff trong chromadb sau khi tạo các phần dữ liệu nhỏ hơn bằng các vectơ nhúng:

tài liệu = bộ nạp. trọng tải ( )
văn bản thô tục = văn bản_split. chia_tài liệu ( tài liệu )
ruff_db = Sắc tố. từ_tài liệu ( văn bản thô tục , phần nhúng , tên bộ sưu tập = 'xù xì' )
thô lỗ = Truy xuấtQA. từ_chain_type (
ừm = ừm , chuỗi_type = 'chất liệu' , người săn mồi = ruff_db. as_retriever ( )
)

Cách 1: Kết hợp Agent với Vector Store

Phương pháp đầu tiên kết hợp cả tác nhân và kho vectơ để trích xuất thông tin được đề cập dưới đây:

Bước 1: Cấu hình công cụ

Bây giờ các cửa hàng vectơ đã được định cấu hình, hãy chuyển sang xây dựng thành phần thứ hai trong quy trình của chúng tôi, tức là tác nhân. Để tạo tác nhân cho quy trình, hãy nhập thư viện bằng cách sử dụng các phần phụ thuộc như tác nhân, công cụ, v.v.

từ langchain. đại lý nhập khẩu khởi tạo_agent
từ langchain. đại lý nhập khẩu Loại tác nhân
#Nhận công cụ từ LangChain để xây dựng đại lý
từ langchain. công cụ nhập khẩu Công cụ cơ bản
từ langchain. llms nhập khẩu OpenAI
#Nhận LLMMathChain từ chuỗi để xây dựng mô hình ngôn ngữ
từ langchain. dây chuyền nhập khẩu LLMMathChain
từ langchain. tiện ích nhập khẩu SerpAPIWrapper
từ langchain. đại lý nhập khẩu Dụng cụ

Định cấu hình các công cụ sẽ được sử dụng với các tác nhân sử dụng hệ thống QA hoặc truy xuất được định cấu hình trước đó với tên và mô tả của các công cụ:

công cụ = [
Dụng cụ (
tên = 'Hệ thống QA của Liên minh' ,
vui vẻ = bang_of_union. chạy ,
Sự miêu tả = 'Cung cấp câu trả lời cho các câu hỏi liên quan đến tập dữ liệu đã tải với thông tin đầu vào là một câu hỏi được định dạng đầy đủ' ,
) ,
Dụng cụ (
tên = 'Hệ thống QA Ruff' ,
vui vẻ = thô lỗ. chạy ,
Sự miêu tả = 'Cung cấp câu trả lời cho các câu hỏi về ruff (một con trăn nói dối) với thông tin đầu vào là một câu hỏi được định dạng đầy đủ' ,
) ,
]

Bước 2: Khởi tạo tác nhân

Sau khi đã định cấu hình các công cụ, bạn chỉ cần đặt tác nhân trong đối số của phương thức initiza_agent(). Tác nhân chúng tôi đang sử dụng ở đây là ZERO_SHOT_REACT_DESCRIPTION cùng với các công cụ, llm (mô hình ngôn ngữ) và chi tiết:

đại lý = khởi tạo_agent (

công cụ , ừm , đại lý = Loại đại lý. ZERO_SHOT_REACT_DESCRIPTION , dài dòng = ĐÚNG VẬY

)

Bước 3: Kiểm tra tác nhân

Chỉ cần thực thi tác nhân bằng phương thức run() có chứa câu hỏi trong đối số của nó:

đại lý. chạy (

'Tổng thống Joe Biden nói gì về chữ kanji brown trong bài phát biểu'

)

Ảnh chụp màn hình sau đây hiển thị câu trả lời được trích xuất từ ​​cả hai kho dữ liệu bằng cách sử dụng quan sát được lưu trong bộ nhớ của tác nhân:

Phương pháp 2: Sử dụng Tác nhân làm Bộ định tuyến

Một cách khác để kết hợp cả hai thành phần là sử dụng tác nhân làm bộ định tuyến và phần sau đây giải thích quy trình:

Bước 1: Cấu hình công cụ

Sử dụng tác nhân làm bộ định tuyến có nghĩa là hệ thống RetrievalQA sẽ trả về đầu ra trực tiếp vì các công cụ được định cấu hình để trả về đầu ra trực tiếp:

công cụ = [
#cấu hình các công cụ cần thiết để xây dựng tác nhân lấy dữ liệu từ dữ liệu
Dụng cụ (
tên = 'Hệ thống QA của Liên minh' ,
vui vẻ = bang_of_union. chạy ,
Sự miêu tả = 'Cung cấp câu trả lời cho các câu hỏi liên quan đến tập dữ liệu đã tải với thông tin đầu vào là một câu hỏi hoàn chỉnh' ,
return_direct = ĐÚNG VẬY ,
) ,
Dụng cụ (
tên = 'Hệ thống QA Ruff' ,
vui vẻ = thô lỗ. chạy ,
Sự miêu tả = 'Cung cấp câu trả lời cho các câu hỏi về ruff (một con trăn nói dối) với thông tin đầu vào là một câu hỏi hoàn chỉnh' ,
return_direct = ĐÚNG VẬY ,
) ,
]

Bước 2: Khởi tạo và kiểm tra tác nhân

Sau khi thiết lập các công cụ, chỉ cần đặt tác nhân có thể được sử dụng duy nhất làm bộ định tuyến bằng phương thức khởi tạo_agent():

đại lý = khởi tạo_agent (

công cụ , ừm , đại lý = Loại đại lý. ZERO_SHOT_REACT_DESCRIPTION , dài dòng = ĐÚNG VẬY

)

Kiểm tra tác nhân bằng cách đưa ra câu hỏi đầu vào trong phương thức Agent.run() bằng cách thực hiện lệnh sau:

đại lý. chạy (

'Tổng thống Joe Biden nói gì về chữ kanji brown trong bài phát biểu'

)

đầu ra

Ảnh chụp màn hình đầu ra hiển thị rằng nhân viên vừa trả về câu trả lời cho câu hỏi từ tập dữ liệu được hệ thống RetrievalQA trích xuất:

Cách 3: Sử dụng Agent với Multi-Hop Vector Store

Phương pháp thứ ba trong đó các nhà phát triển có thể kết hợp cả kho tác nhân và kho vectơ là dành cho các truy vấn kho vectơ nhiều bước nhảy. Phần sau đây giải thích toàn bộ quá trình:

Bước 1: Cấu hình công cụ

Bước đầu tiên, như thường lệ, là cấu hình các công cụ được sử dụng để xây dựng các tác nhân nhằm trích xuất dữ liệu từ kho lưu trữ dữ liệu:

công cụ = [
Dụng cụ (
tên = 'Hệ thống QA của Liên minh' ,
vui vẻ = bang_of_union. chạy ,
Sự miêu tả = 'Cung cấp câu trả lời cho các câu hỏi liên quan đến tập dữ liệu đã tải với thông tin đầu vào là một câu hỏi được định dạng đầy đủ, không tham chiếu bất kỳ đại từ nào từ cuộc trò chuyện trước đó' ,
) ,
Dụng cụ (
tên = 'Hệ thống QA Ruff' ,
vui vẻ = thô lỗ. chạy ,
Sự miêu tả = 'Cung cấp câu trả lời cho các câu hỏi liên quan đến tập dữ liệu đã tải với thông tin đầu vào là một câu hỏi được định dạng đầy đủ, không tham chiếu bất kỳ đại từ nào từ cuộc trò chuyện trước đó' ,
) ,
]

Bước 2: Khởi tạo và kiểm tra tác nhân

Sau đó, xây dựng biến tác nhân bằng phương thức initize_agent() với tên của tác nhân:

đại lý = khởi tạo_agent (

công cụ , ừm , đại lý = Loại đại lý. ZERO_SHOT_REACT_DESCRIPTION , dài dòng = ĐÚNG VẬY

)

Chạy tác nhân bằng cách sử dụng câu hỏi nhiều bước có chứa nhiều khía cạnh hoặc tính năng vì khối mã sau đây chứa câu hỏi như vậy:

đại lý. chạy (

'Ruff sử dụng công cụ nào để chạy trên sổ ghi chép Python và có diễn giả nào đề cập đến công cụ này trong địa chỉ của họ không'

)

đầu ra

Ảnh chụp màn hình sau đây gợi ý rằng nhân viên phải giải quyết câu hỏi để hiểu được độ phức tạp của nó. Nó đã trả về câu trả lời được hệ thống QA trích xuất từ ​​nhiều kho dữ liệu mà chúng tôi đã tải lên trước đó trong quy trình:

Đó là tất cả về cách kết hợp các đại lý và cửa hàng vector trong LangChain.

Phần kết luận

Để kết hợp các tác nhân với các cửa hàng vectơ trong LangChain, hãy bắt đầu bằng việc cài đặt các mô-đun để thiết lập môi trường và tải bộ dữ liệu. Định cấu hình các cửa hàng vectơ để tải dữ liệu bằng cách chia dữ liệu thành các phần nhỏ hơn trước, sau đó xây dựng mô hình ngôn ngữ bằng phương thức OpenAI(). Định cấu hình tác nhân để tích hợp nó với kho lưu trữ vectơ nhằm trích xuất dữ liệu cho các loại truy vấn khác nhau. Bài viết này đã trình bày chi tiết về quy trình kết hợp các đại lý và cửa hàng vector trong LangChain.