Contents

Cách phân tích tài liệu với LangChain và API OpenAI

Việc trích xuất thông tin chi tiết từ tài liệu và dữ liệu là rất quan trọng trong việc đưa ra quyết định sáng suốt. Tuy nhiên, những lo ngại về quyền riêng tư nảy sinh khi xử lý thông tin nhạy cảm. LangChain, kết hợp với API OpenAI, cho phép bạn phân tích các tài liệu cục bộ của mình mà không cần tải chúng lên trực tuyến.

Thông qua việc lưu trữ dữ liệu cục bộ, sử dụng các phần nhúng và vector hóa để kiểm tra, cũng như thực hiện các hoạt động trong hệ thống của chính mình, OpenAI duy trì quyền riêng tư một cách hiệu quả. Điều quan trọng là thông tin do khách hàng gửi thông qua API của họ không được sử dụng trong đào tạo mô hình hoặc nâng cao dịch vụ.

Thiết lập môi trường của bạn

Để tạo môi trường ảo Python mới và cài đặt các thư viện cần thiết, hãy làm theo các bước sau: Trước tiên, hãy thiết lập môi trường Python mới bằng cách sử dụng mô-đun venv đi kèm với Python 3.x. Điều này sẽ ngăn chặn mọi sự cố tương thích giữa các phiên bản khác nhau của gói đã cài đặt. Để thực hiện việc này, hãy mở terminal hoặc dấu nhắc lệnh của bạn và điều hướng đến thư mục mong muốn nơi bạn muốn tạo môi trường ảo. Khi đó, hãy nhập lệnh sau:bashpython-m venv myenvThay thế “myenv” bằng tên bạn thích cho môi trường ảo của mình. Tiếp theo, kích hoạt môi trường mới tạo bằng lệnh ./bin/activate (trên Windows) hoặc source bin/activate (trên macOS hoặc Linux). Sau khi kích hoạt, tiến hành cài đặt các thư viện cần thiết bằng cách chạy chương trình

 pip install langchain openai tiktoken faiss-cpu pypdf 

Việc sử dụng từng thư viện có thể được tóm tắt như sau:

LangChain là một công cụ linh hoạt được thiết kế để hỗ trợ việc tạo và quản lý chuỗi ngôn ngữ cho các nhiệm vụ phân tích và xử lý văn bản khác nhau. Nền tảng này cung cấp một loạt chức năng như tải tài liệu, phân đoạn văn bản, tạo nhúng và lưu trữ vectơ, tất cả đều hướng đến việc hợp lý hóa các hoạt động liên quan đến ngôn ngữ của bạn một cách dễ dàng và hiệu quả.

Nền tảng quý giá của OpenAI mang đến cho người dùng cơ hội thực hiện các câu hỏi và truy xuất phản hồi từ các mô hình ngôn ngữ tiên tiến, cung cấp tài nguyên quý giá cho những người đang tìm kiếm sự trợ giúp hoặc phân tích sâu sắc.

TikTokoken đóng vai trò như một tiện ích để định lượng số lượng ký tự trong một nội dung văn bản cụ thể, cho phép tính toán chính xác mức sử dụng mã thông báo trong quá trình tương tác với API AI mở, trong đó phí được xác định bởi lượng văn bản được sử dụng.

FAISS là một công cụ hiệu quả cho phép bạn thiết lập và duy trì kho lưu trữ các biểu diễn vectơ, tạo điều kiện truy cập nhanh vào các vectơ được mã hóa tương tự thông qua phần nhúng của chúng.

PyPDF2 là gói Python tạo điều kiện trích xuất văn bản từ các tệp Định dạng Tài liệu Di động (PDF). Phần mềm hợp lý hóa quá trình tải tài liệu PDF và cho phép truy xuất nội dung của chúng để thao tác hoặc phân tích tiếp theo.

Khi quá trình cài đặt tất cả các thư viện đã hoàn tất, không gian làm việc của bạn hiện đã được chuẩn bị và trang bị các công cụ cần thiết để bắt đầu hoạt động.

Lấy khóa API OpenAI

Để sử dụng các dịch vụ do API OpenAI cung cấp, bắt buộc phải kết hợp khóa API trong yêu cầu của bạn. Việc đưa vào như vậy cho phép nhà cung cấp API xác nhận tính xác thực của bên yêu cầu đồng thời xác minh xem người gửi có ủy quyền cần thiết để có quyền truy cập vào các chức năng có sẵn hay không.

Để lấy khóa API OpenAI, hãy truy cập nền tảng OpenAI.

/vi/images/how-to-analyze-your-local-documents-with-langchain-and-openai-api-homepage.jpg

Thật vậy, để truy cập khóa API, vui lòng điều hướng đến phần Hồ sơ nằm ở phía trên bên phải trang tổng quan tài khoản của bạn và chọn’Xem khóa API’. Hành động này sẽ nhanh chóng hiển thị trang khóa API để quản lý thêm.

/vi/images/how-to-analyze-your-local-documents-with-langchain-and-openai-api-page.jpg

Vui lòng nhấp vào nút “Tạo khóa bí mật mới” để bắt đầu quá trình tạo khóa API để bạn sử dụng với OpenAI. Sau khi được tạo, vui lòng cung cấp tên cho khóa của bạn rồi nhấp vào tùy chọn “Tạo khóa bí mật mới” để hoàn tất việc tạo khóa của bạn. Điều quan trọng là bạn phải giữ lại khóa API đã tạo một cách an toàn vì quyền truy cập vào nó có thể không khả dụng thông qua tài khoản OpenAI của bạn do các cân nhắc về bảo mật. Trong trường hợp bạn thất lạc hoặc làm mất khóa bí mật, bạn sẽ phải tạo một khóa khác thay thế.

Mã nguồn hoàn chỉnh có thể được truy cập thông qua kho GitHub, nơi mang đến cho người dùng cơ hội khám phá và sử dụng nội dung của dự án.

Nhập các thư viện cần thiết

Để người dùng sử dụng các gói đã được cài đặt trong môi trường ảo của họ, cần phải kết hợp chúng thông qua hành động nhập.

 from langchain.document_loaders import PyPDFLoader, TextLoader
from langchain.text_splitter import CharacterTextSplitter
from langchain.embeddings.openai import OpenAIEmbeddings
from langchain.vectorstores import FAISS
from langchain.chains import RetrievalQA
from langchain.llms import OpenAI

Khi kiểm tra mã, có thể thấy rõ rằng quy trình này liên quan đến việc nhập các phần phụ thuộc cần thiết vào khung LangChain, từ đó cấp quyền truy cập vào một loạt các chức năng được cung cấp bởi khung nói trên.

Đang tải tài liệu để phân tích

Để bắt đầu, hãy thiết lập một biến đóng vai trò là kho lưu trữ khóa API của bạn. Thực thể này sau đó sẽ được sử dụng trong tập lệnh cho mục đích xác thực.

 # Hardcoded API key
openai_api_key = "Your API key"

Khi phân phối mã cấp sản xuất có thể được chia sẻ với các thực thể bên ngoài, bạn nên tránh kết hợp thông tin nhạy cảm như khóa API trực tiếp trong mã nguồn. Thay vì triển khai phương pháp này, việc sử dụng biến môi trường mang lại giải pháp an toàn và thiết thực hơn để quản lý các thông tin xác thực đó trong bối cảnh được chia sẻ.

Chắc chắn! Đây là ví dụ về cách bạn có thể triển khai điều này trong Python bằng cách sử dụng thư viện PyPDF2 để làm việc với các tệp PDF và hàm open() tích hợp sẵn để đọc các tệp văn bản thuần túy:pythonimport PyPDF2from io import BytesIOdef Load_document(file_path):“““ Tải tài liệu từ đường dẫn tệp đã chỉ định.”””# Kiểm tra xem tệp có tồn tại hay không trước khi thử mở nótry:if not file_path.endswith(’.pdf’):# Tài liệu không phải là tệp PDF, vì vậy hãy thử mở dưới dạng văn bản thay vào đó, hãy mở tệp bằng open(file_path,‘r’) dưới dạng f:return f.read()elif file_path.endswith(’.pdf’):

 def load_document(filename):
   if filename.endswith(".pdf"):
       loader = PyPDFLoader(filename)
       documents = loader.load()
   elif filename.endswith(".txt"):
       loader = TextLoader(filename)
       documents = loader.load()
   else:
       raise ValueError("Invalid file type") 

Sau khi tài liệu đã được tải, quy trình này bao gồm việc tạo một phiên bản của CharacterTextSplitter. Bộ chia đã nói có trách nhiệm chia tài liệu đã tải thành các phần dễ quản lý hơn, với mỗi phần được xác định bởi các ký tự riêng lẻ.

    text_splitter = CharacterTextSplitter(chunk_size=1000,
                                          chunk_overlap=30, separator="\n")

   return text_splitter.split_documents(documents=documents)

Việc xử lý nội dung thành các phân đoạn nhỏ hơn, gắn kết sẽ tạo điều kiện xử lý hiệu quả và duy trì mức độ trùng lặp theo ngữ cảnh có liên quan, điều này chứng tỏ có lợi trong các công việc như phân tích văn bản và hoạt động truy xuất dữ liệu.

Truy vấn tài liệu

Để trích xuất thông tin từ tài liệu đã gửi, hãy phát triển một hàm chấp nhận cụm từ tìm kiếm cùng với thành phần truy xuất dữ liệu làm đầu vào. Chức năng này sẽ sử dụng trình truy xuất được cung cấp cùng với việc khởi tạo mô hình ngôn ngữ tự nhiên AI mở để thiết lập đối tượng RetrievalQA.

 def query_pdf(query, retriever):
   qa = RetrievalQA.from_chain_type(llm=OpenAI(openai_api_key=openai_api_key),
                                    chain_type="stuff", retriever=retriever)
   result = qa.run(query)
   print(result)

Hàm hiện tại sử dụng mô hình trả lời câu hỏi được khởi tạo để thực hiện truy vấn và hiển thị kết quả.

Tạo hàm chính

Hàm chính chi phối tiến trình chung của chương trình bằng cách chấp nhận đầu vào do người dùng cung cấp cho tên tệp của tài liệu, sau đó tải tài liệu đã chỉ định. Sau đó, nó thiết lập một phiên bản OpenAIEmbeddings được thiết kế để nhúng từ và xây dựng kho lưu trữ vectơ dựa trên tài liệu đã xử lý trước đó và các từ nhúng tương ứng của nó. Cuối cùng, cơ sở dữ liệu vectơ đã xây dựng được lưu vào phương tiện lưu trữ cục bộ dưới dạng tệp.

Khi lớp lưu giữ đã được khởi tạo và mọi dữ liệu cần thiết đã được tải, hệ thống sẽ chuyển sang giai đoạn lặp lại trong đó người dùng được nhắc gửi truy vấn thông qua giao diện văn bản. Trong quá trình này, chức năng chính được ủy quyền cho phương thức query\_pdf , được gọi cùng với trình truy xuất kho lưu trữ vectơ chịu trách nhiệm thu được trong quá trình khởi tạo. Chu kỳ này tiếp tục vô thời hạn cho đến khi người dùng quyết định kết thúc phiên bằng cách nhập từ “exit.

 def main():
   filename = input("Enter the name of the document (.pdf or .txt):\n")
   docs = load_document(filename)
   embeddings = OpenAIEmbeddings(openai_api_key=openai_api_key)
   vectorstore = FAISS.from_documents(docs, embeddings)
   vectorstore.save_local("faiss_index_constitution")
   persisted_vectorstore = FAISS.load_local("faiss_index_constitution", embeddings)
   query = input("Type in your query (type 'exit' to quit):\n")

   while query != "exit":
       query_pdf(query, persisted_vectorstore.as_retriever())
       query = input("Type in your query (type 'exit' to quit):\n")

Phần nhúng gói gọn các kết nối phức tạp tồn tại giữa các mục từ vựng, đóng vai trò là sự thể hiện trừu tượng của ngôn ngữ viết hoặc nói ở định dạng số. Nói cách khác, vectơ cung cấp một phương pháp mô tả các đoạn văn bản thông qua một loạt các giá trị số, từ đó cho phép xử lý tính toán và phân tích dữ liệu ngôn ngữ.

Mã hiện tại chuyển đổi nội dung văn bản trong tài liệu thành các biểu diễn vectơ bằng cách sử dụng các phần nhúng do OpenAIEmbeddings tạo ra, sau đó lập chỉ mục các biểu diễn vectơ nói trên bằng FAISS (Tìm kiếm tương tự AI của Facebook) để tạo điều kiện truy xuất và so sánh nhanh chóng các mẫu vectơ tương tự. Điều này cho phép kiểm tra các tài liệu được gửi.

Việc kết hợp thuộc tính \_\_name\_\_ với giá trị tương ứng là "\_\_main\_\_" là một bước thiết yếu trong việc thực thi chức năng chính khi tập lệnh được chạy dưới dạng một chương trình độc lập. Bằng cách sử dụng cấu trúc này, nó cho phép thực thi liền mạch chức năng chính khi tương tác với người dùng mà không yêu cầu bất kỳ lời nhắc hoặc sự can thiệp nào từ bên ngoài.

 if __name__ == "__main__":
   main() 

Chương trình phần mềm này hoạt động như một công cụ dựa trên thiết bị đầu cuối. Để cải tiến, người ta có thể sử dụng Streamlit để kết hợp giao diện người dùng đồ họa cho ứng dụng thông qua internet.

Thực hiện phân tích tài liệu

Để thực hiện phân tích tài liệu, hãy đặt tài liệu mà bạn định kiểm tra vào thư mục dự án của bạn và sau đó khởi chạy ứng dụng phần mềm. Hệ thống sẽ yêu cầu nhận dạng tài liệu cụ thể cần phân tích bằng cách nhắc bạn nhập tên đầy đủ của tài liệu đó. Sau đó, cung cấp một loạt các thuật ngữ truy vấn mà công cụ dự kiến ​​sẽ xử lý trong quá trình kiểm tra.

Phần trình bày bằng đồ họa được cung cấp ở đây mô tả những phát hiện thu được từ việc xử lý tệp Định dạng Tài liệu Di động (PDF), như được minh họa trong ảnh chụp màn hình bên dưới tuyên bố này.

/vi/images/how-to-analyze-your-local-documents-with-langchain-and-openai-api-pdf-results.jpg

Màn hình tiếp theo minh họa những phát hiện từ việc kiểm tra tài liệu có chứa mã lập trình.

/vi/images/how-to-analyze-your-local-documents-with-langchain-and-openai-api-code-results.jpg

Để đảm bảo phân tích chính xác các tệp mong muốn, điều cần thiết là chúng phải ở định dạng PDF hoặc văn bản. Nếu tài liệu ở dạng tệp thay thế, có sẵn nhiều tài nguyên trực tuyến khác nhau để chuyển đổi các tệp này thành định dạng PDF phù hợp để kiểm tra và giải thích kỹ lưỡng.

Tìm hiểu công nghệ đằng sau các mô hình ngôn ngữ lớn

LangChain hợp lý hóa quy trình phát triển cho các ứng dụng sử dụng khả năng ngôn ngữ tự nhiên tiên tiến bằng cách trừu tượng hóa các kỹ thuật phức tạp, cho phép người dùng tập trung vào chức năng dự định của họ mà không cần đi sâu vào sự phức tạp của mô hình ngôn ngữ do AI điều khiển. Điều quan trọng là phải có sự hiểu biết toàn diện về các công nghệ cơ bản hỗ trợ các mô hình này để có thể nắm bắt đầy đủ hoạt động của ứng dụng cụ thể đang được phát triển.