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