1 คะแนน โดย GN⁺ 2023-07-10 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • เป็นเครื่องมือสำหรับจัดทำดัชนีและสืบค้นเอกสาร PDF โดยใช้ OpenAI embeddings และ FAISS เพื่อสร้างระบบ RAG ที่สามารถสนทนากับเอกสาร PDF ได้
  • ดึงข้อความจากโฟลเดอร์ PDF แล้วแบ่งเป็นชังก์ขนาด 1000 อักขระ โดยมีส่วนซ้อนทับ 200 อักขระ จากนั้นสร้าง embedding ด้วยโมเดล OpenAI text-embedding-ada-002 และบันทึกไว้ใน FAISS index แบบโลคัล
  • ในขั้นตอนการสืบค้น จะโหลดดัชนีเวกเตอร์ FAISS ที่บันทึกไว้ แปลงคำถามเป็น embedding แล้วค้นหาชังก์เอกสาร 3 อันดับแรกที่มีความคล้ายสูงสุด พร้อมแสดงคะแนนความคล้ายและข้อความตัวอย่าง
  • การสร้างคำตอบใช้ GPT-4 สังเคราะห์คำตอบที่สอดคล้องกันโดยอิงจากบริบทที่ค้นคืนมา
  • สามารถเก็บ embedding ไว้ในเครื่องได้ จึงไม่จำเป็นต้องสร้าง embedding ใหม่ทุกครั้งที่สืบค้น และหลังจากสร้างครั้งแรกแล้วก็สามารถสืบค้นข้อมูลได้โดยไม่ต้องเชื่อมต่ออินเทอร์เน็ตกับ OpenAI โดยจะเรียก API เฉพาะตอนสร้างคำตอบเท่านั้น
  • ขั้นตอนการใช้งานหลักคือใช้ python indexer.py เพื่อประมวลผล PDF และสร้างฐานข้อมูลเวกเตอร์ แล้วใช้ python chatbot.py เพื่อเริ่มอินเทอร์เฟซถามตอบแบบโต้ตอบ
    • สามารถระบุโฟลเดอร์ PDF และตำแหน่งบันทึกดัชนีผ่านอาร์กิวเมนต์คำสั่งได้
    • จำเป็นต้องรันตัวจัดทำดัชนีใหม่เฉพาะเมื่อมีการเพิ่ม PDF ใหม่เข้าไปในคอลเลกชัน
  • ข้อกำหนดในการใช้งานคือ Python 3.8 ขึ้นไป และ OpenAI API key ซึ่งตั้งค่าได้ผ่านค่า OPENAI_API_KEY ในไฟล์ .env

1 ความคิดเห็น

 
GN⁺ 2023-07-10
ความคิดเห็นจาก Hacker News
  • สิ่งที่น่าหงุดหงิดที่สุดคือแอปแทบทั้งหมดที่ลอกไอเดียแนวนี้ต่างก็ ต้องใช้ OpenAI
    พอได้แล้ว
    ตัวเลือกที่ต้องใช้ OpenAI หรือคลาวด์ควรถูกวางไว้เป็น “การตั้งค่าขั้นสูงที่ทำได้ในทางเทคนิคแต่ค่อนข้างยุ่งยาก” และค่าเริ่มต้นควรไปในทางตรงกันข้าม แบบนั้นจะได้ผู้ใช้มากกว่ามาก
    ผมคิดว่าแอปแบบนี้ควรทำให้ รันแบบโลคัลทั้งหมด เป็นค่าเริ่มต้น และให้เปลี่ยนไปใช้โมเดล Hugging Face ที่ต้องการได้ด้วยการแก้สตริงเพียงตัวเดียวในไฟล์ .toml
    ถ้าจำเป็นต้องใช้ OpenAI จริง ๆ ก็ทำให้เป็นไปได้ผ่านวิธีจัดการคีย์อย่าง Docker secret หรือเชน pass พร้อมกับการเปลี่ยนการตั้งค่า
    ค่าเริ่มต้นควรเป็นโลคัลก่อน และควรประมวลผลในเครื่องให้มากที่สุด แล้วค่อยส่งโทเค็นจำนวนน้อยมากจากพรอมป์ที่รวบรวมแล้วไปยัง OpenAI เฉพาะเมื่อผู้ใช้ต้องการจริง ๆ เท่านั้น

    • แข่งยาก สมมติว่าธุรกิจขนาดเล็กต้องจัดการคำขอแชตบอต 10,000 ครั้ง ตัวเลือกก็คือจ่ายให้ OpenAI ไม่ถึง 50 ดอลลาร์ต่อเดือน หรือจัดการ GPU บนคลาวด์และจ้างวิศวกรแมชชีนเลิร์นนิงจนใช้เงินมากกว่า 1,000 ดอลลาร์ต่อเดือน หรือเอา 4090 ในเครื่องโลคัลไปวางไว้ใต้โต๊ะใครสักคน จ่ายต้นทุนคงที่ 1,500 ดอลลาร์แบบไม่น่าเชื่อถือ
      บริษัทที่ใหญ่กว่านั้นต้องการความสามารถในการขยายระบบ และถึงอย่างนั้นก็ยังแข่งกับราคาของ OpenAI ได้ยาก
      คนที่มีแนวทางแบบผู้ประกอบการอาจตั้งสตาร์ทอัพ OpenLLaMA ที่ให้บริการคิดเงินตามจำนวนคำขอ, fine-tuning และ vector storage ได้
    • อยากรู้ว่าถ้าไม่ใช่แค่ทดลองเล่นกับ LLM ตัวอื่น แต่จะเอาไปทำงานที่ใช้งานได้จริง กำลังทำอะไรอยู่
      ตอนนี้พ้นช่วงความว้าวไปแล้ว และผมอยากให้งานเสร็จอย่างมีประสิทธิภาพ
      จากที่ทดสอบมาจนถึงตอนนี้ โมเดลเดียวที่ทำให้งานเดินได้ค่อนข้างเสถียรคือ GPT-4
      ไม่รู้ว่าผมยังไม่เก่งเอง หรือว่ากำลังเป็นการคิดเข้าข้างแบบ HN ว่า LLM ตัวอื่นดีกว่ามากในแง่คุณภาพ ความสม่ำเสมอ และความน่าเชื่อถือที่จำเป็นสำหรับงานจริง
    • ดูเหมือนไม่ได้ทำมาเพื่อออกผลิตภัณฑ์จริง แต่เหมือนอยากเพิ่มบรรทัดหนึ่งในเรซูเม่เพื่อพิสูจน์ว่ามี ประสบการณ์ OpenAI
      เดาว่านี่เป็นผลจากการที่ OpenAI ไม่มีโปรแกรมรับรองของตัวเอง
    • เอา LocalAI ไปต่อกับ https://mudler.pm/posts/smart-slackbot-for-teams/ ก็ไม่ได้เหรอ?
    • “ขยะ” OpenAI ที่ใช้ตรงนี้มีแค่ การสร้าง embedding เท่านั้น
      ตอนนี้ OpenAI มี embedding ที่ทั้งดีและถูกที่สุดตัวหนึ่งสำหรับโปรเจกต์ส่วนตัว
      หลังจากสร้างเวกเตอร์แล้ว ถ้าต้องการก็ออกจากคลาวด์ทั้งหมดได้
      LangChain ได้ abstract จุดที่คนไม่พอใจนั้นไว้แล้ว จึงเปลี่ยนตัวสร้าง embedding ได้ตลอด
      ส่วนที่เหลือก็ใช้ Hugging Face อยู่แล้ว และเปลี่ยนไปใช้โมเดลอื่นนอกจาก GPT-2 ที่รองรับพรอมป์ได้
  • ต้องเก็บข้อมูลไว้เป็นส่วนตัวและไม่ให้รั่วไปยังบุคคลที่สาม ใช้อะไรอย่าง privateGPT ก็ได้ มีดาวบน GitHub 32,000 ดวง
    ถ้าคีย์ไม่ใช่ของผม ข้อมูลก็ไม่ใช่ของผม
    “โต้ตอบกับเอกสารของคุณแบบส่วนตัวด้วยพลังของ GPT, เป็นส่วนตัว 100%, ไม่มีข้อมูลรั่วไหล”[0]
    [0] https://github.com/imartinez/privateGPT

    • มันด้อยกว่าผลิตภัณฑ์ของ OpenAI อยู่มาก และผมเบื่อที่มีคนพูดราวกับว่าโมเดลพวกนี้ทดแทนกันได้อย่างสมบูรณ์แล้ว
      ตอนนี้ยังไม่ใช่
    • อยากรู้ว่ามัน แข็งแกร่ง พอที่จะใส่อีเมลและบันทึกแชตทั้งหมดแล้วคุยกับมันได้หรือไม่
      มันจะดึงบริบทออกมาเพื่อเข้าใจคำถามเกี่ยวกับบันทึกล่าสุดได้ไหม?
    • อยากรู้ว่ามันรันบน Intel Mac เป็นอย่างไร ผมใช้ i9 6 คอร์อยู่
      ยังหาเครื่องซีรีส์ M ไม่ได้ เลยกำลังชั่งใจว่ารันบนสภาพแวดล้อมคลาวด์คอมพิวติงที่มี GPU จะดีกว่าหรือเปล่า
    • ถ้าใช้ร่วมกับ Confluence ได้คงดีมาก
      คือเขียนเอกสารไว้ แล้วแค่ถามคำถามเกี่ยวกับเนื้อหานั้นได้เลย
    • คำว่าเป็นส่วนตัว 100% น่าสงสัยอยู่หน่อย
      ดูจากระดับความหวาดระแวงของผู้มีอำนาจต่อ LLM แบบโลคัลแล้ว ถ้า telemetry ของ Windows รายงานว่าผู้คนทำอะไรกับ LLM โลคัล ผมก็คงไม่แปลกใจเลย
      ใครที่คิดว่าไม่เป็นอย่างนั้น ผมว่าซื่อเกินไป
  • นี่คือการส่งข้อมูลส่วนตัวของผมไปให้ OpenAI ใช่ไหม? นั่นไม่ใช่ปัญหาร้ายแรงเหรอ?
    ดูไม่ฉลาดเลยถ้าไม่ได้ลบข้อมูลส่วนบุคคลที่อ่อนไหวทั้งหมดออกจากข้อมูลก่อน ผมพลาดอะไรไปหรือเปล่า?

    • โดยพื้นฐานแล้ว ข้อมูลที่ส่งผ่าน OpenAI API จะไม่ถูกใช้เพื่อการฝึก และส่วนใหญ่จะถูกลบหลังจากไม่เกิน 30 วัน
      นโยบายการใช้ข้อมูล: https://openai.com/policies/api-data-usage-policies
      นโยบายการใช้ข้อมูลแยกตามโมเดล: https://platform.openai.com/docs/models/how-we-use-your-data
    • ผมก็มีคำถามเดียวกัน
      นอกจากตรวจแค่ว่าต้องใช้คีย์ OpenAI หรือไม่ มีวิธีรู้ให้ละเอียดกว่านี้ไหมว่าข้อมูลส่วนตัวถูกใช้อย่างไร?
  • README ชวนสับสนมาก
    เขียนว่าใช้โทเคไนเซอร์ GPT-2 และใช้ GPT-2 เป็นโมเดล embedding แต่ดูจากโค้ดแล้วเหมือนใช้ LangChain OpenAIEmbeddings ค่าเริ่มต้นกับ OpenAI LLM
    นั่นคือ text-embedding-ada-002 กับ text-davinci-003 ตามลำดับไม่ใช่เหรอ?
    ไม่เข้าใจเลยว่า GPT-2 เข้ามาเกี่ยวตรงไหน

    • โมเดล embedding ที่ใช้คือ text-embedding-ada-002 ซึ่งเป็น embedding ค่าเริ่มต้นของ OpenAI API
      GPT-2 ใช้แค่ในขั้นตอน tokenization เพื่อคำนวณความยาวโทเค็นอย่างมีประสิทธิภาพ
  • มีบริษัทไหนให้บริการแบบนี้ในรูปแบบโฮสต์ไหม?
    อยากได้ AI ตัวเล็ก ๆ ที่ป้อนข้อมูลของผมทั้งหมดเข้าไปแล้วถามคำถามได้มากทีเดียว

    • https://libraria.dev/ ให้บริการฟีเจอร์แบบนี้และมากกว่านั้น
      มีฟีเจอร์อำนวยความสะดวกอย่างการผสานกับ Google Drive, วิดีโอ YouTube เป็นต้นด้วย
    • ถ้าสมัคร ChatGPT Plus ก็ใช้ ChatWithPDF(https://plugins.sdan.io) ได้
      มีผู้ใช้งานรายวันมากกว่า 50,000 คน
    • https://news.ycombinator.com/item?id=36649777
    • https://chatbotkit.com
    • ขึ้นอยู่กับขนาดข้อมูล chiseleditor.com ก็อาจเป็นตัวเลือกฟรีได้เช่นกัน
  • ไม่เข้าใจ GPT-2 เป็นหนึ่งในโมเดลไม่กี่ตัวของ OpenAI ที่เปิดเผยต่อสาธารณะ เลยรันในเครื่องได้ทันที แล้วทำไมถึงใช้ API สำหรับงานนี้?
    https://github.com/openai/gpt-2

    • ไม่ได้ใช้ GPT-2 README เขียนผิด
      ใช้ from langchain.embeddings import OpenAIEmbeddings อยู่ และนี่คือ API embeddings ของ OpenAI คือ text-embedding-ada-002
      ส่วนที่ใช้ GPT-2 มีแค่ GPT2TokenizerFast.from_pretrained("gpt2") เท่านั้น และใช้เป็นฟังก์ชันนับความยาวจำนวนโทเค็นในยูทิลิตี RecursiveCharacterTextSplitter() ของ LangChain
      อันนี้ก็ไม่ค่อยสมเหตุสมผลเหมือนกัน ไม่รู้ว่าทำไมถึงใช้ tokenizer ของ GPT-2 ตรงนี้
      แค่นับจำนวนอักขระ หรือนับจำนวนคำด้วย .split() ก็พอแล้ว วิธีนับตรงนี้ไม่ได้สำคัญมากนัก
    • โมเดล embeddings ที่ใช้คือ text-embedding-ada-002 ซึ่งเป็น embedding พื้นฐานของ OpenAI API
      GPT-2 ใช้แค่เพื่อคำนวณความยาวโทเค็นอย่างมีประสิทธิภาพในกระบวนการ tokenize เท่านั้น
      อัปเดต README ให้สะท้อนข้อมูลนี้อย่างถูกต้องแล้ว
    • คิดว่า GPT-4 น่าจะตอบคำถามได้ดีกว่า GPT-2
  • มีแค่ผมหรือเปล่าที่ไม่จำเป็นต้องค้นหาข้อมูลทั้งหมดของตัวเอง? use case ตรงนี้คืออะไร?

    • ตัวอย่าง use case เป็นแบบนี้
      ที่ทำงานมีกลุ่มที่คุยกันเรื่องการลงทุนหลายหัวข้อ และผู้จัดมีคอนเนกชันดี เลยพยายามพาวิทยากรภายนอกมาทุกสัปดาห์ ค่อนข้างได้ความรู้
      ผมมีโน้ตดิบของแต่ละการบรรยาย เป้าหมายคือไล่ดูโน้ตเหล่านั้นแล้วจัดระเบียบความรู้ให้ดี ๆ เป็นรูปแบบคล้ายวิกิ
      ผ่านมา 3 ปีตั้งแต่เริ่ม แต่ยังไม่มีเวลา และถ้ามองตามความเป็นจริงก็คงมีแนวโน้มว่าจะไม่มีเวลาต่อไป
      ถ้าจะหาข้อมูลจากโน้ตเหล่านั้นก็ใช้การค้นหาข้อความได้ แต่มันไวต่อสตริงค้นหามากเกินไป เลยมักหาไม่เจอสิ่งที่ต้องการ
      ถ้าข้อมูลกระจัดกระจายอยู่หลายไฟล์ ก็ต้องเปิดผลการค้นหาทั้งหมดมาไล่ดู
      ถ้าใช้เทคโนโลยีแบบนี้ ก็ใส่โน้ตทั้งหมดลงใน vector DB แล้วถามสิ่งที่ต้องการด้วยภาษาธรรมชาติได้
      ระบบในเครื่องจะตีความคำถาม ค้นหาเอกสารที่เกี่ยวข้องที่สุดจาก DB แล้วส่งคำถามกับผลการค้นหาไปยัง OpenAI เพื่อให้ตีความคำถามและหาคำตอบในโน้ต
      เคยทำ proof of concept ด้วย LangChain และมันใช้งานได้ ครั้งหนึ่งมีโมเมนต์ “อ๋อ” ตอนที่มันรวมข้อมูลที่กระจายอยู่ในสองการบรรยายต่างกันมาตอบให้
      สิ่งที่กังวลคือมีพารามิเตอร์ให้ปรับได้มากเกินไป และยังคิดวิธีหรือเมตริกสำหรับประเมินประสิทธิภาพของระบบไม่ออก ถ้ามีคำแนะนำก็คงดี
      โน้ตนี้ไม่มีข้อมูลส่วนบุคคล จึงไม่มีปัญหาเรื่องความเป็นส่วนตัว
      เคยอยากตั้งค่าอะไรคล้าย ๆ กันกับอีเมลกว่า 20 ปี แต่ไม่ได้ทำเพราะเรื่องความเป็นส่วนตัว อีกอย่างก็ใช้ mail indexer ชื่อ notmuch อยู่แล้ว เลยไม่ได้จำเป็นต้องใช้ AI มากขนาดนั้น
      แต่สำหรับโน้ตอื่นที่ไม่ใช่ข้อมูลส่วนตัว ถ้าทำให้ระบบนี้ทำงานได้ดีพอ มันอาจเป็นตัวช่วยชีวิตได้เลย
      หลายปีมานี้ผมจดโน้ตไว้หลายหัวข้อมากเกินไป และการไม่ต้องจัดระเบียบให้ดีมีมูลค่าเป็นเงินจริง ๆ
      แค่ให้ผมจดโน้ต แล้วให้ AI ไปหาสิ่งที่ต้องการกลับมาก็พอ
    • บางครั้งมีข้อมูลอยู่ แต่ไม่รู้ว่าอยู่ที่ไหน
      บางครั้งรู้ตำแหน่งข้อมูล แต่มีปริมาณมาก และสิ่งที่ต้องการก็แค่คำอธิบายสั้น ๆ เกี่ยวกับเรื่องใดเรื่องหนึ่ง
      บางครั้งมีข้อมูลจำนวนมากจากหลายแหล่ง และสิ่งที่ต้องการสุดท้ายคือสรุปว่าส่วนใหญ่หรือทั้งหมดเห็นตรงกันว่าอะไร หรือสรุปว่าต่างกันอย่างไร
      use case มีเยอะ และเพราะเราคุ้นเคยกับวิธีเดิม ๆ ในการจัดการงานแบบนี้ ผมคิดว่าความมีประโยชน์มักจะยังไม่เกิดเป็นโมเมนต์แบบ “ไฟติด” จนกว่าจะได้ลงมือขุดดูความเป็นไปได้เอง
      ขอบเขตกว้างพอสมควร โปรเจกต์ที่ผมกำลังทำอยู่ก็เป็นรูปแบบหนึ่งของสิ่งนี้ คือใส่โน้ตส่วนตัวและไดอารี่หลายปีเข้าไป แล้ว query เพื่อ การทบทวนตนเองและการเติบโตส่วนบุคคล
      ผมคิดว่าพื้นที่นี้โดยรวมมีศักยภาพมาก
  • มีใครรู้ไหมว่า Milvus, Quickwit, Pinecone เปรียบเทียบกันอย่างไร?
    กำลังคิดอยู่ว่าจะมีโอกาสให้คำปรึกษาเกี่ยวกับ LLM, การปรับแต่งแบบ fine-tuning/การค้นหาเวกเตอร์, แชตบอต สำหรับธุรกิจท้องถิ่นหรือไม่
    อยากทำเครื่องมือที่แค่ลากไฟล์มาวางก็ได้การอนุมานแบบปรับให้เฉพาะบุคคลได้ง่าย ๆ ด้วย
    ช่วงหลังในฟีด LinkedIn เห็น https://gpt-trainer.com/ โผล่ขึ้นมา และสำหรับงานเอกสารก็เห็นตัวอื่นอีกสองสามตัว
    https://www.explainpaper.com/
    https://www.konjer.xyz/
    ไม่อยากแข่งกันด้านราคา
    การให้บริการ LLM โอเพนซอร์สแบบโลคัลบน 3090 ก็คงเจ๋งดี แต่คงสเกลไม่ได้
    เคยเห็นสตาร์ทอัพด้าน fine-tuning หรือ บริบทการค้นหาเวกเตอร์ อื่น ๆ บ้างไหม?

    • Pinecone กับ Milvus อาจเป็นทางเลือกแทนการใช้ FAISS ในส่วนของ vector store และคอมโพเนนต์ค้นหาได้
      คิดว่าความต่างของ embedding น่าจะรู้สึกได้มากกว่าจากสิ่งที่ใช้สร้าง embedding มากกว่าจากทางเลือกด้านที่เก็บ/การค้นหา
      เช่น ใช้ของในนี้ https://news.ycombinator.com/item?id=36649579 แทน OpenAI embeddings API
      นึกความต่างระหว่างทางเลือกด้านที่เก็บ/การค้นหา embedding ไม่ค่อยออก นอกจากประสิทธิภาพในสเกลใหญ่ ต้นทุน ความชอบส่วนตัว หรือประสบการณ์นักพัฒนา
      Quickwit เพิ่งเคยได้ยินครั้งแรก แต่ดูเว็บคร่าว ๆ แล้วไม่เหมือน vector store และน่าจะเกี่ยวข้องน้อยกว่า
      ถ้าต้องการเครื่องมือสำหรับสร้าง ChatGPT แบบกำหนดเอง ดูลิสต์ของผมได้: https://llm-utils.org/List+of+tools+for+making+a+%22ChatGPT+...
      สำหรับ fine-tuning แบบบริการ มี Lamini AI ที่มุ่งเป้าไปที่องค์กร
      สตาร์ทอัพด้าน embedding อื่น ๆ ก็มี Weaviate
    • กำลังทำ vector DB แบบง่าย ๆ ด้วย numpy ล้วน ๆ: https://github.com/sdan/vlite
      คิดว่า Milvus, Quickwit, Pinecone เหมาะกับองค์กรใหญ่มากกว่าและใช้งานยาก
    • ส่วนตัวคิดว่า qdrant ดีกว่า
  • ไม่เข้าใจว่าทำไมต้องมี dependency กับ OpenAI ในเมื่อมีโมเดล embedding แบบโลคัลที่เร็วกว่าและแม่นยำกว่าด้วย

    • โมเดลไหนบ้าง?
  • ผมทำงานอยู่ที่บริษัทที่ทำหน้าที่เป็น ชั้นความปลอดภัย ระหว่างข้อมูลองค์กรที่ละเอียดอ่อนกับ LLM
    ไม่ว่าโมเดลจะเป็น HF, ChatGPT, Bard หรือสื่อจะเป็นข้อมูลสนทนา, PDF, knowledge base อย่าง Notion ก็ไม่สำคัญ
    เราซ่อนข้อมูลละเอียดอ่อนเพื่อป้องกันการใช้งานที่เสี่ยง และในขณะเดียวกันก็ตรวจสอบข้อเท็จจริงด้วย
    ถ้าสิ่งที่กำลังมองหาเป็นแนวนี้ แนะนำให้ได้ครับ tothepoint.tech