dify+neo4j+llm大模型问答(非遗样本)
本文介绍了构建文化遗产知识图谱问答系统的完整工作流程,包括意图解析、SQL匹配、Neo4j查询和答案汇总四个关键环节。系统通过Prompt工程将用户问题解析为JSON格式的意图和实体,基于预定义的20种查询模板生成Cypher查询语句,最后通过大模型总结返回结果。文章还分享了智泊AI提供的104G大模型学习资源包,包含视频教程、学习路线、电子书籍和面试题解等全套资料,由清华大学博士团队整理,适合不
1 完整工作流
2 图谱
3 意图解析
3.1 配置code
意图解析需要把用户输入的问答解析成可以识别的关系和实体,是通过prompt告诉大模型该如何进行解析。下面是简单的处理,应该把实体和意图分开写,或者从知识库查询,下面是这次demo的prompt
请根据用户的问题判断意图类别,并提取实体名称。
可选的意图类别包括:
heritage_characteristic, heritage_cause, heritage_appraisal, heritage_material,
heritage_tool, heritage_category, heritage_organization, heritage_complementary,
heritage_create_way, heritage_prevent, heritage_popularity, heritage_lasttime,
heritage_easyget, heritage_desc, heritage_avoid_material, heritage_recommend_material,
heritage_recommend_tool, material_heritage, tool_heritage, category_heritage
问题:{{#context#}}
回答格式如下(仅返回 JSON 格式):
{
"intent": "xxx",
"entity": "yyy"
}
3.2 创建创建llm节点
上下文:sys.query,问题选择:上下文
4 sql匹配
4.1 配置code
这一步主要是使用解析好的意图,进行sql的拼装,主要是把一些常用的sql写出来,然后替换关键字,这一步也可以给llm处理,就是需要消耗toekn
import json
def main(inputs: str) -> dict:
# 将输入的字符串解析为字典
try:
inputs_dict = json.loads(inputs)
except json.JSONDecodeError as e:
return {"error": f"Invalid JSON input: {str(e)}"}
queries = {
'heritage_characteristic': "MATCH (m:Heritage)-[r:has_characteristic]->(n:Characteristic) WHERE m.name = '{entity}' RETURN m.name, r.name, n.name",
'heritage_cause': "MATCH (m:Heritage) WHERE m.name = '{entity}' RETURN m.name, m.cause",
'heritage_appraisal': "MATCH (m:Heritage)-[r:undergoes_appraisal]->(n:Appraisal) WHERE m.name = '{entity}' RETURN m.name, r.name, n.name",
'heritage_material': "MATCH (m:Heritage)-[r:uses_material]->(n:Material) WHERE m.name = '{entity}' RETURN m.name, r.name, n.name",
'heritage_tool': "MATCH (m:Heritage)-[r:uses_tool]->(n:Tool) WHERE m.name = '{entity}' RETURN m.name, r.name, n.name",
'heritage_category': "MATCH (m:Heritage)-[r:belongs_to_category]->(n:Category) WHERE m.name = '{entity}' RETURN m.name, r.name, n.name",
'heritage_organization': "MATCH (m:Heritage)-[r:supported_by]->(n:Organization) WHERE m.name = '{entity}' RETURN m.name, r.name, n.name",
'heritage_complementary': "MATCH (m:Heritage)-[r:complementary_to]->(n:Heritage) WHERE m.name = '{entity}' RETURN m.name, r.name, n.name",
'heritage_create_way': "MATCH (m:Heritage) WHERE m.name = '{entity}' RETURN m.name, m.create_way",
'heritage_prevent': "MATCH (m:Heritage) WHERE m.name = '{entity}' RETURN m.name, m.prevent",
'heritage_popularity': "MATCH (m:Heritage) WHERE m.name = '{entity}' RETURN m.name, m.popularity",
'heritage_lasttime': "MATCH (m:Heritage) WHERE m.name = '{entity}' RETURN m.name, m.create_lasttime",
'heritage_easyget': "MATCH (m:Heritage) WHERE m.name = '{entity}' RETURN m.name, m.easy_get",
'heritage_desc': "MATCH (m:Heritage) WHERE m.name = '{entity}' RETURN m.name, m.desc",
'heritage_avoid_material': "MATCH (m:Heritage)-[r:avoids_material]->(n:Material) WHERE m.name = '{entity}' RETURN m.name, r.name, n.name",
'heritage_recommend_material': "MATCH (m:Heritage)-[r:recommends_material]->(n:Material) WHERE m.name = '{entity}' RETURN m.name, r.name, n.name",
'heritage_recommend_tool': "MATCH (m:Heritage)-[r:recommends_tool]->(n:Tool) WHERE m.name = '{entity}' RETURN m.name, r.name, n.name",
'material_heritage': "MATCH (m:Heritage)-[r:uses_material]->(n:Material) WHERE n.name = '{entity}' RETURN m.name, r.name, n.name",
'tool_heritage': "MATCH (m:Heritage)-[r:uses_tool]->(n:Tool) WHERE n.name = '{entity}' RETURN m.name, r.name, n.name",
'category_heritage': "MATCH (m:Heritage)-[r:belongs_to_category]->(n:Category) WHERE n.name = '{entity}' RETURN m.name, r.name, n.name"
}
intent = inputs_dict.get('intent')
entity = inputs_dict.get('entity')
if intent not in queries:
return {"result": "Unknown intent"}
# 注意在输出变量中声明result
test=queries[intent]
cypher_query = queries[intent].format(entity=entity)
return {'result': cypher_query}
4.2 创建代码节点
注意点:
-
python必须是main方法
-
返回必须是 return {'result': cypher_query} 字符串的格式
5 neo4j查询
5.1 配置code
{
"statements": [
{
"statement":"{上一步的返回值}"
}
]
}
5.2 创建http节点
注意点:
-
我这里是docker所以是internal 的host,非docker安装的改成自己ip或者域名
-
Authorization 取值是,用户名:密码 base64
root@986b8bcc8ca6:/# echo -n 'neo4j:pwd.' | base64
bmVvNGo6WGluZzEyMzQu
-
请求为post,body选择raw,选择json会被编码中文识别不了
6 答案汇总
6.1 配置code
prompt
根据返回内容{{#context#}},回答用户提成的问题,不要联网搜素,不需要给出建议,只需要总结返回的内容。没有相关结果时,回复没有查找到相关内容{{#sys.query#}}
6.2 创建llm节点
上下文选择上一步的,返回结果,对结果进行分析
7 回复
7.1 创建回复节点
直接输出上一步结果
8 效果
9 遇到的问题
9.1 代码节点
-
需要在main方法里面写,ai生成的大多数这里都写不对
9.2 http请求编码问题
-
使用raw的post传递参数,避免编码识别错误
AI大模型从0到精通全套学习大礼包
我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。
只要你是真心想学AI大模型,我这份资料就可以无偿共享给你学习。大模型行业确实也需要更多的有志之士加入进来,我也真心希望帮助大家学好这门技术,如果日后有什么学习上的问题,欢迎找我交流,有技术上面的问题,我是很愿意去帮助大家的!
如果你也想通过学大模型技术去帮助就业和转行,可以点扫描下方👇👇
大模型重磅福利:入门进阶全套104G学习资源包免费分享!
01.从入门到精通的全套视频教程
包含提示词工程、RAG、Agent等技术点
02.AI大模型学习路线图(还有视频解说)
全过程AI大模型学习路线
03.学习电子书籍和技术文档
市面上的大模型书籍确实太多了,这些是我精选出来的
04.大模型面试题目详解
05.这些资料真的有用吗?
这份资料由我和鲁为民博士共同整理,鲁为民博士先后获得了北京清华大学学士和美国加州理工学院博士学位,在包括IEEE Transactions等学术期刊和诸多国际会议上发表了超过50篇学术论文、取得了多项美国和中国发明专利,同时还斩获了吴文俊人工智能科学技术奖。目前我正在和鲁博士共同进行人工智能的研究。
所有的视频由智泊AI老师录制,且资料与智泊AI共享,相互补充。这份学习大礼包应该算是现在最全面的大模型学习资料了。
资料内容涵盖了从入门到进阶的各类视频教程和实战项目,无论你是小白还是有些技术基础的,这份资料都绝对能帮助你提升薪资待遇,转行大模型岗位。
智泊AI始终秉持着“让每个人平等享受到优质教育资源”的育人理念,通过动态追踪大模型开发、数据标注伦理等前沿技术趋势,构建起"前沿课程+智能实训+精准就业"的高效培养体系。
课堂上不光教理论,还带着学员做了十多个真实项目。学员要亲自上手搞数据清洗、模型调优这些硬核操作,把课本知识变成真本事!
如果说你是以下人群中的其中一类,都可以来智泊AI学习人工智能,找到高薪工作,一次小小的“投资”换来的是终身受益!
应届毕业生:无工作经验但想要系统学习AI大模型技术,期待通过实战项目掌握核心技术。
零基础转型:非技术背景但关注AI应用场景,计划通过低代码工具实现“AI+行业”跨界。
业务赋能 突破瓶颈:传统开发者(Java/前端等)学习Transformer架构与LangChain框架,向AI全栈工程师转型。
👉获取方式:
😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓
更多推荐
所有评论(0)