使用PHP开发基于nebulaGraph构建智能客服的流程梳理,及疑问,请各位大佬吐槽

产品背景:
目前我们正在开发一款企业智能客服产品,由于多年的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,但是含义不同的情况,如何区分呢?比如重名,两个不同的属性的人,抽取到的姓名都叫“张三”

请社区的大佬指教。

  1. 个人倾向于方案 1;这样不需要频繁的进行 edge 的增加;
  2. knowledge graph 的数据还是要不断完善的,不太可能一蹴而就。可以通过一些图的查询语句来做规则检测以及增删数据;另外,还要补充一些人工审核;
  3. 在条件有限的情况下,如果人做不到的事情,我觉得系统也比较难做到,除非多给一些其他的输入。