PdfGptIndexer - Lập chỉ mục và truy vấn tài liệu PDF bằng OpenAI embeddings và FAISS
(github.com/raghavan)- Là công cụ để lập chỉ mục và truy vấn tài liệu PDF, triển khai một hệ thống RAG cho phép trò chuyện với tài liệu PDF bằng OpenAI embeddings và FAISS
- Trích xuất văn bản từ thư mục PDF, chia thành các chunk 1000 ký tự với phần chồng lấp 200 ký tự, sau đó tạo embedding bằng mô hình OpenAI
text-embedding-ada-002và lưu vào FAISS index cục bộ - Ở bước truy vấn, công cụ tải chỉ mục vector FAISS đã lưu, chuyển câu hỏi thành embedding, tìm 3 chunk tài liệu tương tự nhất, rồi hiển thị điểm tương đồng và đoạn trích văn bản
- Việc tạo câu trả lời được thực hiện bằng cách để GPT-4 tổng hợp một câu trả lời nhất quán dựa trên ngữ cảnh đã truy xuất
- Nhờ lưu embedding cục bộ, không cần tạo lại embedding ở mỗi lần truy vấn; sau lần tạo ban đầu, có thể truy vấn dữ liệu mà không cần OpenAI có kết nối Internet, và chỉ cần gọi API khi tạo câu trả lời
- Luồng chạy cơ bản là xử lý PDF bằng
python indexer.pyđể tạo cơ sở dữ liệu vector, rồi khởi động giao diện truy vấn hội thoại bằngpython chatbot.py- Có thể chỉ định thư mục PDF và vị trí lưu chỉ mục bằng đối số dòng lệnh
- Chỉ cần chạy lại trình lập chỉ mục khi thêm PDF mới vào bộ sưu tập
- Yêu cầu chạy gồm Python 3.8 trở lên và OpenAI API key, được thiết lập bằng giá trị
OPENAI_API_KEYtrong tệp.env
1 bình luận
Ý kiến trên Hacker News
Điều khó chịu nhất là gần như mọi ứng dụng sao chép kiểu ý tưởng này đều bắt buộc dùng OpenAI
Mong là chuyện này sớm chấm dứt
Tùy chọn cần OpenAI hay đám mây nên chỉ được để ở mức “về mặt kỹ thuật thì làm được nhưng là thiết lập nâng cao khá phiền phức”, còn mặc định thì nên ngược lại thì mới có nhiều người dùng hơn
Theo tôi, các ứng dụng kiểu này nên lấy chạy hoàn toàn cục bộ làm mặc định, và chỉ cần đổi một chuỗi trong file
.tomllà có thể thay sang bất kỳ mô hình Hugging Face nào mình muốnNếu thật sự cần OpenAI thì cứ cho phép thông qua cách quản lý khóa như Docker secret hoặc chuỗi
passvà thay đổi cấu hình là đượcMặc định nên ưu tiên cục bộ, xử lý nhiều nhất có thể ở máy local, rồi chỉ khi người dùng thực sự muốn thì mới gửi một lượng token rất nhỏ của prompt đã được gom lại lên OpenAI
Với doanh nghiệp lớn hơn thì còn cần khả năng mở rộng, và ngay cả vậy cũng khó cạnh tranh nổi với giá của OpenAI
Có lẽ ai đó thiên về khởi nghiệp có thể lập một startup OpenLLaMA cung cấp tính phí theo yêu cầu, fine-tuning và lưu trữ vector
Giai đoạn thấy lạ lẫm, thú vị đã qua rồi, giờ tôi chỉ muốn hoàn thành công việc một cách hiệu quả
Theo những gì tôi đã thử đến nay, mô hình duy nhất giúp xử lý công việc ở mức tương đối ổn định là GPT-4
Tôi không rõ là do tôi chưa đủ giỏi, hay là kiểu tự huyễn hoặc quen thuộc trên HN rằng các LLM khác tốt hơn rất nhiều về chất lượng, độ nhất quán và độ tin cậy cần cho công việc thực tế
Tôi đoán đây là hệ quả của việc OpenAI không có chương trình chứng nhận chính thức riêng
Hiện tại, xét theo tiêu chí dự án cá nhân thì OpenAI đang cung cấp một trong những embedding tốt và rẻ nhất
Sau khi vector đã được tạo xong, nếu muốn thì bạn có thể hoàn toàn thoát khỏi đám mây
LangChain đã trừu tượng hóa điểm gây khó chịu đó nên bộ tạo embedding cũng có thể đổi bất cứ lúc nào
Phần còn lại vốn đã dùng Hugging Face, và có thể thay bằng mô hình khác ngoài GPT-2 hỗ trợ prompt
Nên giữ dữ liệu ở chế độ riêng tư và không để rò rỉ cho bên thứ ba. Có thể dùng thứ như privateGPT. Nó có 32 nghìn sao trên GitHub
Nếu khóa không phải của tôi thì dữ liệu cũng không phải của tôi
“Tương tác với tài liệu bằng sức mạnh của GPT theo cách riêng tư, riêng tư 100%, không rò rỉ dữ liệu”[0]
[0] https://github.com/imartinez/privateGPT
Hiện vẫn chưa phải vậy
Nó có thể trích xuất ngữ cảnh để hiểu các câu hỏi về log gần đây không?
Tôi vẫn chưa mua được máy dòng M, nên đang cân nhắc liệu chạy trong môi trường điện toán đám mây có GPU có tốt hơn không
Kiểu như chỉ cần viết tài liệu ra đó rồi đặt câu hỏi về nội dung là xong
Nhìn vào mức độ hoang tưởng mà giới cầm quyền thể hiện với LLM chạy cục bộ, tôi sẽ không hề ngạc nhiên nếu telemetry của Windows đang báo cáo mọi người làm gì với LLM local
Ai nghĩ là không có chuyện đó thì theo tôi là quá ngây thơ
Dữ liệu cá nhân của tôi sẽ bị gửi cho OpenAI sao? Chẳng phải đó là vấn đề nghiêm trọng à?
Có vẻ không khôn ngoan nếu chưa loại bỏ hết thông tin cá nhân nhạy cảm khỏi dữ liệu. Hay là tôi đang bỏ sót điều gì?
Chính sách sử dụng dữ liệu: https://openai.com/policies/api-data-usage-policies
Chính sách sử dụng dữ liệu theo từng mô hình: https://platform.openai.com/docs/models/how-we-use-your-data
Ngoài việc chỉ xác nhận có cần khóa OpenAI hay không, còn cách nào để biết chi tiết hơn dữ liệu cá nhân được dùng như thế nào không?
README rất khó hiểu
Trong đó nói là dùng tokenizer GPT-2 và dùng GPT-2 làm mô hình embedding, nhưng nhìn vào code thì có vẻ mặc định đang dùng
OpenAIEmbeddingscủa LangChain và OpenAI LLMChẳng phải lần lượt là text-embedding-ada-002 và text-davinci-003 sao?
Tôi hoàn toàn không hiểu GPT-2 liên quan gì ở đây
GPT-2 chỉ được dùng để tính độ dài token một cách hiệu quả trong quá trình token hóa
Có công ty nào cung cấp thứ này dưới dạng bản hosted không?
Tôi khá muốn có một AI nhỏ mà có thể nạp toàn bộ dữ liệu của tôi vào rồi đặt câu hỏi
Cũng có các tính năng tiện lợi như tích hợp với Google Drive, video YouTube, v.v.
Có hơn 50 nghìn người dùng hoạt động hằng ngày
Tôi không hiểu. GPT-2 là một trong số ít mô hình công khai của OpenAI nên có thể chạy cục bộ ngay, vậy tại sao lại dùng API cho mục đích này?
https://github.com/openai/gpt-2
Đang dùng
from langchain.embeddings import OpenAIEmbeddings, và đây là API embedding của OpenAI là text-embedding-ada-002Phần duy nhất dùng GPT-2 là
GPT2TokenizerFast.from_pretrained("gpt2"), được dùng làm hàm độ dài để đếm số token trong tiện íchRecursiveCharacterTextSplitter()của LangChainĐiều này cũng không thật sự hợp lý. Tôi không rõ tại sao lại dùng tokenizer GPT-2 ở đây
Chỉ cần đếm số ký tự hoặc đếm số từ dựa trên
.split()là cũng đủ. Ở đây cách đếm không quá quan trọngGPT-2 chỉ được dùng để tính hiệu quả độ dài token trong quá trình token hóa
README đã được cập nhật để phản ánh chính xác thông tin này
Có phải chỉ mình tôi là người không cần tìm kiếm trên toàn bộ dữ liệu của mình không? Trường hợp sử dụng ở đây là gì?
Ở chỗ làm có một nhóm thảo luận về nhiều chủ đề đầu tư, và người tổ chức có quan hệ rộng nên cố gắng mời diễn giả bên ngoài đến hằng tuần. Khá bổ ích
Tôi có các ghi chú thô của từng buổi nói chuyện, và mục tiêu là xem lại các ghi chú đó rồi hệ thống hóa kiến thức cho đàng hoàng thành dạng wiki hoặc tương tự
Đã 3 năm kể từ khi bắt đầu nhưng tôi vẫn chưa thu xếp được thời gian, và thực tế thì có lẽ sau này cũng khó làm được
Muốn tìm thông tin trong các ghi chú đó thì có thể dùng tìm kiếm văn bản, nhưng nó quá nhạy với chuỗi tìm kiếm nên thường không tìm ra điều tôi muốn
Nếu thông tin nằm rải rác ở nhiều tệp thì còn phải mở tất cả kết quả tìm kiếm ra để rà lại
Với công nghệ kiểu này, có thể đưa toàn bộ ghi chú vào vector DB rồi hỏi những gì cần bằng ngôn ngữ tự nhiên
Hệ thống cục bộ sẽ diễn giải câu hỏi, tìm các tài liệu liên quan nhất trong DB, rồi gửi câu hỏi và kết quả truy xuất cho OpenAI để nó diễn giải câu hỏi và tìm câu trả lời trong ghi chú
Trước đây tôi từng làm một bản proof of concept bằng LangChain và nó hoạt động. Có lần nó ghép thông tin nằm rải ở hai bài nói chuyện khác nhau để đưa ra câu trả lời, và đó đúng là một khoảnh khắc “à ha”
Điều tôi băn khoăn là có quá nhiều tham số có thể tinh chỉnh, mà tôi vẫn chưa nghĩ ra cách hay thước đo nào để đánh giá hiệu năng hệ thống. Nếu ai có lời khuyên thì rất tốt
Các ghi chú này không có dữ liệu cá nhân nên không có vấn đề về quyền riêng tư
Tôi cũng từng muốn thiết lập thứ tương tự cho hơn 20 năm email của mình, nhưng vì quyền riêng tư nên chưa làm. Hơn nữa tôi dùng notmuch làm trình lập chỉ mục email nên nhu cầu AI cũng không lớn đến vậy
Nhưng với các ghi chú không mang tính cá nhân khác, nếu có thể làm cho hệ thống này hoạt động thật tốt thì nó có thể là cứu tinh
Tôi đã tạo ra quá nhiều ghi chú về đủ loại chủ đề suốt nhiều năm, và việc không cần sắp xếp chúng cho ngay ngắn có giá trị quy đổi ra tiền thật
Cứ để tôi ghi chú, rồi để AI tìm thứ tôi cần là được
Đôi khi bạn biết dữ liệu ở đâu nhưng nó quá nhiều, còn thứ bạn cần chỉ là một lời giải thích nhanh về điều gì đó
Đôi khi bạn có rất nhiều dữ liệu từ nhiều nguồn, và điều cuối cùng bạn muốn là bản tóm tắt về điểm mà phần lớn hoặc tất cả đều đồng ý, hoặc bản tóm tắt về việc chúng khác nhau như thế nào
Có rất nhiều trường hợp sử dụng, và tôi nghĩ vì chúng ta đã quen với cách hiện tại để xử lý các việc như thế này nên thường sẽ không có khoảnh khắc “bóng đèn bật sáng” về tính hữu dụng cho đến khi tự mình đào sâu và thấy được khả năng của nó
Phạm vi khá rộng. Cá nhân tôi cũng đang làm một dự án là một biến thể của ý tưởng này: đưa vào nhiều năm ghi chú cá nhân và nhật ký rồi truy vấn để phục vụ tự phản tư và phát triển cá nhân
Tôi nghĩ toàn bộ lĩnh vực này có rất nhiều tiềm năng
Có ai biết Milvus, Quickwit và Pinecone được so sánh với nhau như thế nào không?
Tôi đang nghĩ xem có cơ hội tư vấn về LLM, fine-tuning/tìm kiếm vector và chatbot cho các doanh nghiệp địa phương hay không
Tôi cũng muốn làm một công cụ cho phép kéo thả tệp để dễ dàng có được suy luận cá nhân hóa
Gần đây tôi thấy https://gpt-trainer.com/ trên feed LinkedIn, và cũng đã thấy vài cái khác dành cho tài liệu
https://www.explainpaper.com/
https://www.konjer.xyz/
Tôi không muốn cạnh tranh về giá
Phục vụ một LLM mã nguồn mở cục bộ trên 3090 cũng sẽ khá ngầu, nhưng sẽ không có khả năng mở rộng
Mọi người đã thấy startup fine-tuning hay ngữ cảnh tìm kiếm vector nào khác chưa?
Có lẽ sự khác biệt về embedding sẽ được cảm nhận rõ hơn ở việc dùng gì để tạo embedding hơn là ở lựa chọn lưu trữ/tìm kiếm
Ví dụ như dùng các thứ ở đây https://news.ycombinator.com/item?id=36649579 thay vì OpenAI embeddings API
Ngoài hiệu năng ở quy mô lớn, chi phí, sở thích cá nhân hay trải nghiệm lập trình viên, tôi không nghĩ ra khác biệt nào đáng kể giữa các lựa chọn thay thế về lưu trữ/tìm kiếm embedding
Tôi mới nghe về Quickwit lần đầu; lướt nhanh trang web thì nó không giống vector store, nên có lẽ ít liên quan hơn
Với các công cụ tạo ChatGPT tùy biến, bạn có thể xem danh sách của tôi: https://llm-utils.org/List+of+tools+for+making+a+%22ChatGPT+...
Về fine-tuning dưới dạng dịch vụ thì có Lamini AI nhắm đến doanh nghiệp
Một startup embedding khác là Weaviate
Tôi nghĩ Milvus, Quickwit và Pinecone phù hợp với doanh nghiệp hơn và khó dùng hơn
Có các mô hình embedding cục bộ nhanh hơn và chính xác hơn, vậy tôi không hiểu tại sao lại phụ thuộc vào OpenAI
Tôi đang làm ở một công ty đóng vai trò lớp bảo mật giữa dữ liệu doanh nghiệp nhạy cảm và LLM
Dù mô hình là HF, ChatGPT hay Bard, và dù đầu vào là dữ liệu hội thoại, PDF hay knowledge base như Notion cũng không quan trọng
Chúng tôi ẩn dữ liệu nhạy cảm để ngăn việc sử dụng rủi ro, đồng thời cũng kiểm chứng tính xác thực
Nếu bạn đang tìm thứ theo hướng này, tôi có thể giới thiệu. tothepoint.tech