จะรวมตัวแทนและร้านค้าเวกเตอร์ใน LangChain ได้อย่างไร

Ca Rwm Tawthaen Laea Ran Kha Wek Texr Ni Langchain Di Xyangri



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

โครงร่างด่วน

โพสต์นี้จะแสดง:







วิธีใช้ตัวแทนเพื่อส่งคืนเอาต์พุตที่มีโครงสร้างใน LangChain



วิธีที่ 1: การรวมตัวแทนกับร้านค้าเวกเตอร์



วิธีที่ 2: การใช้ Agent เป็นเราเตอร์





วิธีที่ 3: การใช้ตัวแทนกับ Multi-Hop Vector Store

บทสรุป



จะใช้ Agent เพื่อส่งคืนเอาต์พุตที่มีโครงสร้างใน LangChain ได้อย่างไร

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

หากต้องการเรียนรู้ขั้นตอนการรวมตัวแทนและร้านค้าเวกเตอร์ใน LangChain เพียงทำตามขั้นตอนที่ระบุไว้:

ขั้นตอนที่ 1: การติดตั้งกรอบงาน

ขั้นแรก ติดตั้งโมดูล LangChain และการพึ่งพาสำหรับการรวมตัวแทนและร้านค้าเวกเตอร์:

pip ติดตั้ง langchain

ในคู่มือนี้ เราใช้ฐานข้อมูล Chroma ซึ่งสามารถจัดเก็บข้อมูลในตำแหน่งหรือตารางต่างๆ ได้:

pip ติดตั้ง chromadb

เพื่อให้เข้าใจข้อมูลได้ดีขึ้น ให้แบ่งไฟล์ขนาดใหญ่ออกเป็นส่วนเล็กๆ โดยใช้โทเค็น tiktoken:

pip ติดตั้ง tiktoken

OpenAI เป็นโมดูลที่สามารถใช้ในการสร้างโมเดลภาษาขนาดใหญ่ในกรอบงาน LangChain:

pip ติดตั้ง openai

ขั้นตอนที่ 2: สภาพแวดล้อม OpenAI

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

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

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

ตอนนี้ ให้อัปโหลดข้อมูลจากระบบภายในเครื่องไปยังการทำงานร่วมกันของ Google เพื่อนำไปใช้ในอนาคต:

จาก Google. และคณะ นำเข้า ไฟล์

อัปโหลดแล้ว = ไฟล์. ที่อัพโหลด ( )

ขั้นตอนที่ 3: การสร้างร้านค้าเวกเตอร์

ขั้นตอนนี้จะกำหนดค่าองค์ประกอบแรกของงานของเราซึ่งเป็นที่เก็บเวกเตอร์สำหรับจัดเก็บข้อมูลที่อัปโหลด การกำหนดค่าร้านค้าเวกเตอร์ต้องใช้ไลบรารีที่สามารถนำเข้าจากการขึ้นต่อกันที่แตกต่างกันของ LangChain:

จาก แลงเชน การฝัง . เปิดใจ นำเข้า OpenAIEmbeddings

#Vector เก็บการพึ่งพาเพื่อรับฐานข้อมูลหรือเวกเตอร์ที่ต้องการ

จาก แลงเชน ร้านเวกเตอร์ นำเข้า โครมา

#Text splitter ใช้เพื่อแปลงข้อความขนาดใหญ่ให้เป็นชิ้นเล็กๆ

จาก แลงเชน text_splitter นำเข้า CharacterTextSplitter

จาก แลงเชน llms นำเข้า OpenAI

จาก แลงเชน document_loaders นำเข้า WebBaseLoader

จาก แลงเชน ห่วงโซ่ นำเข้า การเรียกค้นQA


llm = OpenAI ( อุณหภูมิ = 0 )

ขั้นตอนที่ 4: การตั้งค่าเส้นทาง

หลังจากการนำเข้าไลบรารี เพียงกำหนดเส้นทางสำหรับการเข้าถึงร้านค้าเวกเตอร์ก่อนที่จะจัดเก็บข้อมูลในนั้น:

จาก พาธลิบ นำเข้า เส้นทาง

ที่เกี่ยวข้อง_ส่วน = [ ]
สำหรับ พี ใน เส้นทาง ( '.' ) . แน่นอน ( ) . ชิ้นส่วน : :
ที่เกี่ยวข้อง_ส่วน ผนวก ( พี )
ถ้า ที่เกี่ยวข้อง_ส่วน [ - - 3 : : ] == [ 'แลงเชน' , 'เอกสาร' , 'โมดูล' ] : :
หยุดพัก
#คำสั่งเงื่อนไขภายในลูปเพื่อกำหนดเส้นทางสำหรับแต่ละฐานข้อมูล
doc_path = STR ( เส้นทาง ( *relevant_parts ) / 'state_of_the_union.txt' )

ขั้นตอนที่ 5: การโหลดและการแยกข้อมูล

ตอนนี้ เพียงโหลดข้อมูลและแบ่งออกเป็นส่วนเล็กๆ เพื่อให้อ่านและเข้าใจได้ดีขึ้น สร้างการฝังข้อมูลโดยแปลงข้อความเป็นตัวเลขเพื่อสร้างปริภูมิเวกเตอร์และจัดเก็บไว้ในฐานข้อมูล Chorma:

จาก แลงเชน document_loaders นำเข้า โปรแกรมโหลดข้อความ

#Loading dataset จากเส้นทางของมันและเก็บชิ้นเล็ก ๆ ไว้ในฐานข้อมูล

ตัวโหลด = โปรแกรมโหลดข้อความ ( doc_path )

เอกสาร = ตัวโหลด โหลด ( )

text_splitter = CharacterTextSplitter ( ชิ้น_ขนาด = 2000 , ชิ้น_ทับซ้อนกัน = 0 )

ข้อความ = text_splitter split_documents ( เอกสาร )

#แปลงข้อความเป็นตัวเลขและจัดเก็บการฝังไว้ในฐานข้อมูล

การฝัง = OpenAIEmbeddings ( )

ค้นหาเอกสาร = โครมา จาก_เอกสาร ( ข้อความ , การฝัง , คอลเลกชัน_ชื่อ = 'สถานะของสหภาพ' )

ขั้นตอนที่ 6: การสร้างรีทรีฟเวอร์

หากต้องการรวมร้านค้าตัวแทนและเวกเตอร์ จำเป็นต้องสร้างรีทรีฟเวอร์โดยใช้วิธีดึงข้อมูลQA() จากเฟรมเวิร์ก LangChain แนะนำให้ใช้วิธีการดึงข้อมูลนี้เพื่อรับข้อมูลจากร้านค้าเวกเตอร์โดยใช้เอเจนต์เป็นเครื่องมือสำหรับการทำงานกับฐานข้อมูล:

state_of_union = การเรียกค้นQA. จาก_chain_type (

llm = llm , chain_type = 'สิ่งของ' , รีทรีฟเวอร์ = ค้นหาเอกสาร as_retriever ( )

)

โหลดชุดข้อมูลอื่นเพื่อรวมเอเจนต์เข้ากับชุดข้อมูลหรือร้านค้าเวกเตอร์หลายชุด:

ตัวโหลด = WebBaseLoader ( 'https://beta.ruff.rs/docs/faq/' )

เก็บชุดข้อมูล ruff ไว้ใน chromadb หลังจากสร้างข้อมูลชิ้นเล็กๆ ด้วยเวกเตอร์ที่ฝังไว้เช่นกัน:

เอกสาร = ตัวโหลด โหลด ( )
ruff_texts = text_splitter split_documents ( เอกสาร )
ruff_db = โครมา จาก_เอกสาร ( ruff_texts , การฝัง , คอลเลกชัน_ชื่อ = 'สร้อย' )
สร้อย = การเรียกค้นQA. จาก_chain_type (
llm = llm , chain_type = 'สิ่งของ' , รีทรีฟเวอร์ = ruff_db. as_retriever ( )
)

วิธีที่ 1: การรวมตัวแทนกับร้านค้าเวกเตอร์

วิธีแรกของการรวมทั้งตัวแทนและร้านค้าเวกเตอร์เพื่อดึงข้อมูลมีดังต่อไปนี้:

ขั้นตอนที่ 1: กำหนดค่าเครื่องมือ

ตอนนี้เมื่อมีการกำหนดค่าร้านค้าเวกเตอร์แล้ว ให้ก้าวไปสู่การสร้างองค์ประกอบที่สองของกระบวนการของเรา เช่น ตัวแทน หากต้องการสร้างตัวแทนสำหรับกระบวนการ ให้นำเข้าไลบรารีโดยใช้การขึ้นต่อกัน เช่น ตัวแทน เครื่องมือ ฯลฯ

จาก แลงเชน ตัวแทน นำเข้า เตรียมใช้งาน_ตัวแทน
จาก แลงเชน ตัวแทน นำเข้า ประเภทตัวแทน
#รับเครื่องมือจาก LangChain เพื่อสร้างตัวแทน
จาก แลงเชน เครื่องมือ นำเข้า เครื่องมือพื้นฐาน
จาก แลงเชน llms นำเข้า OpenAI
#รับ LLMMathChain จาก chains เพื่อสร้างโมเดลภาษา
จาก แลงเชน ห่วงโซ่ นำเข้า LLMMathChain
จาก แลงเชน สาธารณูปโภค นำเข้า SerpAPIWrapper
จาก แลงเชน ตัวแทน นำเข้า เครื่องมือ

กำหนดค่าเครื่องมือที่จะใช้กับตัวแทนโดยใช้ระบบ QA หรือการดึงข้อมูลที่กำหนดค่าไว้ก่อนหน้านี้ด้วยชื่อและคำอธิบายของเครื่องมือ:

เครื่องมือ = [
เครื่องมือ (
ชื่อ = 'ระบบประกันคุณภาพของรัฐสหภาพ' ,
ฟังก์ชั่น = state_of_union วิ่ง ,
คำอธิบาย = 'ให้คำตอบสำหรับคำถามที่เกี่ยวข้องกับชุดข้อมูลที่โหลดพร้อมอินพุตเป็นคำถามที่มีรูปแบบครบถ้วน' ,
) ,
เครื่องมือ (
ชื่อ = “ระบบประกันคุณภาพรัฟ” ,
ฟังก์ชั่น = สร้อย วิ่ง ,
คำอธิบาย = 'ให้คำตอบสำหรับคำถามเกี่ยวกับ ruff (python linter) โดยมีอินพุตเป็นคำถามที่มีรูปแบบสมบูรณ์' ,
) ,
]

ขั้นตอนที่ 2: เริ่มต้นตัวแทน

เมื่อกำหนดค่าเครื่องมือแล้ว เพียงตั้งค่าเอเจนต์ในอาร์กิวเมนต์ของเมธอด Initializa_agent() ตัวแทนที่เราใช้ที่นี่คือ ZERO_SHOT_REACT_DESCRIPTION พร้อมด้วยเครื่องมือ llm (โมเดลภาษา) และรายละเอียด:

ตัวแทน = เตรียมใช้งาน_ตัวแทน (

เครื่องมือ , llm , ตัวแทน = ประเภทตัวแทน ZERO_SHOT_REACT_DESCRIPTION , รายละเอียด = จริง

)

ขั้นตอนที่ 3: ทดสอบตัวแทน

เพียงดำเนินการเอเจนต์โดยใช้เมธอด run() ที่มีคำถามอยู่ในอาร์กิวเมนต์:

ตัวแทน. วิ่ง (

“ประธานาธิบดีโจ ไบเดน พูดอะไรเกี่ยวกับคันจิบราวน์ในที่อยู่”

)

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

วิธีที่ 2: การใช้ Agent เป็นเราเตอร์

อีกวิธีหนึ่งในการรวมส่วนประกอบทั้งสองคือการใช้ตัวแทนเป็นเราเตอร์ และต่อไปนี้จะอธิบายกระบวนการ:

ขั้นตอนที่ 1: กำหนดค่าเครื่องมือ

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

เครื่องมือ = [
#การกำหนดค่าเครื่องมือที่จำเป็นในการสร้างตัวแทนเพื่อรับข้อมูลจากข้อมูล
เครื่องมือ (
ชื่อ = 'ระบบประกันคุณภาพของรัฐสหภาพ' ,
ฟังก์ชั่น = state_of_union วิ่ง ,
คำอธิบาย = 'ให้คำตอบสำหรับคำถามที่เกี่ยวข้องกับชุดข้อมูลที่โหลดพร้อมอินพุตเป็นคำถามที่สมบูรณ์' ,
return_direct = จริง ,
) ,
เครื่องมือ (
ชื่อ = “ระบบประกันคุณภาพรัฟฟ์” ,
ฟังก์ชั่น = สร้อย วิ่ง ,
คำอธิบาย = 'ให้คำตอบสำหรับคำถามเกี่ยวกับ ruff (python linter) โดยมีข้อมูลเป็นคำถามที่สมบูรณ์' ,
return_direct = จริง ,
) ,
]

ขั้นตอนที่ 2: เริ่มต้นและทดสอบตัวแทน

หลังจากตั้งค่าเครื่องมือแล้ว ให้ตั้งค่าเอเจนต์ซึ่งสามารถใช้เป็นเราเตอร์ได้โดยใช้เมธอด Initialize_agent():

ตัวแทน = เตรียมใช้งาน_ตัวแทน (

เครื่องมือ , llm , ตัวแทน = ประเภทตัวแทน ZERO_SHOT_REACT_DESCRIPTION , รายละเอียด = จริง

)

ทดสอบเอเจนต์โดยตั้งคำถามอินพุตในเมธอด agent.run() โดยดำเนินการคำสั่งต่อไปนี้:

ตัวแทน. วิ่ง (

“ประธานาธิบดีโจ ไบเดน พูดอะไรเกี่ยวกับคันจิบราวน์ในที่อยู่”

)

เอาท์พุต

ภาพหน้าจอเอาต์พุตแสดงว่าตัวแทนเพิ่งส่งคืนคำตอบสำหรับคำถามจากชุดข้อมูลที่แยกโดยระบบ RetreatalQA:

วิธีที่ 3: การใช้ตัวแทนกับ Multi-Hop Vector Store

วิธีที่สามซึ่งนักพัฒนาสามารถรวมทั้งร้านค้าเอเจนต์และเวกเตอร์ได้สำหรับการสืบค้นร้านค้าเวกเตอร์แบบมัลติฮอป ส่วนต่อไปนี้จะอธิบายกระบวนการทั้งหมด:

ขั้นตอนที่ 1: กำหนดค่าเครื่องมือ

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

เครื่องมือ = [
เครื่องมือ (
ชื่อ = 'ระบบประกันคุณภาพของรัฐสหภาพ' ,
ฟังก์ชั่น = state_of_union วิ่ง ,
คำอธิบาย = 'ให้คำตอบสำหรับคำถามที่เกี่ยวข้องกับชุดข้อมูลที่โหลดโดยมีการป้อนข้อมูลเป็นคำถามที่มีรูปแบบครบถ้วน โดยไม่อ้างอิงคำสรรพนามใด ๆ จากการสนทนาครั้งก่อน' ,
) ,
เครื่องมือ (
ชื่อ = “ระบบประกันคุณภาพรัฟฟ์” ,
ฟังก์ชั่น = สร้อย วิ่ง ,
คำอธิบาย = 'ให้คำตอบสำหรับคำถามที่เกี่ยวข้องกับชุดข้อมูลที่โหลดโดยมีการป้อนข้อมูลเป็นคำถามที่มีรูปแบบครบถ้วน โดยไม่อ้างอิงคำสรรพนามใด ๆ จากการสนทนาครั้งก่อน' ,
) ,
]

ขั้นตอนที่ 2: เริ่มต้นและทดสอบตัวแทน

หลังจากนั้น ให้สร้างตัวแปรเอเจนต์โดยใช้เมธอด Initialize_agent() ด้วยชื่อของเอเจนต์:

ตัวแทน = เตรียมใช้งาน_ตัวแทน (

เครื่องมือ , llm , ตัวแทน = ประเภทตัวแทน ZERO_SHOT_REACT_DESCRIPTION , รายละเอียด = จริง

)

รันเอเจนต์โดยใช้คำถามแบบมัลติฮอปที่มีมากกว่าหนึ่งลักษณะหรือคุณลักษณะ เนื่องจากบล็อกโค้ดต่อไปนี้มีคำถามดังกล่าว:

ตัวแทน. วิ่ง (

'ruff ใช้เครื่องมือใดในการรันบนโน้ตบุ๊ก Python และผู้บรรยายคนใดพูดถึงเครื่องมือในที่อยู่ของพวกเขา'

)

เอาท์พุต

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

นั่นคือทั้งหมดที่เกี่ยวกับวิธีการรวมตัวแทนและร้านค้าเวกเตอร์ใน LangChain

บทสรุป

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