一、基本概念
AIGC(AI Generated content AI 生成内容)
AI生成的文本、代码、图片、音频、视频。都可以成为AIGC。
Generative AI(生成式AI)所生成的内容就是AIGC
AI
指代计算机人工智能,模仿人类的智能从而解决问题和完成任务。机器学习
是AI的子集,不需要做显示编程,而是通过算法让计算机自动学习和改进-
监督学习
算法接受带有标签的训练数据,也就是期望的输出值(例如进行分类和回归) -
无监督学习
自主发现数据里的模式或规律( 例如聚类) -
强化学习
在环境里采取行动,根据反馈学习(下围棋) -
深度学习
使用人工神经网络,模仿人脑处理信息的方式,通过层次化提取和表示数据的特征
-
知识库
想象一下你是一个机器人,你要去帮助人们回答问题。但是你自己并不知道所有的答案,所以你需要一个地方来存储这些信息,就像是一个巨大的书库一样,里面装满了各种各样的书。
这个“书库”就是知识库。里面可能有各种书籍,每本书都代表了一个特定的知识领域。比如,有一本书是关于天气预报的,里面包含了各种关于天气的知识,比如什么样的云会带来雨水,哪种气象条件会导致雷暴等等。
另一本书可能是关于烹饪的,里面包含了各种菜谱、食材和烹饪技巧。每本书都是一种知识表示方式,它们可能是规则、概念、图表或者其他形式的知识结构。
当有人向你提问时,你可以去搜索这些书籍,找到相关的信息,并根据它们给出答案。比如,如果有人问你明天的天气如何,你可以去查找天气预报这本书,然后告诉他们明天会是晴天还是多云。它提供了一个结构化的方式来存储和组织知识,使得智能系统能够理解和处理人类的信息需求。
微调
微调指在预训练的基础上,使用特定领域的少量数据进一步训练模型,以适应特定的任务需求。它能让模型更准确地处理特定类型的问题。微调就是在一个已经训练好的人工智能模型基础上,稍微修改一些参数,以便适应新的任务或数据。就像是在一个已经学会了一些知识的学生基础上,再加上一点新的知识,以适应新的考试题目一样。
AI Agent
AI代理(Agent)是一种在人工智能领域中常见的概念,它指的是能够感知环境、进行决策和执行动作的程序或系统。这些代理可以是物理实体,如机器人,也可以是虚拟实体,如在计算机程序中运行的智能系统。
大模型相当为大脑,agent为手脚。模型负责下达指令,agent负责收集执行等。
提示词工程
提示词直接决定了反馈结果的优劣,想让大模型回答我们想要的内容,就需要优化提示词,使得模型的回答更加符合我们的预期的要求。提示词就起到了数据清洗和筛选作用。
提示词的作用有三点
- 更精确的答案:确保大模型能够准确理解并回答用户的问题。
- 多样性:一个稍有不同的提示,会导致截然不同的答案。
- 控制输出风格:提示词可以用来指导模型的输出风格或内容。
提示词的制定环节
- 明确目标:首先确定你希望大模型或者机器人为你做什么?
- 优化提示:可以给大模型更加具体的指示。
- 评估和迭代:通过不同的提示词,来问它同样的问题,查看模型反馈是否满意。
提示词的核心技术
N-gram :通过统计通过计算N个词出现的概率,来预测下一个词(N为不固定的数)
深度学习:由多层神经网络组成,可以自动从数据中心学习,让模型不断自我学习优化,直到反馈符合预期
如何使用提示词
- 语言清晰
- 尽量把任务要求和用户输入用分隔符来隔开,尽量使用英文的""
- 给模型足够的信息,充分引导模型沿着正确的道路得出正确的答案。
提示词结构
-
Context上下文(可选)
- 角色
- 任务
- 知识
-
instruction命令(必选)
- 步骤
- 思维链
- 示例
-
input data输入数据(必选)
-
句子
-
文章
-
问题
-
-
output indicator输出格式(可选)
机器学习和神经网络
【偏难,看不懂可跳过】机器学习和神经网络基础知识_哔哩哔哩_bilibili
神经网络的基础概念
- 神经元(Neuron): 神经网络的基本单元,也称为节点或者单元。它模拟了生物神经元的功能,接收输入信号、进行加权求和、经过激活函数处理后产生输出。
- 连接权重(Weights): 连接权重是神经元之间连接的强度,用来调节输入信号对神经元输出的影响程度。权重越大,表示该输入对神经元的影响越大。
- 激活函数(Activation Function): 激活函数决定了神经元是否被激活(输出非零值)。常用的激活函数包括sigmoid、ReLU、tanh等,它们用于引入非线性特性,使神经网络能够学习更复杂的模式。
- 输入层(Input Layer): 输入层接收来自外部的数据输入,并将数据传递给网络中的其他层。每个输入层节点对应输入数据的一个特征。
- 隐藏层(Hidden Layer): 隐藏层位于输入层和输出层之间,负责处理输入数据并提取特征。一个神经网络可以包含多个隐藏层。
- 输出层(Output Layer): 输出层负责将神经网络的计算结果输出,通常用于进行分类、回归等任务。
- 前向传播(Forward Propagation): 前向传播是指输入数据经过神经网络各层的计算和传递过程,最终产生输出结果的过程。
- 反向传播(Backpropagation): 反向传播是一种通过计算梯度来更新神经网络参数的方法,它是训练神经网络的核心算法之一。
卷积神经网络
卷积神经网络(Convolutional Neural Network,CNN)是一种专门用于处理具有网格状拓扑结构数据的人工神经网络。CNN 在图像识别、计算机视觉和自然语言处理等领域取得了巨大成功。
CNN 的核心特点包括:
- 卷积层(Convolutional Layer): CNN 使用卷积层来提取输入数据中的特征。卷积操作将一个滤波器(也称为卷积核)应用于输入数据的不同位置,从而生成特征图。
- 池化层(Pooling Layer): 池化层通常紧随在卷积层之后,用于减少特征图的维度并提取最显著的特征。最常见的池化操作是最大池化,即在特定区域内选择最大值作为输出。
- 激活函数(Activation Function): 在卷积层和池化层之间,通常会添加一个激活函数,如ReLU(Rectified Linear Unit),用于引入非线性特性。
- 全连接层(Fully Connected Layer): 在卷积和池化层之后,通常会有一到多个全连接层,用于将提取的特征映射到输出类别或者结果上。
CNN 的工作流程包括:
- 输入层: 将输入数据(如图像)送入网络。
- 卷积层: 在卷积层中,通过应用多个滤波器来提取输入数据中的不同特征。
- 池化层: 池化层用于减少特征图的尺寸,并提取最显著的特征。
- 全连接层: 最后的全连接层将提取的特征映射到输出类别。
- 输出层: 输出层产生最终的预测结果。
自然语言处理
自然语言处理(NLP)是人工智能领域的一个分支,旨在让计算机能够理解、处理和生成人类自然语言的文本和语音数据。它涉及文本分类、命名实体识别、机器翻译、问答系统等任务,广泛应用于搜索引擎、智能助手、智能客服等领域。
多模态
多模态模型是指能够同时处理多种不同类型数据(例如文本、图像、音频等)的机器学习模型。这些模型通常设计用于解决多模态任务,如图像描述生成、视觉问答、视频理解等。多模态模型通常结合了不同类型数据的处理能力,使其能够更全面地理解和处理复杂的输入信息。
Embedding(嵌入)
嵌入是一种技术,用于将高维、复杂的数据(如文本、图像)转换成计算机容易处理的低维向量表示。在自然语言处理(NLP)中,单词嵌入将单词表示为向量,使得机器学习模型能够更好地理解和处理文本数据。
RAG(检索增强生成)
是一种结合了信息检索和生成技术的AI模型框架。在这个框架中,模型首先通过检索找到相关的文档或信息,然后在生成答案时利用检索结果进行增强。这可以显著提高生成的准确性和相关性。
LangChain
LangChain 是一个用于构建基于语言模型应用的框架,特别适用于构建复杂的应用程序,如问答系统、对话机器人、智能助理等。它旨在帮助开发者更方便地整合和定制各种功能模块,以充分发挥大型语言模型的潜力。
数据输入(数据清洗)------>数据分析与处理------>数据输出
数据输入:手动、文件上传、数据库连接
数据分析与处理:
- 算法:文本分类模型、情感分析模型、主题建模
- 分析过程与步骤:准备阶段(对数据进行切割等)、烹饪(根据不同的要求选择算法)、调味(进行微调)
数据输出:图表类、文字报告、互动界面
主要特点和概念:
- 链(Chains):LangChain 通过“链”的概念来将不同的语言模型或功能模块组合起来。每个链可以执行不同的任务,例如接收用户输入、与外部数据源交互、生成答案等。这些链可以独立使用,也可以串联起来创建复杂的应用逻辑。
- 代理(Agents):代理是一种高级功能,允许语言模型动态选择并调用不同的工具或功能模块,以执行复杂任务。比如,代理可以根据用户的问题选择调用特定的 API 或数据库,检索到相关信息后返回答案。
- 工具(Tools):这些是与外部数据源或 API 交互的组件,通常包括检索系统、数据库、搜索引擎等。它们为链或代理提供扩展能力,让模型能够回答更复杂的问题。
- 记忆(Memory):LangChain 支持在链或代理的对话过程中引入“记忆”,使其能够在多轮对话中保持上下文一致性。这种记忆可以让应用程序更加个性化和智能化。
- 文档加载(Document Loaders):该模块用于加载外部文档(如 PDF、网页内容、数据库记录等),然后供检索或生成模型使用。
应用场景:
- 对话系统:可以基于用户输入构建具有多轮对话能力的系统,并利用链和工具动态检索相关信息。
- 问答系统:结合外部数据源的检索工具,可以回答开放性或特定领域的问题。
- 文档生成:从现有文档中提取相关信息,然后利用生成模型编写新的文档或报告。
LangChain 框架为开发者提供了丰富的组件和接口,便于集成外部工具和服务,从而让语言模型的功能更加强大。
部署(Chatglm2+langchain)
https://www.codewithgpu.com/i/chatchat-space/Langchain-Chatchat/Langchain-Chatchat
cd /root/Langchain-Chatchat/
conda actibate /root/pyenv
python startup.py -a连接: ssh -p 12910 root@connect.westb.seetacloud.com
映射到本地 :ssh -CNg -L 6006:127.0.0.1:6006 root@connect.westb.seetacloud.com -p 12910
密码:ATM8/b/qhG//http://127.0.0.1:6006/
# 智谱AI API,具体注册及api key获取请前往 http://open.bigmodel.cn
"zhipu-api": {"api_key": "*************************","version": "glm-4","provider": "ChatGLMWorker",
},
微调模型
在阿里云打开
按顺序执行命令
demos/chatglm_6b/ChatGLM-6B-main/ptuning/AdvertiseGen_Simple/train.json
该json文数据集,按照格式修改,然后重新执行如下数据准备和微调模型,命令
私有化大模型
先到https://supabase.com获取项目API
__创建阿里云实例(新加坡)__普通2*4c7就可以
# 克隆仓库
git clone https://github.com/n4ze3m/dialoqbase.git# 进入目录
cd dialoqbase/docker# 编辑文件
nano .env#然后输入 API key 以及数据库密钥#安装docker
curl -fsSl https://get.docker.com | sh
#安装docker compose
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o/usr/local/bin/docker-compose#给二进制文件添加权限
sudo chmod +x /usr/local/bin/docker-compose#运行docker compose
sudo systemctl start docker
sudo systemctl status docker#新建终端
cd dialoqbase/docker
#执行程序
docker-compose up -d
#然后在浏览器打开公网ip+3000端口初始账户:admin
初始密码:admin
投喂的数据集格式:问题和答案要在同一行
#1. 更新软件包
sudo apt update
sudo apt upgrade#2.安装git
sudo apt install git #3.安装项目
git clone https://github.com/aiwaves-cn/agents.git#4.安装python虚拟环境包
apt install python3.10-venv#5.创建虚拟环境
python3 -m venv myenv#6.开启虚拟环境
source myenv/bin/activate#7.更新pip包
pip install --upgrade pip#8.安装项目依赖
pip install ai-agents
部署Bisheng
bisheng/docker at main · dataelement/bisheng (github.com)
推荐云配置:cpu:32*188 GPU:A10
-
安装docker
sudo apt update sudo apt upgrade# 安装依赖工具 sudo apt install apt-transport-https ca-certificates curl software-properties-common# 添加docker官方的GPG密钥 curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg# 将Docker官方存储库添加到APT源列表中 sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"# 更新索引 sudo apt update# 安装docker sudo apt install docker-ce# 验证安装 sudo systemctl start docker
-
安装docker -compose
# 下载compose
sudo curl -L "https://github.com/docker/compose/releases/download/v2.20.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose# 赋权
sudo chmod +x /usr/local/bin/docker-composedocker compose version
- 安装git并下载项目
sudo apt install gitgit clone https://github.com/dataelement/bisheng.gitcd bisheng/dockersudo docker-compose up -dgit --version验证项目,3001端口 用户admin 密码1234
- 安装向量数据库Milvus(前面似乎已经安装了)
cd ~
# 下载
wget https://github.com/milvus-io/milvus/releases/download/v2.2.10/milvus-standalone-docker-compose.yml -O docker-compose.yml# 启动
sudo docker-compose up -d
- 安装ElasticSearch(前面似乎已经安装了)
# 创建docker网络
docker network create elasticdocker pull docker.elastic.co/elasticsearch/elasticsearch:8.9.2docker run --name elasticsearch --net elastic -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -it -d docker.elastic.co/elasticsearch/elasticsearch:8.9.2
- 安装 BISHENG-RT 和下载大模型和检查N卡(新终端)
docker pull dataelement/bisheng-rt:0.0.1
# 创建目录
mkdir -p model_repository
# 进入到目录
cd model_repository
#更新索引
sudo apt update
#安装git-lfs
sudo apt install git-lfs
#初始化
git lfs install
#拉取模型
git clone https://huggingface.co/THUDM/chatglm3-6b#如果停止不动停止任务,进入目录执行如下
git lfs pull#检查LFS对象是否存在
ls-lh .git/lfs/objects
#检查文件的完整性
git lfs ls-files
#尝试重新下载
git lfs fetch --all#查看n卡驱动和GPTU状态
nvidia-smi#检查nvidia-container-toolkit是否已经安装(若没有输出就没有安装)
dpkg -l | grep nvidia-container-toolkit#添加NVIDIA的软件包仓库
distribution=$(./etc/os-release;echo SIDSVERSION ID)
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add-
curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list#更新索引
sudo apt-get update#安装nvidia-container-toolkit
sudo apt-get install -y nvidia-container-toolkitfunction run container({
LOCAL MODEL REPO="/root/model repository'”#改成你自己的repo地址
MOUNT="-v $LOCAL_MODEL_REPO:/opt/bisheng-rt/models/model_repository"
IMAGE="dataelement/bisheng-rt:0.0.1"
docker run --gpus=all -p 9000:9000 -p 9001:9001 -p 9002:9002 -itd --workdir /opt/bisheng-rt\--shm-size=10G --name bisheng_rt_v001 $(MOUNT) $IMAGE ./bin/rtserver f
web界面gradio学习
【Gradio系列教程】 https://www.bilibili.com/video/BV19m411U7K8/?p=3&share_source=copy_web&vd_source=d2d1bdec77776a27cbcb4517d05c2c52
常见的输入组件
import gradio as grinput_list = [gr.Audio(sources=["microphone","upload"], type="numpy", label="Audio file"), # 音频gr.Checkbox(label="Checkbox"), # 复选框gr.ColorPicker(label="Color Picker"),gr.Dataframe(headers=None, label="Dataframe"), # 表格gr.Dropdown(choices=["Option 1", "Option 2", "Option 3"], label="Dropdown"), # 下拉框gr.File(label="File Upload", type="binary"), # 文件gr.Image(sources=["webcam","upload"], label="Image"), # 图片gr.Radio(choices=["Option 1", "Option 2", "Option 3"], label="Radio"), # 单选框gr.Slider(minimum=0, maximum=10, step=2, label="Slider"), # 滑动条gr.Textbox(label="Textbox"), # 文本框gr.TextArea(label="Textarea"), # 多行文本框gr.Video(sources=["webcam","upload"], label="Video"), # 视频gr.CheckboxGroup(choices=["Option 1", "Option 2", "Option 3"])
]output_list = [gr.Textbox(label="Audio output", lines=7),gr.Textbox(label="Checkbox output"),gr.Textbox(label="Color Picker output"),gr.Textbox(label="Dataframe output"),gr.Textbox(label="Dropdown output"),gr.Textbox(label="File Upload output"),gr.Textbox(label="Image output"),gr.Textbox(label="Radio output"),gr.Textbox(label="Slider output"),gr.Textbox(label="Textbox output"),gr.Textbox(label="Textarea output"),gr.Textbox(label="Video output"),gr.Textbox(label="Checkbox Group output") # 复选框组,返回一个列表,包含所选的项
]def input_and_output(*input_data):return input_dataiface = gr.Interface(fn=input_and_output, inputs=input_list, outputs=output_list, description="This is a test interface.", live=True)
iface.launch()
常见输出组件
# 音频输出
def audio_fn(audio):hz=audio[0]data=audio[1]print(f"Audio data received with {hz} Hz")print(f"Data shape: {data}")return (hz, data)demo =gr.Interface(fn=audio_fn,inputs=gr.Audio(type="numpy"),outputs="audio")
demo.launch()# 柱状图
import pandas as pd
#创建数据框
simple = pd.DataFrame({"a": [1, 2, 3],"b": [4, 5, 6]
})
print(simple)
demo=gr.Interface( fn=None, inputs=None, outputs=gr.BarPlot(simple, x="a", y="b"))
demo.launch()# 给图片地址,输出图片,还能对图片进行排序
def process():cheetahs = ["https://upload.wikimedia.org/wikipedia/commons/0/09/TheCheethcat.jpg","https://nationalzoo.si.edu/sites/default/files/animals/cheetah-003.jpg","https://img.etimg.com/thumb/msid-50159822,width-650,imgsize-129520,,resizemode-4,quality-100/.jpg","https://nationalzoo.si.edu/sites/default/files/animals/cheetah-002.jpg",]cheetahs= [(cheetah, f"Cheetah {i + 1}") for i, cheetah in enumerate(cheetahs)]return cheetahs
demo=gr.Interface( fn=process, inputs=None, outputs=gr.Gallery())
demo.launch()#各种图
import numpy as np
import matplotlib.pyplot as pltdef fig_output():Fs = 8000f = 5sample = 10x = np.arange(sample)y = np.sin(2 * np.pi * f * x / Fs)plt.plot(x,y)return pltdemo = gr.Interface(fn=fig_output, inputs=None, outputs=gr.Plot())
demo.launch()#展示json数据
json_sample ={"name":"John","age":30,"city":"New York"}demo = gr.Interface(fn=None, inputs=None, outputs=gr.Json(json_sample) )
Blocks(更加灵活搭建页面)
gr.Blocks()
gr.Row()
gr.Column()
gr.Tab()
gr.Accordion()
gr.Group()
布局代码
效果