--- title: FinGraph emoji: ๐ธ๏ธ colorFrom: indigo colorTo: indigo sdk: gradio sdk_version: 6.14.0 python_version: 3.10.14 app_file: app.py pinned: false --- # FinNode ๐ธ๏ธ **Neo4j GraphRAG ๊ธฐ๋ฐ AI ๋ด์ค ์ง์ ๊ทธ๋ํ ํ๋ซํผ** [](https://www.python.org/) [](https://neo4j.com/) [](https://langchain.com/) [](https://gradio.app/) [](https://github.com/yuje/FinGraph/actions/workflows/ci.yml) --- ## ๐ ๋ณด๊ณ ์ > [์ต์ข ๊ธฐํ์ ๋ฐ ํ๋ก์ ํธ ๋ณด๊ณ ์ (์ ๋ฐ์ดํธ ์์ )]() ## ๐ฅ ์์ฐ ์์ > [์๋น์ค ์์ฐ ์์ ๋งํฌ (์ ๋ฐ์ดํธ ์์ )]() --- ## 1. ํ๋ก์ ํธ ๋ฐฐ๊ฒฝ ๋ฐ ๋ชฉ์ ์ต์ AI ๊ธฐ์ ๊ณผ ํํ ํฌ ํธ๋ ๋๋ ๋น ๋ฅด๊ฒ ๋ณํํ๋ฉฐ, ์ผ๋ฐ์ ์ธ RAG(๊ฒ์ ์ฆ๊ฐ ์์ฑ) ๊ธฐ์ ๋ง์ผ๋ก๋ ์ฌ๋ฌ ๋ด์ค ๊ธฐ์ฌ์ ํฉ์ด์ ธ ์๋ **'๊ธฐ์ -๊ธฐ์ -์๋น์ค' ๊ฐ์ ๋ณต์กํ ๊ด๊ณ**๋ฅผ ํ์ ํ๊ธฐ ์ด๋ ต์ต๋๋ค. **FinNode**๋ ๋ค์ด๋ฒ ๋ด์ค์์ AI ๊ด๋ จ ๊ธฐ์ฌ๋ฅผ ์ค์๊ฐ์ผ๋ก ์์งํ๊ณ , **LangGraph ํ์ดํ๋ผ์ธ**์ ํตํด ์ํฐํฐ์ ๊ด๊ณ๋ฅผ ์๋ ์ถ์ถํ์ฌ **Neo4j ์ง์ ๊ทธ๋ํ**์ ์ ์ฌํฉ๋๋ค. ์ด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก Vector ๋ฐ Cypher ๋ณตํฉ ๊ฒ์(GraphRAG)์ ์ํํ์ฌ, ๋จ์ํ ๋ฌธ์ ๊ฒ์์ ๋์ด **"ํ์ฌ ๊ธ์ตAI ๋ถ์ผ์์ ๊ฐ์ฅ ์ ๊ทน์ ์ธ ๊ธฐ์ ๊ณผ ๊ธฐ์ ํธ๋ ๋"**๋ฅผ ์๋ฒฝํ ๊ทผ๊ฑฐ์ ํจ๊ป ์ถ๋ก ํ๊ณ ๋ต๋ณํ๋ ์ฐจ์ธ๋ ์ฑ๋ด ์์คํ ์ ๋๋ค. --- ## 2. ์์คํ ์ํคํ ์ฒ ```text [Naver News] โ Selenium ํฌ๋กค๋ง โผ [LangGraph Pipeline] (gpt-4o-mini) check_ai โโ(AI ์๋)โโโถ ์คํต โ (AI ๊ด๋ จ) โผ extract_entities โ โผ extract_relations โ โผ [Neo4j AuraDB] Article / Content / AICompany / AITechnology / AIService / AIField / Media โ โผ [GraphRAG ToolsRetriever] โโโถ gpt-4o ์ต์ข ๋ต๋ณ ์์ฑ โ โผ [Gradio ์ฑ๋ด UI (Hugging Face Spaces ๋ฐฐํฌ)] ``` --- ## 3. ์ฃผ์ ๊ธฐ๋ฅ - **์ค์๊ฐ ๋ด์ค ํฌ๋กค๋ง**: Selenium ํค๋๋ฆฌ์ค ๋ธ๋ผ์ฐ์ ๋ก ๋ค์ด๋ฒ ๋ด์ค ์นดํ ๊ณ ๋ฆฌ๋ณ ๊ธฐ์ฌ ์๋ ์์ง - **LangGraph AI ํ์ดํ๋ผ์ธ**: ์์ง๋ ๊ธฐ์ฌ๋ฅผ 3๋จ๊ณ ์๋ ๋ถ์ (`ํ๋ณ` โ `์ํฐํฐ ์ถ์ถ` โ `๊ด๊ณ ์ถ์ถ`) - **Neo4j ์ง์ ๊ทธ๋ํ ์ ์ฌ**: ์ถ์ถ๋ ์ํฐํฐ(Company, Tech, Service ๋ฑ)์ ๊ด๊ณ๋ฅผ MERGE ํธ๋์ญ์ ์ผ๋ก ์ค๋ณต ์์ด DB ์ ์ฌ - **GraphRAG ์ฑ๋ด**: 3๊ฐ์ง Retriever๋ฅผ ํตํฉํ ToolsRetriever ๊ธฐ๋ฐ ์์ฐ์ด ์ง์์๋ต - `Vector Retriever`: ๋ณธ๋ฌธ ์ฒญํฌ ์๋ฏธ ์ ์ฌ๋ ๊ฒ์ - `VectorCypher Retriever`: ๋ฒกํฐ ๊ฒ์ ํ ํด๋น ๊ธฐ์ฌ์ ์ฐ๊ด ๊ทธ๋ํ(๊ธฐ์ ยท๊ธฐ์ ยท์๋น์ค) ๋ฐํ (ํธ๋ ๋ ๋ถ์์ ์ต์ ํ) - `Text2Cypher Retriever`: ์์ฐ์ด โ Cypher ์ฟผ๋ฆฌ ์๋ ๋ณํ ๋ฐ ๋ฐ์ดํฐ ์ง๊ณ - **๋ํ ๋งฅ๋ฝ ๋ฐ์ ํ์ด๋ธ๋ฆฌ๋ RAG & ์ง๋ฅํ Fallback ๋ผ์ฐํ **: - Neo4j์์ ๊ฒ์๋ ์ง์ ๊ทธ๋ํ ์ ๋ณด์ ์ฌ์ฉ์์ ์ง๋ฌธ, ๊ทธ๋ฆฌ๊ณ **์ต๊ทผ ๋ํ ํ์คํ ๋ฆฌ(์ต๊ทผ 3๊ฐ ๋ฉ์์ง)**๋ฅผ ์ข ํฉ ๋ถ์ํ์ฌ GPT-4o ๊ธฐ๋ฐ ์๊ฐ ํ์ ๊ฐ๋๋ ์ผ(`_is_context_sufficient`)์ ์ค์๊ฐ ๊ตฌ๋. - ๊ฒ์ ๊ฒฐ๊ณผ๊ฐ ์ง๋ฌธ์ ๋ต๋ณํ๊ธฐ ์ถฉ๋ถํ ๊ฒฝ์ฐ `GraphRAG` ๋ชจ๋๋ก ๊ตฌ๋ํ์ฌ ๊ตฌ์ฒด์ ์ธ ๊ธฐ์ฌ ์ถ์ฒ ๋งํฌ(URL, ์ ๋ชฉ ๋ฑ)๋ฅผ ํฌํจํ ํฉํธ ๊ธฐ๋ฐ ๋ต๋ณ ์ ๊ณต. - ๊ด๋ จ ์ ๋ณด๊ฐ ๋ถ์กฑํ๊ฑฐ๋ ๊ธ์ต/IT ๋ด์ค๋ฅผ ๋ฒ์ด๋ ์ผ๋ฐ ์ง๋ฌธ(์: ์ํ ๊ณต์, ์ผ์ ๋ํ ๋ฑ), ํน์ ์ด์ ๋ํ ๋งฅ๋ฝ์ ์์กดํ๋ ์ง๋ฌธ์ ๋ํด์๋ ํ์คํ ๋ฆฌ๋ฅผ ์ข ํฉ ๋ถ์ํ์ฌ ์ผ๋ฐ ์ง์ ๋ต๋ณ(`general` ๋ชจ๋)์ผ๋ก ์ ์ฐํ๊ฒ ์ค์์นญํ์ฌ ํ๊ฐ(Hallucination) ๋ฐฉ์ง ๋ฐ ์์ ์ฑ ๊ทน๋ํ. - **์ฌ์ฉ์ ๊ฒฝํ(UX) ๋ฐ ํ๋ฆฌ๋ฏธ์ UI ์ต์ ํ**: - **์ฌ๋ฆผ ์ฑ ๋ฒ๋ธ**: Gradio ๋งํฌ๋ค์ด ๋ ๋๋ฌ๊ฐ ๋ด๋ถ `
`, `