摘要
本文详细介绍如何使用Graphiti MCP Server构建和集成AI知识图谱服务。通过Model Context Protocol (MCP)协议,实现AI助手与知识图谱的无缝交互,支持动态环境下的实时知识更新和查询。文章包含完整的集成方案、环境配置、服务部署以及最佳实践建议,帮助开发者快速构建智能化的知识图谱应用。
目录
1. 知识图谱服务概述
1.1 什么是知识图谱服务
知识图谱服务是一种基于图数据库的AI服务,它能够:
- 实时集成用户交互数据
- 处理结构化和非结构化数据
- 支持增量数据更新
- 提供高效的知识检索
- 实现精确的历史查询
1.2 核心功能
功能模块 | 描述 | 应用场景 |
---|---|---|
事件管理 | 添加、检索和删除事件 | 用户交互记录 |
实体管理 | 搜索和管理实体节点 | 知识图谱构建 |
搜索能力 | 语义和混合搜索 | 知识检索 |
分组管理 | 数据分组和过滤 | 多租户支持 |
图谱维护 | 清理和重建索引 | 系统维护 |
2. MCP协议详解
2.1 协议架构
2.2 数据流设计
3. 环境准备
3.1 基础环境要求
class EnvironmentChecker:
"""环境检查器"""
def __init__(self):
self.requirements = {
"python": "3.10+",
"neo4j": "5.26+",
"openai": "latest",
"uv": "latest"
}
def check_environment(self):
"""检查环境配置"""
try:
# 检查Python版本
python_version = sys.version_info
if python_version.major < 3 or \
(python_version.major == 3 and python_version.minor < 10):
raise EnvironmentError("Python版本需要3.10或更高")
# 检查Neo4j连接
self._check_neo4j()
# 检查OpenAI配置
self._check_openai()
return True
except Exception as e:
logger.error(f"环境检查失败: {str(e)}")
raise
3.2 环境变量配置
class ConfigManager:
"""配置管理器"""
def __init__(self):
self.required_vars = {
"NEO4J_URI": "Neo4j数据库URI",
"NEO4J_USER": "Neo4j用户名",
"NEO4J_PASSWORD": "Neo4j密码",
"OPENAI_API_KEY": "OpenAI API密钥",
"MODEL_NAME": "OpenAI模型名称"
}
def validate_config(self):
"""验证配置"""
missing_vars = []
for var, desc in self.required_vars.items():
if not os.getenv(var):
missing_vars.append(f"{var} ({desc})")
if missing_vars:
raise EnvironmentError(
f"缺少必要的环境变量: {', '.join(missing_vars)}"
)
4. 服务部署
4.1 Docker部署配置
# docker-compose.yml
version: '3.8'
services:
graphiti:
image: zepai/graphiti:latest
ports:
- "8000:8000"
environment:
- NEO4J_URI=bolt://neo4j:7687
- NEO4J_USER=${NEO4J_USER}
- NEO4J_PASSWORD=${NEO4J_PASSWORD}
- OPENAI_API_KEY=${OPENAI_API_KEY}
- MODEL_NAME=${MODEL_NAME}
depends_on:
- neo4j
neo4j:
image: neo4j:5.26.0
ports:
- "7474:7474" # HTTP
- "7687:7687" # Bolt
volumes:
- neo4j_data:/data
environment:
- NEO4J_AUTH=${NEO4J_USER}/${NEO4J_PASSWORD}
volumes:
neo4j_data:
4.2 部署脚本
class DeploymentManager:
"""部署管理器"""
def __init__(self, compose_file: str):
self.compose_file = compose_file
def deploy(self):
"""部署服务"""
try:
# 启动服务
subprocess.run(
["docker-compose", "-f", self.compose_file, "up", "-d"],
check=True
)
# 等待服务就绪
self._wait_for_services()
return True
except Exception as e:
logger.error(f"部署失败: {str(e)}")
raise
def _wait_for_services(self):
"""等待服务就绪"""
services = {
"graphiti": "http://localhost:8000/health",
"neo4j": "http://localhost:7474"
}
for service, url in services.items():
while True:
try:
response = requests.get(url)
if response.status_code == 200:
break
except:
time.sleep(5)
5. 客户端集成
5.1 Cursor IDE集成
{
"mcpServers": {
"graphiti-memory": {
"url": "http://localhost:8000/sse"
}
}
}
5.2 Claude Desktop集成
{
"mcpServers": {
"graphiti-memory": {
"command": "npx",
"args": [
"mcp-remote",
"http://localhost:8000/sse"
]
}
}
}
6. 功能开发
6.1 事件管理
class EpisodeManager:
"""事件管理器"""
def __init__(self, client):
self.client = client
def add_episode(self, name: str, content: str, source: str = "text"):
"""添加事件
Args:
name: 事件名称
content: 事件内容
source: 事件来源
"""
try:
response = self.client.add_episode(
name=name,
episode_body=content,
source=source
)
return response
except Exception as e:
logger.error(f"添加事件失败: {str(e)}")
raise
6.2 知识检索
class KnowledgeRetriever:
"""知识检索器"""
def __init__(self, client):
self.client = client
def search_nodes(self, query: str, limit: int = 10):
"""搜索节点
Args:
query: 搜索查询
limit: 结果限制
"""
try:
response = self.client.search_nodes(
query=query,
limit=limit
)
return response
except Exception as e:
logger.error(f"搜索节点失败: {str(e)}")
raise
7. 最佳实践
7.1 部署建议
-
环境配置
- 使用环境变量管理敏感信息
- 定期更新依赖版本
- 配置适当的资源限制
-
安全措施
- 启用HTTPS
- 配置访问控制
- 加密敏感数据
-
性能优化
- 使用连接池
- 配置缓存
- 优化查询
7.2 常见问题
8. 总结与展望
8.1 关键要点
- 完整的集成方案
- 清晰的架构设计
- 可靠的部署方案
- 实用的最佳实践