常用的Linux命令
常用命令1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071# 进入目录# 如果是cd ~则是进入当前用户的根目录cd ex/am/ple# 列出目录内所有文件和文件夹ls ex/am/ple# 切换用户su 用户名# Vim文本编辑器# 刚进入文件是只读模式,按i进入插入模式,再按Esc退出插入模式# :q退出vim,:wq保存修改后退出,:wq!强制保存修改后退出vim example.txt# 查看NVIDIA显卡的信息/显存占用等nvidia-smi# 查看系统进程pstop# 查看文件夹及其所有子文件夹和文件的存储空间占用# -sh 只查看此目录总大小# --max-depth=1指定递归深度为1du -h# 查看文件夹所在磁盘的存储空间情况df -h# 将进程挂到后台,关闭终端后不结束# 会生成一个nohup.txt保存进程的标准输出# 不想保存输出可以在最后加一 ...
大模型应用开发技术
大语言模型LLM简介目前,国内外各家大厂都在训练自己的大模型,没有能力训练的厂家也在开源大模型的基础上微调自己的行业领域大模型。但是,对我们普通人来说,无论是训练还是微调大尺寸的模型(几十上百b参数)所需要的计算资源都是我们无法承受的。所以,只能从应用本身出发,去做一些微小的工作。
在某一细分领域内,进一步提升LLM能力的方法主要有三种:检索增强生成RAG、微调Fine-turning、智能体Agent。下面简单介绍一下这三种方法。
检索增强生成RAG由于LLM的训练语料是大而全的数据集,所以它在某一细分领域给出的回答往往是不尽如人意的。面对一个专业问题,LLM很有可能答出一个看起来很正确但是完全没有答到真正的要点上的回答。既然如此,那我们就给LLM加上一个专业知识库,遇到专业问题先去知识库里搜索对应内容,再去结合搜索出来的知识进行答案整合和输出。
具体操作步骤是:
整理好知识文档,全部提取为文字形式。
按照一定的分割规则与长度切分为文本块。
使用嵌入模型(embedding model)计算出这些文本块的嵌入向量,并将它们存入向量数据库中。
在推理时,计算问题的嵌入向量,使用向量相 ...
正则表达式
基本语法待补充
元字符有一次笔者遇到了一个问题:要求在一堆字符串中找出所有带有字符”B“的字符串,但是如果“B”后面是“r”除外。熟悉化学的读者可能已经猜到了,没错,就是找出所有带有硼原子的分子,同时不把带有溴原子的分子给误找出来。
有些读者可能会说,简单啊,先找出来所有包含“B”的字符串,再去掉所有包含“Br”的字符串不就可以了?但很可惜这种方法行不通,因为存在这种字符串:O=S(=O)(BCCc1ccncc1)c1ccc(Br)cc1
当时笔者找了很多资料,问了很多人,都没有得到怎么写这个正则表达式的方法。直到一个偶然的机会,看到了一条网上的回答提到了正向否定预查,这才解决了这个问题。
字符
描述
(?:pattern)
匹配 pattern 但不获取匹配结果,也就是说这是一个非获取匹配,不进行存储供以后使用。这在使用 “或” 字符 (|) 来组合一个模式的各个部分是很有用。例如, ‘industr(?:y|ies) 就是一个比 ‘industry|industries’ 更简略的表达式。
(?=pattern)
正向肯定预查(look ...
数字信号处理
统计、概率和噪声信号与系统信号是对一种参数如何随另一种参数的变化而变化的描述。系统是对每个输入信号都产生一个输出信号的过程。命名信号有一些规则:
连续信号使用圆括号,如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 ...