langchain_chatchat+ollama部署本地知识库,联网查询以及对数据库(Oracle)数据进行查询
langchain_chatchat+ollama部署本地知识库,联网查询以及对数据库(Oracle)数据进行查询
涉及的内容其实挺多的,所以尽量减少篇幅
准备工作:
部署ollama,并拉取qwen2.5:14b和quentinz/bge-large-zh-v1.5:latest
部署langchain_chatchat
部署oracle数据库
部署ollama以及拉取模型
可以参考下面的文章:
https://www.cnblogs.com/jokingremarks/p/18151827
部署langchain_chatchat
Langchain_chatchat的github路径:https://github.com/chatchat-space/Langchain-Chatchat
使用vscode快速创建一个venv虚拟环境管理工具
在当前环境下直接下载Langchain-Chatchat的python库
注意:这个只能在Python 3.8-3.11的环境下,不然会报错
Langchain-Chatchat 提供以 Python 库形式的安装方式,具体安装请执行:
pip install langchain-chatchat -U
如果要用Xinference接入Langchain-Chatchat,建议使用如下安装方式:
pip install "langchain-chatchat[xinference]" -U
本文使用ollama作为本地模型的调用,所以不需要装Xinference
部署oracle数据库
这里我是直接下载到了本地,使用的版本是Oracle 19c,安装教程网上大把,记得创建一个数据库,我这里数据库名字是orcl
对langchain-chatchat的配置文件初步调整:
首先先调整model_settings.yaml
DEFAULT_LLM_MODEL和DEFAULT_EMBEDDING_MODEL,将其替换成ollama下载下来的模型名,这里我们使用qwen2.5:14b作为LLM,使用quentinz/bge-large-zh-v1.5:latest作为Embedding
# 默认选用的 LLM 名称
DEFAULT_LLM_MODEL: qwen2.5:14b
# 默认选用的 Embedding 名称
DEFAULT_EMBEDDING_MODEL: quentinz/bge-large-zh-v1.5:latest
MODEL_PLATFORMS部分只保留ollama,同时修改内容
llm_models:
- qwen2.5:14b
embed_models:
- quentinz/bge-large-zh-v1.5:latest
langchain-chatchat执行:
详细内容可以查看文档:https://github.com/chatchat-space/Langchain-Chatchat
其实就三步
执行初始化
chatchat init
初始化知识库
chatchat kb -r
启动项目
chatchat start -a
一般会自动跳到浏览器里面,地址为http://127.0.0.1:8501/
langchain-chatchat简单操作:
模型对话,就是最基础的对话操作,启用agent的时候可以选择不同的工具来进行对话
RAG对话,可以选择不同的场景进行对话,其中有知识库问答,文件对话和搜索引擎问答
知识库问答就是使用项目路径下的文件内容回答,会有些自带的文件在里面,可以自己上传
文件对话就是基于上传的文件内容进行问答
搜索引擎对话后面会有补充,需要对配置文件再进行调整
知识库管理,即对项目中的内部知识库进行增删知识库以及重建向量库
langchain-chatchat联网查询:
如果使用duckduckgo作为搜索引擎的话可能需要FQ,这个就自行解决了
先安装duckduckgo-search
pip install -U duckduckgo-search
将tool_settings.yaml中的search_internet的search_engine_name设置成duckduckgo
如果要查询天气或者地图相关的,可以增加用高德地图的配置,api可以直接去高德申请,比较容易
将kb_settings.yaml中的DEFAULT_SEARCH_ENGINE也修改成duckduckgo
重新加载项目以后,就可以使用搜索引擎对话了
langchain-chatchat连接oracle数据库并查询内容:
官方文档:https://github.com/chatchat-space/Langchain-Chatchat/blob/master/docs/install/README_text2sql.md
首先我们找到tool_settings.yaml中的text2sql进行修改
有几个需要注意的地方
oracle的连接我使用的是oracledb,所以需要安装oracledb
python -m pip install oracledb
table_comments是一些提示用的,如果发现模型形成的sql老是找不对表或者字段,就在里面说明下,准确率会大幅提高
重要的!!!最重要的!!!
因为oracle的语法比较特殊,所以要对langchain的源码进行修改
找到项目中的/envs/chat_0.3.1/lib/python3.11/site-packages/langchain_experimental/sql/base.py
在其中对SQL进行一些处理,目前我遇到的情况有如下的,都需要重新分割处理才行
if "sql" in sql_cmd:
sql_cmd = sql_cmd.split("sql")[-1].strip() # 增加的sql过滤,按照sql分割,取后一段,为了去掉```sql的开头
if "`" in sql_cmd:
sql_cmd = sql_cmd.split("`")[0].strip() # 增加的sql过滤,按照sql分割,取后一段,为了去掉```的结尾
if "LIMIT" in sql_cmd:
sql_cmd = sql_cmd.split("LIMIT")[0].strip() # 增加的sql过滤,按照sql分割,取后一段,为了去掉LIMIT
然后重新运行项目,选择启用agent并选择数据库对话,输入要搜索的东西,终端里面可以看到对应的sql以及查询结果
可以看到回答的和数据库中查询的内容一致
不过对Oracle数据库好像不是很友好,有时候还是会有一些奇怪的报错
以上
langchain_chatchat+ollama部署本地知识库,联网查询以及对数据库(Oracle)数据进行查询的更多相关文章
- mybatis查询无结果, 数据库运行相同sql查询出结果
一.问题描述 mybatis查询无结果, 数据库运行相同sql查询出结果, 如下 这是数据库记录 这是mybatis查询出的结果, 记录条数0 这是直接将控制台一模一样的sql查询语句放到Navica ...
- C#自由组合本地缓存、分布式缓存和数据库的数据
一.背景介绍: 我们在进行数据存储的时候,有时候会加入本地缓存.分布式缓存以及数据库存储三级的结构,当我们取值的时候经常是像下面这样的流程: 1.先取本地缓存,如果值存在直接返回 2.本地缓存不存在, ...
- 数据库Oracle的子查询练习
1.写一个查询显示与 Zlotkey 的 在同一部门的雇员的 last name和 hire date,结果中不包括 Zlotkey --1.写一个查询显示与 Zlotkey 的 在同一部门的雇员的 ...
- MySql数据库列表数据分页查询、全文检索API零代码实现
数据条件查询和分页 前面文档主要介绍了元数据配置,包括表单定义和表关系管理,以及表单数据的录入,本文主要介绍数据查询和分页在crudapi中的实现. 概要 数据查询API 数据查询主要是指按照输入条件 ...
- Sqlite数据库添加数据以及查询数据方法
只是两个添加查询方法而已,怕时间长不用忘了
- 数据库——SQL数据连接查询
连接查询 查询结果或条件涉及多个表的查询称为连接查询SQL中连接查询的主要类型 广义笛卡尔积 等值连接(含自然连接) 自身连接查询 外连接查询 一.广义笛卡尔积 不带连 ...
- Rafy 中的 Linq 查询支持(根据聚合子条件查询聚合父)
为了提高开发者的易用性,Rafy 领域实体框架在很早开始就已经支持使用 Linq 语法来查询实体了.但是只支持了一些简单的.常用的条件查询,支持的力度很有限.特别是遇到对聚合对象的查询时,就不能再使用 ...
- oracle里的查询转换
oracle里的查询转换的作用 Oracle里的查询转换,有称为查询改写,指oracle在执行目标sql时可能会做等价改写,目的是为了更高效的执行目标sql 在10g及其以后的版本中,oracle会对 ...
- Oracle使用游标查询所有数据表备注
功能作用:应用对应的SQL语句,能方便快速的查询Oracle数据库指定用户的所有用户表说明,快速知道每个数据表是做什么的,方便写文档和方案. 运行环境:搭建好Oracle数据库,并使用PQ/SQL D ...
- 12月15日内容总结——ORM执行原生SQL语句、双下划线数据查询、ORM外键字段的创建、外键字段的相关操作、ORM跨表查询、基于对象的跨表查询、基于双下划线的跨表查询、进阶查询操作
目录 一.ORM执行SQL语句 二.神奇的双下划线查询 三.ORM外键字段的创建 复习MySQL外键关系 外键字段的创建 1.创建基础表(书籍表.出版社表.作者表.作者详情) 2.确定外键关系 3.O ...
随机推荐
- [WPF]数据绑定时为何会出现StringFormat失效
在数据绑定过程中,我们经常会使用StringFormat对要显示的数据进行格式化,以便获得更为直观的展示效果,但在某些情况下格式化操作并未生效,例如 Button的 Content属性以及ToolTi ...
- canvas实现图片标记
前言 由于业务需求,需要有一个图片标记功能,其实就是对图片画框画线做标记,类似微信的图片编辑 但是需要存下标记图及其标记的具体数据,.功能其实很简单,但刚开始的时候也是费了一些功夫的.我将原项目中该功 ...
- vue项目自动导入components
开发项目中一般组件都放在 components 目录下,对于一些高频使用的组件我们需要在入口文件中设置为全局组件, 一个一个搞,很繁琐,这里通过webpack自动挂载components为全局组件. ...
- 强!推荐一款Python开源自动化脚本工具:AutoKey!
1.前言 在数字化时代,自动化工具成为了提升工作效率和生产力的重要手段.Python作为一种广泛使用的编程语言,以其强大的功能和易用性受到许多开发者的青睐. 而今天给大家推荐一款开源的自动化脚本工具: ...
- 暑假集训CSP提高模拟8
一看见题目列表就吓晕了,还好我是体育生,后面忘了 唉这场比赛没啥好写的,要不就是太难要不就是太简单要不就是拉出去写在专题里了 A. 基础的生成函数练习题 考虑到只有奇偶性相同才能尝试加二,因此先用加一 ...
- Linux服务器磁盘空间占用情况分析与清理指南
为确保重大节日期间,团队负责的测试环境服务器磁盘不会占用过高,导致频繁报警.我们要求在重大节假日前对服务器磁盘占用情况进行检查.如果发现占用过高,则需人为介入,进行相应清理. 一.检查要求 查看各分区 ...
- Nacos 配置加密
Nacos 配置加密 nacos配置加密官网 官网介绍太简单,而且GitHub 网络受限,随缘访问.Gitee 发现有镜像仓库,同步的最新版本 Gitee nacos 镜像仓库 但是官网中提到的加密插 ...
- [python] 基于PyOD库实现数据异常检测
PyOD是一个全面且易于使用的Python库,专门用于检测多变量数据中的异常点或离群点.异常点是指那些与大多数数据点显著不同的数据,它们可能表示错误.噪声或潜在的有趣现象.无论是处理小规模项目还是大型 ...
- 2021年7月国产数据库排行榜:openGauss成绩依旧亮眼,Kingbase向Top 10发起冲刺
7月份的国产数据库流行度排行榜已经揭晓.本期榜单展示的136个数据库中,近三分之二实现了评分增长.笔者认为这与6月份中国信通院发布第十二批大数据产品能力评测结果有关,65家企业的120款产品通过了本次 ...
- vue前端开发仿钉图系列(7)底部数据列表的开发详解
底部数据列表主要是记录图层下面对应的点线面数据,点击单元行或者查看或者编辑,弹出右侧编辑页面,点击单元行地图定位到相应的绘图位置.里面的难点1是动态绑定字段管理编辑的字段以及对应的value值,2是点 ...