Today, I will

[Rag, OpenAI] 웹로더 기반 크롤링 챗봇 구축하기 (LangChain + OpenAI + Streamlit) 본문

Computer Science/인공지능,딥러닝

[Rag, OpenAI] 웹로더 기반 크롤링 챗봇 구축하기 (LangChain + OpenAI + Streamlit)

Lv.Forest 2025. 4. 30. 20:50


웹링크와 GPT와 LangChain을 활용해 RAG 기반 대화형 챗봇을 만들어보았습니다.

웹링크를 통해 간단해 웹 단면을 크롤링하고 그에 대한 정보에 대해 물어볼 수 있어 유용합니다.

맛집정보 웹사이트인 http://www.menupan.com/

를 활용해보도록 합니다.

 


📁 1. 주피터 노트북 준비

!pip install beautifulsoup4

 

 

from langchain.prompts import PromptTemplate
from langchain_openai import ChatOpenAI
from langchain_community.document_loaders import WebBaseLoader
from langchain_openai import OpenAIEmbeddings
from langchain_community.vectorstores import FAISS
from langchain.text_splitter import RecursiveCharacterTextSplitter, TextSplitter
from langchain.chains import RetrievalQA, ConversationalRetrievalChain
import os
os.environ["USER_AGENT"] = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) LangChainBot/1.0"

 

url = 'http://www.menupan.com/'
loader =WebBaseLoader(url )
documents = loader.load()
print( documents)

여러 링크를 찾아보고 싶다면...

webloader = WebBaseLoader(urls)
documents = webloader.load()
print(documents)
def clean_newlines(text):
    return ' '.join(text.split())

for doc in documents:
    doc.page_content = clean_newlines(doc.page_content)

 

splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=50)
docs = splitter.split_documents(documents)

embedding = OpenAIEmbeddings(model="text-embedding-ada-002")

vector_db = FAISS.from_documents(docs, embedding)

 

gpt = ChatOpenAI(model='gpt-4o-mini', temperature=-0)
retriever = vector_db.as_retriever()

qa = RetrievalQA.from_chain_type( llm=gpt, chain_type='stuff',
                            retriever=retriever )
query = "문서 내용 요약해 줄래?"
result = qa.invoke( {'query': query})
print( result['result'] )

이 문서는 다양한 맛집 정보를 제공하는 사이트인 메뉴판닷컴에 대한 내용입니다. 일본 라멘, 감자탕, 함박스테이크 등 여러 종류의 맛집을 소개하며, 가족과 함께 가기 좋은 장소와 혼자서도 방문하기 좋은 식당을 추천합니다. 또한, 지역별 맛집 검색, 예약 서비스, 실시간 인기 맛집, 추천 후기, 요리 레시피 등 다양한 기능을 제공하고 있습니다. 고객센터와 개인정보 처리 방침 등의 정보도 포함되어 있습니다.