Xây dựng ChatGPT cho tệp PDF bằng Langchain
Ngày 21/01/2024 - 09:01Từ sinh viên đến nhà văn, mọi người ở mọi lứa tuổi và ngành nghề đều yêu thích tính chính xác, tốc độ và cuộc trò chuyện giống con người của nó. Các mô hình trò chuyện này, bao gồm cả những mô hình được tích hợp với kết xuất PDF của Langchain, được thiết lập để đóng vai trò then chốt trên nhiều lĩnh vực khác nhau, vượt ra ngoài công nghệ.
Các công cụ nguồn mở như AutoGPTs, BabyAGI và Langchain, bao gồm cả Langchain PDF, đã xuất hiện, khai thác sức mạnh của các mô hình ngôn ngữ. Tự động hóa các tác vụ lập trình bằng lời nhắc, kết nối mô hình ngôn ngữ với nguồn dữ liệu và tạo ứng dụng AI nhanh hơn bao giờ hết. Langchain là công cụ Hỏi & Đáp hỗ trợ ChatGPT dành cho các tệp PDF, biến nó thành một điểm dừng duy nhất để xây dựng các ứng dụng AI.
Mục tiêu học tập
- Xây dựng giao diện chatbot bằng Gradio
- Trích xuất văn bản từ pdf và tạo phần nhúng
- Lưu trữ các phần nhúng trong cơ sở dữ liệu vectơ Chroma
- Gửi truy vấn đến phần phụ trợ (chuỗi Langchain)
- Thực hiện tìm kiếm ngữ nghĩa trên các văn bản để tìm nguồn dữ liệu có liên quan
- Gửi dữ liệu tới LLM (ChatGPT) và nhận câu trả lời trên chatbot
Langchain giúp bạn dễ dàng thực hiện tất cả các bước này chỉ bằng một vài dòng mã. Nó có các trình bao bọc cho nhiều dịch vụ, bao gồm mô hình nhúng, mô hình trò chuyện và cơ sở dữ liệu vectơ.
Bài viết này đã được xuất bản như một phần của Blogathon Khoa học Dữ liệu.
Langchain là gì?
Langchain là một công cụ mã nguồn mở, lý tưởng để nâng cao các mô hình trò chuyện như tài khoản Chat GPT-4 hoặc GPT-3.5. Nó kết nối dữ liệu bên ngoài một cách liền mạch, làm cho các mô hình trở nên có tính tác nhân và nhận biết dữ liệu hơn. Với Langchain, bạn có thể giới thiệu dữ liệu mới cho các mô hình theo cách chưa từng có trước đây. Nền tảng này cung cấp nhiều chuỗi, đơn giản hóa việc tương tác với các mô hình ngôn ngữ. Ngoài Langchain, các công cụ như Mô hình để tạo nhúng vectơ đóng một vai trò quan trọng. Khi làm việc với Langchain, khả năng hiển thị hình ảnh của tệp PDF cũng rất đáng chú ý. Bây giờ, hãy đi sâu vào ý nghĩa của việc nhúng văn bản.
Nhúng văn bản
Việc nhúng văn bản là trái tim và linh hồn của Hoạt động Ngôn ngữ Lớn. Về mặt kỹ thuật, chúng ta có thể làm việc với các mô hình ngôn ngữ bằng ngôn ngữ tự nhiên nhưng việc lưu trữ và truy xuất ngôn ngữ tự nhiên rất kém hiệu quả. Ví dụ: trong dự án này, chúng tôi sẽ cần thực hiện các thao tác tìm kiếm tốc độ cao trên các khối dữ liệu lớn. Không thể thực hiện các thao tác như vậy trên dữ liệu ngôn ngữ tự nhiên.
Để hiệu quả hơn, chúng ta cần chuyển đổi dữ liệu văn bản thành dạng vector. Có các mô hình ML chuyên dụng để tạo phần nhúng từ văn bản. Các văn bản được chuyển đổi thành các vectơ đa chiều. Sau khi được nhúng, chúng tôi có thể nhóm, sắp xếp, tìm kiếm và hơn thế nữa trên những dữ liệu này. Chúng ta có thể tính khoảng cách giữa hai câu để biết chúng có liên quan chặt chẽ với nhau đến mức nào. Và phần hay nhất của nó là các thao tác này không chỉ giới hạn ở các từ khóa như tìm kiếm cơ sở dữ liệu truyền thống mà còn nắm bắt được sự gần gũi về mặt ngữ nghĩa của hai câu. Điều này làm cho nó mạnh mẽ hơn rất nhiều nhờ vào Machine Learning.
Công cụ Langchain
Langchain có các trình bao bọc cho tất cả các cơ sở dữ liệu vectơ chính như Chroma, Redis, Pinecone, Alpine db, v.v. Và điều này cũng đúng với LLM, cùng với các mô hình OpeanAI, nó cũng hỗ trợ các mô hình của Cohere, GPT4ALL- một giải pháp thay thế nguồn mở cho các mô hình GPT. Đối với các phần nhúng, nó cung cấp các trình bao bọc cho các phần nhúng OpeanAI, Cohere và HuggingFace. Bạn cũng có thể sử dụng các mô hình nhúng tùy chỉnh của mình.
Vì vậy, nói tóm lại, Langchain là một siêu công cụ giúp loại bỏ rất nhiều sự phức tạp khi tương tác với các công nghệ cơ bản, giúp mọi người xây dựng ứng dụng AI một cách nhanh chóng dễ dàng hơn.
Trong bài viết này, chúng tôi sẽ sử dụng mô hình nhúng OpeanAI để tạo các phần nhúng. Nếu bạn muốn triển khai ứng dụng AI cho người dùng cuối, hãy cân nhắc sử dụng bất kỳ mô hình Opensource nào, chẳng hạn như mô hình Huggingface hoặc bộ mã hóa câu Universal của Google.
Để lưu trữ vectơ, chúng tôi sẽ sử dụng Chroma DB , cơ sở dữ liệu lưu trữ vectơ nguồn mở. Hãy thoải mái khám phá các cơ sở dữ liệu khác như Alpine, Pinecone và Redis. Langchain có trình bao bọc cho tất cả các cửa hàng vector này.
Để tạo chuỗi Langchain, chúng ta sẽ sử dụng ConversationalRetrievalChain (), lý tưởng cho cuộc trò chuyện với các mô hình trò chuyện có lịch sử (để giữ bối cảnh của cuộc trò chuyện). Hãy xem tài liệu chính thức của họ về các chuỗi LLM khác nhau.
Thiết lập môi trường Dev
Có khá nhiều thư viện chúng tôi sẽ sử dụng. Vì vậy, hãy cài đặt chúng trước. Để tạo môi trường phát triển liền mạch, không lộn xộn, hãy sử dụng môi trường ảo hoặc Docker .
Bây giờ, nhập các thư viện này
Xây dựng giao diện trò chuyện
Giao diện của ứng dụng sẽ có hai chức năng chính, một là giao diện trò chuyện và một là hiển thị trang PDF có liên quan dưới dạng hình ảnh. Ngoài ra, còn có một hộp văn bản để chấp nhận khóa API OpenAI từ người dùng cuối. Tôi thực sự khuyên bạn nên xem qua bài viết xây dựng chatbot GPT với Gradio từ đầu. Bài viết thảo luận về các khía cạnh cơ bản của Gradio. Chúng ta sẽ mượn rất nhiều điều từ bài viết này.
Lớp Gradio Blocks cho phép chúng ta xây dựng một ứng dụng web. Các lớp Hàng và Cột cho phép căn chỉnh nhiều thành phần trên ứng dụng web. Chúng ta sẽ sử dụng chúng để tùy chỉnh giao diện web.
Giao diện đơn giản với một vài thành phần.
Nó có:
- Giao diện trò chuyện để giao tiếp với PDF.
- Một thành phần để hiển thị các trang PDF có liên quan.
- Hộp văn bản để chấp nhận khóa API và nút phím thay đổi.
- Một hộp văn bản để đặt câu hỏi và một nút gửi.
- Một nút để tải tập tin lên.
Đây là ảnh chụp nhanh của giao diện người dùng web.
Phần frontend của ứng dụng của chúng ta đã hoàn tất. Hãy chuyển sang phần phụ trợ.
Phần phụ trợ
Đầu tiên, hãy phác thảo các quy trình chúng ta sẽ giải quyết.
- Xử lý khóa API PDF và OpenAI đã tải lên
- Trích xuất văn bản từ PDF và tạo các phần nhúng văn bản từ đó bằng cách sử dụng phần nhúng OpenAI.
- Lưu trữ các phần nhúng vectơ trong kho vectơ ChromaDB.
- Tạo chuỗi Truy xuất hội thoại với Langchain.
- Tạo phần nhúng của văn bản được truy vấn và thực hiện tìm kiếm tương tự trên các tài liệu được nhúng.
- Gửi tài liệu liên quan đến mô hình trò chuyện OpenAI (gpt-3.5-turbo).
- Tìm nạp câu trả lời và phát trực tuyến trên giao diện người dùng trò chuyện.
- Hiển thị trang PDF có liên quan trên Giao diện người dùng Web.
Đây là tổng quan về ứng dụng của chúng tôi. Hãy bắt đầu xây dựng nó.
Sự kiện Gradio
Khi một hành động cụ thể trên giao diện người dùng web được thực hiện, những sự kiện này sẽ được kích hoạt. Vì vậy, các sự kiện làm cho ứng dụng web trở nên tương tác và năng động. Gradio cho phép chúng ta xác định các sự kiện bằng mã Python.
Sự kiện Gradio sử dụng các biến thành phần mà chúng tôi đã xác định trước đó để giao tiếp với chương trình phụ trợ. Chúng tôi sẽ xác định một số Sự kiện mà chúng tôi cần cho ứng dụng của mình. đó là
- Gửi sự kiện khóa API : Nhấn enter sau khi dán khóa API sẽ kích hoạt sự kiện này.
- Thay đổi khóa : Điều này sẽ cho phép bạn cung cấp khóa API mới
- Nhập truy vấn : Gửi truy vấn văn bản đến chatbot
- Tải lên tệp : Điều này sẽ cho phép người dùng cuối tải lên tệp PDF
Cho đến nay chúng ta vẫn chưa xác định được các hàm được gọi bên trong các trình xử lý sự kiện ở trên. Tiếp theo, chúng tôi sẽ xác định tất cả các chức năng này để tạo ra một ứng dụng web chức năng.
Xử lý khóa API
Việc xử lý các khóa API của người dùng rất quan trọng vì toàn bộ hoạt động này đều chạy theo nguyên tắc BYOK (Mang theo khóa riêng của bạn). Bất cứ khi nào người dùng gửi khóa, hộp văn bản phải trở thành bất biến với lời nhắc gợi ý khóa đã được đặt. Và khi sự kiện “Thay đổi khóa” được kích hoạt, hộp phải có khả năng nhận đầu vào.
Để làm điều này, hãy xác định hai biến toàn cục.
Xác định hàm
Hàm set_apikey nhận đầu vào là chuỗi và trả về biến vô hiệu hóa_box, biến này làm cho hộp văn bản không thể thay đổi sau khi thực thi. Trong phần Sự kiện Gradio, chúng tôi đã xác định Sự kiện gửi api_key, gọi hàm set_apikey. Chúng tôi đặt khóa API làm biến môi trường bằng thư viện hệ điều hành.
Nhấp vào nút Thay đổi khóa API sẽ trả về biến Enable_box, biến này cho phép khả năng thay đổi của hộp văn bản trở lại.
Tạo chuỗi
Đây là bước quan trọng nhất. Bước này liên quan đến việc trích xuất văn bản, tạo các phần nhúng và lưu trữ chúng trong các cửa hàng vectơ. Cảm ơn Langchain, công ty cung cấp trình bao bọc cho nhiều dịch vụ giúp mọi việc trở nên dễ dàng hơn. Vì vậy, hãy xác định hàm.
- Đã tạo kiểm tra xem khóa API có được đặt hay không. Điều này sẽ gây ra lỗi ở giao diện người dùng nếu Khóa không được đặt.
- Tải tệp PDF bằng PyPDFLoader
- Chức năng nhúng được xác định với OpenAIEmbeddings.
- Đã tạo một cửa hàng vectơ từ danh sách văn bản từ PDF bằng chức năng nhúng.
- Đã xác định một chuỗi bằng chatOpenAI (theo mặc định ChatOpenAI sử dụng gpt-3.5-turbo), một trình truy xuất cơ sở (sử dụng tìm kiếm tương tự).
Tạo phản hồi
Sau khi chuỗi được tạo, chúng tôi sẽ gọi chuỗi và gửi truy vấn của mình. Gửi lịch sử trò chuyện cùng với các truy vấn để giữ bối cảnh của cuộc trò chuyện và truyền phản hồi đến giao diện trò chuyện. Hãy xác định hàm.
- Xảy ra lỗi nếu không có bản PDF nào được tải lên.
- Chỉ gọi hàm process_file một lần.
- Gửi truy vấn và lịch sử trò chuyện tới chuỗi
- Truy xuất số trang của câu trả lời phù hợp nhất.
- Mang lại phản hồi cho giao diện người dùng.
Kết xuất hình ảnh của tệp PDF
Bước cuối cùng là hiển thị hình ảnh của file PDF kèm theo câu trả lời phù hợp nhất. Chúng ta có thể sử dụng thư viện PyMuPdf và PIL để hiển thị hình ảnh của tài liệu.
- Mở tệp bằng Fitz của PyMuPdf.
- Lấy trang có liên quan.
- Nhận bản đồ pix cho trang.
- Tạo hình ảnh từ lớp Hình ảnh của PIL.
Đây là tất cả những gì chúng ta cần làm đối với một ứng dụng web chức năng để trò chuyện với bất kỳ tệp PDF nào.
Đặt mọi thứ lại với nhau
Bây giờ chúng ta đã cấu hình mọi thứ, hãy khởi chạy ứng dụng của mình.
Bạn có thể khởi chạy ứng dụng ở chế độ gỡ lỗi bằng lệnh sau
gradio app.py
Nếu không, bạn cũng có thể chỉ cần chạy ứng dụng bằng lệnh Python. Dưới đây là ảnh chụp nhanh của sản phẩm cuối cùng. Kho lưu trữ mã GitHub .
Những cải tiến có thể có
Ứng dụng hiện tại hoạt động rất tốt. Nhưng có một số điều bạn có thể làm để làm cho nó tốt hơn.
- Điều này sử dụng các phần nhúng OpenAI có thể tốn kém về lâu dài. Đối với một ứng dụng sẵn sàng sản xuất, mọi mô hình nhúng ngoại tuyến đều có thể phù hợp hơn.
- Gradio để tạo mẫu thì ổn, nhưng đối với thế giới thực, một ứng dụng có khung javascript hiện đại như Next Js hoặc Svelte sẽ tốt hơn nhiều về hiệu suất và tính thẩm mỹ.
- Chúng tôi đã sử dụng độ tương tự cosine để tìm các văn bản có liên quan. Trong một số điều kiện, cách tiếp cận KNN có thể tốt hơn.
- Đối với các tệp PDF có nội dung văn bản dày đặc, việc tạo các đoạn văn bản nhỏ hơn có thể sẽ tốt hơn.
- Mô hình càng tốt thì hiệu suất càng tốt. Thử nghiệm với các LLM khác và so sánh kết quả.
Trường hợp sử dụng thực tế
Sử dụng các công cụ trên nhiều lĩnh vực từ Giáo dục, Luật đến Học viện hoặc bất kỳ lĩnh vực nào bạn có thể tưởng tượng rằng yêu cầu người đó phải xem qua những văn bản khổng lồ. Một số trường hợp sử dụng thực tế của ChatGPT cho tệp PDF là
- Cơ sở giáo dục : Học sinh có thể tải lên sách giáo khoa, tài liệu học tập và bài tập, đồng thời công cụ này có thể trả lời các câu hỏi và giải thích các phần cụ thể. Điều này có thể làm cho quá trình học tập tổng thể bớt vất vả hơn đối với học sinh.
- Pháp lý : Các công ty luật phải xử lý rất nhiều tài liệu pháp lý ở định dạng PDF. Công cụ này có thể được sử dụng để trích xuất thông tin liên quan từ các tài liệu vụ án, hợp đồng pháp lý và quy chế một cách thuận tiện. Nó có thể giúp luật sư tìm ra các điều khoản, tiền lệ và các thông tin khác nhanh hơn.
- Học viện : Các học giả nghiên cứu thường xử lý các tài liệu nghiên cứu và tài liệu kỹ thuật. Một công cụ có thể tóm tắt tài liệu, phân tích và đưa ra câu trả lời từ tài liệu có thể giúp tiết kiệm thời gian tổng thể và cải thiện năng suất.
- Cơ quan quản lý: Chính phủ văn phòng và các bộ phận hành chính khác xử lý rất nhiều biểu mẫu, đơn đăng ký và báo cáo hàng ngày. Việc sử dụng chatbot trả lời tài liệu có thể đơn giản hóa quy trình quản trị, từ đó tiết kiệm thời gian và tiền bạc của mọi người.
- Tài chính : Việc phân tích các báo cáo tài chính và xem đi xem lại chúng thật tẻ nhạt. Điều này có thể được thực hiện dễ dàng hơn bằng cách sử dụng một chatbot. Thực chất là một thực tập sinh.
- Phương tiện : Nhà báo và Nhà phân tích có thể sử dụng công cụ trả lời câu hỏi PDF hỗ trợ chatGPT để truy vấn kho văn bản lớn nhằm tìm câu trả lời nhanh chóng.
Công cụ Hỏi & Đáp PDF hỗ trợ tài khoản Chat GPT Plus có thể thu thập thông tin nhanh hơn từ hàng đống văn bản PDF. Nó giống như một công cụ tìm kiếm dữ liệu văn bản. Không chỉ các tệp PDF mà chúng tôi còn có thể mở rộng công cụ này sang bất kỳ thứ gì có dữ liệu văn bản chỉ bằng một chút thao tác mã.
Phần kết luận
Vì vậy, đây là tất cả về việc xây dựng một chatbot để trò chuyện với bất kỳ tệp PDF nào bằng ChatGPT. Nhờ Langchain PDF, việc xây dựng các ứng dụng AI đã trở nên dễ dàng hơn nhiều. Một số điểm chính bao gồm:
- Gradio là một công cụ mã nguồn mở để tạo mẫu các ứng dụng AI. Chúng tôi đã tạo giao diện người dùng của ứng dụng bằng Gradio.
- Langchain là một công cụ nguồn mở khác cho phép chúng tôi xây dựng các ứng dụng AI. Nó có các trình bao bọc cho các kho lưu trữ dữ liệu vectơ và LLM phổ biến, cho phép chúng ta tương tác dễ dàng với các dịch vụ cơ bản.
- Chúng tôi đã sử dụng Langchain để xây dựng hệ thống phụ trợ cho ứng dụng của mình.
- Các mô hình OpenAI nhìn chung rất quan trọng đối với ứng dụng của chúng tôi. Chúng tôi đã sử dụng công cụ nhúng OpenAI và công cụ GPT 3.5 để trò chuyện với các tệp PDF.
- Công cụ Hỏi & Đáp hỗ trợ ChatGPT dành cho tệp PDF và dữ liệu văn bản khác có thể giúp ích rất nhiều trong việc hợp lý hóa các nhiệm vụ kiến thức.
Các câu hỏi thường gặp
A. LangChain là một nền tảng phi tập trung nhằm mục đích thu hẹp các rào cản ngôn ngữ bằng cách kết hợp công nghệ chuỗi khối và dịch vụ ngôn ngữ. Nó tạo điều kiện cho sự tương tác an toàn và minh bạch giữa các nhà cung cấp dịch vụ ngôn ngữ và khách hàng, tạo ra một hệ sinh thái toàn cầu cho các dịch vụ liên quan đến ngôn ngữ.
A. LangChain được sử dụng để kết nối các nhà cung cấp dịch vụ ngôn ngữ với khách hàng, cho phép truy cập liền mạch vào dịch thuật, phiên dịch, bản địa hóa và các dịch vụ liên quan đến ngôn ngữ khác. Nó hợp lý hóa quy trình, tăng hiệu quả và thúc đẩy sự tin cậy và công bằng trong ngành ngôn ngữ.
A. LangChain kết hợp các loại chuỗi khác nhau để đáp ứng các yêu cầu khác nhau. Các loại chuỗi này bao gồm chuỗi dịch thuật, chuỗi phiên dịch, chuỗi bản địa hóa, v.v. Mỗi loại chuỗi tập trung vào các dịch vụ ngôn ngữ cụ thể và cung cấp một môi trường dành riêng cho việc thực thi và quản lý chúng.
A. Trong LangChain, các đại lý đóng vai trò trung gian giữa nhà cung cấp dịch vụ và khách hàng. Chúng tạo điều kiện thuận lợi cho việc phối hợp, đàm phán và thực hiện các hợp đồng dịch vụ ngôn ngữ. Đại lý có thể là cá nhân hoặc tổ chức và họ đóng vai trò quan trọng trong việc duy trì tính toàn vẹn và hiệu quả của hệ sinh thái LangChain.
Bài viết liên quan
25/01/2024
23/01/2024
25/01/2024
20/02/2024
25/01/2024
03/02/2024