一个使用本地AI模型(集成MCP协议)将文本或网页内容转换为结构化知识图谱的工具,并在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
注意:所有环境变量都是可选的,并且有合理的默认值。应用程序无需任何配置即可运行。
对于Ollama:
# 安装并启动Ollama
curl -fsSL https://ollama.ai/install.sh | sh
ollama serve
# 拉取模型
ollama pull llama3.2:latest
对于LM Studio:
python app.py
应用程序将启动具有MCP服务器功能的Gradio界面。
粘贴要分析的任何文本内容:
苹果公司由史蒂夫·乔布斯、史蒂夫·沃兹尼亚克和罗纳德·韦恩于1976年创立。该公司总部位于加利福尼亚州库比蒂诺。
提供一个网页URL以提取和分析:
https://en.wikipedia.org/wiki/Artificial_intelligence
对于非常大的内容,如LLM对话摘录:
# 示例:处理一个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>...</svg>",
"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_<uuid8>.svgknowledge_graph_<uuid8>_chunk_0001.svg,chunk_0002.svg等knowledge_graph_<uuid8>.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(更快)