使用langchain接入通义千问与知识图谱

前言

这一篇文章将尝试做一个缝合怪,把langchain、知识图谱以及qwen融合在一起,形成一个智能问答系统。其中,数据集将采用liuhuanyong老哥提供的以疾病为中心的一定规模医药领域知识图谱,同时教程将结合ranying666提供的控制台形式缝合教程以及Neo4j官方提供的网页形式缝合教程

最终产品就是这样的:点击跳转到我的GitHub中这个项目

如果想体验一下,也是没问题的:点击跳转到体验demo中

比较尴尬的是,服务器性能有限,经常挂掉,如果显示不可达,那应该是挂掉了。(首)

大前提

个人认为,Neo4j官方提供的网页形式缝合教程非常适合小白,一步步引导你如何使用Neo4jstreamlitlangchainopenai等工具,搭建一个基于Neo4jLLM聊天机器人,并运行起来。

这个教程的前提有两个:

首先是你得有一个Neo4j的账号,免费注册一个即可。注册后就能够看到教程的详细内容。

其次是你的有一个ChatGPT的账号,而且还得给API付费,不光是ChatGPTPlus套餐。如果只有Plus套餐,在后续将会报错,大意就是说api-key异常。

当你全部都准备好了,那就去学吧。如果你没有给API付费,那么你将停在教程的一半,就像我一样。不过幸运的是,即使只有一半,你也基本具备了langchain接入任何大模型的基本技能。所以,在这两个缝合教程的基础上,我再来一个究极缝合教程。

准备工作

我也学着Neo4j官方教程的样子,先给你一个准备好的库,大概可以直接运行,但是效果可能并不是很好。如果你已经熟读了源码,你会发现,这个大模型目前只能处理心肌炎相关的医疗问题。对于一些学习的人来说,这个方向实在是食之无味弃之可惜。

不说那么多啦,上链接!点击这里跳转到库

0. 找一个key

是指你认为还行的大模型的api-key。这里我采用的通义千问,所以记录下来你在通义千问弄到的api-key

使用方法就两种:

1. 手动部署

$ git clone https://github.com/sakebow/streamlit-tongyi # 下载库
$ cd streamlit-tongyi                                   # 进入目录
$ pip install -r requirements.txt                       # 安装依赖
$ echo "DASHSCOPE_API_KEY=sk-x" > streamlit-tongyi/.env # 输入api-key
$ streamlit run bot.py                                  # 运行

这样你就能够在localhost:8501看到一个streamlit的界面了,就像这样:

界面搭建完成

2. Docker部署

$ echo "DASHSCOPE_API_KEY=sk-x" > streamlit-tongyi/.env # 输入api-key
$ docker build -t tongyi/streamlit:v1 .                 # 构建镜像
$ docker run -d -p 8501:8501 tongyi/streamlit:v1        # 运行

这样你就能够在localhost:8501看到一个streamlit的界面了。

该怎么开始

那么这里面到底做了什么呢?我们来一个很直观的流程图:

结构图

用户使用这个系统的时候,就是首先跟问答存储的部分互动。

互动开始后,问答存储的部分首先就为每一位用户维护一个session。然后,问答存储的部分就要去集齐三块拼图,分别是:

  1. 用户的提问
  2. 问答历史
  3. 拓展知识库

利用这三块拼图生成prompt,然后就交给大模型,大模型就开始针对这些上下文信息生成回答。

如果不考虑prompt为大模型带来的任何场景信息的话,这个prompt就可以直接简化为这样子:

prompt = """"
{用户的提问} {问答历史} {拓展知识库}
"""

当然,用中文看着怪怪的。不管三七二十一,总之把中文改成英文,应该就高大上了一些。于是,用human_input表示用户的提问,用chat_history表示问答历史,用text表示拓展知识库,于是就有:

prompt = """"
{human_input} {chat_history} {text}
"""

用户的提问

用户的提问跟大模型的回答,共同构成了问答的数据库。那么,我们应该怎么处理这些内容呢?当然,langchain很贴心的为我们准备了很丰富的工具

### 使用通义构建知识图谱的方法 #### 构建流程概述 知识图谱作为一种结构化的知识表示形式,通过实体、属性和关系三元组的方式将知识以图的形式组织起来[^1]。为了利用通义来构建知识图谱,可以遵循以下具体步骤: #### 数据收集预处理 数据源的选择至关重要,应确保所选的数据集涵盖了目标领域内的广泛信息。对于获取到的原始数据,需执行清洗操作去除噪声并统一格式以便后续处理。 #### 实体识别链接 借助自然语言处理技术自动抽取文档中的命名实体,并将其映射至已有的本体库中实现标准化表达;同时建立不同实体间的关联性描述其相互作用模式。 #### 关系提取 采用依存句法分析等手段挖掘文本内隐含的事实陈述,进而形成主体-谓词-客体这样的逻辑组合用于表征事物间存在的特定联系。 #### 图形化展示 最终可运用图形数据库(如Neo4j)存储上述得到的知识单元及其连接方式构成完整的可视化网络模型供进一步查询分析之用。 ```python from transformers import AutoTokenizer, AutoModelForSeq2SeqLM tokenizer = AutoTokenizer.from_pretrained("Qwen/Qwen-KG") model = AutoModelForSeq2SeqLM.from_pretrained("Qwen/Qwen-KG") def extract_triples(text): inputs = tokenizer.encode("Extract triples from: " + text, return_tensors="pt", max_length=512, truncation=True) outputs = model.generate(inputs, num_beams=5, early_stopping=True) decoded_output = tokenizer.decode(outputs[0], skip_special_tokens=True) return decoded_output.split("; ") ``` 此代码片段展示了如何使用预训练的语言模型 `Qwen/KWen-KG` 来从给定文本中抽取出可能存在的三元组[^2]。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ordinary_brony

代码滞销,救救码农

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值