如何利用开源工具搭建AI大模型底座

news2024/11/27 8:44:03

开源社区是技术发展的一个重要部分,对于AI大模型来说,也是如此。

我们在这篇文章中来尝试通过开源工具来构建AI大模型的底座,涉及到的技术包括:

  • Langchain
  • OpenAI
  • Flowise
  • LocalAI
  • Llama

使用Langchain构建第一个对话应用

如果你使用过ChatGPT,你应该知道它是一个基于大语言模型的应用程序,可以与人类进行多轮对话。

为了让大语言模型能够与人类友好的多轮对话,我们需要引入两个额外组件:

  1. ConversationBufferMemory,它帮助LLM记录我们的对话过程。
  2. ConversationChain,它帮我们管理整个绘画过程,通过调用BufferMemory中的对话信息,它可以让无状态的LLM了解我们的对话上下文。

我们可以使用下面的代码来通过Langchain实现一个简易版的ChatGPT:

from langchain.llms import OpenAI
from langchain.chains import ConversationChain
from langchain.memory import ConversationBufferMemory

import os
os.environ["OPENAI_API_KEY"] = '...'

llm = OpenAI(temperature=0)
mem = ConversationBufferMemory()

# Here it is by default set to "AI"
conversation = ConversationChain(llm=llm, verbose=True, memory=mem)

conversation.predict(input="Hi there!")

通过Flowise零代码搭建LLM应用平台

Flowise官网:https://flowiseai.com/

Flowise is a low-code/no-code drag & drop tool with the aim to make it easy for people to visualize and build LLM apps.

我们可以在Windows/Mac/Linux中安装Flowise,以Linux为例,安装Flowise步骤如下:

  1. 安装NodeJS
  2. 安装Docker和Docker compose
  3. 运行下面的脚本安装和启动Flowise
    npm install -g flowise
    npx flowise start

我们可以通过http://{server}:3000 来访问Flowise,截图如下:
在这里插入图片描述

通过Flowise Portal,我们可以创建新的Chatflow,在打开的flow页面,我们可以通过拖拽的方式,来构建flow:
在这里插入图片描述
例如,我们上面提到的通过Langchain来构建简易ChatGPT应用,创建出来的flow如下截图:

在这里插入图片描述

我们可以通过页面右上角的对话按钮,对我们的flow进行测试:
在这里插入图片描述

在LLM应用中引入领域知识库

在实际应用中,我们可以为模型增加外部记忆,在提示词中引入一些领域知识,来帮助模型提升回答质量。

这种方式的具体步骤如下:

  1. 对输入文档进行切片,生成语义向量(Embedding),存入向量数据库作为外部记忆。
  2. 根据所提的问题,检索向量数据库,获取文档中的内容片段。
  3. 把文档片段和所提的问题一并组织成提示词,提交给大语言模型,让其理解文档内容,针对问题生成恰当的答案。

为了实现这个应用,我们需要引入以下组件:

  1. Docx File Loader,负责加载外部输入的文档。
  2. Recursive Character Text Splitter,用来对文档内容进行断句切片。
  3. OpenAI Embeddings,负责将断句后的内容切片映射成高维Embedding。
  4. In-Memory Vector Store,负责将Embedding存入数据库中,供LLM作为外部记忆。
  5. Conversational Retrieval QA Chain,负责根据问题,获得外部知识,在LLM思考生成答案后返回给用户。

使用Flowise构建上述的应用,截图如下:

在这里插入图片描述

使用LocalAI做可用LLM应用

我们前面做的LLM应用都依赖于OpenAI API,会有一些风险,我们可以考虑构建本地大模型。

我们可以基于LocalAI开源应用来实现这一点。

下面是搭建过程:

$ git clone https://github.com/go-skynet/LocalAI
$ cd LocalAI

我们使用一个小模型进行部署。

$ wget https://gpt4all.io/models/ggml-gpt4all-j.bin -O models/ggml-gpt4all-j
$ cp -rf prompt-templates/ggml-gpt4all-j.tmpl models/

然后我们可以加载models并将其封装为API服务。

$ docker-compose pull
$ docker-compose up -d

接下来是获取model列表进行验证。

$ curl http://localhost:8080/v1/models
{"object":"list","data":[{"id":"ggml-gpt4all-j","object":"model"}]}

这样我们可以修改Flowise,使用本地模型代替OpenAI。
在这里插入图片描述

使用Llama2构建LLM应用

我们还可以使用Llama2来构建LLM应用,这在应用许可上更加友好。

我们可以下载Llama2模型文件。

$ wget -c "https://huggingface.co/TheBloke/Llama-2-7B-chat-GGML/resolve/main/llama-2-7b-chat.ggmlv3.q4_0.bin" ./models

然后重启LocalAI,查看Llama2是否被正常部署。

$ curl -v  http://localhost:8080/v1/models
{"object":"list","data":[{"id":"llama-2-7b-chat.ggmlv3.q4_0.bin","object":"model"}]}

我们可以返回Flowise flow,将模型名字修改为llama-2-7b-chat.ggmlv3.q4_0.bin,这样我们就可以使用Llama2来回答我们的问题。

再进一步,我们还可以尝试使用AutoGPT或者AgentGPT来构建更加负责的LLM应用,帮助我们完成更有挑战性的事情。

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

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

相关文章

时序预测 | MATLAB实现TCN-LSTM时间卷积长短期记忆神经网络时间序列预测

时序预测 | MATLAB实现TCN-LSTM时间卷积长短期记忆神经网络时间序列预测 目录 时序预测 | MATLAB实现TCN-LSTM时间卷积长短期记忆神经网络时间序列预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 1.MATLAB实现TCN-LSTM时间卷积长短期记忆神经网络时间序列预测…

17.Oauth2-微服务认证

1.Oauth2 OAuth 2.0授权框架支持第三方支持访问有限的HTTP服务,通过在资源所有者和HTTP服务之间进行一个批准交互来代表资源者去访问这些资源,或者通过允许第三方应用程序以自己的名义获取访问权限。 为了方便理解,可以想象OAuth2.0就是在用…

reference based image enhancement 论文调研

Enhance Images as You Like with Unpaired Learning 这是IJCAI 2021的文章文章提出一个条件GAN模型,用reference image作为条件,可以在unpaired images上训练暗图增强模型,使得增强结果根据reference image来调节色调亮度和对比度。训练的监…

Redis事务为什么不支持回滚

Redis事务中过程中的错误分类两类: 在exec执行之前的错误,这种错误通常是指令错误,比如指令语法错误、内存不足等... --> 在开始事务后,传输指令时,遇到这种错误,Redis会给出Error错误提示,…

【多线程案例】定时器应用及实现

文章目录 1. 定时器是什么?2. 定时器的应用3. 自己实现定时器 1. 定时器是什么? 定时器就类似生活中的闹钟,它是软件开发中的一个重要组件。当有些线程我们并不希望它立刻执行,这个时候我们就可以使用定时器,规定线程在…

苹果iPhone15系列不再使用皮革保护壳?“FineWoven“官方认证替代

根据9月3日的报道,苹果即将推出的iPhone 15系列将不再使用皮革保护壳,取而代之的将是一种名为"FineWoven"的新材料编织工艺保护壳。 这种保护壳将有十种颜色可供选择,包括黑色、桑葚色、灰褐色、常绿色、太平洋蓝色、紫藤色、古白色…

Elasticsearch安装,Springboot整合Elasticsearch详细教程

Elasticsearch 是一个分布式、RESTful 风格的搜索和数据分析引擎,能够实现近乎实时的搜索。 Elasticsearch官网https://www.elastic.co/cn/ 目录 第一步:下载Elasticsearch 下载7.6.2版本 下载其他版本 第二步:安装Elasticsearch 第三…

【Spring+SpringMVC+Mybatis】SSM框架的整合、思想、工作原理和优缺点的略微讲解

🚀欢迎来到本文🚀 🍉个人简介:陈童学哦,目前学习C/C、算法、Python、Java等方向,一个正在慢慢前行的普通人。 🏀系列专栏:陈童学的日记 💡其他专栏:CSTL&…

Redis布隆过滤器原理

其实布隆过滤器本质上要解决的问题,就是防止很多没有意义的、恶意的请求穿透Redis(因为Redis中没有数据)直接打入到DB。它是Redis中的一个modules,其实可以理解为一个插件,用来拓展实现额外的功能。 可以简单理解布隆…

2.(Python数模)(优化模型一)线性规划问题

Python解决线性规划问题 参考了以下博文 https://blog.csdn.net/m0_46692607/article/details/126784109?spm1001.2014.3001.5506 目标是解决以下的线性规划,程序计算出目标函数的最大值,并在最大值下取得的x1x2x3对应值。 源代码如下: …

Android studio 实现生成二维码和扫描二维码

效果图 build.gradle(:app)添加依赖 dependencies {implementation com.google.zxing:core:3.3.3implementation com.journeyapps:zxing-android-embedded:3.6.0implementation com.google.zxing:javase:3.0.0 }Manifests.xml <uses-permission android:name"android…

SceneXplain 图片叙事升级:如何让图片听得到

‍SceneXplain 是一个由多模态 AI 驱动的产品服务&#xff0c;它不仅 提供一流的图像和视频标注解决方案&#xff0c;还具备卓越的多模态视觉问答能力&#xff0c;为用户解锁视觉内容的全新维度。 在《图像描述算法排位赛》中&#xff0c;我们探讨了图像描述&#xff08;Image …

DSSM实战中文文本匹配任务

引言 本文我们通过DSSM模型来完成中文文本匹配任务&#xff0c;其中包含了文本匹配任务的一般套路&#xff0c;后续只需要修改实现的模型。 数据准备 数据准备包括 构建词表(Vocabulary)构建数据集(Dataset) 本次用的是LCQMC通用领域问题匹配数据集&#xff0c;它已经分好…

利用 GNU Radio + HackRF 做 FM 收音机

比特的打包与解包 GNU Radio 系列教程&#xff08;四&#xff09;&#xff0d;&#xff0d; 比特的打包与解包_哔哩哔哩_bilibili SDR 教程 —— 利用 GNU Radio HackRF 做 FM 收音机_哔哩哔哩_bilibili

Nginx+keepalived实现高可用项目实战

一、环境搭建 此次项目准备四台虚拟机&#xff1a; 防火墙关闭 安装好nginx&#xff08;一台master,一台back&#xff0c;两台Web服务器&#xff09; ip:(根据自己的进行搭建) 192.168.85.128(master) 192.168.85.129(back) 192.168.85.132(web1) 192.168.85.133(web2)…

排序算法问题

给你一个整数数组 nums&#xff0c;请你将该数组升序排列。 示例 1&#xff1a; 输入&#xff1a;nums [5,2,3,1] 输出&#xff1a;[1,2,3,5] 示例 2&#xff1a; 输入&#xff1a;nums [5,1,1,2,0,0] 输出&#xff1a;[0,0,1,1,2,5] 代码如下&#xff1a; 1.插入排序(简…

Python 中轻松实现串口通信

迷途小书童的 Note 读完需要 3分钟 速读仅需 1 分钟 1 简介 pyserial 是一个 Python 库&#xff0c;它可以让您轻松地与串行端口进行通信。它支持多种操作系统&#xff0c;包括 Windows、Linux 和 macOS。pyserial 模块非常易于使用&#xff0c;并且提供了许多有用的功能。 2 实…

数学建模--二次规划型的求解的Python实现

目录 1.算法流程简介 2.算法核心代码 3.算法效果展示 1.算法流程简介 #二次规划模型 #二次规划我们需要用到函数:Cvxopt.solvers.qp(P,q,G,h,A,b) #首先解决二次规划问题和解决线性规划问题的流程差不多 """ 求解思路如下: 1.针对给定的代求式,转化成标准式…

8.(Python数模)(预测模型一)马尔科夫链预测

Python实现马尔科夫链预测 马尔科夫链原理 马尔科夫链是一种进行预测的方法&#xff0c;常用于系统未来时刻情况只和现在有关&#xff0c;而与过去无关。 用下面这个例子来讲述马尔科夫链。 如何预测下一时刻计算机发生故障的概率&#xff1f; 当前状态只存在0&#xff08;故…