浅谈人工智能之基于ollama本地大模型结合本地知识库搭建智能客服

浅谈人工智能之基于ollama本地大模型结合本地知识库搭建智能客服

摘要

随着人工智能技术的飞速发展,基于大型语言模型(LLMs)的智能客服系统逐渐成为提升企业服务质量和效率的关键工具。然而,对于注重数据隐私和安全的企业而言,使用云服务可能会引发数据泄露的风险。因此,构建基于Ollama的本地大模型,并结合自建知识库的智能客服系统,成为了一种理想的选择。本文档旨在提供一个详尽的指南,介绍如何利用Ollama搭建一个高效、安全且定制化的本地智能客服系统。

1. 引言

1.1 Ollama简介

Ollama是一个开源项目,它使得在本地部署和运行大型语言模型变得简单易行。通过Ollama,用户可以绕过云服务,直接在本地服务器或设备上运行包括Llama系列在内的多种预训练模型,从而保障数据的隐私性和可控性。
关于ollama的安装,可以参考之前的文章:根据操作系统进行选择部署
浅谈人工智能之Windows:基于ollama进行本地化大模型部署
浅谈人工智能之Linux:基于ollama进行本地化大模型部署

1.2 本地知识库的重要性

本地知识库是指存储于企业内部服务器上的、专门用于智能客服系统的数据集合。它包含了公司的产品信息、常见问题解答、客户服务政策等,是智能客服系统精准回答用户提问的基础。相较于云端知识库,本地知识库能够更好地控制数据访问权限,防止敏感信息外泄。

2. 系统架构概述

2.1 技术栈

● Ollama:本地模型运行环境。
● LangChain:LangChain是一项革新性的技术应用,它专注于优化和提炼信息的核心价值。通过先进的自然语言处理算法,LangChain能够对文本进行深度分析,巧妙地剥离冗余部分,而精心保留最为关键的信息要素。这一过程不仅提升了信息的密度与质量,还确保了内容传达的精准度与效率,同时忠实地维护了原文的风格、语气及逻辑框架。其结果是一种更为精炼、有力且易于消化的信息表达形式,尤其适用于学术交流、专业报告及知识总结等领域,展现了技术与人文科学的完美融合,为读者带来既深刻又优雅的阅读体验。
● Embedding:嵌入技术是机器学习和自然语言处理领域中的一项核心技术,主要用于将高维稀疏数据(如文本、图像特征等)转换为低维稠密向量,这样的向量能够捕捉原始数据的语义信息和模式。这一转换过程使得数据在向量空间中具备了计算相似度的能力,从而便于在诸如推荐系统、语义搜索、机器翻译等多种应用中使用。

2.2 工作流程

  1. 模型训练:对知识库模型进行简单训练。
  2. 用户提问:通过前端界面提交问题。
  3. 请求处理:API Gateway接收并解析请求。
  4. 知识检索:查询本地知识库获取相关信息。
  5. 模型推理:Ollama根据输入的问题和知识库信息生成回复。
  6. 结果返回:回复通过API Gateway返回前端展示给用户。

3. 应用实例

3.1 模型下载

我们这里用到的模型使用:bce-embedding-vase_v1
下载路径(国内请使用这个环境):
BCE模型下载
如果大家跟外网是互通的,则可以通过git命令进行下载,如果是不互通的,则需要通过其他方式进行下载,我这边由于网络不通是在页签“Files and versions”界面安装他的目录一个个下载到本地
在这里插入图片描述
本地目录结构,模型存放地址:D:\vec\bce-embedding-vase_v1
在这里插入图片描述

3.2 构建本地知识库

  1. 选择文档内容:假设我有一个常见的FAQ文档需要生成知识库,知识库的内容如下:

问题1:git克隆失败-文件名太长
答案1:查看错误信息中是否包含关键字:Filename too long
问题2:git克隆失败-access_token失效
答案2:查看错误信息中是否包含关键字:Authentication failed for、 Access denied、invalid_token。解决方法:重新生成一个有效的access_toekn
问题3:git克隆失败-网络超时
答案3:查看错误信息中是否包含关键字:Connection timed out、Unknown error、Could not resolve host等。可能是执行机与yfgitlab网络不通或者网络波动导致,执行机dns配置有问题,不能访问yfgitlab的域名
问题4:git克隆失败-CI站点上配置的工程信息异常
答案4:查看错误信息中是否包含关键字:FETCH_HEAD error: Sparse checkout leaves no entry on working directory。可能原因:1)、工程信息中填写的脚本路径斜杠反了,比如不正确的写法:TEST\Stability\ITC,正确的写法:TEST/Stability/ITC;2)多个脚本路径用英文分号拼接,不能使用其他符号,比如TEST/PI/SD,TEST/PI/COMMON使用逗号拼接的是异常的
问题5:git克隆失败-‘git’ 不是内部或外部命令,也不是可运行的程序
答案5:1、检查下执行机上是否安装了git;2、可能链接jenkins的时候没有安装git,链接成功后才安装的git,联系工厂客服删除节点,用户重新部署执行机。
问题6:git克隆失败-分支名中带有.号
答案6:查看错误信息中是否包含关键字:Invalid argument Cloning into 。换一个没有.号的分支名
问题7:git克隆失败-git链接不是以.git结尾
答案7:查看错误信息中是否包含关键字:没有找到项目名称(xxx)对应的项目id。需要填写完整的git地址
问题8:git克隆失败-out of memory
答案8:查看错误信息中是否包含关键字:out of memory、No space left on device。用户需要检查下执行机硬盘空间

  1. 向量数据库生成代码
# coding=utf-8
from langchain_community.document_loaders import TextLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain_community.embeddings import  HuggingFaceEmbeddings
from langchain_community.vectorstores import Chroma
from langchain_community.llms import Ollama
from langchain.chains import RetrievalQA# 导入文本
loader = TextLoader(r"D:\vec\document\test.txt")
# 将文本转成 Document 对象
data = loader.load()
print(f'documents:{len(data)}')# 初始化加载器
text_splitter = RecursiveCharacterTextSplitter(chunk_size=100, chunk_overlap=0)
# 切割加载的 document
split_docs = text_splitter.split_documents(data)
print("split_docs size:",len(split_docs))model_name = r"D:\vec\bce-embeddin

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

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

相关文章

基于微信小程序的图书馆预约占座系统

作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 基于微信小程序JavaSpringBootVueMySQL的图…

(k8s)kubernetes 挂载 minio csi 的方式(pod挂载pvc存在csi驱动问题,挂载不上)

一、安装Minio(Minio分布式集群搭建部署_minio集群最少几台-CSDN博客) 生成accessKeyID和secretAccessKey: 二、安装csi-s3插件(在k8s集群上) 首先我们把插件的yaml文件都下载下来,为了保证版本测试的一致性,我们下载…

前端面试常考算法

快速排序 #include<iostream> #include<cstdio> using namespace std; const int N 100005; int a[N];void quick_sort(int a[], int l, int r) {if (l > r) return;int x a[l r >> 1];int i l - 1, j r 1;while (i < j) {while (a[i] < x);…

使用 C++ 过滤文件中的纯英文字符串

在处理多语言文本数据时&#xff0c;经常会遇到需要过滤掉非目标语言字符串的情况。例如&#xff0c;你可能有多个文件&#xff0c;每个文件中存放了不同语言的字符串&#xff0c;但这些文件中都混杂了一些纯英文的字符串。本文将介绍如何使用 C 实现只获取每个文件中的纯英文字…

什么是 PHP? 为什么用 PHP? 谁在用 PHP?

一、什么是 PHP&#xff1f; PHP&#xff08;Hypertext Preprocessor&#xff0c;超文本预处理器&#xff09;是一种广泛应用于 Web 开发的通用开源脚本语言。 PHP 主要用于服务器端编程&#xff0c;可以嵌入 HTML 中&#xff0c;与数据库进行交互&#xff0c;生成动态网页内容…

FreeRTOS—任务通知

一&#xff0c;概念介绍 队列、信号量、事件组等IPC技术都需要创建一个中间对象进程之间通过这些中间对象进行通讯或同步。创建对象就需要分配内存&#xff0c;占用一定内存。 二&#xff0c;任务通知的特点&#xff1a; 一个任务或ISR向另外一个指定的任务发送通知&#xff0c…

微信小程序中的模块化、组件化开发:完整指南

文章目录 前言一、模块化与组件化开发的优势1.1模块化开发的优势1.2 组件化开发的优势 二、组件的抽离标准及规范2.1 抽离组件的标准2.2 组件化开发规范 三、模块化规范的种类及优劣比较3.1 CommonJS3.2 ES6 Modules3.3 优劣对比 四、组件封装&#xff1a;全局组件、分包组件、…

浅谈树型结构——树

文章目录 一、什么是树&#xff1f;二、树的特点三、树的概念四、树的表示形式五、树的应用 一、什么是树&#xff1f; 树是一种 非线性 的数据结构&#xff0c;是树型结构。是一个由n个有限结点组成的一个具有层次关系的集合&#xff0c;这种集合因为看起来像一颗倒挂的树&am…

波克城市 x NebulaGraph|高效数据血缘系统在游戏领域的构建实战

关于波克城市和作者‍‍ 波克城市&#xff0c;一家专注于研发精品休闲游戏的全球化公司&#xff0c;连续七年入选中国互联网综合实力百强&#xff0c;2023 年位列 17 位。波克城市旗下拥有《捕鱼达人》《猫咪公寓2》等精品休闲游戏&#xff0c;全球注册用户超 5 亿&#xff0c;…

系统架构师---介绍ER图

E-R图&#xff0c;全称为Entity-Relationship Diagram&#xff0c;即实体联系图或实体关系图&#xff0c;是一种用于描述数据库中实体及其关系的数据建模工具。它是数据库设计中的重要概念模型&#xff0c;通过图形化的方式展示了实体、属性和它们之间的关系&#xff0c;帮助开…

借老系统重构我准备写个迷你版apiFox

前段时间一直在忙公司老系统重构的方案设计&#xff0c;其中最大的重构点就是前后端分离。为了加快前后端协同开发和对接的工作效率&#xff0c;我决定写一个公司内部使用的迷你版的apiFox。 文章目录 有现成的工具为啥不用现有成熟方案初步成果展示下一步计划 有现成的工具为啥…

Kafka+PostgreSql,构建一个总线服务

之前开发的系统&#xff0c;用到了RabbitMQ和SQL Server作为总线服务的传输层和存储层&#xff0c;最近一直在看Kafka和PostgreSql相关的知识&#xff0c;想着是不是可以把服务总线的技术栈切换到这个上面。今天花了点时间试了试&#xff0c;过程还是比较顺利的&#xff0c;后续…

华为CNA VRM搭建(使用vmware worfstartion搭建)

创建虚拟机&#xff1a; 自定义→高级 选择硬件兼容性&#xff1a;默认安装版本&#xff0c;如果未来想要将此虚拟机安装到其他电脑&#xff0c;其他电脑版本过低&#xff0c;此时可以向下兼容&#xff0c;这里我们默认版本 稍后安装操作系统&#xff1a; CNA采用Euler OS系统…

MySQL练手题--体育馆的人流量(困难)

一、准备工作 Create table If Not Exists Stadium (id int, visit_date DATE NULL, people int); Truncate table Stadium; insert into Stadium (id, visit_date, people) values (1, 2017-01-01, 10); insert into Stadium (id, visit_date, people) values (2, 2017-01-02…

springboot luttuc redis 集成protobuf,手动序列化反序列化

前置需知&#xff1a; 1.本文章和网上大部分博客配置不太一样&#xff0c;各位看官要分析一下自己的需求。集成protobuf 本文章主要是手动调用protobuf的序列化方法&#xff0c;而不是交由springboot 去做&#xff0c;会偏向原生java 使用方式 2.由于为了和公司其他的项目达成…

如何修改BP神经网络的传递函数

BP神经网络每种传递函数都有自己的特点,输入输出值不同,线性和非线性不同,对于有些模型,需要做出有针对性的调整,需要自定义传递函数,这是修改的原因之一,有些模型,数据有一定的物理意义,或者其他特殊要求,有些因子需要单独处理,这个时候也需要自定义传递函数,这是…

HTML + CSS - 网页布局之一般布局浮动布局

1. 一般布局 1.1 一般布局相关参数 元素内容常常可以想像为放在一个盒子里&#xff0c;然后在周边加上内边距&#xff0c;边框和外边距&#xff0c;是盒子模型 默认一个块级区域会填充父类所有的行向空间&#xff0c;并且沿着块伸长容纳其内容&#xff0c;可以为块状体设置某…

实习项目|苍穹外卖|day10

Spring Task cron 表达式 入门案例 订单状态定时处理 通知用户支付&#xff01;通知商家完成订单&#xff01; Scheduled(cron "0 0/1 * * * ? ")public void processTimeoutOrder(){log.info("定时处理超时订单: {}", LocalDateTime.now());//答案是…

Stable Diffusion AI算法,实现一键式后期处理与图像修复魔法

在当今数字影像时代&#xff0c;后期处理技术已成为将原始图像转化为视觉上令人惊叹艺术作品的点睛之笔。随着人工智能技术的飞速发展&#xff0c;尤其是Stable Diffusion技术在图像处理领域的应用&#xff0c;图片后期处理已达到前所未有的高度&#xff0c;为摄影师、设计师及…

如何从github中克隆指定文件夹

一般来说&#xff0c;我们使用git clone <url> 是会克隆整个仓库下来的&#xff0c;但是某些时候我们可能只需要仓库中的某个/某几个文件夹即可&#xff0c;从而避免下载很多冗余的内容 Git 2.25.0 (Jan 2020)提供了sparse-checkout来实现此内容&#xff0c;一下给出具体…