文章目录
前言
这一篇文章将尝试做一个缝合怪,把langchain
、知识图谱以及qwen
融合在一起,形成一个智能问答系统。其中,数据集将采用liuhuanyong老哥提供的以疾病为中心的一定规模医药领域知识图谱,同时教程将结合ranying666提供的控制台形式缝合教程以及Neo4j官方提供的网页形式缝合教程
最终产品就是这样的:点击跳转到我的GitHub中这个项目
如果想体验一下,也是没问题的:点击跳转到体验demo中
比较尴尬的是,服务器性能有限,经常挂掉,如果显示不可达,那应该是挂掉了。(首)
大前提
个人认为,Neo4j官方提供的网页形式缝合教程非常适合小白,一步步引导你如何使用Neo4j
、streamlit
、langchain
、openai
等工具,搭建一个基于Neo4j
的LLM
聊天机器人,并运行起来。
这个教程的前提有两个:
首先是你得有一个Neo4j
的账号,免费注册一个即可。注册后就能够看到教程的详细内容。
其次是你的有一个ChatGPT
的账号,而且还得给API
付费,不光是ChatGPT
的Plus
套餐。如果只有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
。然后,问答存储的部分就要去集齐三块拼图,分别是:
- 用户的提问
- 问答历史
- 拓展知识库
利用这三块拼图生成prompt
,然后就交给大模型,大模型就开始针对这些上下文信息生成回答。
如果不考虑prompt
为大模型带来的任何场景信息的话,这个prompt
就可以直接简化为这样子:
prompt = """"
{用户的提问} {问答历史} {拓展知识库}
"""
当然,用中文看着怪怪的。不管三七二十一,总之把中文改成英文,应该就高大上了一些。于是,用human_input
表示用户的提问,用chat_history
表示问答历史,用text
表示拓展知识库,于是就有:
prompt = """"
{human_input} {chat_history} {text}
"""
用户的提问
用户的提问跟大模型的回答,共同构成了问答的数据库。那么,我们应该怎么处理这些内容呢?当然,langchain
很贴心的为我们准备了很丰富的工具