ปัญญาประดิษฐ์

LlamaIndex: เพิ่มประสิทธิภาพ LLM Applications ด้วยข้อมูลที่กำหนดเองได้อย่างง่ายดาย

mm
LlamaIndex

โมเดลภาษาขนาดใหญ่ (LLMs) เช่น GPT ของ OpenAI ได้รับการฝึกฝนจากข้อมูลที่หลากหลายและสามารถเข้าถึงได้จากสาธารณะ โดยแสดงให้เห็นถึงความสามารถที่น่าประทับใจในการสร้างข้อความ สรุปคำถาม และวางแผน尽管มีความสามารถที่หลากหลาย แต่คำถามที่ถูกถามบ่อยๆ คือการรวมโมเดลเหล่านี้เข้ากับข้อมูลส่วนบุคคลหรือข้อมูลที่เป็นกรรมสิทธิ์ได้อย่างไร

ธุรกิจและบุคคลมีข้อมูลที่เป็นเอกลักษณ์และข้อมูลส่วนบุคคลซึ่งบ่อยครั้งจะถูกเก็บไว้ในแอปพลิเคชันต่างๆ เช่น Notion, Slack และ Salesforce หรือเก็บไว้ในไฟล์ส่วนบุคคล เพื่อให้ใช้ประโยชน์จาก LLMs สำหรับข้อมูลนี้ วิธีการต่างๆ ได้ถูกเสนอและทดลอง

การปรับแต่ง เป็นวิธีการหนึ่ง ซึ่งเกี่ยวข้องกับการปรับเปลี่ยนน้ำหนักของโมเดลเพื่อรวมความรู้จากชุดข้อมูลเฉพาะ อย่างไรก็ตาม การดำเนินการนี้ไม่ใช่เรื่องง่าย ต้องใช้ความพยายามมากในการเตรียมข้อมูล และกระบวนการปรับให้เหมาะสมที่ยาก ต้องใช้ความเชี่ยวชาญด้านการเรียนรู้ของเครื่องจักร และอาจมีค่าใช้จ่ายสูง โดยเฉพาะอย่างยิ่งเมื่อทำงานกับชุดข้อมูลขนาดใหญ่

การเรียนรู้ในบริบทได้ปรากฏขึ้นเป็นวิธีการทดแทน โดยให้ความสำคัญกับการสร้างอินพุตและคำสั่งให้เหมาะสมเพื่อให้ LLM มีข้อมูลที่จำเป็นในการสร้างอินพุตที่ถูกต้อง วิธีการนี้ช่วยลดความจำเป็นในการฝึกโมเดลใหม่ และให้วิธีการที่มีประสิทธิภาพและเข้าถึงได้ง่ายยิ่งขึ้นในการรวมข้อมูลส่วนบุคคล

แต่ข้อเสียของวิธีนี้คือขึ้นอยู่กับทักษะและความเชี่ยวชาญของผู้ใช้ในการ การออกแบบคำสั่ง นอกจากนี้ การเรียนรู้ในบริบทอาจไม่แม่นยำหรือเชื่อถือได้เสมอไป โดยเฉพาะอย่างยิ่งเมื่อทำงานกับข้อมูลที่มีความเชี่ยวชาญหรือเทคนิคสูง โมเดลที่ได้รับการฝึกฝนจากข้อความบนอินเทอร์เน็ตอาจไม่เข้าใจภาษาเฉพาะหรือบริบทที่เฉพาะเจาะจง ซึ่งอาจนำไปสู่การสร้างอินพุตที่ไม่ถูกต้องหรือไม่เกี่ยวข้อง

นอกจากนี้ จำนวนบริบทที่สามารถให้ได้ในคำสั่งเดียวมีจำกัด และประสิทธิภาพของ LLM อาจลดลงเมื่อความซับซ้อนของงานเพิ่มขึ้น ยังมีความท้าทายด้านความเป็นส่วนตัวและความปลอดภัยของข้อมูล เนื่องจากข้อมูลที่ให้ไว้ในคำสั่งอาจมีความละเอียดอ่อนหรือเป็นข้อมูลที่ต้องรักษาความลับ

ในขณะที่ชุมชนกำลังสำรวจเทคนิคเหล่านี้ เครื่องมืออย่าง LlamaIndex ได้เริ่มได้รับความสนใจ

Llama Index

Llama Index

มันถูกเริ่มต้นโดย Jerry Liu นักวิจัยจาก Uber ในขณะที่ทดลองกับ GPT-3 เมื่อฤดูใบไม้ร่วงปีที่แล้ว Liu สังเกตเห็นข้อจำกัดของโมเดลในการจัดการข้อมูลส่วนบุคคล เช่น ไฟล์ส่วนบุคคล ซึ่งนำไปสู่การเริ่มต้นโครงการ LlamaIndex ที่เปิดให้ใช้งาน

โครงการนี้ได้รับความสนใจจากนักลงทุน และได้รับเงินทุน 8.5 ล้านเหรียญสหรัฐฯ ในรอบการให้ทุนเริ่มต้นล่าสุด

LlamaIndex ช่วยให้ผู้ใช้สามารถเพิ่มประสิทธิภาพ LLMs ด้วยข้อมูลที่กำหนดเองได้อย่างง่ายดาย โดยเชื่อมช่องว่างระหว่างโมเดลที่ได้รับการฝึกฝนแล้วและกรณีการใช้งานข้อมูลที่กำหนดเอง ผู้ใช้สามารถใช้ข้อมูลของตนเองกับ LLMs ได้อย่างราบรื่น ส่งเสริมสภาพแวดล้อมที่การสร้างความรู้และการให้เหตุผลมีความเป็นส่วนตัวและให้ข้อมูลเชิงลึก

ผู้ใช้สามารถให้ LLMs มีข้อมูลของตนเองได้อย่างราบรื่น ส่งเสริมสภาพแวดล้อมที่การสร้างความรู้และการให้เหตุผลมีความเป็นส่วนตัวและให้ข้อมูลเชิงลึก LlamaIndex จัดการกับข้อจำกัดของการเรียนรู้ในบริบทโดยการให้แพลตฟอร์มที่มีความเป็นส่วนตัวและปลอดภัยยิ่งขึ้นสำหรับการโต้ตอบกับข้อมูล โดยทำให้แน่ใจว่าผู้ใช้ที่มีประสบการณ์ด้านการเรียนรู้ของเครื่องจักรที่จำกัดสามารถใช้ประโยชน์จาก LLMs กับข้อมูลส่วนบุคคลได้อย่างเต็มที่

แนวคิดระดับสูงและข้อมูลเชิงลึกบางประการ

1. การสร้างแบบจำลองที่เพิ่มประสิทธิภาพ (RAG):

LlamaIndex RAG

LlamaIndex RAG

RAG เป็นกระบวนการที่มีสองส่วนที่ออกแบบมาเพื่อรวม LLMs กับข้อมูลที่กำหนดเอง โดยเพิ่มความสามารถของโมเดลในการให้คำตอบที่แม่นยำและให้ข้อมูลเชิงลึก กระบวนการนี้ประกอบด้วย:

  • ขั้นตอนการสร้างดัชนี: นี่คือขั้นตอนการเตรียมการ โดยที่พื้นฐานสำหรับการสร้างฐานความรู้ถูกสร้างขึ้น
LlamaIndex INDEXES

LlamaIndex Indexing

  • ขั้นตอนการค้นหา: ที่นี่ ฐานความรู้ถูกค้นหาเพื่อหาข้อมูลที่เกี่ยวข้องเพื่อช่วย LLMs ในการตอบคำถาม
LlamaIndex QUERY STAGE

LlamaIndex Query Stage

การเดินทางด้วย LlamaIndex:

  • ตัวเชื่อมต่อข้อมูล: ตัวเชื่อมต่อข้อมูลคือ “พาสปอร์ต” ของข้อมูลของคุณสู่ LlamaIndex ช่วยให้นำเข้าข้อมูลจากแหล่งต่างๆ และรูปแบบต่างๆ และแปลงเป็น “เอกสาร” ที่เรียบง่าย ตัวเชื่อมต่อข้อมูลสามารถพบได้ใน LlamaHub ซึ่งเป็นที่เก็บข้อมูลที่เปิดให้ใช้งานซึ่งมีตัวโหลดข้อมูลที่ออกแบบมาเพื่อการรวมเข้าด้วยกันอย่างง่ายดาย
LlamaIndex hub

LlamaIndex hub (https://llamahub.ai/)

  • เอกสาร/โหนด: เอกสารคือ “กระเป๋าเดินทาง” ที่สามารถบรรจุประเภทข้อมูลที่หลากหลาย เช่น PDF, ออกพุต API หรือรายการฐานข้อมูล ในทางกลับกัน โหนดคือ “ชิ้นส่วน” ของเอกสารที่มีข้อมูลที่เพิ่มขึ้นและความสัมพันธ์กับโหนดอื่นๆ เพื่อให้แน่ใจว่ามีพื้นฐานที่แข็งแกร่งสำหรับการค้นหาข้อมูลที่แม่นยำในภายหลัง
  • ดัชนีข้อมูล: หลังจากการนำเข้าข้อมูล LlamaIndex ช่วยให้สามารถสร้างดัชนีข้อมูลที่สามารถค้นหาได้ ในเบื้องหลัง มันจะแยกเอกสารที่ไม่ได้ประมวลผลออกเป็นรูปแบบระหว่างกลาง คำนวณการฝังเวกเตอร์ และอนุมานข้อมูลที่เกี่ยวข้อง ในบรรดาดัชนี “VectorStoreIndex” มักเป็นตัวเลือกที่นิยม

ประเภทของดัชนีใน LlamaIndex: กุญแจสู่ข้อมูลที่จัดระเบียบ

LlamaIndex มีดัชนีหลายประเภท แต่ละประเภทมีจุดประสงค์และการใช้งานที่แตกต่างกัน ที่แก่นกลางของดัชนีเหล่านี้คือ “โหนด” ที่กล่าวถึงข้างต้น มาทำความเข้าใจดัชนีของ LlamaIndex และกลไกการทำงานของมันกัน

1. ดัชนีแบบรายการ:

  • กลไก: ดัชนีแบบรายการจัดโหนดเรียงลำดับเหมือนรายการ หลังจากที่ข้อมูลเข้ามาถูกแบ่งออกเป็นโหนดแล้ว โหนดเหล่านั้นจะถูกจัดเรียงในลักษณะเชิงเส้นและพร้อมสำหรับการค้นหาเชิงลำดับหรือผ่านคำค้นหาหรือเวกเตอร์
  • ข้อดี: ประเภทดัชนีนี้มีประโยชน์เมื่อต้องการค้นหาเชิงลำดับ LlamaIndex จะใช้ข้อมูลเข้าของคุณทั้งหมด แม้ว่าจะเกินขีดจำกัดโทเค็นของ LLM ก็ตาม โดยการค้นหาข้อความจากโหนดแต่ละอันและปรับคำตอบเมื่อเลื่อนลงไปในรายการ

2. ดัชนีเวกเตอร์:

  • กลไก: ที่นี่ โหนดจะถูกแปลงเป็นเวกเตอร์ฝังและเก็บไว้ทั้งแบบท้องถิ่นหรือในฐานข้อมูลเวกเตอร์เช่น Milvus เมื่อมีการค้นหา จะดึงโหนดที่คล้ายกันที่สุด top_k มาและส่งไปยังตัวสร้างคำตอบ
  • ข้อดี: หากกระบวนการทำงานของคุณต้องใช้การค้นหาเวกเตอร์สำหรับความคล้ายคลึงทางคำนึงถึงความหมายเชิงคำนึง คุณสามารถใช้ดัชนีนี้

3. ดัชนีแบบต้นไม้:

  • กลไก: ในดัชนีแบบต้นไม้ ข้อมูลเข้าจะพัฒนาเป็นโครงสร้างต้นไม้ โดยสร้างจากโหนดใบ (ชิ้นส่วนข้อมูลเดิม) ขึ้นไปเป็นโหนดพ่อที่สร้างโดยใช้ GPT ในระหว่างการค้นหา ดัชนีแบบต้นไม้สามารถเดินทางจากโหนดรากไปยังโหนดใบหรือสร้างคำตอบโดยตรงจากโหนดใบที่เลือก
  • ข้อดี: ดัชนีแบบต้นไม้ช่วยให้การค้นหาชิ้นส่วนข้อความยาวมีประสิทธิภาพมากขึ้น และทำให้การดึงข้อมูลจากส่วนต่างๆ ของข้อความง่ายขึ้น

4. ดัชนีคำค้นหา:

  • กลไก: ดัชนีคำค้นหาจะสร้างแผนที่คำค้นหาสู่โหนด เมื่อมีการค้นหา คำค้นหาจะถูกดึงออกมาจากคำถาม และโหนดที่ถูกแมปจะถูกนำมาใช้
  • ข้อดี: เมื่อคุณมีคำถามของผู้ใช้ที่ชัดเจน คุณสามารถใช้ดัชนีคำค้นหาได้ ตัวอย่างเช่น การค้นหาเอกสารด้านสุขภาพที่เกี่ยวข้องกับ COVID-19 จะมีประสิทธิภาพมากขึ้น

การติดตั้ง LlamaIndex

การติดตั้ง LlamaIndex เป็นกระบวนการที่ตรงไปตรงมา คุณสามารถเลือกติดตั้งโดยตรงจาก Pip หรือจากแหล่งที่มา (โปรดแน่ใจว่าคุณมี Python ติดตั้งในระบบของคุณหรือคุณสามารถใช้ Google Colab)

1. การติดตั้งจาก Pip:

  • ดำเนินการคำสั่งต่อไปนี้:
    pip install llama-index
  • หมายเหตุ: ในระหว่างการติดตั้ง LlamaIndex อาจดาวน์โหลดและเก็บไฟล์สำหรับแพ็คเกจบางอย่าง เช่น NLTK และ HuggingFace เพื่อกำหนดไดเร็กทอรีสำหรับไฟล์เหล่านี้ คุณสามารถใช้ตัวแปรสิ่งแวดล้อม “LLAMA_INDEX_CACHE_DIR”

2. การติดตั้งจากแหล่งที่มา:

  • ก่อนอื่น ให้โคลนรีポจิทอรี LlamaIndex จาก GitHub:
    git clone https://github.com/jerryjliu/llama_index.git
  • เมื่อโคลนแล้ว ให้เข้าไปในไดเร็กทอรีโครงการ
  • คุณจะต้องใช้ Poetry สำหรับการจัดการความสัมพันธ์ของแพ็คเกจ
  • สร้างสภาพแวดล้อมเสมือนโดยใช้ Poetry:
    poetry shell
  • สุดท้าย ติดตั้งแพ็คเกจหลักโดยใช้:
    poetry install

การตั้งค่าสภาพแวดล้อมของคุณสำหรับ LlamaIndex

1. การกำหนดค่า OpenAI:

  • โดยค่าเริ่มต้น LlamaIndex ใช้ gpt-3.5-turbo ของ OpenAI สำหรับการสร้างข้อความและ text-embedding-ada-002 สำหรับการดึงและฝังเวกเตอร์
  • เพื่อใช้การกำหนดค่านี้ คุณจะต้องมี OPENAI_API_KEY ลงทะเบียนที่เว็บไซต์ของ OpenAI และสร้างโทเค็น API ใหม่
  • คุณมีความยืดหยุ่นในการปรับเปลี่ยนโมเดลภาษาขนาดใหญ่ (LLM) ที่ใช้ตามความต้องการของโครงการของคุณ ขึ้นอยู่กับผู้ให้บริการ LLM ของคุณ คุณอาจต้องใช้โทเค็นและคีย์สิ่งแวดล้อมเพิ่มเติม

2. การกำหนดค่าสภาพแวดล้อมท้องถิ่น:

  • หากคุณไม่ต้องการใช้ OpenAI LlamaIndex จะเปลี่ยนไปใช้โมเดลท้องถิ่นโดยอัตโนมัติ – LlamaCPP และ llama2-chat-13B สำหรับการสร้างข้อความ และ BAAI/bge-small-en สำหรับการดึงและฝังเวกเตอร์
  • เพื่อใช้ LlamaCPP ติดตามคำแนะนำการติดตั้งที่ให้มา ตรวจสอบให้แน่ใจว่าคุณติดตั้งแพ็คเกจ llama-cpp-python ซึ่งควรจะถูก编译เพื่อสนับสนุน GPU ของคุณ การตั้งค่านี้จะใช้หน่วยความจำประมาณ 11.5GB ทั่ว CPU และ GPU
  • สำหรับการฝังเวกเตอร์ท้องถิ่น ให้ดำเนินการ pip install sentence-transformers การตั้งค่าท้องถิ่นนี้จะใช้หน่วยความจำประมาณ 500MB

ด้วยการตั้งค่าเหล่านี้ คุณสามารถปรับแต่งสภาพแวดล้อมของคุณให้ใช้พลังของ OpenAI หรือรันโมเดลท้องถิ่น ซึ่งสอดคล้องกับความต้องการและทรัพยากรของโครงการของคุณ

กรณีการใช้งานง่ายๆ: การค้นหาเว็บเพจด้วย LlamaIndex และ OpenAI

นี่คือสคริปต์ Python ที่เรียบง่ายเพื่อแสดงวิธีการค้นหาเว็บเพจสำหรับข้อมูลเชิงลึกที่เฉพาะเจาะจง:

!pip install llama-index html2text


<p>import os
from llama_index import VectorStoreIndex, SimpleWebPageReader</p>

<p># ใส่คีย์ OpenAI ของคุณด้านล่าง:
os.environ["OPENAI_API_KEY"] = ""</p>

<p># URL ที่คุณต้องการโหลดเข้าสู่เวกเตอร์สโตร์:
url = "http://www.paulgraham.com/fr.html"</p>

<p># โหลด URL เข้าสู่เอกสาร (สามารถโหลดเอกสารหลายๆ ได้)
documents = SimpleWebPageReader(html_to_text=True).load_data([url])</p>

<p># สร้างเวกเตอร์สโตร์จากเอกสาร
index = VectorStoreIndex.from_documents(documents)</p>

<p># สร้างเครื่องมือค้นหาที่คุณสามารถถามคำถามได้:
query_engine = index.as_query_engine()</p>

<p># ถามคำถามที่คุณต้องการกับข้อมูลที่โหลด:
response = query_engine.query("What are the 3 best advise by Paul to raise money?")
print(response)
คำแนะนำที่ดีที่สุด 3 ข้อของ Paul สำหรับการระดมทุนคือ:
1. เริ่มต้นด้วยตัวเลขที่ต่ำเมื่อระดมทุนครั้งแรก สิ่งนี้ช่วยให้คุณมีความยืดหยุ่นและเพิ่มโอกาสในการระดมทุนในระยะยาว
2. มุ่งเป้าไปที่การทำกำไรหากเป็นไปได้ การมีแผนในการทำกำไรโดยไม่พึ่งพาการระดมทุนเพิ่มเติมจะทำให้ธุรกิจของคุณน่าสนใจสำหรับนักลงทุนมากขึ้น
3. อย่าเพิ่มมูลค่าให้กับการระดมทุน การระดมทุนมีความสำคัญ แต่ไม่ใช่ปัจจัยที่สำคัญที่สุดในการระดมทุน ให้ความสำคัญกับการได้รับเงินทุนที่จำเป็นและค้นหานักลงทุนที่ดีแทน
Google Colab Llama Index Notebook

Google Colab Llama Index Notebook

ด้วยสคริปต์นี้ คุณได้สร้างเครื่องมือที่ทรงพลังในการดึงข้อมูลเฉพาะจากเว็บเพจโดยการถามคำถามเพียงเท่านั้น นี่เป็นเพียงภาพรวมเล็กๆ ของสิ่งที่สามารถทำได้ด้วย LlamaIndex และ OpenAI เมื่อค้นหาเว็บเพจ

LlamaIndex เทียบกับ Langchain: การเลือกตามเป้าหมายของคุณ

การเลือกของคุณระหว่าง LlamaIndex และ Langchain จะขึ้นอยู่กับวัตถุประสงค์ของโครงการของคุณ หากคุณต้องการพัฒนาเครื่องมือค้นหาที่ฉลาด LlamaIndex เป็นตัวเลือกที่ดี โดยมีความเชี่ยวชาญในการจัดเก็บข้อมูลที่ชาญฉลาด ในทางกลับกัน หากคุณต้องการสร้างระบบเช่น ChatGPT ที่มีความสามารถในการเชื่อมต่อ Langchain เป็นตัวเลือกของคุณ มันไม่เพียงแต่รองรับหลายๆ ตัวของ ChatGPT และ LlamaIndex แต่ยังขยายฟังก์ชันการทำงานโดยการสร้างตัวแทนหลายงานได้ ตัวอย่างเช่น ด้วย Langchain คุณสามารถสร้างตัวแทนได้ที่สามารถดำเนินการโค้ด Python ในขณะที่ทำการค้นหา Google ได้โดยพร้อมๆ กัน ในสรุป ในขณะที่ LlamaIndex มีความเชี่ยวชาญในการจัดการข้อมูล Langchain จัดการเครื่องมือหลายๆ ชิ้นเพื่อนำเสนอโซลูชันที่ครอบคลุม

ฉันใช้เวลาที่ผ่านมา 5 ปีในการศึกษาสิ่งที่น่าสนใจเกี่ยวกับ Machine Learning และ Deep Learning ความเชี่ยวชาญและความหลงใหลของฉันทำให้ฉันเข้าร่วมในโครงการพัฒนาซอฟต์แวร์มากกว่า 50 โครงการที่มีความหลากหลาย โดยมุ่งเน้นไปที่ AI/ML ความอยากรู้อยากเห็นของฉันยังทำให้ฉันสนใจในด้าน Natural Language Processing ซึ่งเป็นสาขาที่ฉันต้องการสำรวจต่อไป