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)数据进行查询的更多相关文章

  1. mybatis查询无结果, 数据库运行相同sql查询出结果

    一.问题描述 mybatis查询无结果, 数据库运行相同sql查询出结果, 如下 这是数据库记录 这是mybatis查询出的结果, 记录条数0 这是直接将控制台一模一样的sql查询语句放到Navica ...

  2. C#自由组合本地缓存、分布式缓存和数据库的数据

    一.背景介绍: 我们在进行数据存储的时候,有时候会加入本地缓存.分布式缓存以及数据库存储三级的结构,当我们取值的时候经常是像下面这样的流程: 1.先取本地缓存,如果值存在直接返回 2.本地缓存不存在, ...

  3. 数据库Oracle的子查询练习

    1.写一个查询显示与 Zlotkey 的 在同一部门的雇员的 last name和 hire date,结果中不包括 Zlotkey --1.写一个查询显示与 Zlotkey 的 在同一部门的雇员的 ...

  4. MySql数据库列表数据分页查询、全文检索API零代码实现

    数据条件查询和分页 前面文档主要介绍了元数据配置,包括表单定义和表关系管理,以及表单数据的录入,本文主要介绍数据查询和分页在crudapi中的实现. 概要 数据查询API 数据查询主要是指按照输入条件 ...

  5. Sqlite数据库添加数据以及查询数据方法

    只是两个添加查询方法而已,怕时间长不用忘了

  6. 数据库——SQL数据连接查询

    连接查询 查询结果或条件涉及多个表的查询称为连接查询SQL中连接查询的主要类型     广义笛卡尔积     等值连接(含自然连接)     自身连接查询     外连接查询 一.广义笛卡尔积 不带连 ...

  7. Rafy 中的 Linq 查询支持(根据聚合子条件查询聚合父)

    为了提高开发者的易用性,Rafy 领域实体框架在很早开始就已经支持使用 Linq 语法来查询实体了.但是只支持了一些简单的.常用的条件查询,支持的力度很有限.特别是遇到对聚合对象的查询时,就不能再使用 ...

  8. oracle里的查询转换

    oracle里的查询转换的作用 Oracle里的查询转换,有称为查询改写,指oracle在执行目标sql时可能会做等价改写,目的是为了更高效的执行目标sql 在10g及其以后的版本中,oracle会对 ...

  9. Oracle使用游标查询所有数据表备注

    功能作用:应用对应的SQL语句,能方便快速的查询Oracle数据库指定用户的所有用户表说明,快速知道每个数据表是做什么的,方便写文档和方案. 运行环境:搭建好Oracle数据库,并使用PQ/SQL D ...

  10. 12月15日内容总结——ORM执行原生SQL语句、双下划线数据查询、ORM外键字段的创建、外键字段的相关操作、ORM跨表查询、基于对象的跨表查询、基于双下划线的跨表查询、进阶查询操作

    目录 一.ORM执行SQL语句 二.神奇的双下划线查询 三.ORM外键字段的创建 复习MySQL外键关系 外键字段的创建 1.创建基础表(书籍表.出版社表.作者表.作者详情) 2.确定外键关系 3.O ...

随机推荐

  1. MySQL中的char与varchar

    MySQL中的char与varchar char类型为固定长度的字符串 varchar类型是长度可变的字符串 char为固定长度的字符串意思是当我们设置一个字段类型为char时,指定char(100) ...

  2. ASP.NET Core 如何紀錄 Entity Framework Core 5.0 自動產生的 SQL 命令

    在最近的幾個 Entity Framework Core 版本,對於 Logging (紀錄) 的撰寫方式一直在改變,大致上可區分成 EF Core 2.1 , EF Core 3.0+ 與 EF C ...

  3. Java取模和取余,你真的弄懂了吗?

    前言 Java 中常见的取模和取余(求余)计算,在我们日常的很多业务领域都有用到.比如当我们做数据加密时,密码学中不同的加密方案底层会采用不同的模运算来决定其复杂度:做游戏的同学游戏引擎中的取余求最高 ...

  4. springboot 静态文件夹

    正常这个很久了,不需要写,但是好几年没有写这个相关的,都忘了,好记性不如烂笔头 spring: resources: static-locations: file:D:\\test #对应服务器内映射 ...

  5. 像 Mysql 和 MongoDB 这种大型软件在设计上都是精益求精的,它们为什么选择B树,B+树这些数据结构?

    为什么 MongoDB (索引)使用B-树而 Mysql 使用 B+树? B 树与 B+ 树,其比较大的特点是:B 树对于特定记录的查询,其时间复杂度更低.而 B+ 树对于范围查询则更加方便,另外 B ...

  6. 8.18域横向smb&wmi明文或hash传递

    知识点 windows 2012以上版本默认关闭wdigust,攻击者无法从内存中获取明文密码: Windows2012以下版本如安装KB287199补丁,同样也无法从内存中获取明文密码: 解决方法: ...

  7. GitHub Copilot 典型使用场景实践

    大家好,我是Edison. 近期我们一直在使用GitHub Copilot协助开发编码工作,总结了一些实际场景的用法,可能在目前网络中很多的博客中都没有提及到,本文一一分享给你. 简介:你的结对编程伙 ...

  8. SpringBoot 引入第三方 jar

    SpringBoot 引入第三方 jar 项目结构 -BCJS |--lib |--hsm-talos-1.0.1.jar |--src |--pom.xml step1 : 配置第三方 jar 为依 ...

  9. Flutter Web 近期的重要更新

    我们的发布重点优先关注在性能.开发者体验以及 Web 集成上 2021 年 3 月 Flutter Web 支持已进入稳定版,那么,下一步是什么? 我们对用户研究发现,有超过 10% 的 Flutte ...

  10. LeetCode 1000. Minimum Cost to Merge Stones (区间 DP)

    根据寒神题解 https://leetcode.com/problems/minimum-cost-to-merge-stones/discuss/247567/JavaC%2B%2BPython-D ...