โครงร่างด่วน
โพสต์นี้จะแสดง:
วิธีใช้ตัวแทนเพื่อส่งคืนเอาต์พุตที่มีโครงสร้างใน LangChain
- การติดตั้งกรอบงาน
- สภาพแวดล้อม OpenAI
- การสร้างร้านเวกเตอร์
- การกำหนดเส้นทาง
- กำลังโหลดและแยกข้อมูล
- การสร้างรีทรีฟเวอร์
วิธีที่ 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