top of page

How to Build RAG with Llama3 and AWS Bedrock Knowledge Base using LangChain

Updated: May 28

Building a RAG Chatbot in Minutes: Llama3 + Bedrock KB + LangChain

Llama3와 Bedrock KB를 활용한 초간단 RAG 패턴 구현하기

Written by Hyeonmin Kim


When implementing chatbots, the RAG pattern has become essential rather than optional.


To implement the RAG pattern directly, you need to implement a series of processes including vector embedding, vector databases, and document retrieval. However, this process can be challenging without domain knowledge. Today, we'll implement this with minimal effort using just a few clicks and minimal code with Bedrock Knowledge Bases, SageMaker JumpStart, and LangChain.


We will:

  1. Set up Amazon Bedrock Knowledge Bases (referred to as Bedrock KB)

  2. Deploy the newly added Llama3 using JumpStart functionality

  3. Use LangChain to search documents and generate messages


⚠️ Importatn Note: Currently, Bedrock KB functionality is not available in the Seoul region. Therefore, we'll use US East (Virginia). Please make sure to check this.

  1. Data Preparation

When using Bedrock KB, users don't need to directly embed data and store it in a vector database. Simply store data in S3, and KB internally uses embedding models and vector databases to index the data. From the user's perspective, you only need to create S3 and store the desired documents.


Navigate to the S3 console and create an S3 bucket to store documents.

S3 콘솔에서 도큐먼트를 저장할 S3 생성

Upload the desired documents. In this example, we'll upload a Korean version.


Supported data formats are as follows, and each file must not exceed 50MB:

  • Supported Data Formats:

    • Plain text (.txt), Markdown(.md), HyperText Markup Language(.html)

    • Microsoft Word document(.doc/.docx), Comma-separated values(.csv)

    • Microsoft Excel spreadsheet(.xls, .xlsx), Portable Document(.pdf)



  1. Bedrock KB Setup

When setting up Bedrock KB, you can select an embedding model. We'll use Cohere's Embed v3 Multi-Language model, which supports Korean, and Amazon OpenSearch Serverless as the vector database.


Navigate to the Bedrock console, go to the Knowledge Base in the orchestration tab, and create a knowledge base.

Bedrock 콘솔에서 오케스트레이션>지식 기반>지식 기반 생성

Set the knowledge base name.

지식 기반 이름 설정

You need to set the data source name and S3. We'll specify the previously created S3.


For the embedding model, we'll use Cohere's Embed Multilingual v3 model, which supports Korean and has high performance, and OpenSearch Serverless as the vector database for quick creation.


Once all content is complete, create the knowledge base. This process takes several minutes.


Once creation is complete, proceed with synchronization. Now the storage part for the RAG pattern has been implemented.



  1. Llama3 Deployment (SageMaker Jumpstart)

Since Meta has been a SageMaker Model Provider, you can deploy models with just a few clicks using the JumpStart feature. For this model, we'll use the Llama 3 8B Instruct model with g5.2xlarge specifications. You can use models with more parameters or Inferentia types according to your situation.


Access the SageMaker Studio environment and select the JumpStart feature.

SageMaker Studio 환경으로 접속하여 Jumpstart 기능을 선택

Search for the model and navigate to Meta-Llama-3-8B-Instruct.

모델을 검색하여 이동

Select deployment.

배포를 선택

Configure deployment settings and proceed with deployment.

배포 설정 후, 배포 진행


  1. Inference through LangChain

Now let's integrate with LangChain and proceed with QnA using the generated AWS resources.


First, import the necessary libraries. Since LangChain supports SageMaker, you can easily import resources:

from langchain_community.llms.sagemaker_endpoint import SagemakerEndpoint
from langchain_community.llms.sagemaker_endpoint import LLMContentHandler
from langchain_community.retrievers import AmazonKnowledgeBasesRetriever
from langchain_core.prompts import PromptTemplate
from langchain.chains import RetrievalQA
from typing import Dict
import json

Set the previously configured endpoint name and region. AWS-related config must be set, and the reason for entering the region is because we're using the Virginia region instead of the default region:

endpoint_name = "hmkim-llama3"
region_name = "us-east-1"

Set up a handler that configures the format and content type of input/output data when communicating with the SageMaker Endpoint:

class CustomContentHandler(LLMContentHandler):
    content_type = "application/json"
    accepts = "application/json"

    def transform_input(self, prompt: str, model_kwargs: Dict) -> bytes:
        input_str = json.dumps({"inputs": prompt, **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["generated_text"]

The difference from Llama 2 is that the received response is not composed of arrays, so the index part must be removed.


Set up the SageMaker endpoint and configure the model. Use the previously configured handler as the handler:

llm = SagemakerEndpoint(
    endpoint_name=endpoint_name, 
    region_name=region_name,
    model_kwargs={"parameters": {
        "max_new_tokens": 1024,
        "top_p": 0.9,
        "temperature": 0.1,
        "stop": "<|eot_id|>"
    }},
    content_handler=CustomContentHandler(),
)

Declare the retriever. We'll set the created Bedrock Knowledge Bases as the Retriever. Set the ID of the created Bedrock KB:

retriever = AmazonKnowledgeBasesRetriever(
    knowledge_base_id="여기에 Bedrock KB id를 입력해주세요",
    retrieval_config={"vectorSearchConfiguration": {"numberOfResults": 4}},
    region_name="us-east-1"
)

Set a question and pass it to the retriever to test if it brings appropriate data:

question = "길을 가다가 심한 욕을 들어서 명예훼손으로 신고하고싶은데, 가능할까?"
query = question
retriever.get_relevant_documents(query=query)

You can confirm that it brings documents like the following. These are appropriate documents.

[Document(page_content='<개정 1995. 12. 29.>   제308조(사자의 명예훼손) 공연히 허위의    사실을 적시하여 사자의 명예를 훼손한 자   는 2년 이하의 징역이나 금고 또는 500만   원 이하의 벌금에 처한다. <개정 1995.    12. 29.>   제309조(출판물 등에 의한 명예훼손) ①    사람을 비방할 목적으로 신문, 잡지 또는    라디오 기타 출판물에 의하여 제307조제1   항의 죄를 범한 자는 3년 이하의 징역이나    금고 또는 700만원 이하의 벌금에 처한다.    <개정 1995. 12. 29.>     ② 제1항의 방법으로 제307조제2항의    죄를 범한 자는 7년 이하의 징역, 10년 이   하의 자격정지 또는 1천500만원 이하의 벌   금에 처한다. <개정 1995. 12. 29.>   제310조(위법성의 조각) 제307조제1항의    행위가 진실한 사실로서 오로지 공공의 이   익에 관한 때에는 처벌하지 아니한다.   제311조(모욕) 공연히 사람을 모욕한 자는    1년 이하의 징역이나 금고 또는 200만원 이   하의 벌금에 처한다. <개정 1995. 12. 29.>   제312조(고소와 피해자의 의사) ① 제308   조와 제311조의 죄는 고소가 있어야 공소   를 제기할 수 있다. <개정 1995. 12. 29.>     ② 제307조와 제309조의 죄는 피해자의    명시한 의사에 반하여 공소를 제기할 수 없   다.', metadata={'location': {'s3Location': {'uri': 's3://hmkim-bedrock-kb-example/법전.pdf'}, 'type': 'S3'}, 'score': 0.58440983}),
 Document(page_content='이 경우 검사는 송부받은 날부터    90일 이내에 사법경찰관에게 반환하   여야 한다.     [본조신설 2020. 2. 4.]   제245조의6(고소인 등에 대한 송부통지)    사법경찰관은 제245조의5제2호의 경우에   는 그 송부한 날부터 7일 이내에 서면으로    고소인ᆞ고발인ᆞ피해자 또는 그 법정대리   인(피해자가 사망한 경우에는 그 배우자ᆞ        형사소송법   - 215 -   직계친족ᆞ형제자매를 포함한다)에게 사건   을 검사에게 송치하지 아니하는 취지와 그    이유를 통지하여야 한다.     [본조신설 2020. 2. 4.]   제245조의7(고소인 등의 이의신청) ① 제   245조의6의 통지를 받은 사람은 해당 사법   경찰관의 소속 관서의 장에게 이의를 신청   할 수 있다.     ② 사법경찰관은 제1항의 신청이 있는    때에는 지체 없이 검사에게 사건을 송치하   고 관계 서류와 증거물을 송부하여야 하며,    처리결과와 그 이유를 제1항의 신청인에게    통지하여야 한다.     [본조신설 2020. 2. 4.]   제245조의8(재수사요청 등) ① 검사는 제   245조의5제2호의 경우에 사법경찰관이 사   건을 송치하지 아니한 것이 위법 또는 부당   한 때에는 그 이유를 문서로 명시하여 사법   경찰관에게 재수사를 요청할 수 있다.     ② 사법경찰관은 제1항의 요청이 있는    때에는 사건을 재수사하여야 한다.     [본조신설 2020. 2. 4.]', metadata={'location': {'s3Location': {'uri': 's3://hmkim-bedrock-kb-example/법전.pdf'}, 'type': 'S3'}, 'score': 0.53611267}),
 Document(page_content='이 경우 피의자가 이의를 제기하였던 부분   은 읽을 수 있도록 남겨두어야 한다. <개정    2007. 6. 1.>     ③ 피의자가 조서에 대하여 이의나 의견   이 없음을 진술한 때에는 피의자로 하여금    그 취지를 자필로 기재하게 하고 조서에 간   인한 후 기명날인 또는 서명하게 한다. <개   정 2007. 6. 1.>   제244조의2(피의자진술의 영상녹화) ① 피   의자의 진술은 영상녹화할 수 있다. 이 경   우 미리 영상녹화사실을 알려주어야 하며,    조사의 개시부터 종료까지의 전 과정 및 객   관적 정황을 영상녹화하여야 한다.     ② 제1항에 따른 영상녹화가 완료된 때   에는 피의자 또는 변호인 앞에서 지체 없이    그 원본을 봉인하고 피의자로 하여금 기명   날인 또는 서명하게 하여야 한다.     ③ 제2항의 경우에 피의자 또는 변호인   의 요구가 있는 때에는 영상녹화물을 재생   하여 시청하게 하여야 한다. 이 경우 그 내   용에 대하여 이의를 진술하는 때에는 그 취   지를 기재한 서면을 첨부하여야 한다.     [본조신설 2007. 6. 1.]   제244조의3(진술거부권 등의 고지) ① 검   사 또는 사법경찰관은 피의자를 신문하기    전에 다음 각 호의 사항을 알려주어야 한   다.   1. 일체의 진술을 하지 아니하거나 개개   의 질문에 대하여 진술을 하지 아니   할 수 있다는 것   2. 진술을 하지 아니하더라도 불이익을    받지 아니한다는 것   3.', metadata={'location': {'s3Location': {'uri': 's3://hmkim-bedrock-kb-example/법전.pdf'}, 'type': 'S3'}, 'score': 0.5332642}),
 Document(page_content='<개정 1995. 12. 29.>     ③ 전2항의 청구에 응하지 아니한 때에는    그 공판조서를 유죄의 증거로 할 수 없다.   제56조(공판조서의 증명력) 공판기일의 소   송절차로서 공판조서에 기재된 것은 그 조   서만으로써 증명한다.   제56조의2(공판정에서의 속기·녹음 및 영   상녹화) ① 법원은 검사, 피고인 또는 변호   인의 신청이 있는 때에는 특별한 사정이 없   는 한 공판정에서의 심리의 전부 또는 일부   를 속기사로 하여금 속기하게 하거나 녹음   장치 또는 영상녹화장치를 사용하여 녹음    또는 영상녹화(녹음이 포함된 것을 말한다.    이하 같다)하여야 하며, 필요하다고 인정하   는 때에는 직권으로 이를 명할 수 있다.     ② 법원은 속기록ᆞ녹음물 또는 영상녹화   물을 공판조서와 별도로 보관하여야 한다.     ③ 검사, 피고인 또는 변호인은 비용을    부담하고 제2항에 따른 속기록ᆞ녹음물 또   는 영상녹화물의 사본을 청구할 수 있다.     [전문개정 2007. 6. 1.]   제57조(공무원의 서류) ① 공무원이 작성   하는 서류에는 법률에 다른 규정이 없는 때   에는 작성 연월일과 소속공무소를 기재하고    기명날인 또는 서명하여야 한다. <개정    2007. 6. 1.>     ② 서류에는 간인하거나 이에 준하는 조   치를 하여야 한다.', metadata={'location': {'s3Location': {'uri': 's3://hmkim-bedrock-kb-example/법전.pdf'}, 'type': 'S3'}, 'score': 0.52974534})]

Set up the prompt. We assigned the role of a competent lawyer, asked to refer to documents, and set it to answer in Korean without emojis.

When modifying the prompt template, be careful as it follows Llama3's prompt template:

system_template = """You are a competent lawyer. Please answer the question using the documents provided. Always answer without emojis in Korean."""

prompt_template = """<|begin_of_text|><|start_header_id|>system<|end_header_id|>

{system_template}, 문서 : {context}<|eot_id|><|start_header_id|>user<|end_header_id|>

질문: {question}<|eot_id|><|start_header_id|>assistant<|end_header_id|>
"""

prompt = PromptTemplate(
    template=prompt_template, 
    input_variables=["context", "question"],
    partial_variables={"system_template": system_template}
)

Create a Retrieval QA proposal using the created template:

qa = RetrievalQA.from_chain_type(
    llm=llm, 
    retriever=retriever,
    return_source_documents=True,
    chain_type="stuff",
    chain_type_kwargs={"prompt": prompt} 
)

When you proceed with the request and check the response, you can see which documents were referenced and what the answer is:

{'query': '길을 가다가 심한 욕을 들어서 명예훼손으로 신고하고싶은데, 가능할까?',
 'result': '제308조(사자의 명예훼손)에 따르면, 공연히 허위의 사실을 적시하여 사자의 명예를 훼손한 자는 2년 이하의 징역이나 금고 또는 500만 원 이하의 벌금에 처한다.\n\n이 경우, 길을 가다가 심한 욕을 들어서 명예훼손으로 신고하고 싶은 경우, 다음을 고려해야 합니다.\n\n1. 욕설이 허위의 사실인지 확인해야 합니다. 욕설이 허위의 사실이 아니라면, 명예훼손죄가 적용되지 않을 수 있습니다.\n2. 욕설이 공연히 이루어졌는지 확인해야 합니다. 욕설이 공연히 이루어지지 않았다면, 명예훼손죄가 적용되지 않을 수 있습니다.\n3. 피해자의 명시한 의사에 반하여 공소를 제기할 수 없습니다. 피해자가 명시한 의사에 반하여 공소를 제기하면, 공소가 제기되지 않을 수 있습니다.\n\n따라서, 길을 가다가 심한 욕을 들어서 명예훼손으로 신고하고 싶은 경우, 위의 고려 사항을 확인하고, 피해자의 명시한 의사에 반하여 공소를 제기하지 않도록 주의해야 합니다.',
 'source_documents': [Document(page_content='<개정 1995. 12. 29.>   제308조(사자의 명예훼손) 공연히 허위의    사실을 적시하여 사자의 명예를 훼손한 자   는 2년 이하의 징역이나 금고 또는 500만   원 이하의 벌금에 처한다. <개정 1995.    12. 29.>   제309조(출판물 등에 의한 명예훼손) ①    사람을 비방할 목적으로 신문, 잡지 또는    라디오 기타 출판물에 의하여 제307조제1   항의 죄를 범한 자는 3년 이하의 징역이나    금고 또는 700만원 이하의 벌금에 처한다.    <개정 1995. 12. 29.>     ② 제1항의 방법으로 제307조제2항의    죄를 범한 자는 7년 이하의 징역, 10년 이   하의 자격정지 또는 1천500만원 이하의 벌   금에 처한다. <개정 1995. 12. 29.>   제310조(위법성의 조각) 제307조제1항의    행위가 진실한 사실로서 오로지 공공의 이   익에 관한 때에는 처벌하지 아니한다.   제311조(모욕) 공연히 사람을 모욕한 자는    1년 이하의 징역이나 금고 또는 200만원 이   하의 벌금에 처한다. <개정 1995. 12. 29.>   제312조(고소와 피해자의 의사) ① 제308   조와 제311조의 죄는 고소가 있어야 공소   를 제기할 수 있다. <개정 1995. 12. 29.>     ② 제307조와 제309조의 죄는 피해자의    명시한 의사에 반하여 공소를 제기할 수 없   다.', metadata={'location': {'s3Location': {'uri': 's3://hmkim-bedrock-kb-example/법전.pdf'}, 'type': 'S3'}, 'score': 0.58440983}),
  Document(page_content='이 경우 검사는 송부받은 날부터    90일 이내에 사법경찰관에게 반환하   여야 한다.     [본조신설 2020. 2. 4.]   제245조의6(고소인 등에 대한 송부통지)    사법경찰관은 제245조의5제2호의 경우에   는 그 송부한 날부터 7일 이내에 서면으로    고소인ᆞ고발인ᆞ피해자 또는 그 법정대리   인(피해자가 사망한 경우에는 그 배우자ᆞ        형사소송법   - 215 -   직계친족ᆞ형제자매를 포함한다)에게 사건   을 검사에게 송치하지 아니하는 취지와 그    이유를 통지하여야 한다.     [본조신설 2020. 2. 4.]   제245조의7(고소인 등의 이의신청) ① 제   245조의6의 통지를 받은 사람은 해당 사법   경찰관의 소속 관서의 장에게 이의를 신청   할 수 있다.     ② 사법경찰관은 제1항의 신청이 있는    때에는 지체 없이 검사에게 사건을 송치하   고 관계 서류와 증거물을 송부하여야 하며,    처리결과와 그 이유를 제1항의 신청인에게    통지하여야 한다.     [본조신설 2020. 2. 4.]   제245조의8(재수사요청 등) ① 검사는 제   245조의5제2호의 경우에 사법경찰관이 사   건을 송치하지 아니한 것이 위법 또는 부당   한 때에는 그 이유를 문서로 명시하여 사법   경찰관에게 재수사를 요청할 수 있다.     ② 사법경찰관은 제1항의 요청이 있는    때에는 사건을 재수사하여야 한다.     [본조신설 2020. 2. 4.]', metadata={'location': {'s3Location': {'uri': 's3://hmkim-bedrock-kb-example/법전.pdf'}, 'type': 'S3'}, 'score': 0.53611267}),
  Document(page_content='이 경우 피의자가 이의를 제기하였던 부분   은 읽을 수 있도록 남겨두어야 한다. <개정    2007. 6. 1.>     ③ 피의자가 조서에 대하여 이의나 의견   이 없음을 진술한 때에는 피의자로 하여금    그 취지를 자필로 기재하게 하고 조서에 간   인한 후 기명날인 또는 서명하게 한다. <개   정 2007. 6. 1.>   제244조의2(피의자진술의 영상녹화) ① 피   의자의 진술은 영상녹화할 수 있다. 이 경   우 미리 영상녹화사실을 알려주어야 하며,    조사의 개시부터 종료까지의 전 과정 및 객   관적 정황을 영상녹화하여야 한다.     ② 제1항에 따른 영상녹화가 완료된 때   에는 피의자 또는 변호인 앞에서 지체 없이    그 원본을 봉인하고 피의자로 하여금 기명   날인 또는 서명하게 하여야 한다.     ③ 제2항의 경우에 피의자 또는 변호인   의 요구가 있는 때에는 영상녹화물을 재생   하여 시청하게 하여야 한다. 이 경우 그 내   용에 대하여 이의를 진술하는 때에는 그 취   지를 기재한 서면을 첨부하여야 한다.     [본조신설 2007. 6. 1.]   제244조의3(진술거부권 등의 고지) ① 검   사 또는 사법경찰관은 피의자를 신문하기    전에 다음 각 호의 사항을 알려주어야 한   다.   1. 일체의 진술을 하지 아니하거나 개개   의 질문에 대하여 진술을 하지 아니   할 수 있다는 것   2. 진술을 하지 아니하더라도 불이익을    받지 아니한다는 것   3.', metadata={'location': {'s3Location': {'uri': 's3://hmkim-bedrock-kb-example/법전.pdf'}, 'type': 'S3'}, 'score': 0.5332642}),
  Document(page_content='<개정 1995. 12. 29.>     ③ 전2항의 청구에 응하지 아니한 때에는    그 공판조서를 유죄의 증거로 할 수 없다.   제56조(공판조서의 증명력) 공판기일의 소   송절차로서 공판조서에 기재된 것은 그 조   서만으로써 증명한다.   제56조의2(공판정에서의 속기·녹음 및 영   상녹화) ① 법원은 검사, 피고인 또는 변호   인의 신청이 있는 때에는 특별한 사정이 없   는 한 공판정에서의 심리의 전부 또는 일부   를 속기사로 하여금 속기하게 하거나 녹음   장치 또는 영상녹화장치를 사용하여 녹음    또는 영상녹화(녹음이 포함된 것을 말한다.    이하 같다)하여야 하며, 필요하다고 인정하   는 때에는 직권으로 이를 명할 수 있다.     ② 법원은 속기록ᆞ녹음물 또는 영상녹화   물을 공판조서와 별도로 보관하여야 한다.     ③ 검사, 피고인 또는 변호인은 비용을    부담하고 제2항에 따른 속기록ᆞ녹음물 또   는 영상녹화물의 사본을 청구할 수 있다.     [전문개정 2007. 6. 1.]   제57조(공무원의 서류) ① 공무원이 작성   하는 서류에는 법률에 다른 규정이 없는 때   에는 작성 연월일과 소속공무소를 기재하고    기명날인 또는 서명하여야 한다. <개정    2007. 6. 1.>     ② 서류에는 간인하거나 이에 준하는 조   치를 하여야 한다.', metadata={'location': {'s3Location': {'uri': 's3://hmkim-bedrock-kb-example/법전.pdf'}, 'type': 'S3'}, 'score': 0.52974534})]}

Looking at the output answer, you can see very accurate results were produced:

제308조(사자의 명예훼손)에 따르면, 공연히 허위의 사실을 적시하여 사자의 명예를 훼손한 자는 2년 이하의 징역이나 금고 또는 500만 원 이하의 벌금에 처한다.

이 경우, 길을 가다가 심한 욕을 들어서 명예훼손으로 신고하고 싶은 경우, 다음을 고려해야 합니다.

1. 욕설이 허위의 사실인지 확인해야 합니다. 욕설이 허위의 사실이 아니라면, 명예훼손죄가 적용되지 않을 수 있습니다.
2. 욕설이 공연히 이루어졌는지 확인해야 합니다. 욕설이 공연히 이루어지지 않았다면, 명예훼손죄가 적용되지 않을 수 있습니다.
3. 피해자의 명시한 의사에 반하여 공소를 제기할 수 없습니다. 피해자가 명시한 의사에 반하여 공소를 제기하면, 공소가 제기되지 않을 수 있습니다.

따라서, 길을 가다가 심한 욕을 들어서 명예훼손으로 신고하고 싶은 경우, 위의 고려 사항을 확인하고, 피해자의 명시한 의사에 반하여 공소를 제기하지 않도록 주의해야 합니다.

Today, we implemented the RAG pattern with minimal effort using the Llama3 model, Bedrock KB retriever, and LangChain, a framework that helps utilize these tools.


Since no separate domain knowledge is required, it should be easy to utilize even without much specialized knowledge. This concludes our post.

bottom of page