website-loader

WebBaseLoader

single website

from langchain_community.document_loaders import WebBaseLoader
loader = WebBaseLoader("https://www.espn.com/")
data = loader.load()
data
loader = WebBaseLoader(["https://www.espn.com", "https://google.com"])
docs = loader.load()
docs

Load multiple urls concurrently

%pip install --user -Uq  nest_asyncio
# fixes a bug with asyncio and jupyter
import nest_asyncio

nest_asyncio.apply()
loader = WebBaseLoader(["https://www.espn.com/", "https://google.com"])
loader.requests_per_second = 1
docs = loader.aload()
docs

xml parser

loader = WebBaseLoader(
    "https://www.govinfo.gov/content/pkg/CFR-2018-title10-vol3/xml/CFR-2018-title10-vol3-sec431-86.xml"
)
loader.default_parser = "xml"
docs = loader.load()
docs

sitemap loader

basic sitemap loader

%pip install --user -Uq  nest_asyncio

# fixes a bug with asyncio and jupyter
import nest_asyncio

nest_asyncio.apply()
from langchain_community.document_loaders.sitemap import SitemapLoader
sitemap_loader = SitemapLoader(
    web_path="https://api.python.langchain.com/sitemap.xml")
docs = sitemap_loader.load()
docs[0]
## Filtering sitemap URLs
loader = SitemapLoader(
    web_path="https://api.python.langchain.com/sitemap.xml",
    filter_urls=["https://api.python.langchain.com/en/latest"],
)
documents = loader.load()
documents[0]

Add custom scraping rules

beautifulsoap4 를 사용

%pip install --user  -Uq beautifulsoup4
from bs4 import BeautifulSoup


def remove_nav_and_header_elements(content: BeautifulSoup) -> str:
    # Find all 'nav' and 'header' elements in the BeautifulSoup object
    nav_elements = content.find_all("nav")
    header_elements = content.find_all("header")

    # Remove each 'nav' and 'header' element from the BeautifulSoup object
    for element in nav_elements + header_elements:
        element.decompose()

    return str(content.get_text())

loader = SitemapLoader(
    "https://api.python.langchain.com/sitemap.xml",
    filter_urls=["https://api.python.langchain.com/en/latest/"],
    parsing_function=remove_nav_and_header_elements,
)
docs = loader.load()
docs

Test

Load sitemap

sitemap_loader = SitemapLoader(
    web_path="https://api.python.langchain.com/sitemap.xml",
)
sitemap_loader.requests_per_second = 2

docs = sitemap_loader.load()
docs

filter_url

너무많을때는 filter url을 사용하자

sitemap_loader = SitemapLoader(
    web_path="https://beta.thisisgame.com/sitemap.xml",
    filter_urls=[
        "https://beta.thisisgame.com/articles/265823"
    ],
)

sitemap_loader.requests_per_second = 2

docs = sitemap_loader.load()
docs

[Document(page_content='모바일 MMORPG ‘아케인’ 신규 아바타 6종 및 신규 업데이트 진행게임계 화제인게임 이슈오피니언기획/특집연재/카툰갤러리커뮤니티 로그인로그인작성자: (야토로)|2015-09-25 모바일 MMORPG ‘아케인’ 신규 아바타 6종 및 신규 업데이트 진행㈜엔터메이트(대표 이태현, //www.entermate.com)가 서비스하고 플레이웍스 주식회사(대표 김광열)가 개발한 신작 모바일 MMORPG ‘아케인’이 민족 대명절 추석을 맞아 신규 아바타 및 정예 던전과 함께한가위 기념 이벤트를 24일(수) 함께 업데이트 했다고 밝혔다.먼저, 스페셜 아바타 패키지가 신규로 업데이트되었다. 이번에 추가 된 신규 아바타는 주술신 판토르,만렙 토끼, 페어리 나이트, 파멸자 아케론, 레드후드, 늑대 주술사 등 총 6종의 아바타가 추가되어 게임내에서 만나볼 수 있다. 추가로, 50레벨부터 입장 가능한 비밀전당 정예 던전이 추가되어 강력한 바다르 장비 제작이 가능한 특수 도안을 획득할 수 있다.또한, 민족 대명절 추석을 기념하여 풍성한 이벤트도 함께 준비했다. 첫 번째로, ‘송편 먹거나! 바꾸거나!’ 이벤트를 진행한다. 이벤트 기간 동안 몬스터를 처치하면 송편아이템을 획득할 수 있고, 획득한 송편은 사용 시 특수 버프 효과를 제공하거나, 50개를 모아 이벤트 NPC에게 교환하여 골드 교환이 가능한 쑥송편으로 교환할 수 있다. 두 번째로, 추석 이벤트 기간 동안 골드 2배 획득, 아이템 2배 획득 등의 특별한 버프를 제공하는 이벤트도 함께 진행한다.아케인은 지난 9월 2일 출시 된 신작 모바일 MMORPG로, 리니지, 바람의 나라 등 1세대 PC MMORPG의 향수를 불러일으키는 다양한 요소를 포함한 게임이다. 출시 초반 티스토어 인기 게임 1등, 구글 플레이 스토어 인기 3등 및 매출 순위 20위권에 진입하는 등 상승세를 보이며, 현재도 그 인기를 꾸준히 이어가고 있다.한편, ‘아케인’은 구글 플레이 스토어, 네이버 앱스토어, 이통\xa03사의 통합 마켓 원스토어\xa0등을 통해서 무료로 설치할 수 있으며, 게임과 관련된\xa0보다 자세한 정보는 공식 커뮤니티(//cafe.naver.com/arcanemobile)를 통해서 확인할 수 있다. \xa0이 기사가 마음에 드셨다면 공유해주세요THISISGAME전체 사이트맵제휴사 정보유통 정보TIG 소개이용약관개인정보 취급광고 및 제휴 문의제보하기질문 및 건의㈜디스이즈게임닷컴 | 등록번호: 서울 아 00368 | 등록일자: 2007년 5월 4일 | 제호: 디스이즈게임 | 발행인: 임상훈 | 편집인: 정우철주소: 서울특별시 강남구 테헤란로78길 12, MSA빌딩 12층 | 발행일자: 2005년 3월 14일 | 대표번호: 02)568-7917 | 청소년보호책임자: 김무겸디스이즈게임닷컴의 모든 콘텐츠는 저작권법의 보호를 받으며, 무단 전재, 복사, 배포를 금합니다.© 2024thisisgame.com', metadata={'source': 'https://beta.thisisgame.com/articles/265823', 'loc': 'https://beta.thisisgame.com/articles/265823', 'lastmod': '2015-09-25T01:34:31.000Z', 'changefreq': 'monthly', 'priority': '0.7'})]

사이트맵에서 읽어서 각 페이지를 전부다 문서로 가져온다.

글 수정

이 문서 내용중 뺄건 빼자.

from bs4 import BeautifulSoup

def parse_page(soup):
    header = soup.find("header")
    footer = soup.find("footer")
    if header:
        header.decompose()
    if footer:
        footer.decompose()
    return (
        str(soup.get_text())
        .replace("\n", " ")
        .replace("\xa0", " ")
        .replace("진행게임계 화제인게임 이슈오피니언기획/특집연재/카툰갤러리커뮤니티 로그인로그인","")
    )
sitemap_loader = SitemapLoader(
    web_path="https://beta.thisisgame.com/sitemap.xml",
    filter_urls=[
        "https://beta.thisisgame.com/articles/265823"
    ],
    parsing_function=parse_page,
)

sitemap_loader.requests_per_second = 2

docs = sitemap_loader.load()
docs[0]

Document(page_content='모바일 MMORPG ‘아케인’ 신규 아바타 6종 및 신규 업데이트 진행게임계 화제인게임 이슈오피니언기획/특집연재/카툰갤러리커뮤니티 로그인로그인작성자: (야토로)|2015-09-25 모바일 MMORPG ‘아케인’ 신규 아바타 6종 및 신규 업데이트 진행㈜엔터메이트(대표 이태현, //www.entermate.com)가 서비스하고 플레이웍스 주식회사(대표 김광열)가 개발한 신작 모바일 MMORPG ‘아케인’이 민족 대명절 추석을 맞아 신규 아바타 및 정예 던전과 함께한가위 기념 이벤트를 24일(수) 함께 업데이트 했다고 밝혔다.먼저, 스페셜 아바타 패키지가 신규로 업데이트되었다. 이번에 추가 된 신규 아바타는 주술신 판토르,만렙 토끼, 페어리 나이트, 파멸자 아케론, 레드후드, 늑대 주술사 등 총 6종의 아바타가 추가되어 게임내에서 만나볼 수 있다. 추가로, 50레벨부터 입장 가능한 비밀전당 정예 던전이 추가되어 강력한 바다르 장비 제작이 가능한 특수 도안을 획득할 수 있다.또한, 민족 대명절 추석을 기념하여 풍성한 이벤트도 함께 준비했다. 첫 번째로, ‘송편 먹거나! 바꾸거나!’ 이벤트를 진행한다. 이벤트 기간 동안 몬스터를 처치하면 송편아이템을 획득할 수 있고, 획득한 송편은 사용 시 특수 버프 효과를 제공하거나, 50개를 모아 이벤트 NPC에게 교환하여 골드 교환이 가능한 쑥송편으로 교환할 수 있다. 두 번째로, 추석 이벤트 기간 동안 골드 2배 획득, 아이템 2배 획득 등의 특별한 버프를 제공하는 이벤트도 함께 진행한다.아케인은 지난 9월 2일 출시 된 신작 모바일 MMORPG로, 리니지, 바람의 나라 등 1세대 PC MMORPG의 향수를 불러일으키는 다양한 요소를 포함한 게임이다. 출시 초반 티스토어 인기 게임 1등, 구글 플레이 스토어 인기 3등 및 매출 순위 20위권에 진입하는 등 상승세를 보이며, 현재도 그 인기를 꾸준히 이어가고 있다.한편, ‘아케인’은 구글 플레이 스토어, 네이버 앱스토어, 이통 사의 통합 마켓 원스토어\xa0등을 통해서 무료로 설치할 수 있으며, 게임과 관련된\xa0보다 자세한 정보는 공식 커뮤니티(//cafe.naver.com/arcanemobile)를 통해서 확인할 수 있다. \xa0이 기사가 마음에 드셨다면 공유해주세요', metadata={'source': 'https://beta.thisisgame.com/articles/265823', 'loc': 'https://beta.thisisgame.com/articles/265823', 'lastmod': '2015-09-25T01:34:31.000Z', 'changefreq': 'monthly', 'priority': '0.7'})

Document(page_content='모바일 MMORPG ‘아케인’ 신규 아바타 6종 및 신규 업데이트 진행게임계 화제인게임 이슈오피니언기획/특집연재/카툰갤러리커뮤니티 로그인로그인작성자: (야토로)|2015-09-25 모바일 MMORPG ‘아케인’ 신규 아바타 6종 및 신규 업데이트 진행㈜엔터메이트(대표 이태현, //www.entermate.com)가 서비스하고 플레이웍스 주식회사(대표 김광열)가 개발한 신작 모바일 MMORPG ‘아케인’이 민족 대명절 추석을 맞아 신규 아바타 및 정예 던전과 함께한가위 기념 이벤트를 24일(수) 함께 업데이트 했다고 밝혔다.먼저, 스페셜 아바타 패키지가 신규로 업데이트되었다. 이번에 추가 된 신규 아바타는 주술신 판토르,만렙 토끼, 페어리 나이트, 파멸자 아케론, 레드후드, 늑대 주술사 등 총 6종의 아바타가 추가되어 게임내에서 만나볼 수 있다. 추가로, 50레벨부터 입장 가능한 비밀전당 정예 던전이 추가되어 강력한 바다르 장비 제작이 가능한 특수 도안을 획득할 수 있다.또한, 민족 대명절 추석을 기념하여 풍성한 이벤트도 함께 준비했다. 첫 번째로, ‘송편 먹거나! 바꾸거나!’ 이벤트를 진행한다. 이벤트 기간 동안 몬스터를 처치하면 송편아이템을 획득할 수 있고, 획득한 송편은 사용 시 특수 버프 효과를 제공하거나, 50개를 모아 이벤트 NPC에게 교환하여 골드 교환이 가능한 쑥송편으로 교환할 수 있다. 두 번째로, 추석 이벤트 기간 동안 골드 2배 획득, 아이템 2배 획득 등의 특별한 버프를 제공하는 이벤트도 함께 진행한다.아케인은 지난 9월 2일 출시 된 신작 모바일 MMORPG로, 리니지, 바람의 나라 등 1세대 PC MMORPG의 향수를 불러일으키는 다양한 요소를 포함한 게임이다. 출시 초반 티스토어 인기 게임 1등, 구글 플레이 스토어 인기 3등 및 매출 순위 20위권에 진입하는 등 상승세를 보이며, 현재도 그 인기를 꾸준히 이어가고 있다.한편, ‘아케인’은 구글 플레이 스토어, 네이버 앱스토어, 이통 3사의 통합 마켓 원스토어 등을 통해서 무료로 설치할 수 있으며, 게임과 관련된 보다 자세한 정보는 공식 커뮤니티(//cafe.naver.com/arcanemobile)를 통해서 확인할 수 있다. 이 기사가 마음에 드셨다면 공유해주세요', metadata={'source': 'https://beta.thisisgame.com/articles/265823', 'loc': 'https://beta.thisisgame.com/articles/265823', 'lastmod': '2015-09-25T01:34:31.000Z', 'changefreq': 'monthly', 'priority': '0.7'})

Document(page_content='모바일 MMORPG ‘아케인’ 신규 아바타 6종 및 신규 업데이트 작성자: (야토로)|2015-09-25 모바일 MMORPG ‘아케인’ 신규 아바타 6종 및 신규 업데이트 진행㈜엔터메이트(대표 이태현, //www.entermate.com)가 서비스하고 플레이웍스 주식회사(대표 김광열)가 개발한 신작 모바일 MMORPG ‘아케인’이 민족 대명절 추석을 맞아 신규 아바타 및 정예 던전과 함께한가위 기념 이벤트를 24일(수) 함께 업데이트 했다고 밝혔다.먼저, 스페셜 아바타 패키지가 신규로 업데이트되었다. 이번에 추가 된 신규 아바타는 주술신 판토르,만렙 토끼, 페어리 나이트, 파멸자 아케론, 레드후드, 늑대 주술사 등 총 6종의 아바타가 추가되어 게임내에서 만나볼 수 있다. 추가로, 50레벨부터 입장 가능한 비밀전당 정예 던전이 추가되어 강력한 바다르 장비 제작이 가능한 특수 도안을 획득할 수 있다.또한, 민족 대명절 추석을 기념하여 풍성한 이벤트도 함께 준비했다. 첫 번째로, ‘송편 먹거나! 바꾸거나!’ 이벤트를 진행한다. 이벤트 기간 동안 몬스터를 처치하면 송편아이템을 획득할 수 있고, 획득한 송편은 사용 시 특수 버프 효과를 제공하거나, 50개를 모아 이벤트 NPC에게 교환하여 골드 교환이 가능한 쑥송편으로 교환할 수 있다. 두 번째로, 추석 이벤트 기간 동안 골드 2배 획득, 아이템 2배 획득 등의 특별한 버프를 제공하는 이벤트도 함께 진행한다.아케인은 지난 9월 2일 출시 된 신작 모바일 MMORPG로, 리니지, 바람의 나라 등 1세대 PC MMORPG의 향수를 불러일으키는 다양한 요소를 포함한 게임이다. 출시 초반 티스토어 인기 게임 1등, 구글 플레이 스토어 인기 3등 및 매출 순위 20위권에 진입하는 등 상승세를 보이며, 현재도 그 인기를 꾸준히 이어가고 있다.한편, ‘아케인’은 구글 플레이 스토어, 네이버 앱스토어, 이통 3사의 통합 마켓 원스토어 등을 통해서 무료로 설치할 수 있으며, 게임과 관련된 보다 자세한 정보는 공식 커뮤니티(//cafe.naver.com/arcanemobile)를 통해서 확인할 수 있다. 이 기사가 마음에 드셨다면 공유해주세요', metadata={'source': 'https://beta.thisisgame.com/articles/265823', 'loc': 'https://beta.thisisgame.com/articles/265823', 'lastmod': '2015-09-25T01:34:31.000Z', 'changefreq': 'monthly', 'priority': '0.7'})

문서를 split 하기

tiktoken을 사용하여 문서를 split

from langchain.text_splitter import RecursiveCharacterTextSplitter

splitter = RecursiveCharacterTextSplitter.from_tiktoken_encoder(
    chunk_size=1000,
    chunk_overlap=200,
)

sitemap_loader = SitemapLoader(
    web_path="https://beta.thisisgame.com/sitemap.xml",
    filter_urls=[
        "https://beta.thisisgame.com/articles/2658"
    ],
    parsing_function=parse_page,
)

sitemap_loader.requests_per_second = 2

docs = sitemap_loader.load_and_split(text_splitter=splitter)
docs

56개의 문서가 스크래핑됫음

vector store에 embedding해서 저장( cache also )

캐시도 하면서 embedding도 해서 vector에 저장

%pip install --user -Uq faiss-cpu
#%pip install --user -Uq faiss-gpu

from langchain.vectorstores.faiss import FAISS
from langchain_openai import OpenAIEmbeddings
from langchain.embeddings import CacheBackedEmbeddings
from langchain.storage import LocalFileStore

from dotenv import load_dotenv
load_dotenv()

cache_dir = LocalFileStore("./cache/")
embeddings = OpenAIEmbeddings()

cached_embeddings = CacheBackedEmbeddings.from_bytes_store (embeddings, cache_dir)

vector_store = FAISS.from_documents(docs, cached_embeddings)

retriver = vector_store.as_retriever()

docs = retriver.invoke("추석")
docs

Chain (vector store에서 검색하고 그걸 llm으로 보내기)

이제 문서를 전부다 보내자.

이제 이 파일을 전부 llm을 보내거나

map reduce를 써서 lla에 각페이질르 보내고 답변을 받은후 이 답변을 마지막으로 llm으로 보내면 된다.


from langchain.prompts import ChatPromptTemplate

prompt = ChatPromptTemplate.from_messages(
    [
        ("system",
         """
         You are a helpful AI talking to a human, Answer questions using only the following context.
         If you don't know the answer just say you don't know, don't make it up:
         {context}
         """),
        ("human", "{question}"),
    ]
)

from langchain_openai import ChatOpenAI
llm = ChatOpenAI(
  temperature = 0.1,
  # model = "gpt-3.5-turbo",
)
from langchain.schema.runnable import RunnablePassthrough
chain = ({
    "context": retriver,
    "question": RunnablePassthrough(),
    }
    | prompt | llm
)

질문을 해서 llm에 보내기

chain.invoke("아케인에 대한 기사소개해줘")

아케인은 구글 플레이 스토어, 네이버 앱스토어, 이통 3사의 통합 마켓 원스토어 등을 통해서 무료로 설치할 수 있는 게임입니다. 현재 상승세를 보이며 스토어 인기 3등 및 매출 순위 20위권에 진입하고 있습니다. 게임과 관련된 보다 자세한 정보는 공식 커뮤니티를 통해서 확인할 수 있습니다

chain.invoke("추석 이벤트를 한 게임은 뭘가")

Last updated

Was this helpful?