LangChain — это платформа, которая помогает вам удобно использовать LM (Large Language).
LangChain Basic объясняет пример кода для каждой конфигурации LangChain.
Описывает, как применить LangChain к конечной точке SageMaker, созданной с помощью Falcon FM. Используйте конечную точку SageMaker (например, jumpstart-dft-hf-llm-falcon-7b-instruct-bf16), полученную при установке Falcon FM с помощью SageMaker JumpStart.
Что касается ввода и вывода Falcon, зарегистрируйте Transform_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_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
Лангчейн — github
Конечные точки SageMaker
2-Lab02-RAG-LLM
Расширения AWS Kendra Langchain
Контроль качества и чат по документам
LangChain - Модули - Языковые модели - LLM - Интеграция - SageMakerEndpoint
LangChain — EcoSystem — Интеграция — Конечная точка SageMaker
Прием данных базы знаний в Vector DB