基于GraphRAG构建多轮反问引导对话客服
本文介绍基于云原生数据仓库 AnalyticDB PostgreSQL 版的GraphRAG服务,构建多轮反问引导对话客服的整体流程,帮助智能电子等行业构建高效客服系统。该方案能够提高问题诊断效率与人机交互体验,适用于售后服务支持、复杂场景下的自然语言交互等场景。
背景
在以白色家电为代表的智能电子行业中,咨询类客服系统的需求日益凸显。这类系统旨在通过多轮提问,精准识别用户在产品使用过程中遇到的问题,并据此提供切实可行的解决方案。这不仅能够有效提升用户体验,还能进一步优化售后服务流程。在竞争激烈的市场环境下,这类智能化客服平台凭借其卓越的问题诊断能力和高效的服务响应机制,发挥着关键作用。
在处理用户常见热点问题时,行业专家通常会构建一个或多个决策树(decision tree)模型。这些决策树基于具体的应用场景设计,通过与用户进行反问式对话,将广泛的问题逐步细化,并最终定位到具体的状况上。这种层次化的分析方法,能实现从宏观问题到微观特定情境的过渡,从而为用户提供精准且针对性强的解决方案。
版本限制
内核版本为7.3.2.0及以上的AnalyticDB for PostgreSQL7.0版实例。
前提条件
安装plpython3u插件(默认已安装)。
检查插件是否安装成功:切换到指定数据库的public模式下,执行如下命令。
SELECT * FROM pg_extension WHERE extname = 'plpython3u';
返回如下结果,表示plpython3u插件已成功安装。如未返回结果,表示指定数据库的public模式下没有安装此插件。
oid | extname | extowner | extnamespace | extrelocatable | extversion | extconfig | extcondition -------+------------+----------+--------------+----------------+------------+-----------+-------------- 14674 | plpython3u | 10 | 11 | f | 1.0 | | (1 row)
安装age插件后,需要在数据库中将ag_catalog添加到search_path,以简化查询。以下是两种配置方式:
会话级别设置。
SET search_path TO public, ag_catalog;
数据库级别永久设置。
ALTER DATABASE <database_name> SET search_path TO public, ag_catalog;
(可选)使用初始账号或高权限用户RDS_SUPERUSER授权其他用户使用图插件。
GRANT USAGE ON SCHEMA ag_catalog TO <username>;
安装adbpg_graphrag插件,请提交工单联系技术支持协助安装此插件。
adbpg_graphrag插件依赖plpython3u、age插件,安装此插件前请先确认依赖插件完成安装。
基于决策树的多轮交互模式
决策树
决策树是一个树状结构,其根节点为树的起点,代表整个数据集,内部节点表示一个特征(属性)的判断条件,分支代表某个判断条件的输出结果,而叶子节点是最终的决策结果。一个简单的空调客服决策树如下图所示。
GraphRAG服务
AnalyticDB for PostgreSQLGraphRAG服务提供了一种基于决策树的模式,实现多轮交互式引导对话。该模式通过一系列精心设计的问题,逐步细化用户的需求或问题,从而提高信息检索和对话管理的效率与准确性,提升人机交互体验。
操作步骤
初始化GraphRAG服务
语法
SELECT adbpg_graphrag.initialize(config json);
参数
adbpg_graphrag.initialize
函数入参是一个JSON变量,用于配置GraphRAG服务信息,配置参数说明如下。
参数 | 说明 |
llm_model | 用于指定GraphRAG使用的大模型,默认为qwen-max-2025-01-25。 |
llm_api_key | 调用大模型时需要使用的API Key。 |
llm_url | 大模型的API接口地址,默认使用阿里云百炼平台的API。 |
embedding_model | 用于指定GraphRAG使用的嵌入模型,默认为text-embedding-v3。 |
language | GraphRAG使用的默认语言,默认为英语。
|
entity_types | 指定解析文档生成知识图谱时,需要抽取的实体点的类型。 |
relationship_types | 指定解析文档生成知识图谱时,需要抽取的关系边的类型。 |
first_node_content | 在使用决策树模式(tree)时,指定初始节点回复,默认为“您好,请问您有什么问题?”。 |
end_node_content | 在使用决策树模式(tree)时,指定最终节点回复,默认为“请问还有什么其他问题吗?”。 |
global_distance_threshold | 在使用决策树模式(tree)时,指定在本地与全局结果中选择全局搜索结果阈值,默认为0.1,表示全局搜索与客户回复相似度与本地搜索相比大于0.1 时,选择全局搜索结果。 |
示例
SELECT adbpg_graphrag.initialize(
$$
{
"llm_model" : "qwen-max-2025-01-25",
"llm_api_key" : "sk-****************",
"llm_url" : "https://dashscope.aliyuncs.com/compatible-mode/v1",
"embedding_model" : "text-embedding-v3",
"language" : "Simplified Chinese",
"first_node_content" : "你好,请问你有什么问题?",
"end_node_content" : "请问还有什么其他问题吗?",
"global_distance_threshold" : "0.1"
}
$$
);
决策树导入
除外部导入外,支持Markdown格式的文本导入决策树数据。在Markdown格式的文本中,使用缩进来代表节点、分支之间的层级关系。
空调客服决策树转换为Markdown格式的数据如下。
你好,请问你有什么问题?
空调制冷效果不好
是机器不吹风还是不制冷
机器不制冷
请反馈空调运行的模式
制冷模式
滤网是否长时间没有清理
是
请清理滤网后再观察空调制冷情况
否
请拨打我们的维修热线,维修工程是会上门检查
非制冷模式
请调整成制冷模式
机器不吹风
空调是否显示传感器故障
是
请将空调断电3分钟后重启,看是否恢复正常
否
请拨打我们的维修热线,维修工程是会上门检查
没有了
结束
直接导入
语法
SELECT adbpg_graphrag.upload_decision_tree(original_content text, root_content text) FROM documents_text;
参数
original_content:除根节点以外的决策树信息。
root_content:决策树根节点信息。
示例
SELECT adbpg_graphrag.upload_decision_tree('空调制冷效果不好
是机器不吹风还是不制冷
机器不制冷
请反馈空调运行的模式
制冷模式
滤网是否长时间没有清理
是
请清理滤网后再观察空调制冷情况
否
请拨打我们的维修热线,维修工程是会上门检查
非制冷模式
请调整成制冷模式
机器不吹风
空调是否显示传感器故障
是
请将空调断电3分钟后重启,看是否恢复正常
否
请拨打我们的维修热线,维修工程是会上门检查
没有了
结束', '你好,请问你有什么问题?');
通过表导入
新建表并插入决策树数据。
CREATE TABLE documents_text (id integer, original_content text); INSERT INTO documents_text VALUES (1, '空调制冷效果不好 是机器不吹风还是不制冷 机器不制冷 请反馈空调运行的模式 制冷模式 滤网是否长时间没有清理 是 请清理滤网后再观察空调制冷情况 否 请拨打我们的维修热线,维修工程是会上门检查 非制冷模式 请调整成制冷模式 机器不吹风 空调是否显示传感器故障 是 请将空调断电3分钟后重启,看是否恢复正常 否 请拨打我们的维修热线,维修工程是会上门检查 没有了 结束');
从表中导入决策树数据。
语法
SELECT adbpg_graphrag.upload_decision_tree(original_content text, root_content text) FROM documents_text WHERE id = 1;
参数
original_content:除根节点以外的决策树信息。
root_content:决策树根节点信息。
示例
SELECT adbpg_graphrag.upload_decision_tree(original_content, '你好,请问你有什么问题?') FROM documents_text;
多轮对话
普通对话过程
按照决策树流程,发起多轮对话,对话过程如下。
第一轮对话
SELECT adbpg_graphrag.query('你好','tree');
返回结果
query -------------------------- 你好,请问你有什么问题? (1 row)
第二轮对话
SELECT adbpg_graphrag.query('空调不制冷了','tree');
返回结果
query ------------------------ 是机器不吹风还是不制冷 (1 row)
第三轮对话
SELECT adbpg_graphrag.query('空调不吹风了','tree');
返回结果
query ------------------------ 空调是否显示传感器故障 (1 row)
第四轮对话。
SELECT adbpg_graphrag.query('是的','tree');
返回结果
query ----------------------------------------- 请将空调断电3分钟后重启,看是否恢复正常 (1 row)
第五轮对话。
SELECT adbpg_graphrag.query('好的','tree');
返回结果
query -------------------------- 请问还有什么其他问题吗? (1 row)
跳跃式导航对话过程
动态查询机制:在客户互动策略中,阿里云采用局部探索与全局检索相结合的动态查询机制,从而缩短对话路径,优化对话流程。
处理过程
依据客户的回答,评估其响应内容与决策树中全局信息的相关性。如果分析表明客户的回答与全局搜索结果具有更高的语义相似度,将触发跳跃式导航过程,直接链接至相关联的全局节点。
优势
通过跳过冗余的中间步骤提升用户体验,并确保能够迅速而准确地解决客户的问题。此策略能够精准捕捉客户意图,实现了智能交互系统设计中的灵活性与高效性。
第一轮对话
SELECT adbpg_graphrag.query('你好','tree');
返回结果
query -------------------------- 你好,请问你有什么问题? (1 row)
第二轮对话
SELECT adbpg_graphrag.query('机器不吹风','tree');
返回结果
query ------------------------ 空调是否显示传感器故障 (1 row)
第三轮对话
SELECT adbpg_graphrag.query('报F1故障码','tree');
返回结果
query -------------------------------------------- 请拨打我们的维修热线,维修工程是会上门检查 (1 row)
第四轮对话。
SELECT adbpg_graphrag.query('好的','tree');
返回结果
query -------------------------- 请问还有什么其他问题吗? (1 row)
重置对话状态
重新开始新的对话流程,命令如下。
SELECT adbpg_graphrag.reset_tree_query();
返回结果
reset_tree_query
-------------------------------
Successful! Reset Tree Query.
(1 row)
决策树操作
导入决策树后,您还可以通过增加子树、删除子树修改决策树。
决策树操作中,依赖节点entity_id的值,您可以通过以下方式获取。
可视化工具Age-Viewer:将鼠标悬浮在相应节点上,查看节点的entity_id值。
SELECT * from cypher('chunk_entity_relation', $$ MATCH (V)-[R:DIRECTED]-(V2) RETURN V,R,V2 $$) as (V agtype, R agtype, V2 agtype);
增加子树
语法
SELECT adbpg_graphrag.append_decision_tree(context text, root_node_id text);
参数
context:子树信息。
root_node_id:节点编号entity_id。
删除子树
语法
SELECT adbpg_graphrag.delete_decision_tree(root_node_entity text);
参数
root_node_entity:节点编号entity_id,删除此id下层的子决策树。