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

news2024/11/15 20:01:29

浅谈人工智能之基于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.coloradmin.cn/o/2138863.html

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

相关文章

快速打字及技巧

1.tab部首 娴 xian tab nv 楔 xie tab mu 2.用单引号间隔 xian 西安 修改技巧:Ctrl首字母就能快速定位到该字母的前面 3.启用U模式,再也不怕生僻字 u tututu 垚 u niuniuniu 犇 或者用笔画拼音缩写 u pn 㐅 4.启用V模式,输入法秒变计算…

Ubuntu 不重装系统增加交换空间大小

目录 一、设置交换文件 二、删除重新创建交换文件 一、设置交换文件 1、创建新的交换文件 使用 dd 命令创建一个新的交换文件。例如,创建一个4GB的交换文件: sudo dd if/dev/zero of/swapfile bs1G count4 2、设置交换文件的权限 为了安全起见&am…

蒸!--数据在内存中的存储

一.整数在内存中的存储 对于整形来说:数据存放内存中其实存放的是补码。 为什么? 在计算机系统中,数值⼀律⽤补码来表⽰和存储。 原因在于,使⽤补码,可以将符号位和数值域统⼀处理; 同时,加法和…

《Deep Residual Learning for Image Recognition》论文导读

版权声明 本文原创作者:谷哥的小弟作者博客地址:http://blog.csdn.net/lfdfhl论文背景 随着深度学习的发展,神经网络的深度逐渐成为影响模型性能的关键因素。然而,随着网络深度的增加,训练过程中的梯度消失和模型退化问题愈发严重,这限制了神经网络性能的进一步提升。《…

【例题】lanqiao3865 Alice和Bob的爱恨情仇

样例输入 1 2 3 4 1样例输出 1 Alice样例输入 2 2 1 6 6样例输出 2 Bob解题思路 题目已知条件: Alice先手每次只能从一堆中取走 k m ( k 为奇数 , m ≥ 0 ) k^m(k为奇数,m\geq0) km(k为奇数,m≥0)个饼干,所以每次取走的饼干数量一定是奇数。取…

C++——哈希unordered_set/unordered_map的封装

目录 前言 二、unordered_set的封装 1.模板参数列表的改造 2. 增加迭代器操作 3. 模板参数的意义 三、unordered_map的封装 1、“轮子所需要的参数 2、迭代器 四、完整代码 1、HashTable 2、unordered_set 3、unordered_map 总结 前言 unordered_set和map的介绍在上一篇博客有…

前端实战:使用JS和Canvas实现运算图形验证码(uniapp、微信小程序同样可用)

图形验证码是网站安全防护的重要组成部分,能有效防止自动化脚本进行恶意操作,如何实现一个简单的运算图形验证码?本文封装了一个简单的js类,可以用于生成简单但安全的图形验证码。它支持自定义验证码样式,包括字体大小…

驾校预约学习系统的设计与实现

摘 要 伴随着信息技术与互联网技术的不断发展,人们进到了一个新的信息化时代,传统管理技术性没法高效率、容易地管理信息内容。为了实现时代的发展必须,提升管理高效率,各种各样管理管理体系应时而生,各个领域陆续进到…

计算机毕业设计 扶贫助农系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍:✌从事软件开发10年之余,专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ 🍅文末获取源码联系🍅 👇🏻 精…

C++进阶 二叉搜索树的讲解

二叉搜索树的概念 二叉搜索树又称为二叉排序树。 二叉搜索树的性质 若它的左子树不为空,则左子树上所有结点的值都小于等于根结点的值若它的右子树不为空,则右子树上所有结点的值都大于等于根结点的值它的左右子树也分别为二叉搜索树二叉搜索树中可以支持…

【Python】基本使用

目录 变量的类型 整数 int 浮点数 float 字符串 str 字符串长度 格式化字符串 布尔类型 动态类型 注释 获取输入 浮点数比较 多元赋值 for循环 函数的定义和调用 创建函数/定义函数 调用函数/使用函数 列表 创建列表 切片操作 遍历列表 新增元素 判断元…

2024上半年国产操作系统卖疯了!麒麟4.9亿,统信1.9亿!

昨天一篇关于国产数据库上市公司的财报分析,没想到还小🔥了一把。实际上国产数据库与操作系统是密不可分的,既然用户要进行全面国产化,那么除了数据库,底层服务器操作系统, 一定也会是国产操作系统。 从20…

JavaScript事件处理和常用对象

文章目录 前言一、事件处理程序 1.JavaScript 常用事件2.事件处理程序的调用二、常用对象 1.Window 对象2.String 对象3.Date 对象总结 前言 JavaScript 语言是事件驱动型的。这意味着,该门语言可以通过事件触发来调用某一函数或者一段代码。该文还简单介绍了Window…

讨论人机交互研究中大语言模型的整合与伦理问题

概述 论文地址:https://arxiv.org/pdf/2403.19876.pdf 近年来,大规模语言模型发展迅速。它们给研究和教育领域带来了许多变化。这些模型也是对人机交互(HCI)研究过程的有力补充,可以分析定性和定量数据,再…

4.C_数据结构_队列

概述 什么是队列: 队列是限定在两端进行插入操作和删除操作的线性表。具有先入先出(FIFO)的特点 相关名词: 队尾:写入数据的一段队头:读取数据的一段空队:队列中没有数据,队头指针 队尾指针满队&#…

springboot 整合quartz定时任务

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、pom的配置1.加注解 二、使用方法1.工程图2.创建工具类 三、controller 实现 前言 提示:这里可以添加本文要记录的大概内容: 提示&a…

微服务、云计算、分布式开发全套课程课件,来原于企培和多年大厂工作提炼

本课内容为笔者16年企业工作期间企培经验总结的 全套课件。需要自取,已分块和整体上传至资源下载中。 全部来源于笔者多年企业培训迭代整理,并做了特殊处理,所以内容无涉密和版权麻烦。 课件内容全部来源于笔者在京东、58、阿里;中…

第二百三十二节 JPA教程 - JPA教程 - JPA ID自动生成器示例、JPA ID生成策略示例

JPA教程 - JPA ID自动生成器示例 我们可以将id字段标记为自动生成的主键列。 数据库将在插入时自动为id字段生成一个值数据到表。 例子 下面的代码来自Person.java。 package cn.w3cschool.common;import javax.persistence.Entity; import javax.persistence.GeneratedValu…

java内存概述

运行时数据区域 Java 虚拟机在执行 Java 程序的过程中会把它所管理的内存划分为若干个不同的数据区域。这些区域有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启 动而一直存在,有些区域则是依赖用户线程的启动和结束而建立和…

charls基于夜神模拟器抓取安卓7.0应用程序https请求

charls基于夜神模拟器抓取安卓7.0应用程序https请求 1、安装charls(安装步骤这里就不详细说了)2、下载证书(证书后缀名 xx.pem)3、使用git bash生成证书hash4、上传证书到安卓的系统证书目录下(夜神模拟器方案&#xf…