AI

[AI] RAG 활용 챗봇 흐름 및 코드 첨부

hail2y 2025. 4. 28. 19:41

전체 흐름은 다음과 같다.

 

① 문서를 읽는다.

② 문장을 적절히 분할한다.

③ 분할한 문장을 임베딩한다. (숫자로 변경한다)

④ 벡터 DB에 내용을 저장한다.

 

⑤ 언어모델을 생성한다.

⑥ 프롬프트를 작성한다.

⑦ 프롬프트에 필요한 답변을 벡터 DB에서 찾는다.

⑧ 체인을 실행한다.

 

이 흐름대로만 실행해야 하는 것은 아니다. 

https://www.langchain.com/

3. RAG

  • 우리 회사의 문서(pdf, txt, html)를 기반으로 LLM 모델이 답변할 수 있도록 하는 구조
  • db에 있는 내용을 기반으로도 답변 가능 (쿼리를 날려서)

from langchain_community.document_loaders import PyMuPDFLoader

 

loader = PyMuPDFLoader('pdf 이름') 

 

docs = loader.load() # pdf 문서를 읽는다

docs   # Document 객체 배열 반환, 랭체인에서는 하나의 문장을 Document 클래스로 표현

 

# 배열 요소(특정 페이지)의 내용을 확인

 

docs[0].page_content

 

 

# 문맥을 유지하면서 문장을 적절히 분할

text_splitter = RecursiveCharacterTextSplitter.from_language(

    chunk_size = 1000, chunk_overlap = 100, language=Language.MARKDOWN

)

 

splits = text_splitter.split_documents(docs)

 

# 1000개의 chunk 사이즈 문장을 임베딩 해줘야 한다 (숫자로 변경해서 vector db에 저장)

# 분할한 문장을 벡터화해 db에 저장한다

 

embeddings = UpstageEmbeddings(model='solar-embedding-1-large')

vector_store = Chroma(embedding_function=embeddings) # 벡터화할 모델 지정

 

vector_store.add_documents(splits)

 

# db에서 가져오기

# 벡터 db에서 검색한 자료

retriever = vector_store.as_retriever()

retriever.invoke('어떤 키워드')

 

# 체인 생성 (모델에 질문을 날릴 수 있다)

# (1) 언어 모델

llm = ChatUpstage(model='solar-pro')

 

# (2) prompt template 설정

prompt_template = PromptTemplate.from_template(

''' 

아래의 컨텍스트에서 가장 적합한 답변을 작성해 주세요.

만약 관련 정보가 없다면 그냥 모른다고 답변해 주세요.

--- 

질문: {question}

--- 

컨텍스트: {context}

'''

) # 내부 문서로 답변을 하게끔 프롬프트 작성

 

query = "Meta는 AI Agent에 대한 어떤 서비스를 운영하고 있나요?"

context = retriever.invoke(query)

context_docs = context[0].page_content

 

# (5) 체인 실행

chain.invoke({"question": query, "context": context_docs})

print(result)

'AI' 카테고리의 다른 글

[AI] 랭체인 활용 챗봇 코드 첨부  (0) 2025.04.28