우리는 AI 애플리케이션을 위한 안정적이고 생산 준비가 완료된 데이터 계층이 필요한 개발자를 위해 구축했습니다.
Cognee는 환각, 개발자 노력 및 비용을 줄이면서 과거 대화, 문서 및 오디오 기록을 상호 연결하고 검색할 수 있는 확장 가능한 모듈식 ECL(추출, 인식, 로드) 파이프라인을 구현합니다. Google Colab 노트북에서 사용해 보거나 문서를 살펴보세요.
질문이 있으시면 Discord 커뮤니티에 가입하세요
pip 설치 코그니
pip 설치 'cognee[postgres]'
시는 코그네를 추가한다
시 추가 cognee -E postgres
import os os.environ["LLM_API_KEY"] = "YOUR OPENAI_API_KEY"
또는
import cognee cognee.config.set_llm_api_key("YOUR_OPENAI_API_KEY")
.env 파일을 생성하여 변수를 설정할 수도 있습니다. 여기에 템플릿이 있습니다. 다른 LLM 제공업체를 이용하려면 자세한 내용을 알아보려면 당사 설명서를 확인하세요.
네트워크를 사용하는 경우 Graphistry에 계정을 만들어 결과를 시각화하세요.
cognee.config.set_graphistry_config({ "username": "YOUR_USERNAME", "password": "YOUR_PASSWORD" })
(선택 사항) UI를 실행하려면 cognee-frontend 디렉터리로 이동하여 다음을 실행합니다.
npm run dev
또는 도커 컨테이너에서 모든 것을 실행하십시오.
docker-compose up
그런 다음 localhost:3000으로 이동합니다.
PostgreSQL과 함께 Cognee를 사용하려면 .env 파일에서 다음 값을 설정해야 합니다.
DB_PROVIDER=postgres DB_HOST=postgres DB_PORT=5432 DB_NAME=cognee_db DB_USERNAME=cognee DB_PASSWORD=cognee
먼저 .env.template
.env
에 복사하고 OpenAI API 키를 LLM_API_KEY 필드에 추가합니다.
이 스크립트는 기본 파이프라인을 실행합니다.
import cogneeimport asynciofrom cognee.api.v1.search import SearchTypeasync def main():# cognee에 대한 새 슬레이트 만들기 -- 데이터 및 시스템 상태 재설정print("cognee 데이터 재설정 중...")await cognee.prune.prune_data()await cognee.prune.prune_system(metadata=True)print("Data Resetcomplete.n")# 이를 바탕으로 cognee 지식 그래프가 생성됩니다. texttext = """ 자연어 처리(NLP)는 컴퓨터 과학 및 정보 검색의 학제간 하위 분야입니다. """print("Adding text to cognee:")print(text.strip()) # 텍스트를 추가하고 cognify기다릴 때 사용할 수 있습니다. cognee.add(text)print("텍스트가 성공적으로 추가되었습니다.n") print("지식 그래프를 만들기 위해 cognify를 실행하는 중...n")print("프로세스 인식 steps:")print("1. 문서 분류: 입력 텍스트의 유형 및 카테고리를 결정합니다.")print("2. 권한 확인: 사용자에게 텍스트를 처리하는 데 필요한 권한이 있는지 확인합니다.")print(" 3. 텍스트 덩어리 추출: 분석을 위해 텍스트를 문장이나 구로 분해합니다.")print("4. 데이터 포인트 추가: 처리를 위해 추출된 청크를 저장합니다.")print("5. 지식 그래프 생성: 지식 그래프를 형성하기 위해 엔터티 및 관계를 추출합니다.")print("6. 텍스트 요약: 빠른 내용을 위해 내용의 간결한 요약 생성 Insights.n") # LLM 및 Cognee를 사용하여 지식 그래프 생성 cognee.cognify()print("Cognify processcomplete.n") query_text = '정보 작성 NLP'print(f"쿼리로 통찰력을 얻기 위해 cognee 검색: '{query_text}'")# 추가된 텍스트에 대한 통찰력을 위해 cognee를 쿼리합니다.search_results = wait cognee.search(SearchType.INSIGHTS, query_text=query_text) print("검색 결과:" )# search_results:print(result_text)에서 result_text에 대한 결과를 표시합니다.# 출력 예: # ({'id': UUID('bc338a39-64d6-549a-acec-da60846dd90d'), 'updated_at': datetime.datetime(2024, 11, 21, 12, 23, 1, 211808, tzinfo=datetime.timezone.utc), 'name': '자연어 처리', '설명': '학제간 컴퓨터 과학 및 정보 검색의 하위 필드입니다.'}, {'relationship_name': 'is_a_subfield_of', 'source_node_id': UUID('bc338a39-64d6-549a-acec-da60846dd90d'), 'target_node_id': UUID('6218dbab-eb6a-5759-a864-b3419755ffe0'), 'updated_at': datetime.datetime(2024, 11, 21, 12, 23, 15, 473137, tzinfo=datetime.timezone.utc)}, {'id ': UUID('6218dbab-eb6a-5759-a864-b3419755ffe0'), 'updated_at': datetime.datetime(2024, 11, 21, 12, 23, 1, 211808, tzinfo=datetime.timezone.utc), 'name': '컴퓨터 과학', '설명': '에 대한 연구 계산 및 정보 처리.'}) # (...)## 지식 그래프의 노드와 관계를 나타냅니다.# - 첫 번째 요소는 소스 노드(예: '자연어 처리')입니다.# - 두 번째 요소 는 노드 간의 관계입니다(예: 'is_a_subfield_of').# - 세 번째 요소는 대상 노드입니다(예: 'computer science').if __name__ == '__main__':asyncio.run(main())
이 스크립트를 실행하면 실행 흐름을 추적하고 각 단계에서 스크립트가 수행하는 작업을 이해하는 데 도움이 되는 단계별 메시지가 콘솔에 표시됩니다. 이 예제의 버전은 여기에 있습니다: examples/python/simple_example.py
cognee 프레임워크는 파이프라인으로 그룹화할 수 있는 작업으로 구성됩니다. 각 작업은 비즈니스 논리의 독립적인 부분이 될 수 있으며 다른 작업과 연결되어 파이프라인을 형성할 수 있습니다. 이러한 작업은 데이터를 메모리 저장소에 유지하므로 과거 대화, 문서 또는 저장한 기타 데이터의 관련 컨텍스트를 검색할 수 있습니다.
다음은 기본 인식 파이프라인을 찾는 방법에 대한 예입니다.
파이프라인 실행을 위한 데이터를 준비하려면 먼저 해당 데이터를 메타스토어에 추가하고 정규화해야 합니다.
다음으로 시작하세요:
text = """Natural language processing (NLP) is an interdisciplinary subfield of computer science and information retrieval""" await cognee.add(text) # Add a new piece of information
다음 단계에서는 작업을 만듭니다. 작업은 필요한 모든 비즈니스 로직이 될 수 있지만 중요한 부분은 하나의 함수로 캡슐화되어야 한다는 것입니다.
여기에서는 Pydantic 모델을 사용하고 각 청크를 분석한 후 그래프와 벡터 저장소 모두에 데이터를 저장하는 순진한 LLM 분류기를 만드는 예를 보여줍니다. 우리는 참조용으로 일부만 제공했지만 저장소에서 구현을 자유롭게 확인해 보세요.
async def chunk_naive_llm_classifier( data_chunks: list[DocumentChunk], classification_model: Type[BaseModel] ): # Extract classifications asynchronously chunk_classifications = await asyncio.gather( *(extract_categories(chunk.text, classification_model) for chunk in data_chunks) ) # Collect classification data points using a set to avoid duplicates classification_data_points = { uuid5(NAMESPACE_OID, cls.label.type) for cls in chunk_classifications } | { uuid5(NAMESPACE_OID, subclass.value) for cls in chunk_classifications for subclass in cls.label.subclass } vector_engine = get_vector_engine() collection_name = "classification" # Define the payload schema class Keyword(BaseModel): uuid: str text: str chunk_id: str document_id: str # Ensure the collection exists and retrieve existing data points if not await vector_engine.has_collection(collection_name): await vector_engine.create_collection(collection_name, payload_schema=Keyword) existing_points_map = {} else: existing_points_map = {} return data_chunks ...
파이프라인에서 사용할 수 있는 많은 작업이 있으며 비즈니스 논리에 맞게 작업을 생성할 수도 있습니다.
작업이 완료되면 이제 이를 파이프라인으로 그룹화할 차례입니다. 이 단순화된 코드 조각은 작업을 파이프라인에 추가하는 방법과 정보를 서로 전달하는 방법을 보여줍니다.
Task( chunk_naive_llm_classifier, classification_model = cognee_config.classification_model, ) pipeline = run_tasks(tasks, documents)
작동 코드를 보려면 리포지토리에서 cognee.api.v1.cognify 기본 파이프라인을 확인하세요.
Cognee는 다양한 작업을 위한 다양한 도구와 서비스를 지원합니다.
모듈형 : Cognee는 기본적으로 파이프라인으로 그룹화된 작업을 사용하는 모듈식입니다.
로컬 설정 : 기본적으로 LanceDB는 NetworkX 및 OpenAI를 사용하여 로컬로 실행됩니다.
벡터 저장소 : Cognee는 벡터 저장소로 LanceDB, Qdrant, PGVector 및 Weaviate를 지원합니다.
언어 모델(LLM) : Anyscale 또는 Ollama를 LLM 공급자로 사용할 수 있습니다.
그래프 저장소 : NetworkX 외에도 Neo4j도 그래프 저장소로 지원됩니다.
사용자 관리 : 개별 사용자 그래프 생성 및 권한 관리
여기에서 데모 노트북을 확인하세요.
중요한 구성 정보는 cognee 빠른 시작 가이드를 참조하세요.
도커 구성
중요한 베타 정보 및 사용 지침은 cognee 개발 가이드를 참조하세요.
pip 설치 코그니
<스타일> 테이블 { 너비: 100%; } </style>
이름 | 유형 | 현재 상태 | 알려진 문제 |
---|---|---|---|
Qdrant | 벡터 | 안정적 ✅ | |
위비에이트 | 벡터 | 안정적 ✅ | |
랜스DB | 벡터 | 안정적 ✅ | |
네오4j | 그래프 | 안정적 ✅ | |
네트워크X | 그래프 | 안정적 ✅ | |
팔코DB | 벡터/그래프 | 불안정한 | |
PG벡터 | 벡터 | 불안정한 | Postgres DB가 시간 초과 오류를 반환합니다. |