【知识图谱】4、LLM大模型结合neo4j图数据库实现AI问答的功能

昨天写了一篇文章,使用fastapi直接操作neo4j图数据库插入数据的例子, 本文实现LLM大模型结合neo4j图数据库实现AI问答功能。

废话不多说,先上代码

import gradio as gr
from fastapi import FastAPI, HTTPException, Request
from pydantic import BaseModel
from langchain_openai import ChatOpenAI
from langchain.prompts import (ChatPromptTemplate,MessagesPlaceholder,SystemMessagePromptTemplate,HumanMessagePromptTemplate,
)
from langchain.chains import LLMChain
from langchain.memory import ConversationBufferMemory
from langchain_community.graphs import Neo4jGraph
from langchain.chains import GraphCypherQAChain
import asyncio
from typing import List
import json# Initialize FastAPI
app = FastAPI()# Initialize Neo4j with timeout
try:graph = Neo4jGraph(url="bolt://localhost:7687",username="neo4j",password="password",database="neo4j",timeout=60  # 60 seconds timeout)
except Exception as e:print(f"Failed to connect to Neo4j: {e}")graph = None# Fallback in-memory storage
job_seekers = []
job_positions = []# Initialize LangChain components
llm = ChatOpenAI(temperature=0.95,model="glm-4-flash",openai_api_key="xxxxxx",openai_api_base="https://open.bigmodel.cn/api/paas/v4/"
)prompt = ChatPromptTemplate(messages=[SystemMessagePromptTemplate.from_template("You are a helpful AI assistant for a recruitment company. You can answer questions about job seekers and available positions."),MessagesPlaceholder(variable_name="chat_history"),HumanMessagePromptTemplate.from_template("{question}")]
)memory = ConversationBufferMemory(memory_key="chat_history", return_messages=True)
conversation = LLMChain(llm=llm,prompt=prompt,verbose=True,memory=memory
)# Initialize GraphCypherQAChain if Neo4j is available
if graph:graph_qa = GraphCypherQAChain.from_llm(llm,graph=graph,verbose=True)# Define chat function with timeout
async def chat_with_timeout(message, history):try:if graph:neo4j_response = await asyncio.wait_for(asyncio.to_thread(graph_qa.run, message),timeout=10.0  # 10 seconds timeout)return f"Based on our database: {neo4j_response}"else:# Fallback to in-memory dataif "job seekers" in message.lower():return f"Based on our records: We have {len(job_seekers)} job seekers."elif "job positions" in message.lower():return f"Based on our records: We have {len(job_positions)} job positions."else:response = conversation.invoke({"question": message})return response['text']except asyncio.TimeoutError:return "I'm sorry, but the database query took too long. Please try a simpler question or try again later."except Exception as e:print(f"Error in chat function: {e}")response = conversation.invoke({"question": message})return response['text']# # Create Gradio interface
iface = gr.ChatInterface(chat_with_timeout)
#
# # Mount Gradio app to FastAPI
app = gr.mount_gradio_app(app, iface, path="/")# Run the app
if __name__ == "__main__":import uvicornuvicorn.run(app, host="0.0.0.0", port=8000)

还是老规矩,先AI解释下,构建一个基于FastAPI和Gradio的聊天应用,主要功能如下:

1、初始化FastAPI应用和Neo4j图数据库连接(带超时处理);

2、定义了用于对话的LangChain组件,包括LLM模型、提示模板及对话记忆;

3、根据Neo4j是否可用初始化图查询链;

4、实现异步聊天函数,支持数据库查询数据检索,并处理超时错误;

5、使用Gradio创建用户界面并将应用挂载到FastAPI上。

核心关注graph_qa.run方法,执行原理:

  1. 自然语言处理:

当调用 graph_qa.run(message) 时,首先会将用户的自然语言查询(message)传递给大语言模型(LLM)。

  1. Cypher 查询生成:

LLM 分析用户的查询,并尝试将其转换为 Cypher 查询语言。Cypher 是 Neo4j 图数据库使用的查询语言。这个步骤涉及到理解用户意图和将其映射到图数据库的结构上。

  1. 数据库查询:

生成的 Cypher 查询被发送到 Neo4j 数据库执行。这个过程涉及到遍历图数据库,匹配节点和关系,并检索相关数据。

  1. 结果解释:

数据库返回查询结果后,这些结果会被传回给 LLM。LLM 会分析这些原始数据,理解其含义和上下文。

  1. 响应生成:

最后,LLM 会根据原始查询和数据库返回的结果,生成一个人类可读的响应。这个响应应该直接回答用户的问题,并可能包含从数据库中提取的具体信息。

在上一篇文章中,我已经在neo4j插入了一些数据,比如张三1的技能。 这里问一下

在这里插入图片描述

原文链接: 【知识图谱】4、LLM大模型结合neo4j图数据库实现AI问答的功能

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/878760.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在VMware中的centos stream 9上用packstack安装openstack的单机版

十分钟搭建openstack平台_centos-release-openstack-yoga-CSDN博客

STM32CubeMX软件配置及点灯操作(基于STM32F4系列+HAL库)

注:本文主要记录一下STM32CubeMX软件的使用流程。 01 软件安装 1.keil 需要安装以下支持包(keil在线安装里没有对应芯片支持包)。 2.STM32CubeMX 安装库: 3.串口助手 02 硬件连接 该原理图来源于学益得在线课堂教学项目《RTOS项目实战:从PCB到Free…

Dubbo缓存

是的,Dubbo 可以对服务调用结果进行缓存。通过缓存结果,可以减少重复调用、降低服务提供者的负载,并提高系统的响应速度和吞吐量。Dubbo 内置了多种缓存机制,开发者可以根据不同的业务需求选择合适的缓存策略。 1. Dubbo 结果缓存…

STM32F407ZGT6单片机HAL库——DAC输出

一、输出直流电压 1.cubemax的配置(通道1) 2.直流电压大小计算 3.主函数加入初始化的程序 float DAC_voltage1.5;HAL_DAC_SetValue(&hdac, DAC_CHANNEL_1, DAC_ALIGN_12B_R, DAC_voltage*4095/3.3);//HAL_DAC_Start(&hdac,DAC_CHANNEL_1); 二、…

(一)模式识别——基于SVM的道路分割实验(附资源)

写在前面:本报告所有代码公开在附带资源中,无法下载代码资源的伙伴私信留下邮箱,小编24小时内回复 一、实验目的 1、实验目标 学习掌握SVM(Support Vector Machine)算法思想,利用MATLAB的特定工具箱和库函…

【2024高教社杯全国大学生数学建模竞赛】ABCDEF题 问题分析、模型建立、参考文献及实现代码

【2024高教社杯全国大学生数学建模竞赛】ABCDEF题 问题分析、模型建立、参考文献及实现代码 1 比赛时间 北京时间:2024年9月5日 18:00-2024年9月8日20:00 2 思路内容 2.1 往届比赛资料 【2022高教社杯数学建模】C题:古代玻璃制品的成分分析与鉴别方案…

AI学习记录 - 旋转位置编码

创作不易,有用点赞,写作有利于锻炼一门新的技能,有很大一部分是我自己总结的新视角 1、前置条件:要理解旋转位置编码前,要熟悉自注意力机制,否则很难看得懂,在我的系列文章中有对自注意力机制的…

2409d,d语言非常简单利用sqlite3库

1,在sqlite3d.c中 #include "sqlite3.h"2,直接使用了: import std.conv; import std.stdio; import std.string;import sqlite3d;extern(C) {static int callback(void *NotUsed, int argc, char **argv, char **azColName){int i;for(i0; i<argc; i){printf(&q…

OpenFeign请求拦截器,注入配置属性类(@ConfigurationProperties),添加配置文件(yml)中的token到请求头

一、需求 OpenFeign请求拦截器&#xff0c;注入配置属性类&#xff08;ConfigurationProperties&#xff09;&#xff0c;添加配置文件&#xff08;yml&#xff09;中的token到请求头 在使用Spring Boot结合OpenFeign进行微服务间调用时&#xff0c;需要在发起HTTP请求时添加一…

MLLM(二)| 阿里开源视频理解大模型:Qwen2-VL

2024年8月29日&#xff0c;阿里发布了 Qwen2-VL&#xff01;Qwen2-VL 是基于 Qwen2 的最新视觉语言大模型。与 Qwen-VL 相比&#xff0c;Qwen2-VL 具有以下能力&#xff1a; SoTA对各种分辨率和比例的图像的理解&#xff1a;Qwen2-VL在视觉理解基准上达到了最先进的性能&#…

kafka单机安装

kafka单机安装 下载地址 官网&#xff1a;https://kafka.apache.org/最新版本下载页面&#xff1a;https://kafka.apache.org/downloads 说明 版本选择&#xff1a;3.0.0&#xff0c;kafka_2.12-3.0.0.tgz下载地址&#xff1a;https://archive.apache.org/dist/kafka/3.0.0…

018、二级Java操作题汇总最新版100000+字

目录 1.基本操作&#xff08;源代码&#xff09;&#xff1a; 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 1.10 1.11 1.12 1.13 1.14 1.15 1.16 1.17 1.18 1.19 1.20 1.21 1.22 1.23 1.24 1.25 1.26 1.27 1.28 1.29 1.30 1.31 1.32 1.33 1.34 1.…

ClickHouse 的安装与基本配置

ClickHouse 是一款高性能的列式数据库管理系统&#xff0c;特别适合用于大数据分析。以下是 ClickHouse 的安装与基本配置步骤&#xff0c;涵盖了在常见平台&#xff08;如 Linux&#xff09;上的安装和基础配置。 1. 安装 ClickHouse 在 Linux (Ubuntu/Debian) 上安装 在 U…

Apache Guacamole 安装及配置VNC远程桌面控制

文章目录 官网简介支持多种协议无插件浏览器访问配置和管理应用场景 Podman 部署 Apache Guacamole拉取 docker 镜像docker-compose.yml部署 PostgreSQL生成 initdb.sql 脚本部署 guacamole Guacamole 基本用法配置 VNC 连接 Mac 电脑开启自带的 VNC 服务 官网 https://guacam…

Gmtracker安装中存在的问题

Gmtracker安装中存在的问题 GMtracker安装问题该如何解决&#xff1f; 使用用服务器&#xff0c;在云服务器中使用conda环境 python 3.6的版本环境. pip install -r requirements.txt 在网上查找资料&#xff1a;opencv安装失败卡在这里是因为没有使用高版本的python环境 切换…

MySQL灾难恢复策略:构建稳健的备份与恢复机制

在现代企业环境中&#xff0c;数据的安全性和可靠性至关重要。灾难恢复计划&#xff08;Disaster Recovery Plan, DRP&#xff09;是确保在发生灾难性事件后&#xff0c;能够迅速恢复业务的关键策略。对于依赖MySQL数据库的系统&#xff0c;实现有效的灾难恢复计划尤为重要。本…

流式域套接字通信

流式域套接字服务器端实现&#xff08;TCP&#xff09; #include <myhead.h>#define BACKLOG 5 int main(int argc, const char *argv[]) {int oldfdsocket(AF_UNIX,SOCK_STREAM,0);if(oldfd-1){perror("socket");return -1;}if(access("./server",…

pdf在线转换成word免费版,一键免费转换

在日常的学习和办公中&#xff0c;PDF文件和Word文档是我们离不开的两种最常见的文件&#xff0c;而PDF与Word文档之间的转换成为了我们日常工作中不可或缺的一部分。无论是为了编辑、修改还是共享文件&#xff0c;掌握多种PDF转Word的方法都显得尤为重要。很多小伙伴关心能不能…

摄像头的ISP和SOC的GPU有区别吗?

摄像头的主芯片必须包含ISP&#xff0c;也就是图像处理器核心。而SOC的GPU或者说显卡也包含图像处理器也就是GPU。两者并无本质区别&#xff0c;都是实现数字图像处理算法。同样的用FPGA做内窥镜图像处理和用FPGA做显示图像处理器本质上也是一样的。 当然两者存在一些细微差别…

Flask中 blinker 是什么

在Flask框架中&#xff0c;blinker 是一个非常重要的组件&#xff0c;它作为信号处理的库&#xff0c;为Flask应用提供了一种灵活而强大的事件处理机制。以下是对Flask中blinker的详细阐述&#xff0c;考虑到篇幅限制&#xff0c;无法直接达到5000字&#xff0c;但会尽量全面而…