8. ์น์ฌ์ดํธ ์ ์ฒด๋ฅผ ์๋ ์ฑ๋ด, SiteGPT
๐ฏ ์ด ์ฑํฐ์์ ๋ฐฐ์ธ ๊ฒ
SitemapLoader
๋ฅผ ์ฌ์ฉํ์ฌ ์น์ฌ์ดํธ์ ์ฌ์ดํธ๋งต(sitemap.xml
)์ ์ฝ๊ณ ๋ชจ๋ ํ์ด์ง์ URL์ ์๋์ผ๋ก ์์งํ๋ ๋ฐฉ๋ฒBeautifulSoup
๊ณผ ํ์ฑ ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ์คํฌ๋ํํ HTML์์ ๋ถํ์ํ ๋ถ๋ถ(ํค๋, ํธํฐ ๋ฑ)์ ์ ๊ฑฐํ๊ณ ์์ ํ ์คํธ๋ง ์ถ์ถํ๋ ๋ฐฉ๋ฒ- Map-ReRank ์ฒด์ธ: ๊ฒ์๋ ์ฌ๋ฌ ๋ฌธ์ ๊ฐ๊ฐ์ ๋ํด ๋ต๋ณ๊ณผ ์ ์๋ฅผ ์์ฑ(Map)ํ ํ, ๊ฐ์ฅ ์ ์๊ฐ ๋์ ๋ต๋ณ์ ์ ํํ์ฌ ์ต์ข ๋ต๋ณ์ ๊ตฌ์ฑ(ReRank)ํ๋ ๊ณ ๊ธ RAG ๊ธฐ๋ฒ
- LCEL์ ์ฌ์ฉํ์ฌ Map-ReRank ์ฒด์ธ์ ์ง์ ๊ตฌํํ๋ ๋ฐฉ๋ฒ
- Streamlit์ ์ฌ์ฉํ์ฌ
SiteGPT
์ ์ ์ฒด UI์ ์ํธ์์ฉ ๋ก์ง์ ์์ฑํ๋ ๋ฐฉ๋ฒ
ํจ์จ์ ์ธ ์น ์คํฌ๋ํ
๐ฏ ์ด๋ฒ ๋จ๊ณ์์ ๋ฐฐ์ธ ๊ฒ
AsyncChromiumLoader
์ ํ๊ณ์SitemapLoader
์ ํ์์ฑ์ ์ดํดํฉ๋๋ค.SitemapLoader
๋ฅผ ์ฌ์ฉํ์ฌ ์น์ฌ์ดํธ์ ๋ชจ๋ ํ์ด์ง๋ฅผ ํจ์จ์ ์ผ๋ก ๋ก๋ํฉ๋๋ค.- ์ฌ์ฉ์ ์ ์ ํ์ฑ ํจ์์
BeautifulSoup
์ ์ฌ์ฉํ์ฌ HTML์ ์ ๋ฆฌํ๊ณ ์ํ๋ ํ ์คํธ๋ง ์ถ์ถํฉ๋๋ค.
๐ 1๋จ๊ณ: Sitemap์ผ๋ก ์น์ฌ์ดํธ ์ ์ฒด ๋ก๋ํ๊ธฐ
์ ์ฒด ์ฝ๋ (pages/04_SiteGPT.py):
1 | from langchain.document_loaders import SitemapLoader |
๐ ์ฝ๋ ์์ธ ์ค๋ช
1. SitemapLoader
AsyncChromiumLoader
๊ฐ ๋จ์ผ ํ์ด์ง๋ง ๋ก๋ํ๋ ๋ฐ๋ฉด,SitemapLoader
๋ ์น์ฌ์ดํธ์sitemap.xml
ํ์ผ์ ๋ถ์ํ์ฌ ์ฌ์ดํธ ๋ด์ ๋ชจ๋ ํ์ด์ง URL ๋ชฉ๋ก์ ๊ฐ์ ธ์ต๋๋ค. ๊ทธ ํ ๊ฐ URL์ ๋ฐฉ๋ฌธํ์ฌ ์ฝํ ์ธ ๋ฅผ ์คํฌ๋ํํฉ๋๋ค.- ์ ์ฌ์ฉํ๋๊ฐ?: ๋จ ํ๋์ URL(
sitemap.xml
)๋ง์ผ๋ก ์น์ฌ์ดํธ ์ ์ฒด๋ฅผ ํ์ต ๋ฐ์ดํฐ๋ก ๋ง๋ค ์ ์์ด ๋งค์ฐ ํจ์จ์ ์ ๋๋ค. filter_urls
: ์ ๊ท์์ ์ฌ์ฉํ์ฌ ์ํ๋ URL ํจํด(์: ๋ธ๋ก๊ทธ ํฌ์คํธ๋ง)์ ๊ฐ์ง ํ์ด์ง๋ง ์คํฌ๋ํํ๋๋ก ํํฐ๋งํ ์ ์์ต๋๋ค.
2. ์ฌ์ฉ์ ์ ์ ํ์ฑ ํจ์ (parsing_function
)
SitemapLoader
๋ ๊ฐ ํ์ด์ง์ HTML ์ฝํ ์ธ ๋ฅผBeautifulSoup
๊ฐ์ฒด(soup
)๋ก ๋ณํํ์ฌparsing_function
์ ์ ๋ฌํฉ๋๋ค.- ์ด ํจ์ ๋ด์์
soup.find(...).decompose()
์ ๊ฐ์ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ๊ด๊ณ , ๋ค๋น๊ฒ์ด์ ๋ฐ, ํธํฐ ๋ฑ ๋ต๋ณ ์์ฑ์ ๋ฐฉํด๊ฐ ๋๋ ๋ถํ์ํ HTML ์์๋ฅผ ์ ๊ฑฐํ ์ ์์ต๋๋ค. ์ด๋ฅผ ํตํด ๋ ๊นจ๋ํ๊ณ ๊ด๋ จ์ฑ ๋์ ํ ์คํธ๋ง ์ถ์ถํ์ฌ LLM์ ์ ๊ณตํ ์ ์์ต๋๋ค.
โ ์ฒดํฌ๋ฆฌ์คํธ
-
beautifulsoup4
๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ค์นํ๋์? - ๋์ ์น์ฌ์ดํธ์
sitemap.xml
URL์ ์ฐพ์๋์? (๋ณดํตhttps://example.com/sitemap.xml
) -
SitemapLoader
๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ์ดํธ๋งต์ ๋ก๋ํ๊ณ ,parsing_function
์ผ๋ก HTML์ ์ ๋ฆฌํ๋์?
Map-ReRank ์ฒด์ธ ๊ตฌํํ๊ธฐ
๐ฏ ์ด๋ฒ ๋จ๊ณ์์ ๋ฐฐ์ธ ๊ฒ
Map-ReRank
์ฒด์ธ์ ๋์ ์๋ฆฌ๋ฅผ ์ดํดํฉ๋๋ค.- Map ๋จ๊ณ: ๊ฒ์๋ ๊ฐ ๋ฌธ์์ ๋ํด ๊ฐ๋ณ์ ์ผ๋ก ๋ต๋ณ๊ณผ ์ ์๋ฅผ ์์ฑํ๋ ์ฒด์ธ์ ๋ง๋ญ๋๋ค.
- ReRank (Reduce) ๋จ๊ณ: ์์ฑ๋ ์ฌ๋ฌ ๋ต๋ณ๊ณผ ์ ์๋ฅผ ๋ณด๊ณ , ๊ฐ์ฅ ์ ๋ขฐ๋ ๋์ ์ต์ข ๋ต๋ณ์ ์ ํ(๋๋ ์ข ํฉ)ํ๋ ์ฒด์ธ์ ๋ง๋ญ๋๋ค.
๐ 1๋จ๊ณ: Map-ReRank ๋ก์ง ๊ตฌํ
์ ์ฒด ์ฝ๋ (pages/04_SiteGPT.py):
1 | # ... (imports, llm ์ค์ ) |
๐ ์ฝ๋ ์์ธ ์ค๋ช
1. Map-ReRank์ ๋์ ์๋ฆฌstuff
๋ฐฉ์์ด ๋ชจ๋ ๋ฌธ์๋ฅผ ํ ๋ฒ์ ์ปจํ
์คํธ์ ๋ฃ๋ ๊ฒ๊ณผ ๋ฌ๋ฆฌ, Map-ReRank
๋ ๋ ์ ๊ตํ ์ ๊ทผ ๋ฐฉ์์ ์ฌ์ฉํฉ๋๋ค.
Map: ๊ฒ์๋ ๋ฌธ์๊ฐ 5๊ฐ๋ผ๋ฉด, 5๊ฐ์ ๋ฌธ์ ๊ฐ๊ฐ์ ๋ํด
answers_prompt
๋ฅผ ์คํํ์ฌ 5๊ฐ์ ๋ ๋ฆฝ์ ์ธ ๋ต๋ณ๊ณผ ์ ์๋ฅผ ์์ฑํฉ๋๋ค. ์ด๋ ๊ฐ ๋ฌธ์๊ฐ ์ง๋ฌธ์ ์ผ๋ง๋ ๊ด๋ จ์ด ์๋์ง๋ฅผ ํ๊ฐํ๋ ๊ณผ์ ์ ๋๋ค.ReRank (Reduce): ์์ฑ๋ 5๊ฐ์ ๋ต๋ณ+์ ์ ํ ์คํธ๋ฅผ ๋ชจ๋ ๋ชจ์
choose_prompt
์ ์ปจํ ์คํธ({answers}
)๋ก ์ ๋ฌํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ LLM์๊ฒ ์ด ์ค์์ ๊ฐ์ฅ ์ ์๊ฐ ๋๊ณ ์ต์ ์ ๋ณด์ธ ๊ฒ์ ๋ฐํ์ผ๋ก ์ต์ข ๋ต๋ณ์ ์ ํํ๊ฑฐ๋ ์ข ํฉํ๋ผ๊ณ ์ง์ํฉ๋๋ค.์ ์ฌ์ฉํ๋๊ฐ?:
stuff
๋ฐฉ์๋ณด๋ค ๋ ๋ง์ ๋ฌธ์๋ฅผ ์ฒ๋ฆฌํ ์ ์์ผ๋ฉฐ, ๊ฐ ๋ฌธ์์ ๊ด๋ จ์ฑ์ ๊ฐ๋ณ์ ์ผ๋ก ํ๊ฐํ๋ฏ๋ก ์ต์ข ๋ต๋ณ์ ์ ํ์ฑ๊ณผ ์ ๋ขฐ๋๊ฐ ๋์์ง๋๋ค. LLM์ด ์ฌ๋ฌ ์์ค๋ฅผ ๋น๊ตํ๊ณ ๋์กฐํ์ฌ ๊ฐ์ฅ ์ข์ ๋ต๋ณ์ ์ฐพ๋๋ก ์ ๋ํ ์ ์์ต๋๋ค.
โ ์ฒดํฌ๋ฆฌ์คํธ
-
Map
๋จ๊ณ์ ํด๋นํ๋answers_prompt
์get_answers
ํจ์๋ฅผ ์์ฑํ๋์? -
ReRank
๋จ๊ณ์ ํด๋นํ๋choose_prompt
์choose_answer
ํจ์๋ฅผ ์์ฑํ๋์? - LCEL์ ์ฌ์ฉํ์ฌ
retriever
->get_answers
->choose_answer
์์๋ก ์ ์ฒด ์ฒด์ธ์ ์ฌ๋ฐ๋ฅด๊ฒ ์ฐ๊ฒฐํ๋์?
SiteGPT UI ์์ฑ
๐ฏ ์ด๋ฒ ๋จ๊ณ์์ ๋ฐฐ์ธ ๊ฒ
st.text_input
์ ์ฌ์ฉํ์ฌ ์ฌ์ฉ์๋ก๋ถํฐ ์ง๋ฌธ์ ๋ฐ์ต๋๋ค.- ์์ฑ๋ Map-ReRank ์ฒด์ธ์ ์คํํ๊ณ , ์ต์ข
๊ฒฐ๊ณผ๋ฅผ
st.markdown
์ผ๋ก ํ๋ฉด์ ํ์ํฉ๋๋ค.
๐ 1๋จ๊ณ: Streamlit UI์ ์ฒด์ธ ์ฐ๋
์ ์ฒด ์ฝ๋ (pages/04_SiteGPT.py):
1 | # ... (์ด์ ์ฝ๋) |
๐ ์ฝ๋ ์์ธ ์ค๋ช
์ด์ ๋ชจ๋ ์กฐ๊ฐ์ด ๋ง์ถฐ์ก์ต๋๋ค.
- ์ฌ์ฉ์๊ฐ ์ฌ์ด๋๋ฐ์
sitemap.xml
URL์ ์ ๋ ฅํฉ๋๋ค. load_website(url)
ํจ์๊ฐ ํธ์ถ๋์ด ์น์ฌ์ดํธ ์ ์ฒด๋ฅผ ๋ก๋ํ๊ณ , ๋ถํ ํ๊ณ , ์๋ฒ ๋ฉํ์ฌretriever
๋ฅผ ์์ฑํฉ๋๋ค. ์ด ๊ณผ์ ์@st.cache_data
๋๋ถ์ URL๋น ํ ๋ฒ๋ง ์คํ๋ฉ๋๋ค.- ์ฌ์ฉ์๊ฐ
st.text_input
์ ์ง๋ฌธ(query
)์ ์ ๋ ฅํฉ๋๋ค. - ์ง๋ฌธ์ด ์
๋ ฅ๋๋ฉด, ์ฐ๋ฆฌ๊ฐ ๊ตฌ์ฑํ
Map-ReRank
์ฒด์ธ์ดinvoke(query)
๋ก ์คํ๋ฉ๋๋ค. - ์ฒด์ธ์ ์ต์ข
๊ฒฐ๊ณผ(
result.content
)๊ฐst.markdown
์ ํตํด ์ฌ์ฉ์์๊ฒ ํ์๋ฉ๋๋ค.
โ ์ฒดํฌ๋ฆฌ์คํธ
-
st.text_input
์ ์ฌ์ฉํ์ฌ ์ฌ์ฉ์ ์ง๋ฌธ์ ๋ฐ๋ UI๋ฅผ ์ถ๊ฐํ๋์? - ์ง๋ฌธ์ด ์
๋ ฅ๋์์ ๋, ์์ฑ๋ ์ฒด์ธ์
invoke
ํ๊ณ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ํ๋ฉด์ ์ถ๋ ฅํ๋์? -
SiteGPT
๊ฐ ์น์ฌ์ดํธ ์ฝํ ์ธ ์ ๊ธฐ๋ฐํ์ฌ ์ ํํ ๋ต๋ณ๊ณผ ์ถ์ฒ๋ฅผ ์ ๊ณตํ๋์ง ํ ์คํธํ๋์?
์ถ์ฒ : https://nomadcoders.co/fullstack-gpt