一个结合了知识图谱和RAG的多智能体对话框架,可以从不同社交平台的评论中提取并构建知识图谱数据库,让它们以各平台代表性的观点和表达方式,围绕一个话题展开辩论。
API key配置文件是config.py。该程序基于moonshot-v1模型实现,需要在配置文件中填入从kimi开放平台申请的API key以正常运行。如果需要更换其他模型服务,需要同时修改API_BASE_URL和程序中相应调用大模型的部分(模型名称、特殊参数等)
知识图谱类的主文件是knowledgeGraph.py,具体实现主文件接口的组件类分别为graph_entity.py,graph_search.py,graph_storage.py,graph_visualization.py。用于RAG的嵌入模型配置文件为embedding_model.py。
使用到知识图谱的两个工具类是knowledge_retriever.py和knowledgeGraphExtractor.py,分别用于信息检索和知识图谱提取。
平台大战对话的主程序是platform_war.py,相关UI和Agent类分别为platform_war_UI.py和chat.py。
由于向量数据处理部分使用的faiss-gpu暂时只支持CUDA加速,所以本项目目前只支持Windows/Linux系统运行。
创建conda环境
conda create -n platform_war python=3.11.7
conda activate platform_war
启用gpu加速(可选)
安装电脑显卡版本匹配的CUDA和PyTorch, 例(具体版本请按电脑配置修改):
conda install pytorch==2.1.2 torchvision==0.16.2 torchaudio==2.1.2 pytorch-cuda=12.1 -c pytorch -c nvidia
然后用以下命令安装FAISS的gpu版本
conda install -c conda-forge faiss-gpu
项目目录下安装依赖(必选)
pip install -r requirements.txt
如果前一步没有安装CUDA,需要将embedding_model.py中的
model_kwargs={"device": "cuda"}
修改为
model_kwargs={"device": "cpu"}
配置API(必选)
该程序基于moonshot-v1模型实现,需要在配置文件中填入从kimi开放平台申请的API key以正常运行。API key配置文件是config.py。
knowledgeGraphExtractor.py可用于从指定格式的json文件中自动提取知识图谱。
在项目目录下新建data文件夹,放入需要提取的数据文件,命名为result.json(或者可以修改knowledgeGraphExtractor.py中的路径以使用其他文件名),然后运行knowledgeGraphExtractor.py。
result.json需要遵循以下json格式:
{
"item_id": { // 项目ID作为key
"title": string, // 标题
"clusters": [ // 评论簇数组
{
"comments": [ // 评论内容数组
string,
...
]
}
]
},
"item_id": {
"title": string,
"clusters": [
{
"comments": [
string,
...
]
}
]
},
...
}
从原始数据提取完知识图谱后,会在项目目录下生成相应的知识图谱数据库。
可以将platform_war.py、platform_war_UI.py和chat.py中的PLATFORM_NAME和PLATFORM_KNOWLEDGE_BASE修改为对应的数据库名称和路径。
运行platform_war.py以开始平台辩论。
如果想复现项目视频中的效果,需要单独下载三个平台的向量数据库。
百度网盘下载链接:
https://pan.baidu.com/s/1Ki0Sym9dmM76e6ghR6P8jQ?pwd=j3ih 提取码: j3ih
谷歌云盘下载链接:
https://drive.google.com/drive/folders/1kaXPSTjVaI1LP9lPtu8XhCnqjgWVlajY?usp=sharing
使用方法:
解压缩,并将bilibili_knowledge_base,weibo_knowledge_base,zhihu_knowledge_base三个文件放在项目目录下。
运行platform_war.py以开始平台辩论。
- UI缺乏自适应,在不同尺寸的窗口中可能存在显示不全/错位的问题。
- 对话轮次超出屏幕范围后,新对话会与旧对话互相覆盖。
微软GraphRAG项目 https://github.com/microsoft/graphrag