1P by neo 12일전 | favorite | 댓글 1개

Streamlined and promptable Fast GraphRAG framework

  • 해석 가능하고 디버깅 가능한 지식: 그래프는 사람이 탐색할 수 있는 지식의 뷰를 제공하며, 쿼리, 시각화, 업데이트가 가능함
  • 빠르고 저렴하며 효율적: 대규모로 실행할 수 있도록 설계되어 자원이나 비용 요구가 적음
  • 동적 데이터: 도메인과 온톨로지 요구에 맞게 그래프를 자동으로 생성하고 개선함
  • 점진적 업데이트: 데이터가 발전함에 따라 실시간 업데이트를 지원함
  • 지능적 탐색: PageRank 기반의 그래프 탐색을 활용하여 정확성과 신뢰성을 높임
  • 비동기 및 타입 지원: 완전한 비동기 및 타입 지원으로 견고하고 예측 가능한 워크플로우를 제공함

설치

  • PyPi에서 설치 (권장됨)

    pip install fast-graphrag
    
  • 소스에서 설치

    # 이 저장소를 먼저 클론
    cd fast_graphrag
    poetry install
    

빠른 시작

  • OpenAI API 키를 환경에 설정

    export OPENAI_API_KEY="sk-..."
    
  • Charles Dickens의 A Christmas Carol 다운로드

    curl https://raw.githubusercontent.com/circlemind-ai/fast-graphrag/… > ./book.txt
    
  • Python 코드 예시

    from fast_graphrag import GraphRAG
    
    DOMAIN = "Analyze this story and identify the characters. Focus on how they interact with each other, the locations they explore, and their relationships."
    EXAMPLE_QUERIES = [
        "What is the significance of Christmas Eve in A Christmas Carol?",
        "How does the setting of Victorian London contribute to the story's themes?",
        "Describe the chain of events that leads to Scrooge's transformation.",
        "How does Dickens use the different spirits (Past, Present, and Future) to guide Scrooge?",
        "Why does Dickens choose to divide the story into \"staves\" rather than chapters?"
    ]
    ENTITY_TYPES = ["Character", "Animal", "Place", "Object", "Activity", "Event"]
    
    grag = GraphRAG(
        working_dir="./book_example",
        domain=DOMAIN,
        example_queries="\n".join(EXAMPLE_QUERIES),
        entity_types=ENTITY_TYPES
    )
    
    with open("./book.txt") as f:
        grag.insert(f.read())
        print(grag.query("Who is Scrooge?").response)
    
  • 동일한 작업 디렉토리에서 fast-graphrag를 다시 초기화할 때 모든 지식을 자동으로 유지함

예제

  • examples 폴더를 참조하여 라이브러리의 일반적인 사용 사례에 대한 튜토리얼 확인 가능
    • custom_llm.py: 다양한 OpenAI API 호환 언어 모델 및 임베더와 함께 fast-graphrag를 구성하는 간단한 예제

기여

  • 크고 작은 기여를 환영함. 기여는 오픈 소스 커뮤니티를 배우고, 영감을 주고, 창조하는 놀라운 장소로 만듦
  • 기여 가이드를 확인하여 시작하는 방법을 알아볼 수 있음
  • 시작할 곳을 모르겠다면 Discord에 가입하여 질문 가능

철학

  • 우리의 사명은 세계에서 성공적인 GenAI 애플리케이션의 수를 증가시키는 것임
  • 이를 위해, LLM 앱이 에이전트 워크플로우 설정 및 유지의 복잡성 없이 고도로 전문화된 검색 파이프라인을 활용할 수 있도록 메모리 및 데이터 도구를 구축함

오픈 소스 또는 관리 서비스

  • 이 저장소는 MIT 라이선스 하에 있음. 자세한 내용은 LICENSE.txt 참조
  • Fast GraphRAG를 시작하는 가장 빠르고 신뢰할 수 있는 방법은 관리 서비스를 사용하는 것임
  • 매달 처음 100개의 요청은 무료이며, 이후 사용량에 따라 요금이 부과됨
Hacker News 의견
  • BM25와 LLM을 함께 사용하면 매우 관련성 높은 결과를 얻을 수 있음

    • 쿼리 크기가 임베딩 저장소의 크기와 비슷할 때 임베딩이 잘 작동함
    • LLM을 사용하여 가상의 답변을 생성하고 이를 임베딩 쿼리에 사용하면 효과적임
    • 지식 분해 및 추출 단계에서 메타프롬프터를 사용하여 도메인/엔티티 유형을 자동 생성함
    • LLM은 지식을 적절한 수준으로 분해하는 데 서투름
    • mermaid.js 마인드맵을 사용하여 입력을 계층적으로 나누고 적절한 루트를 찾음
    • 생성된 질문을 텍스트로 인덱싱하고 임베딩함
    • BM25를 사용하여 사용자 쿼리를 직접 매칭할 수 있으며, 하이브리드 접근이 더 나은 결과를 제공함
    • 쿼리 시간에 LLM을 사용하지 않으면 임베딩 유사성을 비용 함수로 사용하여 계층적으로 탐색 가능함
  • PageRank와 Triangle Centrality는 그래프에 적용할 수 있는 흥미로운 중심성 지표임

    • Triangle Centrality는 노드 주변의 삼각형을 세어 중심성을 파악함
    • 연구 결과, TC는 희소 그래프에서 PR보다 느리지만, 그래프가 커질수록 더 효율적임
  • 전통적인 정보 검색이 RAG에 적합하다고 생각함

    • 벡터 검색은 비구조화 데이터에 유용하지만 구조화 데이터에는 덜 효과적임
    • 벡터 검색을 위해 구조화 데이터를 비구조화 데이터로 변환하는 것은 비효율적일 수 있음
    • LLM이 쿼리를 학습하거나 기존 검색/쿼리 API와 인터페이스하도록 하는 것이 유용할 수 있음
    • 큰 컨텍스트 크기를 사용하여 여러 쿼리로 많은 결과를 가져오는 것이 벡터 검색보다 빠르고 저렴함
  • AI 스타트업에서 대규모 문서 분석을 위해 GraphRag 시스템을 사용하고자 함

    • 매달 약 10%의 문서 변경이 예상됨
    • S3를 사용하여 데이터를 수집할 수 있지만 비용과 처리 시간을 이해해야 함
  • PageRank가 OpenAI API 키를 요구하는 것에 대한 의문

    • OpenAI의 출력물을 사용하여 경쟁 모델을 개발할 수 없다는 제한이 있음
    • 자연 인간의 경제적 하락에 대한 우려
  • 그래프 데이터베이스 없이 그래프를 저장하고 쿼리하는 방법에 대한 질문

    • sciphi triplex 모델을 사용한 추출 시도에서 일관성 없는 결과를 경험함
  • 도메인 특정 텍스트의 지식 그래프 구축에 필요한 텍스트 양에 대한 질문

    • Aider는 코드 저장소의 호출 그래프에 PageRank를 적용하여 관련 컨텍스트를 찾음
  • 도메인 및 예제 쿼리가 지식 그래프 구축에 어떻게 도움이 되는지에 대한 질문

  • 가격 정책에 대한 혼란

    • GitHub 페이지에서는 처음 100개의 요청이 무료라고 하지만, 랜딩 페이지에서는 무료로 사용하려면 자체 호스팅을 권장함
  • "Scrooge가 누구인가?"라는 질문에 대한 답변이 다른 접근 방식보다 나은지에 대한 질문

    • 비용 절감 또는 더 나은 답변을 얻기 위한 접근인지에 대한 의문