วิธีใช้ตัวดึงเอกสารหลักใน LangChain

Withi Chi Taw Dung Xeksar Hlak Ni Langchain



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

โพสต์นี้จะสาธิตกระบวนการใช้ตัวเรียกเอกสารหลักใน LangChain

วิธีใช้ตัวดึงเอกสารหลักใน LangChain

โปรแกรมดึงเอกสารหลักใน LangChain สามารถใช้งานได้โดยการแบ่งเอกสารออกเป็นส่วนเล็กๆ เพื่อไม่ให้สูญเสียความหมายในขณะที่ทำการฝัง เอกสารหลักอาจกล่าวได้ว่าเป็นเอกสารทั้งหมดหรือส่วนที่ใหญ่กว่าซึ่งแยกส่วนที่เล็กกว่าออกมา







หากต้องการเรียนรู้กระบวนการใช้ตัวเรียกเอกสารหลักใน LangChain เพียงอ่านคู่มือนี้:



ขั้นตอนที่ 1: ติดตั้งโมดูล



ขั้นแรก ให้เริ่มใช้ตัวดึงเอกสารหลักโดยการติดตั้งเฟรมเวิร์ก LangChain โดยใช้คำสั่ง pip:





pip ติดตั้ง langchain

ติดตั้งโมดูลฐานข้อมูล Chroma เพื่อบันทึกการฝังเอกสารและดึงข้อมูลจากเอกสาร:



pip ติดตั้ง chromadb

วิธีติดตั้ง tiktoken ซึ่งเป็นโทเค็นที่ได้รับโทเค็นของเอกสารโดยการสร้างชิ้นเล็กๆ:

pip ติดตั้ง tiktoken

รับโมดูล OpenAI โดยดำเนินการคำสั่งต่อไปนี้บนสมุดบันทึก Python เพื่อรับการขึ้นต่อกันและไลบรารี:

pip ติดตั้ง openai

ขั้นตอนที่ 2: ตั้งค่าสภาพแวดล้อมและอัปโหลดข้อมูล

ขั้นตอนต่อไปคือการ ตั้งค่าสภาพแวดล้อม ใช้คีย์ API จากบัญชี OpenAI:

นำเข้า คุณ
นำเข้า รับผ่าน

คุณ . ประมาณ [ 'OPENAI_API_KEY' ] = รับผ่าน . รับผ่าน ( 'คีย์ OpenAI API:' )

ตอนนี้ ให้อัปโหลดเอกสารจากระบบโลคัลหลังจากนำเข้าไลบรารีไฟล์แล้วเรียกเมธอด upload():

จาก Google. และคณะ นำเข้า ไฟล์
อัปโหลดแล้ว = ไฟล์. ที่อัพโหลด ( )

ขั้นตอนที่ 3: นำเข้าไลบรารี

ขั้นตอนต่อไปประกอบด้วยโค้ดสำหรับการนำเข้าไลบรารีที่จำเป็นสำหรับการใช้ตัวเรียกเอกสารหลักโดยใช้เฟรมเวิร์ก LangChain:

จาก แลงเชน ผู้ดึงข้อมูล นำเข้า ParentDocumentRetriever
จาก แลงเชน ร้านเวกเตอร์ นำเข้า โครมา
จาก แลงเชน การฝัง นำเข้า OpenAIEmbeddings
จาก แลงเชน text_splitter นำเข้า RecursiveCharacterTextSplitter
จาก แลงเชน พื้นที่จัดเก็บ นำเข้า ใน MemoryStore
จาก แลงเชน document_loaders นำเข้า โปรแกรมโหลดข้อความ

โหลดเอกสารเพื่อสร้างรีทรีฟเวอร์โดยใช้เมธอด TextLoader() พร้อมพาธของไฟล์:

รถตัก = [
โปรแกรมโหลดข้อความ ( 'ข้อมูล.txt' ) ,
โปรแกรมโหลดข้อความ ( 'state_of_the_union.txt' ) ,
]
เอกสาร = [ ]
สำหรับ ใน รถตัก:

ขั้นตอนที่ 4: การดึงเอกสารที่สมบูรณ์

เมื่อโหลดเอกสาร/ไฟล์ไปยังโมเดลแล้ว เพียงสร้างเอกสารที่ฝังไว้ และจัดเก็บไว้ในร้านค้าเวกเตอร์:

child_splitter = RecursiveCharacterTextSplitter ( ชิ้น_ขนาด = 400 )

ร้านเวกเตอร์ = โครมา (
คอลเลกชัน_ชื่อ = 'เอกสารฉบับเต็ม' ,
embedding_function = OpenAIEmbeddings ( )
)

เก็บ = ใน MemoryStore ( )
รีทรีฟเวอร์ = ParentDocumentRetriever (
ร้านเวกเตอร์ = ร้านเวกเตอร์ ,
docstore = เก็บ ,
child_splitter = child_splitter ,
)

ตอนนี้ให้เรียกใช้เมธอด add_documents() โดยใช้รีทรีฟเวอร์เพื่อรับรีทรีฟเวอร์ไปยังเอกสาร:

รีทรีฟเวอร์ add_documents ( เอกสาร , รหัส = ไม่มี )

รหัสต่อไปนี้แยกการฝังของเอกสารที่ถูกเก็บไว้ในฐานข้อมูลสำหรับไฟล์ที่อัพโหลด:

รายการ ( เก็บ. อัตราผลตอบแทน_keys ( ) )

หลังจากได้รับการฝังเอกสารแล้ว ให้เรียกใช้เมธอดคล้าย ๆ กัน_search() พร้อมกับแบบสอบถามเพื่อรับชิ้นส่วนเล็กๆ จากเอกสาร:

sub_docs = ร้านเวกเตอร์ ความคล้ายคลึงกัน_ค้นหา ( 'ความยุติธรรม เบรเออร์' )

เรียกใช้เมธอด print() เพื่อแสดงส่วนที่เรียกในโค้ดก่อนหน้าตามแบบสอบถาม:

พิมพ์ ( sub_docs [ 0 ] . หน้า_เนื้อหา )

เรียกใช้ฟังก์ชันรีทรีฟเวอร์ () ให้สมบูรณ์เพื่อรับโทเค็นทั้งหมดที่จัดเก็บไว้ในฐานข้อมูลโดยใช้รหัสต่อไปนี้:

ดึงข้อมูล_docs = รีทรีฟเวอร์ get_relevant_documents ( 'ความยุติธรรม เบรเออร์' )

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

เท่านั้น ( ดึงข้อมูล_docs [ 0 ] . หน้า_เนื้อหา )

ขั้นตอนที่ 5: การดึงชิ้นส่วนที่ใหญ่ขึ้น

ขั้นตอนนี้จะไม่ครอบคลุมทั้งเอกสาร อย่างไรก็ตาม จะใช้กระแตที่ใหญ่กว่าจากเอกสารและดึงชิ้นส่วนที่เล็กกว่าออกมา:

parent_splitter = RecursiveCharacterTextSplitter ( ชิ้น_ขนาด = 2000 )
child_splitter = RecursiveCharacterTextSplitter ( ชิ้น_ขนาด = 400 )
ร้านเวกเตอร์ = โครมา ( คอลเลกชัน_ชื่อ = 'แยก_ผู้ปกครอง' , embedding_function = OpenAIEmbeddings ( ) )
เก็บ = ใน MemoryStore ( )

กำหนดค่ารีทรีฟเวอร์เพื่อรับโทเค็นขนาดเล็กจากแหล่งรวมข้อมูลขนาดใหญ่ที่จัดเก็บไว้ใน “ ร้านเวกเตอร์ ' ตัวแปร:

รีทรีฟเวอร์ = ParentDocumentRetriever (
ร้านเวกเตอร์ = ร้านเวกเตอร์ ,
docstore = เก็บ ,
child_splitter = child_splitter ,
parent_splitter = parent_splitter ,
)

โทรหารีทรีฟเวอร์เพื่อรับชิ้นใหญ่จากร้านค้าเวกเตอร์โดยใช้ เอกสาร ตัวแปรในอาร์กิวเมนต์ของฟังก์ชัน:

รีทรีฟเวอร์ add_documents ( เอกสาร )

รับความยาวของเอกสารเหล่านี้จาก เอกสาร ตัวแปรผ่านคำสั่งด้านล่าง:

เท่านั้น ( รายการ ( เก็บ. อัตราผลตอบแทน_keys ( ) ) )

เพียงแค่ได้ชิ้นส่วนที่เล็กกว่าจากชิ้นที่ใหญ่กว่า เนื่องจากภาพหน้าจอก่อนหน้านี้แสดงว่ามีเอกสาร 23 ฉบับที่จัดเก็บไว้ในร้านค้าเวกเตอร์ แบบสอบถามจะใช้เพื่อรับข้อมูลที่เกี่ยวข้องโดยใช้ ความคล้ายคลึงกัน_ค้นหา() วิธีการดึงข้อมูลจากร้านค้าเวกเตอร์:

sub_docs = ร้านเวกเตอร์ ความคล้ายคลึงกัน_ค้นหา ( 'ความยุติธรรม เบรเออร์' )

พิมพ์ชิ้นเล็กๆ โดยใช้แบบสอบถามที่กล่าวถึงในโค้ดก่อนหน้าเพื่อแสดงบนหน้าจอ:

พิมพ์ ( sub_docs [ 0 ] . หน้า_เนื้อหา )

ตอนนี้ ให้ใช้รีทรีฟเวอร์กับชุดข้อมูลทั้งหมดที่จัดเก็บไว้ในฐานข้อมูลโดยใช้แบบสอบถามเป็นอาร์กิวเมนต์ของฟังก์ชัน:

ดึงข้อมูล_docs = รีทรีฟเวอร์ get_relevant_documents ( 'ความยุติธรรม เบรเออร์' )

รับความยาวของชิ้นส่วนทั้งหมดที่สร้างและจัดเก็บไว้ในฐานข้อมูล:

เท่านั้น ( ดึงข้อมูล_docs [ 0 ] . หน้า_เนื้อหา )

เราไม่สามารถแสดงชิ้นส่วนทั้งหมดได้ แต่ชิ้นแรกที่มีหมายเลขดัชนี 0 จะแสดงโดยใช้รหัสต่อไปนี้:

พิมพ์ ( ดึงข้อมูล_docs [ 0 ] . หน้า_เนื้อหา

นั่นคือทั้งหมดที่เกี่ยวกับกระบวนการใช้ตัวดึงเอกสารหลักใน LangChain

บทสรุป

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