这是系列文章的第4篇:《用国产大模型+LangChain+Neo4j建立知识图谱 之四 开发实现局部和全局查询的自由对话Agent》。 要用LangChain写一个GraphRAG的APP,它要处理几种情况:
1、有些问题不需要执行GraphRAG,LLM可以直接回答。比如打招呼的输入“你好”。
2、有些问题需要执行GraphRAG的局部查询,在Neo4j知识图谱中查找答案,比如“唐僧和会说话的树讨论了什么?”这样的问题。
3、有些问题需要执行GraphRAG的全局查询,在Neo4j知识图谱预先生成的社区摘要中查找答案,比如“唐僧的取经团队对遇到的妖怪是什么样的态度?”这样的问题。
4、还需要支持有上下文的多轮对话,在多轮对话中上面3种问题和答案可能都有,交织在一起。
5、最后用R Shiny APP UI去封装它们。
最好的实现框架可能是LangChain的Agent,由Agent根据当前的上下文决定是否需要调用工具执行GraphRAG局部查询或全局查询,或者直接调LLM回答问题。这样有几个要求:
1、LLM需要支持函数调用的功能,由Agent决定调用函数去执行GraphRAG局部查询或全局查询。并不是所有的国产大模型都支持函数调用功能,或者是在LangChain的集成中支持函数调用的功能。
2、需要为GraphRAG局部查询与GraphRAG全局查询各写一个工具函数。
3、需要写一个支持输出知识图谱检索溯源信息的自定义Agent。
参阅LangChain文档《Conversational RAG》与LangGraph文档《 Agentic RAG》,这个工作看起来并不是那么简单,经过几天的努力还是完成了。
体验地址:知识图谱GraphRAG聊天Agent。