产品背景:
目前我们正在开发一款企业智能客服产品,由于多年的PHP兵种,所以咱不使用python开发,已加快速度(引战,PHP是世界上最好的语言)
技术栈:
PHP+Mysql+Nextjs+Milvus+阿里千问+部分LangChain
已完成的list:
上传文档后,智能解析,分块,向量化,入库,查询,向量化,查相似,LLM总结,输出。这应该是传统RAG的标注流程吧,
为什么使用graph RAG:
增加产品的噱头,增加卖点
测试graph RAG:
研究了两天nebulagraph,感谢社区大佬的贡献,对nebulagraph的使用流程有了初步的了解,再加上本地部署后的一些使用心得,大致总结出了一些使用流程和疑问,还请大佬给一些建议。
基于PHP+LLM下的nebulagraph的使用:
1.对文档进行分块(已有),通过LLM对分块的内容进行三元组抽取(完成)
2.把多个三元组入库到nebulagraph,并测试完成,如:
$triples = [
['张三', '居住在', '北京'],
['李四', '居住在', '上海'],
['张三', '朋友', '李四'],
['张三', '朋友', '元元'],
['元元', '朋友', '元宝'],
// 添加更多三元组
];
将实体张三,李四,元元,北京,上海,元宝作为VERTEX,居住在,朋友作为EDGE
3.查询时,使用LLM对用户的输入进行Text2Cypher转换,转成MATCH 语句(完成)
4.执行查询(完成)
5.结果输出(完成)
对上述疑问:
1.整体流程是否合理
2.对于TAG和EDGE的创建,因为是半结构文档,创建的时候目前有两个方案,不知道用哪个更合理:
1)固定创建TAG: entity(name:string). EDGE:relationShip(relationShip:string)
CREATE EDGE relationShip (居住在);
CREATE EDGE relationShip (朋友);
2)TAG 不变,EDGE 根据上面收取的三元组中的第二个元素作为edge,如
CREATE EDGE 居住在 ();
CREATE EDGE 朋友 ();
对于2)方案,EDGE会非常非常多
3.对于查询的时候,LLM抽取的如果不准确导致无法查询到正确的数据,如何解决呢?
4.对分块后的文档进行抽取三元组的时候,可能会造成相同的node,但是含义不同的情况,如何区分呢?比如重名,两个不同的属性的人,抽取到的姓名都叫“张三”
请社区的大佬指教。