知识图谱构建器可使用集成了MCP(模型上下文协议)的本地AI模型,将文本或网页内容转化为结构化的知识图谱,并持久存储到Neo4j和Qdrant中。
pip install -r requirements.txt
# 若需完整可视化功能:
pip install networkx matplotlib
对于详细的配置说明和完整的环境变量参考,请参阅下面的配置部分。
快速开始配置:
# 基本设置(使用合理的默认值)
export MODEL_PROVIDER=ollama
export LOCAL_MODEL=llama3.2:latest
# 可选:自定义端点和处理限制
export OLLAMA_BASE_URL=http://localhost:11434
export CHUNK_SIZE=2000
export MAX_CHUNKS=0
注意: 所有环境变量都是可选的,并且都有合理的默认值。即使不进行任何配置,应用程序也能运行。
python app.py
应用程序将启动一个带有MCP服务器功能的Gradio界面。
对于Ollama:
# 安装并启动Ollama
curl -fsSL https://ollama.ai/install.sh | sh
ollama serve
# 拉取模型
ollama pull llama3.2:latest
对于LM Studio:
粘贴任何文本内容进行分析:
苹果公司由史蒂夫·乔布斯、史蒂夫·沃兹尼亚克和罗纳德·韦恩于1976年创立。该公司总部位于加利福尼亚州库比蒂诺。
提供网页URL进行提取和分析:
https://en.wikipedia.org/wiki/Artificial_intelligence
对于非常大的内容,如大语言模型对话提取:
# 示例:处理300MB的对话日志
# 系统将自动执行以下操作:
# 1. 检测大内容(默认超过2000个字符)
# 2. 在句子边界处智能分块
# 3. 使用本地AI模型处理每个分块
# 4. 合并和去重实体/关系
# 5. 在混合知识图谱(hKG)中存储完整的谱系跟踪信息
# 处理过程将显示进度:
# "正在分块处理大内容(314,572,800个字符)..."
# "正在处理157,286个分块..."
# "正在处理第1/157,286个分块(2000个字符)..."
# "合并结果:45,231个实体,128,904个关系"
系统返回结构化的JSON知识图谱:
{
"source": {
"type": "text|url",
"value": "input_value",
"content_preview": "前200个字符..."
},
"knowledge_graph": {
"entities": [
{
"name": "苹果公司",
"type": "ORGANIZATION",
"description": "1976年创立的科技公司"
}
],
"relationships": [
{
"source": "史蒂夫·乔布斯",
"target": "苹果公司",
"relationship": "FOUNDED",
"description": "史蒂夫·乔布斯创立了苹果公司"
}
],
"entity_count": 5,
"relationship_count": 4
},
"visualization": {
"svg_content": "",
"svg_file_path": "/path/to/knowledge_graph_12345678.svg",
"visualization_available": true,
"real_time_updates": false,
"incremental_files_saved": 0,
"entity_color_mapping": {
"ORGANIZATION": "#4ECDC4",
"PERSON": "#FF6B6B"
},
"svg_generation_timestamp": "2024-01-15T10:30:05Z",
"visualization_engine": "networkx+matplotlib"
},
"metadata": {
"model": "ollama:llama3.2:latest",
"content_length": 150,
"uuid": "xxxxxxxx-xxxx-8xxx-xxxx-xxxxxxxxxxxx",
"neo4j_stored": true,
"qdrant_stored": true,
"timestamp": "2024-01-15T10:30:00Z",
"hkg_metadata": {
"processing_method": "single",
"chunk_count": 1,
"chunk_size": 2000,
"chunk_overlap": 200,
"source_type": "text",
"supports_large_content": true,
"max_content_size": "unlimited",
"visualization_integration": {
"real_time_visualization": false,
"svg_files_generated": 1,
"entity_color_tracking": true,
"visualization_lineage": true,
"incremental_updates": false,
"neo4j_viz_metadata": true,
"qdrant_viz_metadata": true
}
}
}
}
knowledge_graph_.svg knowledge_graph__chunk_0001.svg 、chunk_0002.svg等。knowledge_graph_.svg # 处理300MB的对话日志:
# "正在分块处理大内容(314,572,800个字符)..."
# "正在处理157,286个分块..."
# 实时更新:
# "正在处理第1/157,286个分块(2000个字符)..."
# "实时图谱更新:更新后的图谱:5个实体,3个关系(第1/157,286个分块)"
# "保存增量图谱:knowledge_graph_12345678_chunk_0001.svg"
# "正在处理第2/157,286个分块(2000个字符)..."
# "实时图谱更新:更新后的图谱:12个实体,8个关系(第2/157,286个分块)"
# "保存增量图谱:knowledge_graph_12345678_chunk_0002.svg"
# ... 继续处理所有分块 ...
# "最终结果:45,231个实体,128,904个关系"
# "保存最终SVG可视化:knowledge_graph_12345678.svg"
app.py:带有Gradio界面的主应用程序文件。extract_text_from_url():网页抓取功能(app.py:41)。chunk_text():通过句子边界检测进行智能内容分块(app.py:214)。merge_extraction_results():智能合并分块结果(app.py:250)。get_entity_color():实体类型颜色映射(app.py:299)。create_knowledge_graph_svg():SVG图谱生成(app.py:311)。RealTimeGraphVisualizer:实时增量可视化(app.py:453)。extract_entities_and_relationships():具有实时更新的AI驱动实体提取(app.py:645)。extract_entities_and_relationships_single():单分块处理(app.py:722)。build_knowledge_graph():带有可视化的主要编排函数(app.py:795)。generate_uuidv8():用于实体跟踪的UUID生成(app.py:68)。所有配置都通过环境变量处理。应用程序为所有设置提供了合理的默认值,允许在不进行任何配置的情况下运行,同时也提供了完全的自定义选项。
| 变量 | 类型 | 默认值 | 是否必需 | 描述 | 示例值 |
|---|---|---|---|---|---|
MODEL_PROVIDER |
字符串 | "ollama" |
否 | 要使用的AI模型提供商 | "ollama", "lmstudio" |
LOCAL_MODEL |
字符串 | "llama3.2:latest" |
否 | 本地模型标识符 | "llama3.2:latest", "mistral:7b", "codellama:13b" |
OLLAMA_BASE_URL |
字符串 | "http://localhost:11434" |
否 | Ollama API端点 | "http://localhost:11434", "http://192.168.1.100:11434" |
LMSTUDIO_BASE_URL |
字符串 | "http://localhost:1234" |
否 | LM Studio API端点 | "http://localhost:1234", "http://127.0.0.1:1234" |
CHUNK_SIZE |
整数 | 2000 |
否 | 用于AI处理的每个分块的字符数 | 1000, 2000, 4000, 8000 |
CHUNK_OVERLAP |
整数 | 200 |
否 | 分块之间的重叠字符数,用于上下文 | 100, 200, 400, 500 |
MAX_CHUNKS |
整数 | 0 |
否 | 要处理的最大分块数(0表示无限制) | 0, 100, 1000, 5000 |
HF_TOKEN |
字符串 | None |
否 | HuggingFace API令牌(旧版,未使用) | "hf_xxxxxxxxxxxx" |
# 核心模型配置
export MODEL_PROVIDER=ollama
export LOCAL_MODEL=llama3.2:latest
export OLLAMA_BASE_URL=http://localhost:11434
# 大内容处理
export CHUNK_SIZE=2000
export CHUNK_OVERLAP=200
export MAX_CHUNKS=0
# 添加到~/.bashrc或~/.zshrc
export MODEL_PROVIDER=ollama
export LOCAL_MODEL=llama3.2:latest
export OLLAMA_BASE_URL=http://localhost:11434
export CHUNK_SIZE=2000
export CHUNK_OVERLAP=200
export MAX_CHUNKS=0
# 在项目根目录创建.env文件
MODEL_PROVIDER=ollama
LOCAL_MODEL=llama3.2:latest
OLLAMA_BASE_URL=http://localhost:11434
LMSTUDIO_BASE_URL=http://localhost:1234
CHUNK_SIZE=2000
CHUNK_OVERLAP=200
MAX_CHUNKS=0
# 基本Ollama设置
export MODEL_PROVIDER=ollama
export LOCAL_MODEL=llama3.2:latest
export OLLAMA_BASE_URL=http://localhost:11434
# 替代模型
export LOCAL_MODEL=mistral:7b # Mistral 7B
export LOCAL_MODEL=codellama:13b # Code Llama 13B
export LOCAL_MODEL=llama3.2:3b # Llama 3.2 3B(更快)
export LOCAL_MODEL=phi3:mini # Phi-3 Mini(轻量级)
# 远程Ollama实例
export OLLAMA_BASE_URL=http://192.168.1.100:11434
# 基本LM Studio设置
export MODEL_PROVIDER=lmstudio
export LOCAL_MODEL=any-model-name # LM Studio的模型名称灵活
export LMSTUDIO_BASE_URL=http://localhost:1234
# 自定义LM Studio端口
export LMSTUDIO_BASE_URL=http://localhost:8080
# 远程LM Studio实例
export LMSTUDIO_BASE_URL=http://192.168.1.200:1234
# 小分块(处理速度快,分块数量多)
export CHUNK_SIZE=1000
export CHUNK_OVERLAP=100
# 中等分块(性能平衡)
export CHUNK_SIZE=2000 # 默认
export CHUNK_OVERLAP=200 # 默认
# 大分块(分块数量少,上下文多)
export CHUNK_SIZE=4000
export CHUNK_OVERLAP=400
# 非常大的分块(上下文最大,速度慢)
export CHUNK_SIZE=8000
export CHUNK_OVERLAP=800
# 无限制处理(默认)
export MAX_CHUNKS=0
# 仅处理前100个分块(测试用)
export MAX_CHUNKS=100
# 处理前1000个分块(中等数据集)
export MAX_CHUNKS=1000
# 处理前10000个分块(大型数据集)
export MAX_CHUNKS=10000
# 更小的分块,更少的重叠,有限的处理
export CHUNK_SIZE=1000
export CHUNK_OVERLAP=50
export MAX_CHUNKS=500
export LOCAL_MODEL=llama3.2:3b # 更快的模型
# 更大的分块,更多的重叠,无限制的处理
export CHUNK_SIZE=4000
export CHUNK_OVERLAP=400
export MAX_CHUNKS=0
export LOCAL_MODEL=llama3.2:latest # 完整模型
# 为有限资源提供平衡设置
export CHUNK_SIZE=1500
export CHUNK_OVERLAP=150
export MAX_CHUNKS=1000
export LOCAL_MODEL=phi3:mini # 轻量级模型
应用程序会自动验证配置设置:
MODEL_PROVIDER是否为"ollama"或"lmstudio"。CHUNK_SIZE、CHUNK_OVERLAP和MAX_CHUNKS是有效的整数。1. 模型提供商无响应
# 检查Ollama是否正在运行
curl http://localhost:11434/api/version
# 检查LM Studio是否正在运行
curl http://localhost:1234/v1/models
# 解决方案:启动相应的服务
ollama serve # 对于Ollama
# 或者启动LM Studio GUI并启用本地服务器
2. 模型未找到
# 列出可用的Ollama模型
ollama list
# 拉取缺失的模型
ollama pull llama3.2:latest
# 对于LM Studio:在GUI中加载模型
3. 大内容处理时的内存问题
# 减小分块大小并设置限制
export CHUNK_SIZE=1000
export MAX_CHUNKS=100
# 使用更轻量级的模型
export LOCAL_MODEL=llama3.2:3b
4. 处理速度慢
# 优化速度
export CHUNK_SIZE=1500
export CHUNK_OVERLAP=100
export MAX_CHUNKS=500
export LOCAL_MODEL=phi3:mini
# 快速迭代,有限处理
export MODEL_PROVIDER=ollama
export LOCAL_MODEL=llama3.2:3b
export CHUNK_SIZE=1000
export CHUNK_OVERLAP=100
export MAX_CHUNKS=50
# 高质量,无限制处理
export MODEL_PROVIDER=ollama
export LOCAL_MODEL=llama3.2:latest
export CHUNK_SIZE=3000
export CHUNK_OVERLAP=300
export MAX_CHUNKS=0
# 针对300MB+文件进行优化
export MODEL_PROVIDER=ollama
export LOCAL_MODEL=llama3.2:latest
export CHUNK_SIZE=2000
export CHUNK_OVERLAP=200
export MAX_CHUNKS=0
# 最小化资源使用
export MODEL_PROVIDER=ollama
export LOCAL_MODEL=phi3:mini
export CHUNK_SIZE=800
export CHUNK_OVERLAP=50
export MAX_CHUNKS=200
# 基于Docker的Ollama
export OLLAMA_BASE_URL=http://ollama-container:11434
# Kubernetes服务
export OLLAMA_BASE_URL=http://ollama-service.default.svc.cluster.local:11434
# 负载均衡器
export OLLAMA_BASE_URL=http://ollama-lb.example.com:11434
应用程序在启动时读取环境变量。要更改配置:
全面的错误处理涵盖以下情况:
应用程序与MCP服务器集成,用于混合知识图谱存储,并进行完整的可视化跟踪:
在配置了MCP服务器的Claude Code环境中运行时,MCP工具会自动可用。
hKG系统现在在传统知识图谱存储的基础上维护完整的可视化谱系:
┌─────────────────┐ ┌──────────────────────┐ ┌─────────────────────┐
│ 源文本 │───▶│ 分块 + AI │───▶│ 实体/关系 │
│ (300MB+) │ │ 处理 │ │ 提取 │
└─────────────────┘ └──────────────────────┘ └─────────────────────┘
│ │
▼ ▼
┌─────────────────┐ ┌──────────────────────┐ ┌─────────────────────┐
│ 实时SVG生成 │◀───│ 增量图谱可视化 │◀───│ 合并结果 │
│ │ │ │ │ + 去重 │
└─────────────────┘ └──────────────────────┘ └─────────────────────┘
│ │ │
▼ ▼ ▼
┌─────────────────┐ ┌──────────────────────┐ ┌─────────────────────┐
│ SVG文件存储 │ │ 可视化元数据创建 │ │ hKG存储 │
│ (增量) │ │ │ │ (Neo4j + Qdrant) │
│ │ │ │ │ + 可视化元数据 │
└─────────────────┘ └──────────────────────┘ └─────────────────────┘
KGB-mcp/
├── app.py # 主应用程序
├── requirements.txt # 依赖项
├── CLAUDE.md # Claude Code说明
├── ARCHITECTURE.md # 系统架构
├── test_core.py # 核心功能测试
└── test_integration.py # 集成测试
# 运行核心测试
python test_core.py
# 运行集成测试
python test_integration.py
借助本地AI和MCP集成的强大功能,将任何内容转化为结构化的知识图谱!