一、cognee官网地址
Quickstart - Cognee Documentation里面有快速入门教程,如果有没有跑通的小伙伴可以参照我的文章哦!
1、安装必要的库,这里使用的是uv不清楚的小伙伴可以看我之前的文章,有关于uv的配置。
uv add cognee neo4j chromadb fastapi
2、LLM环境配置的问题具体可以参考官方示例,链接放下面了
LLM Providers - Cognee Documentation
二、配置neo4j
1、登录官网https://console-preview.neo4j.io/
登陆后创建实例

2、点击个人账户设置,创建一个API key,这个是你链接云端neo4j的凭证。注意保存
3、创建.env文件配置好,此处注意url如果链接失败要加ssc来强链接数据库。剩下的填对应的就好。
GRAPH_DATABASE_PROVIDER=neo4j
GRAPH_DATABASE_URL="neo4j+ssc:"
GRAPH_DATABASE_USERNAME="neo4j"
GRAPH_DATABASE_PASSWORD=""
4、使用方式
示例代码如下:
import os
# 【关键点 1】加载环境变量必须在最前面
from dotenv import load_dotenv
load_dotenv()
import asyncio
import signal
import logging
import uvicorn
import chromadb
import cognee
from cognee.api.client import app as cognee_app
from fastapi.middleware.cors import CORSMiddleware
# 配置日志
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')
logger = logging.getLogger("AzureCogneeApp")
# ==============================================================================
# CORS 配置
# ==============================================================================
if cognee_app:
logger.info("🛡️ 正在配置 CORS...")
cognee_app.add_middleware(
CORSMiddleware,
allow_origins=["*"],
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
ui_pid = None
def configure_env():
"""配置所有环境变量 (Azure + Neo4j)"""
logger.info("正在配置环境变量...")
# 1. Azure OpenAI 配置
os.environ["LLM_PROVIDER"] = "azure"
os.environ["LLM_MODEL"] = os.getenv("LLM_MODEL", "azure/gpt-4")
os.environ["LLM_API_KEY"] = os.getenv("LLM_API_KEY")
os.environ["LLM_API_BASE"] = os.getenv("LLM_ENDPOINT")
os.environ["LLM_API_VERSION"] = os.getenv("LLM_API_VERSION")
os.environ["AZURE_OPENAI_API_KEY"] = os.getenv("LLM_API_KEY")
os.environ["AZURE_OPENAI_ENDPOINT"] = os.getenv("LLM_ENDPOINT")
os.environ["OPENAI_API_VERSION"] = os.getenv("LLM_API_VERSION")
os.environ["EMBEDDING_PROVIDER"] = "azure"
os.environ["EMBEDDING_MODEL"] = os.getenv("EMBEDDING_MODEL")
os.environ["EMBEDDING_API_KEY"] = os.getenv("EMBEDDING_API_KEY")
os.environ["EMBEDDING_API_BASE"] = os.getenv("EMBEDDING_ENDPOINT")
os.environ["EMBEDDING_API_VERSION"] = os.getenv("EMBEDDING_API_VERSION")
# 2. Neo4j 配置 (Cognee 会自动读取这些标准名称)
# 这里的逻辑是:如果 .env 里写了旧的变量名(NEO4J_...),这里手动映射给 Cognee 识别的名称(GRAPH_DATABASE_...)
# 如果你已经按第一步修改了 .env,这段代码会直接读取生效
if os.getenv("NEO4J_URL"):
logger.info("🔌 检测到 Neo4j 配置,正在应用...")
os.environ["GRAPH_DATABASE_PROVIDER"] = "neo4j"
os.environ["GRAPH_DATABASE_URL"] = os.getenv("NEO4J_URL")
os.environ["GRAPH_DATABASE_USERNAME"] = os.getenv("NEO4J_USERNAME", "neo4j")
os.environ["GRAPH_DATABASE_PASSWORD"] = os.getenv("NEO4J_PASSWORD")
logger.info(f"配置完成。图数据库提供商: {os.getenv('GRAPH_DATABASE_PROVIDER', 'Default (NetworkX)')}")
def pid_callback(pid: int):
global ui_pid
ui_pid = pid
async def start_api_server():
logger.info("🚀 正在启动后端 API 服务器...")
config = uvicorn.Config(cognee_app, host="0.0.0.0", port=8000, log_level="warning", reload=False)
server = uvicorn.Server(config)
await server.serve()
async def setup_chroma_db():
logger.info("初始化 ChromaDB...")
db_path = os.getenv("CHROMADB_PATH", "./chroma_db")
os.makedirs(db_path, exist_ok=True)
client = chromadb.PersistentClient(path=db_path)
collection = client.get_or_create_collection(name="knowledge_graph")
return collection
async def prepare_data():
documents = [
"鲁迅喜欢抽烟",
"鲁迅擅长写文章",
"鲁迅写过的文章有朝花夕拾",
"鲁迅也叫周树人",
"二蛋小时候打过鲁迅,是鲁迅最好的玩伴",
"三蛋是二蛋的弟弟,经常被二蛋欺负",
"三蛋的爸爸是二蛋的爸爸,他们的爸爸是一个木匠,喜欢做些小工具"
]
logger.info("📚 开始准备数据...")
# 清理旧数据 (注意:这会尝试清空连接的图数据库)
await cognee.prune.prune_data()
await cognee.prune.prune_system(metadata=True)
logger.info(f"📥 添加文档...")
for doc in documents:
await cognee.add(doc)
logger.info("🧠 正在构建知识图谱 (Cognify)...")
try:
await cognee.cognify()
logger.info("✅ 知识图谱构建完成")
except Exception as e:
logger.error(f"❌ 构建图谱失败: {e}")
raise e
test_query = "鲁迅是谁?"
logger.info(f"🔍 测试搜索: {test_query}")
results = await cognee.search(test_query)
for idx, res in enumerate(results, 1):
logger.info(f"结果 {idx}: {str(res)[:100]}...")
async def main():
# 1. 配置环境 (设置 os.environ,cognee 内部会自动读取)
configure_env()
# 2. 初始化 Chroma
await setup_chroma_db()
# 3. 执行数据流程
try:
await prepare_data()
except Exception as e:
logger.error("程序在数据准备阶段终止。")
return
# 4. 启动服务
logger.info("⚡ 启动服务...")
api_task = asyncio.create_task(start_api_server())
await asyncio.sleep(3)
logger.info("="*60)
logger.info(f"🎉 数据应已写入云端 Neo4j!")
logger.info(f"👉 请访问 https://console.neo4j.io 使用 Neo4j Browser 查看")
logger.info(f"👉 后端 API: http://localhost:8000")
logger.info("="*60)
try:
while True:
await asyncio.sleep(1)
except KeyboardInterrupt:
logger.info("停止服务...")
api_task.cancel()
if __name__ == "__main__":
try:
asyncio.run(main())
except KeyboardInterrupt:
pass
这里注意!!
1.Cognee是前后端分离项目,如果通过api部署的话导入的包路径是:from cognee.api.client import app
运行上面的示例代码。成功示例:

5、可视化使用方式
注意数据库实例要是running状态
点击query或者explore可以可视化
query的可视化代码示例(查看节点)
MATCH (n) RETURN n LIMIT 50
查看实体关系示例代码与结果图
MATCH (source:Entity)-[r]->(target:Entity)
RETURN source, r, target
LIMIT 100
explore操作示例:
如果存入数据后没有显示可视化图谱,点击show me a graph即可.

可能存在的疑问
1、为什么我的知识图谱不显示内容,显示的是id?
解决办法:按照图示选择你想要让节点展示的内容即可。

一般都是text或者



844

被折叠的 条评论
为什么被折叠?



