LangChain هو إطار عمل يساعدك على استخدام LM (اللغة الكبيرة) بشكل ملائم.
يشرح LangChain Basic نموذج التعليمات البرمجية لكل تكوين من LangChain.
يصف كيفية تطبيق LangChain على نقطة نهاية SageMaker التي تم إنشاؤها باستخدام Falcon FM. استخدم نقطة نهاية SageMaker (على سبيل المثال، Jumpstart-dft-hf-llm-falcon-7b-instruct-bf16) التي تم الحصول عليها من تثبيت Falcon FM باستخدام SageMaker JumpStart.
بالإشارة إلى مدخلات ومخرجات Falcon، قم بتسجيل تحويل_input وtransform_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" ))
مستندات لانجشين
لانجشين - جيثب
نقاط نهاية SageMaker
2-Lab02-RAG-LLM
ملحقات AWS Kendra Langchain
ضمان الجودة والدردشة عبر المستندات
LangChain - الوحدات النمطية - نماذج اللغة - ماجستير إدارة الأعمال - التكامل - SageMakerEndpoint
LangChain - النظام البيئي - التكامل - نقطة نهاية SageMaker
استيعاب بيانات قاعدة المعرفة في Vector DB