pdstudio
@pdstudio
Students
16,127
Reviews
748
Course Rating
4.8
Posts
Q&A
graphRAG - Neo4J๋ก ๊ตฌํํ๋ ์ง์ ๊ทธ๋ํ ๊ธฐ๋ฐ RAG ์์คํ (feat. LangChain)
์๋ ํ์ธ์.์ด ๋ถ๋ถ์ pdf ์๋ฃ ์์ด env ์ํ๋ง ์ ๊ณตํด๋๋ฆฌ๊ณ ์์ต๋๋ค. ์ค์ตํ๊ฒฝ ๊ด๋ จ ์ค๋ช ์ pdf ๋์ [์์ ๋ ธํธ]์์ ํ์ธ ๊ฐ๋ฅํฉ๋๋ค. ๊ฐ์ฌํฉ๋๋ค.
- 0
- 2
- 27
Q&A
ํ๋ก์ ํธ ์ค์ (uv ์ค์น, ..) -> ํด๋น ์์ ์๋ฃ ์์
์๋ ํ์ธ์. ๋ฐฉ๊ธ ํ์ธํ๋๋ฐ ์ ์์ ์ผ๋ก ์์์ด ์ฌ์๋๊ณ ์์ต๋๋ค. https://inf.run/xG5ng ๋ค์ ํ๋ฒ ํ์ธํด๋ณด์ธ์. ๊ฐ์ฌํฉ๋๋ค.
- 0
- 1
- 27
Q&A
test.py ํ์ผ์ด ์ด๋จ๋์?
์๋ ํ์ธ์. ํ๋ค์ค ์คํ๋์ค์ ๋๋ค. ๋ฒ๊ฑฐ๋กญ๊ฒ ํด๋๋ ค์ ์ฃ์กํฉ๋๋ค. ์ฐ์ ๋ค์ ์ฝ๋๋ฅผ ํ์ฉํ์๊ธฐ ๋ฐ๋๋๋ค. from langchain_neo4j import Neo4jGraph from dotenv import load_dotenv import os # ํ๊ฒฝ ๋ณ์ ๋ก๋ load_dotenv() # Neo4j ์ฐ๊ฒฐ ์ค์ neo4j_url = os.getenv("NEO4J_URI") neo4j_username = os.getenv("NEO4J_USERNAME") neo4j_password = os.getenv("NEO4J_PASSWORD") # ๊ทธ๋ํ ๊ฐ์ฒด ์์ฑ graph = Neo4jGraph( url=neo4j_url, username=neo4j_username, password=neo4j_password ) def main(): # ๊ฐ๋จํ ํ ์คํธ ์ฟผ๋ฆฌ result = graph.query("MATCH (n) RETURN count(n) as node_count") print(f"Neo4j ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ด ๋ ธ๋ ์: {result[0]['node_count']}") if __name__ == "__main__": main()์์ ๋ ธํธ์ ์ ๋ฐ์ดํธํ๊ฒ ์ต๋๋ค. ๊ฐ์ฌํฉ๋๋ค.
- 0
- 2
- 33
Q&A
requirements.txt. ์ ๋ฐ์ดํธ ํด์ฃผ์ธ์.
์๋ ํ์ธ์. ์ค์น ํ์ผ์ ๋ชป ์ฐพ์ผ์ ๊ฑธ๊น์?
- 0
- 2
- 23
Q&A
EasyOcr ๊ด๋ จ
์๋ ํ์ธ์ ํ๋ค์ค ์คํ๋์ค์ ๋๋ค. ๋ถํธ์ ๋๋ ค ์ฃ์กํฉ๋๋ค. ์ง์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ณ ๊ณต์ ๊น์ง ํด์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค. ํน์ ์๊ฐ ์ค์ ๋ค๋ฅธ ์ค๋ฅ๋ ๋ถํธํ ์ ์ด ์์ผ๋ฉด ํธํ๊ฒ ๋ง์ํด ์ฃผ์ธ์!๊ฐ์ฌํฉ๋๋ค.
- 0
- 2
- 34
Q&A
๊ฐ์ํ๊ฒฝ์ ๋ง๋๋ ๊ณผ์ ์๋ฌ
์๋ ํ์ธ์. ์ด ๋ฌธ์ ๋ ์๋ AI ์ธํด์ด ๋ต๋ณํ ๋๋ก, SSL ์ธ์ฆ ์ค๋ฅ ๋๋ฌธ์ ๋๋ค. ์๋ ๋ฐฉ๋ฒ์ผ๋ก ์ฐ์ ์ฒ๋ฆฌํด๋ณด์๊ณ , ๊ณ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ฉด ๋ค์ ๋ง์ํด์ฃผ์ธ์. ๊ฐ์ฌํฉ๋๋ค.
- 0
- 2
- 50
Q&A
Rerank์ ๋ํด ์ง๋ฌธ๋๋ฆฝ๋๋ค.
์๋ ํ์ธ์. ํ๋ค์ค ์คํ๋์ค์ ๋๋ค. ๋ง์ํด์ฃผ์ ๋๋ก ContextualCompressionRetriever๋ ์๋ณธ ์ฟผ๋ฆฌ๋ง์ผ๋ก reranking์ ์ํํฉ๋๋ค.# ์์ค ์ฝ๋ ์๋ ๋ฐฉ์ docs = self.base_retriever.invoke(query, ...) # MultiQuery๋ก ๋ฌธ์ ๊ฒ์ compressed_docs = self.base_compressor.compress_documents(docs, query, ...) ์ค๋ฌด์ ์ผ๋ก๋ ๋๋ถ๋ถ ์๋ณธ ์ฟผ๋ฆฌ reranking์ผ๋ก ์ถฉ๋ถํฉ๋๋ค. (MultiQuery ๋ชฉ์ ์ด recall์ ๋์ด๋ ๊ฒ์ด๋ฏ๋ก) ๋ค๋ง, MultiQuery ์์ฒด์ ์ ๋ฐ๋(precision)๊ฐ ์ค์ํ ๊ฒฝ์ฐ์๋ LangGraph Send API๋ก ๊ฐ ์ฟผ๋ฆฌ๋ณ reranking ํ ๊ฒฐ๊ณผ ๋ณํฉํ๋ ์ ๊ทผ ๋ฐฉ๋ฒ๋ ์ข์ ๊ฒ ๊ฐ์ต๋๋ค. ๊ฐ์ฌํฉ๋๋ค.
- 0
- 2
- 37
Q&A
neo4j ์ฌ์ฉ์ ์ง๋ฌธ ๋๋ฆฝ๋๋ค.
์๋ ํ์ธ์. ํ๋ค์ค ์คํ๋์ค์ ๋๋ค.Neo4j Python ๋๋ผ์ด๋ฒ๋ ๋ด๋ถ์ ์ผ๋ก Connection Pooling์ ์๋ ๊ด๋ฆฌํฉ๋๋ค. ํ์ง๋ง ํ๋ก๋์ ํ๊ฒฝ์์๋ ํด๋ผ์ด์ธํธ(Python ๋๋ผ์ด๋ฒ)์์ ๋ช ์์ ์ค์ ์ ๊ถ์ฅํฉ๋๋ค.Neo4j Python Driver API ๋ฌธ์(https://neo4j.com/docs/api/python-driver/current/api.html)์์ ์ ๊ณตํ๋ ์ฃผ์ ์ค์ ์ ์ฐธ๊ณ ํ์๊ธฐ ๋ฐ๋๋๋ค.from neo4j import GraphDatabase driver = GraphDatabase.driver( "neo4j+s://your-auradb-uri", auth=("neo4j", "password"), max_connection_pool_size=50, # ์ต๋ ์ฐ๊ฒฐ ํ ํฌ๊ธฐ (๊ธฐ๋ณธ๊ฐ: 100) connection_acquisition_timeout=60, # ํ์์ ์ฐ๊ฒฐ ํ๋ ๋๊ธฐ ์๊ฐ (์ด) connection_timeout=30, # TCP ์ฐ๊ฒฐ ์์ฑ ํ์์์ (์ด) max_connection_lifetime=3600, # ์ฐ๊ฒฐ ์ ์ง ์ต๋ ์๊ฐ (์ด) )๋ฌผ๋ก ์๋ฒ ์ธก์์๋ ๋ณ๋ ์ค๋ ๋ ํ ๊ด๋ฆฌ๊ฐ ์ด๋ฃจ์ด์ง๋๋ค.๊ฐ์ฌํฉ๋๋ค.
- 0
- 2
- 41
Q&A
fulltext index ์์ฑ์ด ์๋ฉ๋๋ค
์๋ ํ์ธ์. ํ๋ค์ค ์คํ๋์ค์ ๋๋ค. ๋ค์๊ณผ ๊ฐ์ด ์ถ๊ฐ ์ ๋ณด๋ฅผ ์ ๊ณตํด ์ฃผ์ค ์ ์์๊น์? 1. SHOW INDEXES ๋ช ๋ น์ด๋ก ์ ์ฒด ์ธ๋ฑ์ค ์ถ๋ ฅ ๊ฒฐ๊ณผ2. SHOW CONSTRAINTS ๊ฒฐ๊ณผ (์ ์ฝ ์กฐ๊ฑด) ํ์ ๋ถํ๋๋ฆฝ๋๋ค. ๊ฐ์ฌํฉ๋๋ค.
- 0
- 2
- 37
Q&A
Cross Encoder Reranker ์ํฌํธ ์๋ฌ ๊ด๋ จ ๋ด์ฉ์ ๋๋ค.
์๋ ํ์ธ์.์ ๊ณตํด์ฃผ์ ์์กด์ฑ ๋ชฉ๋ก์ผ๋ก ์๋กญ๊ฒ ๊ฐ์ํ๊ฒฝ์ ์์ฑํด์ ํ ์คํธํ์ต๋๋ค.(์ฌ์ง) langchain 1.2.0์์๋ from langchain.retrievers.document_compressors import CrossEncoderReranker ์ํฌํธ ์๋ฌ๊ฐ ๋ฐ์ํ๊ณ ์์ต๋๋ค. ํ์ง๋ง, from langchain_classic.retrievers.document_compressors import CrossEncoderReranker์์๋ ์ ์ ์๋ํ๊ณ ์์ต๋๋ค. ์ ๊ฐ ํ๋จํ๊ธฐ์๋ ํ์ฌ ์ฌ์ฉ์ค์ธ conda ํ๊ฒฝ์์ ์์กด์ฑ ์ถฉ๋์ด ๋ฐ์ํ ๊ฒ์ผ๋ก ๋ณด์ ๋๋ค.์๋ AI ์ธํด์ ๋ต๋ณ๊ณผ ๊ฐ์ด langchain, langchain_community, pydantic ๋ฑ์ ์ต์ ๋ฒ์ ์ผ๋ก ์ ๋ฐ์ดํธํ๊ฑฐ๋, ๊ฐ์ํ๊ฒฝ์ ์๋กญ๊ฒ ์์ฑํด์ ์ฌ์ค์นํ์ ํ ์คํธํด๋ณด์๋ ๊ฒ๋ ์ข์ ๊ฒ ๊ฐ์ต๋๋ค.
- 0
- 2
- 58




