105 lines
2.8 KiB
Plaintext
105 lines
2.8 KiB
Plaintext
---
|
|
id: cognee
|
|
title: Cognee
|
|
sidebar_label: Cognee
|
|
---
|
|
|
|
## Quick Summary
|
|
|
|
Cognee is an open-source framework for anyone to easily implement graph RAG into their LLM application. You can learn more by visiting their [website here.](https://www.cognee.ai/)
|
|
|
|
:::info
|
|
With Cognee, you should see an increase in your [`ContextualRelevancyMetric`](/docs/metrics-contextual-relevancy), [`ContextualRecallMetric`](/docs/metrics-contextual-recall), and [`ContextualPrecisionMetric`](/docs/metrics-contextual-precision) scores.
|
|
:::
|
|
|
|
Unlike traditional vector databases that relies on simple embedding retrieval and re-rankings to retrieve `retrieval_context`s, Cognee stores and creates a "semantic graph" out of your data, which allows for more accurate retrievals.
|
|
|
|
## Setup Cognee
|
|
|
|
Simply add your LLM API key to the environment variables:
|
|
|
|
```bash
|
|
import os
|
|
|
|
os.environ["LLM_API_KEY"] = "YOUR_OPENAI_API_KEY"
|
|
```
|
|
|
|
For those on Networkx, you can also create an account on Graphistry to visualize results:
|
|
|
|
```python
|
|
import cognee
|
|
|
|
cognee.config.set_graphistry_config({
|
|
"username": "YOUR_USERNAME",
|
|
"password": "YOUR_PASSWORD"
|
|
})
|
|
```
|
|
|
|
Finally, ingest your data into Cognee and run some retrievals:
|
|
|
|
```python
|
|
from cognee.api.v1.search import SearchType
|
|
|
|
...
|
|
text = "Cognee is the Graph RAG Framework"
|
|
await cognee.add(text) # add a new piece of information
|
|
await cognee.cognify() # create a semantic graph using cognee
|
|
|
|
retrieval_context = await cognee.search(SearchType.INSIGHTS, query_text="What is Cognee?")
|
|
for context in retrieval_context:
|
|
print(context)
|
|
```
|
|
|
|
## Evaluating Cognee RAG Pipelines
|
|
|
|
Unit testing RAG pipelines powered by Cognee is as simple as defining an `EvaluationDataset` and generating `actual_output`s and `retrieval_context`s at evaluation time. Building upon the previous example, first generate all the necessarily parameters required to test RAG:
|
|
|
|
```python main.py
|
|
...
|
|
|
|
input = "What is Cognee?"
|
|
retrieval_context = await cognee.search(SearchType.INSIGHTS, query_text="What is Cognee?")
|
|
|
|
prompt = """
|
|
Answer the user question based on the supporting context
|
|
|
|
User Question:
|
|
{input}
|
|
|
|
Supporting Context:
|
|
{retrieval_context}
|
|
"""
|
|
|
|
actual_output = generate(prompt) # hypothetical function, replace with your own LLM
|
|
```
|
|
|
|
Then, simply run `evaluate()`:
|
|
|
|
```python
|
|
from deepeval.metrics import (
|
|
ContextualRecallMetric,
|
|
ContextualPrecisionMetric,
|
|
ContextualRelevancyMetric,
|
|
)
|
|
from deepeval.test_case import LLMTestCase
|
|
from deepeval import evaluate
|
|
|
|
...
|
|
test_case = LLMTestCase(
|
|
input=input,
|
|
actual_output=actual_output,
|
|
retrieval_context=retrieval_context,
|
|
expected_output="Cognee is the Graph RAG Framework.",
|
|
)
|
|
evaluate(
|
|
[test_case],
|
|
metrics=[
|
|
ContextualRecallMetric(),
|
|
ContextualPrecisionMetric(),
|
|
ContextualRelevancyMetric(),
|
|
],
|
|
)
|
|
```
|
|
|
|
That's it! Do you notice an increase in the contextual metric scores?
|