大模型应用开发技术
大语言模型LLM简介目前,国内外各家大厂都在训练自己的大模型,没有能力训练的厂家也在开源大模型的基础上微调自己的行业领域大模型。但是,对我们普通人来说,无论是训练还是微调大尺寸的模型(几十上百b参数)所需要的计算资源都是我们无法承受的。所以,只能从应用本身出发,去做一些微小的工作。
在某一细分领域内,进一步提升LLM能力的方法主要有三种:检索增强生成RAG、微调Fine-turning、智能体Agent。下面简单介绍一下这三种方法。
检索增强生成RAG由于LLM的训练语料是大而全的数据集,所以它在某一细分领域给出的回答往往是不尽如人意的。面对一个专业问题,LLM很有可能答出一个看起来很正确但是完全没有答到真正的要点上的回答。既然如此,那我们就给LLM加上一个专业知识库,遇到专业问题先去知识库里搜索对应内容,再去结合搜索出来的知识进行答案整合和输出。
具体操作步骤是:
整理好知识文档,全部提取为文字形式。
按照一定的分割规则与长度切分为文本块。
使用嵌入模型(embedding model)计算出这些文本块的嵌入向量,并将它们存入向量数据库中。
在推理时,计算问题的嵌入向量,使用向量相 ...
数字信号处理
统计、概率和噪声信号与系统信号是对一种参数如何随另一种参数的变化而变化的描述。系统是对每个输入信号都产生一个输出信号的过程。命名信号有一些规则:
连续信号使用圆括号,如x(t),y(t); 而离散信号使用方括号,如 x[n],y[n]。
第二,信号要用小写字母,频域中使用大写字母。
第三,信号的命名通常是用来描述信号所代表的参数。例如,随时间变化的电压可能被称为v(t), 每个交易日都在改变的股票市价被叫做:p[d]。
第四,如果不可以用更多的描述性名称,离散系统的输入信号一般表示为x[n], 输出倌号y[n];连续系统则用x(t),y(t)表示。
信号与曲线两个参数都连续的信号称为连续信号,两个参数都离散的称为离散信号或数字信号。(注意:有些信号是离散的,但在图中却被表示为连续的。)Y轴纵坐标称为幅值,X轴横坐标称为代表另一个参数。横轴上的参数类型就是信号所在的域。抽样点索引在DSP中通常从0到N-1。
连续时间正弦信号谐波振荡:$$x_a(t) = Acos(\Omega t+\theta), -\infin<t<\infin$$A是正弦幅度,$\Omeg ...
Dockerfile入门与实践
Dockerfile 入门与实践Dockerfile 是一个文本文件,其内包含了一条条的 **指令(Instruction)**,每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建。
基本实践新建空白目录中,建立一个文本文件,并命名为 Dockerfile。
123mkdir mynginxcd mynginxtouch Dockerfile
其内容为:
123FROM nginxRUN echo '<h1>Hello, Docker!</h1>' > /usr/share/nginx/html/index.htmlEXPOSE 80
一个简单的 Dockerfile文件,仅由两个指令组成。
指令详解Dockerfile 中每一个指令都会建立一层镜像。应当尽量保持镜像最小建立层数,所以每个指令要承担更多的任务。
FROM 指定基础镜像就是指定基础镜像,一个 Dockerfile 中 FROM 是必备的指令,并且必须是第一条指令。
官方提供了许多基础镜像如:nginx、redis、mongo、mysql、httpd、p ...
Docker
Docker大纲初级
Docker 概述
Docker 安装
Docker 命令
镜像命令
容器命令
操作命令
中级
Docker 镜像
容器数据卷
DockerFile 脚本
Docker 网络原理
IDE 整合 Docker
高级
Docker Compose
Docker Swarm
持续集成与部署 Jekins
起步Docker 应用场景
容器化技术
系统级别虚拟化技术
轻便、容器间隔离
DevOps
一键运行
打包镜像,发布
便捷升级和扩、缩容
高效的计算资源利用
文档官方文档
基本组成架构
名词解释
镜像 image:类似于一个模板,可通过这个模板来创建容器服务,tomcat => docker run => tomcat 01 (容器服务);通过这个镜像可重复创建多个容器。
容器 container:Docker 利用容器技术,独立运行一个或一组通过镜像来创建的应用。容器具备启动、停止、删除等的基本命令;可理解为简易的 Linux 系统。
仓库 repository:存放镜像的地方。公有仓库:Docker Hub。国内访问需 ...
现代软件开发中的模式
前言在软件变得越来越大,越来越复杂的今天,像学生时代那样不使用任何设计模式、设计架构和设计工具来开发一款大型软件绝对是不可接受的。代码量一旦上来了,会出现很多代码量小的时候难以察觉到的设计思路缺陷和问题。这就要求我们一定要有工程化的思维。如果前期设计不好,代码量增加后后期修改和维护的成本将指数级上升。你会发现改任何一个点都会牵一发而动全身。
非常幸运的是,计算机与软件行业的前辈们已经将遇到的诸多问题一一克服,并迭代改进出了许多优秀的设计模式和设计方法。本文将简单介绍这些模式和方法当时所面临的问题以及它们克服问题所使用的方法蕴含的思想。一是理顺自己的思路,提醒笔者自己不断学习、不断进步;二是为了能给后来的学弟学妹门一些引导和启发,希望能对大家有所帮助。
设计模式首先是最基础的OOP(Object Oriented Programming,面向对象编程)及其四大特性:封装、抽象、继承、多态。它能够将复杂事物建模为可重现的简单结构,实现良好的可重用。内容比较基础,笔者在这里不过多赘述。
其次就是大名鼎鼎的设计模式。这些设计模式的目的其实都是一样的,就是让代码保持高内聚、低耦合,使得程序更加灵 ...
ChatGPT的流式输出
应用场景在使用ChatGPT时,模型的回复内容是一个字一个字蹦出来的,而不是整段话直接出现,整体呈现出一种类似于打字机的效果。但实际上,这个打字机效果是为了美化模型预测时间过长的一个副产品,类似于苹果的灵动岛。因为模型需要不断预测接下来要回复什么内容,整个预测完成的时间会比较长。
如果等整段回复生成之后再输出到网页,用户体验就会很差。所以最好是模型预测出几个词以后实时地输出到网页上,减轻用户的等待焦虑心理。
实现要实现这种效果,需要使用http协议的Server-Sent Events (SSE)技术。SSE是一种基于 HTTP 协议的服务器推送技术,它允许服务器向客户端发送数据和信息。与 WebSocket 不同,SSE 是一种单向通信方式,只有服务器可以向客户端推送消息。SSE 是 HTML5 规范的一部分,使用非常简单,主要由服务端与浏览器端的通讯协议(HTTP协议)和 EventSource 接口来处理 Server-sent events 组成,服务器端的响应的内容类型是“text/event-stream”。
Python Flask实现在Flask中没有专门的 ...
Python编写规范PEP8
Python是一门很自由的语言。很多场景下都没有很严格的限制,只有一些推荐的规范。但也正因为如此,我们更应该遵循标准规范,这样才能写出良好的代码。其中,在编码风格方面,有一个专门的PEP(Python Enhancement Proposal,Python增强提案)是针对代码风格的指南。我们在编写代码的时候要尽量遵循这个规范。
PEP8 规范空格与缩进的使用
用空格来表示缩进,而不要用制表符(Tab)。最好是4个空格。注意:空格和Tab不能混用,否则会报错。当然你可能会说,我就是混用的,为什么没出过错。这是因为IDE会自动帮你把Tab转成4个空格。
和语法相关的缩进都用四个空格表示。(下文将四个空格写为一级缩进)
每行的字符数不超过120个字符。太长的行需要进行换行,换行后的新代码在原缩进的基础上再增加一级缩进。
函数和类的定义之间,代码前后用两行空行分隔。
同一个类中,各个方法之间用一行空行分隔。
二元运算符(如+、-、*、/、=)左右两边各保留一个空格。
文件的结尾留一行空行。
注释中#的后面应该空一格。如果注释前有代码,#前应至少空两个空格。
标识符命名
变 ...
知识与推理
智能代理 Agent定义For each possible percept sequence, a rational agent should select an action that is expected to maximise the performance measure, given the evidence provided by the percept sequence and whatever built-in knowledge the agent has.
一个代理应该拥有:
用来感知来自环境中的信息的Sensors 传感器
与环境进行交互的Actuators 执行器
指出应该怎么做的Agent function 代理函数
一个代理怎样才能变得智能?
我们需要告诉代理什么是合理的,也就是说,它需要一个performance measure 性能度量
这个代理存储一个percept sequence 感知序列(有关环境状态的信息)
代理可能有一些prior knowledge of the environment 关于环境的先验知识
具有代理可以执行的well ...
人机交互设计
引言如何进行设计我们需要考虑以下几点:
用户们都是哪些人?
哪些活动将要被执行?
交互发生的地方在哪?
所以,我们需要匹配用户的活动,需求和诉求
理解用户的需求:
需要考虑到人们擅长什么和不擅长什么
考虑一下什么东西可能在人们现在的做事方式上有帮助
思考一下什么可以提供高质量的用户体验
倾听人们想要什么,并让他们参与进来
使用经过尝试和测试的以用户为中心的方法
可用性与用户体验可用性目标:
有效
高效
安全
具有良好的实用价值
易于学习
很容易记住如何使用
用户体验目标:
satisfying
enjoyable
engaging
exciting
entertaining
rewarding
fulfilling
memorable
challenging
relaxing
comforting
fun
Donald Norman的设计原则可发现性 Visibility可以确定哪些操作是可行的以及设备的当前状态。明确的关键要素(行为召唤按钮、图片和标题),清晰的视觉层次结构(按优先级排列的内容), 显而易见的导航系统在设计中都具有良好的可发现性和理 ...
计算机安全概述
对称加密也被称为常规加密或单密钥加密。其安全使用的两个要求:1. 需要一个强加密算法,2. 发送者和接收方必须以一种安全的方式获得了密钥的副本,并且必须保持密钥的安全。
对应的攻击方式:
密码分析攻击:
依赖:算法的性质,一些了解明文的一般特征,一些样本明文密文对。利用算法的特征试图推断特定的明文或正在使用的密钥。如果成功,所有用该密钥加密的消息都会被破坏。
暴力攻击:
在密文上尝试所有可能的密钥,直到得到一个有意义的明文。
常见加密算法:
Data Encryption Standard (DES)
Triple DES (3DES)
Advanced Encryption Standard (AES)
常见对称加密模式:
ECB
全称:Electronic codebook,即电子密码本。需要将待加密消息按照对应算法分组的要求分成若干块,并对每个块进行独立加密
优点:ECB模块可以并行处理数据。
缺点:同样原文生成同样的密文,并不能很好地保护数据。
同时加密,如果原文一样,加密出来的密文也是一样的,因为它们的加密密钥key都是一样的。
CBC
全称:Cipher B ...