๋ฐ์ฌ์ค |
๊น๋ฏผ์ |
๋ฐ๋ํ |
์ต์น์ |
์ ์๋จ |
---|---|---|---|---|
main, crawl, gemini | vector_store, retreiver | chat, gemini | logger | sql |
- git clone
https://github.com/jenner9212/langchain.git
- cd
langchain
- python
main.py
Enter search term for arXiv papers:
๊ฐ ๋์ค๋ฉด๊ฒ์ํ ๋ ผ๋ฌธ ์ฃผ์
๋ฅผ ์ ๋ ฅํ์ธ์.- ํด๋น ์ฃผ์ ์ ๊ด๋ จ๋ ๋ ผ๋ฌธ ๋ด์ฉ์ ์์ง์ค์ ๋๋ค.
User question:
๊ฐ ๋์ค๋ฉด์ง๋ฌธ ๋ด์ฉ
์ ์ ๋ ฅํ์ธ์....๋ฐ๋ณต ( ! ํ ํฐ ์ ํ์ผ๋ก ์ธํด ํ ํฐ ์ด๊ณผ์ ์๋ฌ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค)exit
๋ฅผ ์ ๋ ฅํ์๋ฉด ์คํ์ด ์ข ๋ฃ๋ฉ๋๋ค.
- ๊ฒ์ํ ๋ ผ๋ฌธ ์ฃผ์ ๋ฅผ ์ ๋ ฅ๋ฐ์ต๋๋ค.
- ํด๋น ์ฃผ์ ์ ๊ด๋ จ๋ ๋ ผ๋ฌธ์ ๋ด์ฉ์ Crawler.crawl์์ ์์งํฉ๋๋ค.
- ์์ง๋ ๋ด์ฉ์ VectorStore.store์์ ์ฒญํฌ ์ฌ์ด์ฆ 500์ผ๋ก ์๋ฅด๊ณ ์๋ฒ ๋ฉ(๋ฒกํฐํ)ํ์ฌ vector_db์ ์ ์ฅํฉ๋๋ค.
- ์ฐพ๊ณ ์ถ์ ๋ด์ฉ์ ์ ๋ ฅ๋ฐ์ต๋๋ค.
- Chat.generate_response์์ Retriever.retrieve๋ฅผ ํธ์ถํฉ๋๋ค.
- Retriever.retrieve์์ vector_db๋ฅผ ์ฝ์ด์ ์ฐพ๋ ๋ด์ฉ๊ณผ ๊ฐ์ฅ ๊ฐ๊น์ด ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํฉ๋๋ค.
- ๋ฐํ๋ ๊ฒฐ๊ณผ์ ์ฐพ๊ณ ์ถ์ ๋ด์ฉ์ GeminiAPI.generate_response๋ก ์ ๋ฌํฉ๋๋ค.
- ConversationChain์ ์ด์ฉํด prompt, ์ฌ์ฉํ model(gemini), ๊ธฐ์ต์ํฌ memory(๋ฐํ๋ ๊ฒฐ๊ณผ)๋ฅผ ๋ฌถ์ด์ conversation์ ์ ์ฅํฉ๋๋ค.
- conversation์ ์ฐพ๊ณ ์ถ์ ๋ด์ฉ์ ๋ฃ์ด์ gemini์ ๊ฒฐ๊ณผ๊ฐ์ ๋ฐํํฉ๋๋ค.
main
: ์ ํ๋ฆฌ์ผ์ด์
์ ๋ฉ์ธ ์คํ ํ๋ฆ์ ์ ์ดํฉ๋๋ค.
gemini
: gemini API๋ฅผ ํธ์ถํ๊ณ , response๋ฅผ ๋ฐ๋ ์ญํ ์ ํฉ๋๋ค.
vector-store
: RAG๋ฅผ ๊ตฌ์ถํ๊ธฐ ์ํด์, ํ
์คํธ ๋ฐ์ดํฐ๋ฅผ Splitํ๊ณ Vector DB์ storeํ๋ ์ญํ ์ ํฉ๋๋ค.
retriever
: Vector DB์์ ์ฌ์ฉ์ ์
๋ ฅ๊ณผ ์ฐ๊ด๋ Knowledge๋ฅผ ์ฐพ๋ ๊ฒ์ํ๋ ์ญํ ์ ํฉ๋๋ค.
crawler
: KB๋ฅผ ๊ตฌ์ถํ๋๋ฐ ํ์ํ ๋ฌธ์ ๋ฐ์ดํฐ๋ฅผ ์์งํ๋ ์ญํ ์ ํฉ๋๋ค.
chat
: user input๊ณผ LLM answer๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ต๋ณ์ ์ด๋ป๊ฒ ์์ฑํ ์ง ์ ํ๋ ์ญํ ์ ํฉ๋๋ค.
sql
: sqlite๋ MySQL์ ์ฌ์ฉํ๊ธฐ ์ํด์ RDBMS๋ฅผ ์ฐ๋ํ๊ณ , SQL์ ์ฒ๋ฆฌํ๋ ์ญํ ์ ํฉ๋๋ค. -> ์ฌ์ฉX
logger
: chat์ด ์คํ๋ ๋๋ง๋ค User question ์
๋ ฅ๊ฐ, gemini response๊ฐ, ์๊ฐ์ ์ ์ฅํฉ๋๋ค.
์ด๋ฒ ํ๋ก์ ํธ๋ LangChain์ ์ด์ฉํด์ Knowledge Base๋ฅผ ๊ตฌ์ถํ๊ณ , ์ด๋ฅผ ์์ฉํ QA Engine์ ๊ฐ๋ฐ
ํ๋ ๊ฒ์ ๋ชฉํ๋ก ํฉ๋๋ค.
ํ๋ก์ ํธ์ ๋ชฉํ๋ Google Gemini API๋ฅผ ์ฌ์ฉํ์ฌ ์์งํ ๋ฌธ์ ๋ฐ์ดํฐ๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ต๋ณ์ ๋ง๋๋ QA Bot์ ๋ง๋๋ ๊ฒ์ ๋๋ค. ์ด๋ฒ ํ๋ก์ ํธ์์๋ QA Bot ์์ฒด์ ๋ต๋ณ ํ๋ฆฌํฐ๋ฅผ ๋์ด๋ ๊ฒ์ ์ง์คํ๋ ๊ฒ์ด ์๋๋ผ, ์ด๋ฌํ ๊ธฐ๋ฅ์ ํ ์ ์๋ ๊ตฌ์กฐ๋ฅผ ๋ง๋๋ ๊ฒ์ ์ง์คํฉ๋๋ค.
์์งํ๋ ๋ฌธ์๋ ์์ ๋กญ๊ฒ ์ ํ์๋ฉด ๋ฉ๋๋ค(๊ธฐํ ๋จ๊ณ์ ํฌํจ). ๊ผญ ํฌ๋กค๋ง ์ฝ๋๋ฅผ ์์ฑํ์ฌ ์์งํ ํ์๋ ์์ผ๋ฉฐ, ์๋ฅผ ๋ค์ด AI๋ ผ๋ฌธ์ด๋ผ๊ณ ํ๋ค๋ฉด arXiv์์ ์ง์ PDF๋ฅผ ๋ค์ด๋ก๋ ๋ฐ์์ ์ฌ์ฉํด๋ ๋ฌด๋ฐฉํฉ๋๋ค. ๋๋ ๋ค์ด๋ฒ ๋ด์ค๊ธฐ์ฌ๋ฅผ ํฌ๋กค๋งํ๊ฑฐ๋, ํน์ ๋ถ์ผ์ tech report, Harvard Business Review, Numpy documentation ๋ฑ๋ฑ ์์ ๋กญ๊ฒ ์ ํ์ธ์.
- ๊ฐ๋ฐ ์ธ์ด: ์ ์ฒด ํ๋ก์ ํธ๋ Python์ผ๋ก ๊ฐ๋ฐ๋ฉ๋๋ค.
- API ์ฌ์ฉ: Gemini API๋ฅผ ํตํด LLM์ ๋ต๋ณ์ ๋ฐ์ต๋๋ค. ๋ชจ๋ธ์
gemini-pro
๋๋gemini-1.5-pro-latest
๋ฅผ ์ฌ์ฉํฉ๋๋ค. - ๋ชจ๋ ๊ตฌ์กฐ: ํ๋ก์ ํธ๋ ์ต์ ๋ค์ฏ๊ฐ ์ด์์ ๋ชจ๋๋ก ๊ตฌ์ฑ๋ฉ๋๋ค. ์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
(๋ค์์ ์์์ด๋ฉฐ, ๊ธฐํ ๋จ๊ณ์์ ์ด๋ป๊ฒ ๊ตฌํํ ์ง ํ ๋จ์๋ก ๊ณ ๋ฏผํด๋ณด์ธ์. ๊ธฐํ ๋จ๊ณ๋ ํ๊ฐ ์์์ ๋ค์ด๊ฐ๋๋ค.)
main
: ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฉ์ธ ์คํ ํ๋ฆ์ ์ ์ดํฉ๋๋ค. (main์ ํ์๋ก ํฌํจํฉ๋๋ค)gemini
: gemini API๋ฅผ ํธ์ถํ๊ณ , response๋ฅผ ๋ฐ๋ ์ญํ ์ ํฉ๋๋ค.vector-store
: RAG๋ฅผ ๊ตฌ์ถํ๊ธฐ ์ํด์, ํ ์คํธ ๋ฐ์ดํฐ๋ฅผ Splitํ๊ณ Vector DB์ storeํ๋ ์ญํ ์ ํฉ๋๋ค.retriever
: Vector DB์์ ์ฌ์ฉ์ ์ ๋ ฅ๊ณผ ์ฐ๊ด๋ Knowledge๋ฅผ ์ฐพ๋ ๊ฒ์ํ๋ ์ญํ ์ ํฉ๋๋ค.crawler
: KB๋ฅผ ๊ตฌ์ถํ๋๋ฐ ํ์ํ ๋ฌธ์ ๋ฐ์ดํฐ๋ฅผ ์์งํ๋ ์ญํ ์ ํฉ๋๋ค.chat
: user input๊ณผ LLM answer๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ต๋ณ์ ์ด๋ป๊ฒ ์์ฑํ ์ง ์ ํ๋ ์ญํ ์ ํฉ๋๋ค.sql
: sqlite๋ MySQL์ ์ฌ์ฉํ๊ธฐ ์ํด์ RDBMS๋ฅผ ์ฐ๋ํ๊ณ , SQL์ ์ฒ๋ฆฌํ๋ ์ญํ ์ ํฉ๋๋ค.logger
: ์คํ๋๋ฉด์ ๊ธฐ๋ก๋๋ ๋ด์ฉ๋ค์ ์ ์ฅํฉ๋๋ค.
- ์คํ์์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฌ์ฉ : ์ฌ์ฉํ ์ ์๋ ์คํ์์ค์ ์ ํ์ ์์ต๋๋ค.
- LLM ์ฌ์ฉ ์ ํ: openai GPT-4๋, Claude3 Opus ๊ฐ์ ๋ค๋ฅธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ํ๊ฐ์์ ์ ์ธ๋ฉ๋๋ค. ๊ฐ์ธ์ ์ผ๋ก ํ ์คํธํ๋ ๊ฒ์ ์๊ด์์ผ๋ ์ด๋ฒ ํ๋ก์ ํธ์์๋ Gemini๋ง ์ฌ์ฉํด์ฃผ์ธ์.
- ์ฝ๋ ํ์ : GitHub๋ฅผ ์ฌ์ฉํ์ฌ ์์ค ์ฝ๋ ๊ด๋ฆฌ ๋ฐ ํ์ ์ ์งํํฉ๋๋ค. ๊ฐ ๋ชจ๋๋ณ๋ก ๋ธ๋์น๋ฅผ ๋๋์ด ๊ฐ๋ฐํ๊ณ , Pull Request๋ฅผ ํตํด ์ฝ๋ ๋ฆฌ๋ทฐ๋ฅผ ์ํํฉ๋๋ค. ๋ชจ๋ ํ์์ด ์ต์ํ 1๋ฒ ์ด์ PR์ ์ํํ์ฌ ํ๋ก์ ํธ์ Contributor๋ก ์ฐธ์ฌํด์ผ ํฉ๋๋ค.
- ํด๋์ค ์ฌ์ฉ: ๊ฐ ๋ชจ๋์ ํด๋์ค ๊ธฐ๋ฐ์ผ๋ก ์ค๊ณํฉ๋๋ค. **main.py**์์ ๋ชจ๋ ๋ชจ๋์ ๋ถ๋ฌ์์ ์ ์ฒด์ ์ธ ๊ธฐ๋ฅ์ ํ๋ฒ์ ์ํํฉ๋๋ค.
- Gemini API๋ฅผ ํตํด ๋ต๋ณ์ด ์ ๋๋ก ์์ฑ๋์๋์ง ํ์ธํ๋ ๊ธฐ๋ฅ
- LLM์ ๋ต๋ณ์ ์๋๋๋ก ์์ฑํ๊ธฐ ์ํด System Prompt๋ฅผ ์ธํ ํ๋ ๊ธฐ๋ฅ
- RAG๋ฅผ ํ๊ธฐ ์ํด ๋ฐ์ดํฐ๋ฅผ VectorDB์ ์ ์ฅํ๋ ๊ธฐ๋ฅ (์ต์ ๋ฌธ์์ ๊ฐ์๋ 30๊ฐ) (++ ์ฌ๊ธฐ์ 30๊ฐ์ ๋ฌธ์๋ ๋ด์ค ๊ธฐ์ฌ 30๊ฐ ์ ๋์ ํ ์คํธ ๊ธธ์ด๋ผ๋ ์๋ฏธ์ด๋ฉฐ, ๊ธ์ ์๋ก๋ ๋๋ต 20000์ ์ ๋ ๋ฉ๋๋ค.)
- Retrieve๋ฅผ ํตํด ์ฌ์ฉ์ ์ ๋ ฅ๊ณผ ์ ์ ํ Knowledge๋ฅผ ์ถ์ถํ๋ ๊ธฐ๋ฅ
- main.py๋ฅผ ํตํด์ ๋๋จธ์ง ๋ชจ๋๋ค์ ๋ถ๋ฌ์์ ํ๋ฒ์ ์คํํ๋ ๊ธฐ๋ฅ
- Chat History๋ฅผ ๊ธฐ์ตํ์ฌ ์ง์ ํ ํ๋ฅด์๋, ์ฃผ์ด์ง ์ญํ , ๋ต๋ณ์ ์ถ๋ ฅ ์์๋ฑ์ ์ ์งํ๋ ๊ธฐ๋ฅ โ ํ๊ฐ์ ์ฌ์ฉ์ ์ ๋ ฅ์ 5๋ฒ ์ํ์ด ๋ ๊ฒ์ด๋ฏ๋ก, 5๋ฒ ์ด์ ๊ธฐ์ตํ ์ ์์ผ๋ฉด ๋ฉ๋๋ค.