คู่มือนี้จะแสดงขั้นตอนการเพิ่มหน่วยความจำให้กับ chain ที่มีอินพุตหลายตัวใน LangChain
จะเพิ่มหน่วยความจำให้กับ Chain ด้วยอินพุตหลายตัวใน LangChain ได้อย่างไร
สามารถเพิ่มหน่วยความจำลงใน LLM หรือแชทบอทเพื่อจัดเก็บข้อความหรือข้อมูลล่าสุด เพื่อให้โมเดลสามารถเข้าใจบริบทของคำสั่งได้ หากต้องการเรียนรู้กระบวนการเพิ่มหน่วยความจำให้กับ chain ที่มีอินพุตหลายตัวใน LangChain เพียงทำตามขั้นตอนต่อไปนี้:
ขั้นตอนที่ 1: ติดตั้งโมดูล
ขั้นแรก ให้ติดตั้งเฟรมเวิร์ก LangChain เนื่องจากมีการขึ้นต่อกันที่หลากหลายเพื่อสร้างโมเดลภาษา:
pip ติดตั้ง langchain
ติดตั้ง chromadb เพื่อจัดเก็บข้อมูลที่ใช้โดยหน่วยความจำในร้านค้าเวกเตอร์ Chroma:
pip ติดตั้ง chromadb
Tiktoken เป็นโทเค็นที่ใช้ในการสร้างเอกสารขนาดใหญ่ชิ้นเล็กๆ เพื่อให้สามารถจัดการได้อย่างง่ายดาย:
pip ติดตั้ง tiktoken
OpenAI เป็นโมดูลที่สามารถใช้ในการสร้าง chains และ LLM โดยใช้เมธอด OpenAI():
pip ติดตั้ง openai
ขั้นตอนที่ 2: ตั้งค่าสภาพแวดล้อมและอัปโหลดข้อมูล
ขั้นตอนต่อไปหลังจากติดตั้งโมดูลที่จำเป็นทั้งหมดสำหรับกระบวนการนี้คือ การตั้งค่าสภาพแวดล้อม ใช้คีย์ API จากบัญชี OpenAI:
นำเข้า คุณนำเข้า รับผ่าน
คุณ . ประมาณ [ 'OPENAI_API_KEY' ] = รับผ่าน . รับผ่าน ( 'คีย์ OpenAI API:' )
อัปโหลดเอกสารโดยใช้ไลบรารีไฟล์เพื่อสร้างเชนในกรอบงาน LangChain:
จาก Google. และคณะ นำเข้า ไฟล์อัปโหลดแล้ว = ไฟล์. ที่อัพโหลด ( )
ขั้นตอนที่ 3: นำเข้าไลบรารี
เมื่ออัปโหลดเอกสารสำเร็จแล้ว เพียงนำเข้าไลบรารีที่จำเป็นจากโมดูล Langchain:
จาก แลงเชน การฝัง . เปิดใจ นำเข้า OpenAIEmbeddingsจาก แลงเชน การฝัง . เชื่อมโยงกัน นำเข้า CohereEmbeddings
จาก แลงเชน text_splitter นำเข้า CharacterTextSplitter
จาก แลงเชน ร้านเวกเตอร์ . elastic_vector_search นำเข้า ElasticVectorSearch
จาก แลงเชน ร้านเวกเตอร์ นำเข้า โครมา
จาก แลงเชน หมอสโตร์ . เอกสาร นำเข้า เอกสาร
ขั้นตอนที่ 4: การสร้างหน่วยความจำโดยใช้ฐานข้อมูล Chroma
ตอนนี้ ให้เริ่มสร้างพื้นที่เวกเตอร์เพื่อจัดเก็บการฝังและโทเค็นของเอกสารที่อัปโหลดก่อนหน้านี้:
กับ เปิด ( 'state_of_the_union.txt' ) เช่น ฉ:state_of_the_union = ฉ. อ่าน ( )
text_splitter = CharacterTextSplitter ( ชิ้น_ขนาด = 1,000 , ชิ้น_ทับซ้อนกัน = 0 )
ข้อความ = text_splitter split_text ( state_of_the_union )
การฝัง = OpenAIEmbeddings ( )
กำหนดค่าฐานข้อมูล Chroma เพื่อจัดเก็บข้อความและการฝังจากเอกสาร:
ค้นหาเอกสาร = โครมา จาก_ข้อความ (ข้อความ , การฝัง , ข้อมูลเมตา = [ { 'แหล่งที่มา' : ฉัน } สำหรับ ฉัน ใน พิสัย ( เท่านั้น ( ข้อความ ) ) ]
)
ทดสอบหน่วยความจำโดยถามคำสั่งในตัวแปรแบบสอบถาม จากนั้นดำเนินการเมธอดคล้าย ๆ กัน_ค้นหา ():
แบบสอบถาม = “นาโต้ก่อตั้งขึ้นเมื่อใด”เอกสาร = ค้นหาเอกสาร ความคล้ายคลึงกัน_ค้นหา ( แบบสอบถาม )
ขั้นตอนที่ 5: การกำหนดค่าเทมเพลตพร้อมท์
ขั้นตอนนี้อธิบายกระบวนการกำหนดค่าเทมเพลตสำหรับพร้อมท์โดยการนำเข้าไลบรารีต่อไปนี้:
จาก แลงเชน ห่วงโซ่ . คำถาม_คำตอบ นำเข้า load_qa_chainจาก แลงเชน llms นำเข้า OpenAI
จาก แลงเชน แจ้ง นำเข้า พรอมต์เทมเพลต
จาก แลงเชน หน่วยความจำ นำเข้า หน่วยความจำบัฟเฟอร์การสนทนา
หลังจากนั้น เพียงกำหนดค่าเทมเพลตหรือโครงสร้างสำหรับการสืบค้นและรันเชนเมื่อเพิ่มหน่วยความจำให้กับโมเดลแล้ว:
แม่แบบ = '''คุณเป็นนางแบบที่กำลังสนทนากับมนุษย์เมื่อพิจารณาส่วนที่แยกมาจากเอกสารขนาดยาวและคำถาม ให้สร้างคำตอบสุดท้าย
{บริบท}
{ประวัติ}
มนุษย์: {อินพุต}
แชทบอท:'''
พร้อมท์ = พรอมต์เทมเพลต (
input_variables = [ 'ประวัติ' , 'ป้อนข้อมูล' , 'บริบท' ] , แม่แบบ = แม่แบบ
)
หน่วยความจำ = หน่วยความจำบัฟเฟอร์การสนทนา ( หน่วยความจำ_คีย์ = 'ประวัติ' , input_key = 'ป้อนข้อมูล' )
โซ่ = load_qa_chain (
OpenAI ( อุณหภูมิ = 0 ) , chain_type = 'สิ่งของ' , หน่วยความจำ = หน่วยความจำ , พร้อมท์ = พร้อมท์
)
ขั้นตอนที่ 6: การทดสอบหน่วยความจำ
นี่คือเวลาที่จะทดสอบโมเดลโดยการถามคำถามโดยใช้ตัวแปรคิวรี จากนั้นดำเนินการเมธอด chain() ด้วยพารามิเตอร์:
แบบสอบถาม = “นาโต้ก่อตั้งขึ้นเมื่อใด”โซ่ ( { 'อินพุต_เอกสาร' : เอกสาร , 'ป้อนข้อมูล' : สอบถาม } , return_only_outputs = จริง )
พิมพ์ข้อมูลที่เก็บไว้ในหน่วยความจำบัฟเฟอร์เนื่องจากคำตอบที่ได้รับจากโมเดลถูกจัดเก็บไว้ในหน่วยความจำเมื่อเร็วๆ นี้:
พิมพ์ ( โซ่. หน่วยความจำ . กันชน )
นั่นคือทั้งหมดที่เกี่ยวกับการเพิ่มหน่วยความจำให้กับ chain ที่มีอินพุตหลายตัวใน LangChain
บทสรุป
หากต้องการเพิ่มหน่วยความจำให้กับ chain ด้วยอินพุตหลายตัวใน LangChain เพียงติดตั้งโมดูลและ vector store เพื่อจัดเก็บข้อความและการฝัง หลังจากนั้น ให้อัปโหลดข้อมูล/เอกสารจากระบบภายในเครื่อง จากนั้นนำเข้าไลบรารีที่จำเป็นสำหรับการจัดเก็บข้อมูลเพื่อสร้างหน่วยความจำสำหรับ LLM กำหนดค่าเทมเพลตพรอมต์เพื่อจัดเก็บข้อความล่าสุดในหน่วยความจำบัฟเฟอร์ จากนั้นจึงส่งข้อความไปยังห่วงโซ่ คู่มือนี้ได้อธิบายอย่างละเอียดเกี่ยวกับกระบวนการเพิ่มหน่วยความจำให้กับ chain ที่มีอินพุตหลายตัวใน LangChain