LangChain เป็น Framework ที่ช่วยให้คุณใช้ LM (Large Language) ได้อย่างสะดวก
LangChain Basic อธิบายโค้ดตัวอย่างสำหรับการกำหนดค่าแต่ละรายการของ LangChain
อธิบายวิธีใช้ LangChain กับ SageMaker Endpoint ที่สร้างด้วย Falcon FM ใช้ SageMaker Endpoint (เช่น jumpstart-dft-hf-llm-falcon-7b-instruct-bf16) ที่ได้รับจากการติดตั้ง Falcon FM ด้วย SageMaker JumpStart
อ้างถึงอินพุตและเอาต์พุตของ Falcon ให้ลงทะเบียน Transformer_input และ Transformer_Output ของ ContentHandler ดังที่แสดงด้านล่าง
from langchain import PromptTemplate , SagemakerEndpoint
from langchain . llms . sagemaker_endpoint import LLMContentHandler
class ContentHandler ( LLMContentHandler ):
content_type = "application/json"
accepts = "application/json"
def transform_input ( self , prompt : str , model_kwargs : dict ) -> bytes :
input_str = json . dumps ({ 'inputs' : prompt , 'parameters' : model_kwargs })
return input_str . encode ( 'utf-8' )
def transform_output ( self , output : bytes ) -> str :
response_json = json . loads ( output . read (). decode ( "utf-8" ))
return response_json [ 0 ][ "generated_text" ]
ลงทะเบียน llm สำหรับ Sagemaker Endpoint โดยใช้ endpoint_name, aws_region, พารามิเตอร์ และ content_handler ดังที่แสดงด้านล่าง
endpoint_name = 'jumpstart-dft-hf-llm-falcon-7b-instruct-bf16'
aws_region = boto3 . Session (). region_name
parameters = {
"max_new_tokens" : 300
}
content_handler = ContentHandler ()
llm = SagemakerEndpoint (
endpoint_name = endpoint_name ,
region_name = aws_region ,
model_kwargs = parameters ,
content_handler = content_handler
)
คุณสามารถตรวจสอบการทำงานของ llm ได้ดังนี้
llm ( "Tell me a joke" )
ผลลัพธ์ ณ เวลานี้มีดังนี้
I once told a joke to a friend, but it didn't work. He just looked
ตัวโหลดเว็บ - คุณสามารถโหลดหน้าเว็บโดยใช้ langchain
from langchain . document_loaders import WebBaseLoader
from langchain . indexes import VectorstoreIndexCreator
loader = WebBaseLoader ( "https://lilianweng.github.io/posts/2023-06-23-agent/" )
index = VectorstoreIndexCreator (). from_loaders ([ loader ])
หลังจากกำหนดเทมเพลตตามที่แสดงด้านล่าง คุณสามารถกำหนด LLMChain และรันได้ ดู langchain-sagemaker-endpoint-Q&A.ipynb สำหรับรายละเอียด
from langchain import PromptTemplate , LLMChain
template = "Tell me a {adjective} joke about {content}."
prompt = PromptTemplate . from_template ( template )
llm_chain = LLMChain ( prompt = prompt , llm = llm )
outputText = llm_chain . run ( adjective = "funny" , content = "chickens" )
print ( outputText )
ผลลัพธ์ ณ เวลานี้มีดังนี้
Why did the chicken cross the playground? To get to the other slide!
คำถาม/คำตอบสำหรับเอกสารดำเนินการโดยใช้ langchain.chains.question_answering ดู langchain-sagemaker-endpoint-Q&A.ipynb สำหรับรายละเอียด
กำหนดเทมเพลตของพรอมต์
template = """Use the following pieces of context to answer the question at the end.
{context}
Question: {question}
Answer:"""
prompt = PromptTemplate (
template = template , input_variables = [ "context" , "question" ]
)
สร้างเอกสารโดยใช้ langchain.docstore.document
from langchain . docstore . document import Document
example_doc_1 = """
Peter and Elizabeth took a taxi to attend the night party in the city. While in the party, Elizabeth collapsed and was rushed to the hospital.
Since she was diagnosed with a brain injury, the doctor told Peter to stay besides her until she gets well.
Therefore, Peter stayed with her at the hospital for 3 days without leaving.
"""
docs = [
Document (
page_content = example_doc_1 ,
)
]
ตอนนี้ทำคำถาม / คำตอบ
from langchain . chains . question_answering import load_qa_chain
question = "How long was Elizabeth hospitalized?"
chain = load_qa_chain ( prompt = prompt , llm = llm )
output = chain ({ "input_documents" : docs , "question" : question }, return_only_outputs = True )
print ( output )
ผลลัพธ์ ณ เวลานี้มีดังนี้
{'output_text': ' 3 days'}
langchain-sagemaker-endpoint-pdf-summary.ipynb อธิบายวิธีการทำ PDF Summery ด้วย SageMaker Endpoint โดยอิงจาก Falcon FM
ขั้นแรก อ่านไฟล์ PDF ที่จัดเก็บไว้ใน S3 โดยใช้ PyPDF2 แล้วแตกข้อความ
import PyPDF2
from io import BytesIO
sess = sagemaker . Session ()
s3_bucket = sess . default_bucket ()
s3_prefix = 'docs'
s3_file_name = '2016-3series.pdf' # S3의 파일명
s3r = boto3 . resource ( "s3" )
doc = s3r . Object ( s3_bucket , s3_prefix + '/' + s3_file_name )
contents = doc . get ()[ 'Body' ]. read ()
reader = PyPDF2 . PdfReader ( BytesIO ( contents ))
raw_text = []
for page in reader . pages :
raw_text . append ( page . extract_text ())
contents = ' n ' . join ( raw_text )
new_contents = str ( contents ). replace ( " n " , " " )
เนื่องจากเอกสารมีขนาดใหญ่ ให้ใช้ RecursiveCharacterTextSplitter เพื่อแยกออกเป็นชิ้นๆ และบันทึกลงใน Document หลังจากนั้นให้สรุปโดยใช้ load_summarize_chain
from langchain . text_splitter import CharacterTextSplitter
from langchain . text_splitter import RecursiveCharacterTextSplitter
text_splitter = RecursiveCharacterTextSplitter ( chunk_size = 1000 , chunk_overlap = 0 )
texts = text_splitter . split_text ( new_contents )
from langchain . docstore . document import Document
docs = [
Document (
page_content = t
) for t in texts [: 3 ]
]
from langchain . chains . summarize import load_summarize_chain
from langchain . prompts import PromptTemplate
prompt_template = """Write a concise summary of the following:
{text}
CONCISE SUMMARY """
PROMPT = PromptTemplate ( template = prompt_template , input_variables = [ "text" ])
chain = load_summarize_chain ( llm , chain_type = "stuff" , prompt = PROMPT )
summary = chain . run ( docs )
from langchain import Bedrock
from langchain . embeddings import BedrockEmbeddings
llm = Bedrock ()
print ( llm ( "explain GenAI" ))
เอกสาร LangChain
LangChain - github.com
จุดสิ้นสุด SageMaker
2-Lab02-RAG-LLM
ส่วนขยาย AWS Kendra Langchain
QA และแชทผ่านเอกสาร
LangChain - โมดูล - โมเดลภาษา - LLM - บูรณาการ - SageMakerEndpoint
LangChain - ระบบนิเวศ - บูรณาการ - จุดสิ้นสุด SageMaker
นำเข้าข้อมูลฐานความรู้ด้วย Vector DB