Python용 공식 Neo4j GraphRAG 패키지를 통해 개발자는 Neo4j 및 Python의 강력한 기능을 사용하여 그래프 검색 증강 생성(GraphRAG) 애플리케이션을 구축할 수 있습니다. 자사 라이브러리로서 강력하고 기능이 풍부한 고성능 솔루션을 제공하며 Neo4j에서 직접 장기 지원 및 유지 관리를 추가로 보장합니다.
문서는 여기에서 찾을 수 있습니다.
버전 | 지원되나요? |
---|---|
3.12 | ✓ |
3.11 | ✓ |
3.10 | ✓ |
3.9 | ✓ |
3.8 | ✗ |
최신 안정 버전을 설치하려면 다음을 실행하세요.
pip install neo4j-graphrag
pygraphviz
는 파이프라인 시각화에 사용됩니다. 설치 지침은 여기에서 확인할 수 있습니다.
아래 스크립트는 패키지를 시작하고 주요 기능을 활용하는 방법을 보여줍니다. 이러한 예제를 실행하려면 Neo4j 인스턴스가 실행 중인지 확인하고 각 스크립트의 NEO4J_URI
, NEO4J_USERNAME
및 NEO4J_PASSWORD
변수를 Neo4j 인스턴스의 세부 정보로 업데이트하세요. 예제의 경우 OpenAI 키를 OPENAI_API_KEY
라는 환경 변수로 내보내야 합니다. 추가 예제는 examples
폴더에서 사용할 수 있습니다.
참고: 이 기능을 사용하려면 Neo4j 인스턴스에 APOC 코어 라이브러리를 설치해야 합니다.
이 패키지는 지식 그래프를 구성하는 두 가지 방법을 제공합니다.
Pipeline
클래스는 광범위한 사용자 정의 옵션을 제공하므로 고급 사용 사례에 이상적입니다. 이 클래스를 사용하는 방법에 대한 예는 examples/pipeline
폴더를 참조하세요.
보다 효율적인 접근 방식을 위해 SimpleKGPipeline
클래스는 Pipeline
에 대한 단순화된 추상화 계층을 제공하여 지식 그래프를 더 쉽게 작성할 수 있습니다. 두 클래스 모두 텍스트 및 PDF에 대한 직접 작업을 지원합니다.
import asyncio
from neo4j import GraphDatabase
from neo4j_graphrag . embeddings import OpenAIEmbeddings
from neo4j_graphrag . experimental . pipeline . kg_builder import SimpleKGPipeline
from neo4j_graphrag . llm . openai_llm import OpenAILLM
NEO4J_URI = "neo4j://localhost:7687"
NEO4J_USERNAME = "neo4j"
NEO4J_PASSWORD = "password"
# Connect to the Neo4j database
driver = GraphDatabase . driver ( NEO4J_URI , auth = ( NEO4J_USERNAME , NEO4J_PASSWORD ))
# List the entities and relations the LLM should look for in the text
entities = [ "Person" , "House" , "Planet" ]
relations = [ "PARENT_OF" , "HEIR_OF" , "RULES" ]
potential_schema = [
( "Person" , "PARENT_OF" , "Person" ),
( "Person" , "HEIR_OF" , "House" ),
( "House" , "RULES" , "Planet" ),
]
# Create an Embedder object
embedder = OpenAIEmbeddings ( model = "text-embedding-3-large" )
# Instantiate the LLM
llm = OpenAILLM (
model_name = "gpt-4o" ,
model_params = {
"max_tokens" : 2000 ,
"response_format" : { "type" : "json_object" },
"temperature" : 0 ,
},
)
# Instantiate the SimpleKGPipeline
kg_builder = SimpleKGPipeline (
llm = llm ,
driver = driver ,
embedder = embedder ,
entities = entities ,
relations = relations ,
on_error = "IGNORE" ,
from_pdf = False ,
)
# Run the pipeline on a piece of text
text = (
"The son of Duke Leto Atreides and the Lady Jessica, Paul is the heir of House "
"Atreides, an aristocratic family that rules the planet Caladan."
)
asyncio . run ( kg_builder . run_async ( text = text ))
driver . close ()
위 스크립트를 사용하여 생성된 지식 그래프 예시:
벡터 인덱스를 생성할 때 인덱스의 차원 수가 임베딩의 차원 수와 일치하는지 확인하세요.
from neo4j import GraphDatabase
from neo4j_graphrag . indexes import create_vector_index
NEO4J_URI = "neo4j://localhost:7687"
NEO4J_USERNAME = "neo4j"
NEO4J_PASSWORD = "password"
INDEX_NAME = "vector-index-name"
# Connect to the Neo4j database
driver = GraphDatabase . driver ( NEO4J_URI , auth = ( NEO4J_USERNAME , NEO4J_PASSWORD ))
# Create the index
create_vector_index (
driver ,
INDEX_NAME ,
label = "Chunk" ,
embedding_property = "embedding" ,
dimensions = 3072 ,
similarity_fn = "euclidean" ,
)
driver . close ()
이 예에서는 Neo4j 데이터베이스에 데이터를 삽입하는 한 가지 방법을 보여줍니다. Neo4j Python 드라이버 사용과 같은 대체 접근 방식이 있다는 점에 유의하는 것이 중요합니다.
이 예제를 실행하기 전에 벡터 인덱스가 생성되었는지 확인하세요.
from neo4j import GraphDatabase
from neo4j_graphrag . embeddings import OpenAIEmbeddings
from neo4j_graphrag . indexes import upsert_vector
NEO4J_URI = "neo4j://localhost:7687"
NEO4J_USERNAME = "neo4j"
NEO4J_PASSWORD = "password"
# Connect to the Neo4j database
driver = GraphDatabase . driver ( NEO4J_URI , auth = ( NEO4J_USERNAME , NEO4J_PASSWORD ))
# Create an Embedder object
embedder = OpenAIEmbeddings ( model = "text-embedding-3-large" )
# Generate an embedding for some text
text = (
"The son of Duke Leto Atreides and the Lady Jessica, Paul is the heir of House "
"Atreides, an aristocratic family that rules the planet Caladan."
)
vector = embedder . embed_query ( text )
# Upsert the vector
upsert_vector (
driver ,
node_id = 0 ,
embedding_property = "embedding" ,
vector = vector ,
)
driver . close ()
Neo4j 벡터 인덱스를 쿼리할 때 가장 가까운 이웃 검색이 사용되지만 항상 정확한 결과를 제공하지는 않을 수 있습니다. 자세한 내용은 벡터 인덱스의 제한 사항 및 문제에 대한 Neo4j 설명서를 참조하세요.
아래 예에서는 vector-index-name
벡터 인덱스에 대해 유사성 검색을 수행하는 검색기를 사용하여 간단한 벡터 검색을 수행합니다.
이 라이브러리는 VectorRetriever
외에도 더 많은 검색기를 제공합니다. 이러한 검색기를 사용하는 방법에 대한 예는 examples
폴더를 참조하세요.
이 예제를 실행하기 전에 벡터 인덱스가 생성되고 채워졌는지 확인하세요.
from neo4j import GraphDatabase
from neo4j_graphrag . embeddings import OpenAIEmbeddings
from neo4j_graphrag . generation import GraphRAG
from neo4j_graphrag . llm import OpenAILLM
from neo4j_graphrag . retrievers import VectorRetriever
NEO4J_URI = "neo4j://localhost:7687"
NEO4J_USERNAME = "neo4j"
NEO4J_PASSWORD = "password"
INDEX_NAME = "vector-index-name"
# Connect to the Neo4j database
driver = GraphDatabase . driver ( NEO4J_URI , auth = ( NEO4J_USERNAME , NEO4J_PASSWORD ))
# Create an Embedder object
embedder = OpenAIEmbeddings ( model = "text-embedding-3-large" )
# Initialize the retriever
retriever = VectorRetriever ( driver , INDEX_NAME , embedder )
# Instantiate the LLM
llm = OpenAILLM ( model_name = "gpt-4o" , model_params = { "temperature" : 0 })
# Instantiate the RAG pipeline
rag = GraphRAG ( retriever = retriever , llm = llm )
# Query the graph
query_text = "Who is Paul Atreides?"
response = rag . search ( query_text = query_text , retriever_config = { "top_k" : 5 })
print ( response . answer )
driver . close ()
이 프로젝트에 기여하려면 기여자 라이센스 계약에 서명해야 합니다.
Python 종속성은 Poetry를 사용하여 관리됩니다. Poetry가 시스템에 아직 설치되지 않은 경우 여기 지침에 따라 설정할 수 있습니다. 이 프로젝트의 개발을 시작하려면 저장소를 복제한 후 다음 명령을 사용하여 개발 종속성을 포함하여 필요한 모든 종속성을 설치하십시오.
poetry install --with dev
보고할 버그나 요청할 기능이 있는 경우 먼저 검색하여 문제가 이미 존재하는지 확인하세요. 관련 문제가 존재하지 않는 경우 문제 양식을 사용하여 새로운 문제를 제기해 주세요.
Neo4j Enterprise 고객인 경우 고객 지원에 문의할 수도 있습니다.
보고할 버그나 기능 요청이 없지만 라이브러리의 도움이 필요한 경우; 커뮤니티 지원은 Neo4j 온라인 커뮤니티 및/또는 Discord를 통해 제공됩니다.
main
에서 작업 브랜치를 생성하고 변경 사항을 시작해보세요!우리의 코드베이스는 코드 품질 확인을 위해 Ruff를 사용하고 유형 확인을 위해 Mypy를 사용하여 엄격한 형식 지정 및 Linting 표준을 따릅니다. 기여하기 전에 모든 코드의 형식이 올바른지, Linting 문제가 없는지, 정확한 유형 주석이 포함되어 있는지 확인하세요.
기여가 승인되려면 이러한 표준을 준수해야 합니다.
코드 품질 검사를 자동화하려면 사전 커밋을 설정하는 것이 좋습니다. 이렇게 하면 변경 사항이 커밋되기 전에 지침을 충족하는지 확인할 수 있습니다.
설치 가이드에 따라 사전 커밋을 설치합니다.
다음을 실행하여 사전 커밋 후크를 설정합니다.
pre-commit install
파일이 품질 요구 사항을 충족하는지 수동으로 확인하려면 다음을 실행하세요.
pre-commit run --file path/to/file
변경이 완료되면 다음 워크플로를 사용하여 끌어오기 요청(PR)을 생성하세요.
main
으로 설정되어 있는지 확인하세요.CHANGELOG.md
를 업데이트하세요. 여기에는 다음이 포함됩니다.CHANGELOG.md
변경 사항을 간략하게 유지하고 가장 중요한 변경 사항에 집중하세요.CHANGELOG.md
업데이트 @CodiumAI-Agent /update_changelog
CHANGELOG.md
파일에서 해당 하위 섹션을 업데이트하세요.프로젝트 종속성을 설치한 후 다음 명령을 실행하여 단위 테스트를 로컬로 실행합니다.
poetry run pytest tests/unit
엔드투엔드(e2e) 테스트를 실행하려면 다음 서비스가 로컬에서 실행되어야 합니다.
이를 설정하는 가장 간단한 방법은 Docker Compose를 사용하는 것입니다.
docker compose -f tests/e2e/docker-compose.yml up
(팁: 데이터베이스 내에서 캐싱 문제가 발생하는 경우 docker compose -f tests/e2e/docker-compose.yml down
실행하여 완전히 제거할 수 있습니다)
모든 서비스가 실행되면 다음 명령을 실행하여 e2e 테스트를 실행합니다.
poetry run pytest tests/e2e