Dify 本地部署与使用
前言Dify 是我实习期间使用的 AI 平台,用起来确实比较舒服,因此在这篇文章中就讲一下本地部署 Dify 及使用的简单流程,作为一个回顾,也为看到这篇文章且想要更好地使用 AI 的朋友们提供方便吧~
注:该文章以 Windows 系统为例!
Dify 介绍有关 Dify 的基本介绍可以查看 Dify 使用文档,其中提到 Dify 的主要特点为:
Dify 是一款开源的大语言模型(LLM) 应用开发平台。它融合了后端即服务(Backend as Service)和 LLMOps 的理念,使开发者可以快速搭建生产级的生成式 AI 应用。即使你是非技术人员,也能参与到 AI 应用的定义和数据运营过程中。
由于 Dify 内置了构建 LLM 应用所需的关键技术栈,包括对数百个模型的支持、直观的 Prompt 编排界面、高质量的 RAG 引擎、稳健的 Agent 框架、灵活的流程编排,并同时提供了一套易用的界面和 API。这为开发者节省了许多重复造轮子的时间,使其可以专注在创新和业务需求上。
使用起来能够感觉到比起程序内部直接调用 AI 大模型,Dify 是更加灵活、高效的一种方式。但对 ...
排序算法总结
前言排序算法是最基础也最重要的算法,故在此篇文章中对常用的几种排序算法进行总结,并列出其代码实现。
排序算法排序算法可以分为内部排序(In-place)和外部排序(Out-place):内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。常见的内部排序算法有:插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数排序等。
稳定性是指相等的元素经过排序之后相对顺序是否发生了改变。拥有稳定性这一特性的算法会让原本有相等键值的纪录维持相对次序,即如果一个排序算法是稳定的,当有两个相等键值的纪录 A 和 B,且在原本的列表中 A 出现在 B 之前,在排序过的列表中 A 也将会是在 B 之前。
其中,n 通常代表输入数据规模;k 代表与输入数据的取值范围或其他特定属性相关的数值,比如桶排序中 k 为桶的大小。
下面就对这十种排序方法依次进行介绍:
冒泡排序冒泡排序是最简单的排序算法之一,它通过重复地比较相邻元素,并根据需要交换它们来排序。这个算法的名字由来即是因为最小的元素会经由交换慢慢“浮”到数列的顶端。
...
git rebase 使用
前言在使用 Git 进行多人协作的过程中,导师曾提起过要学会使用 git rebase 进行代码的推送,因此我也是查找了一些信息,并在此进行简单整理,将 git rebase 的优点及使用场景等信息进行介绍。
merge 和 rebase 的区别通常我们开发时,会从某个分支拉取一个新分支,如图中所示,在 C2 时期,从 master 分支中拉取一个新分支 experiment,后续 master 分支和 experiment 分支各自也都有了新的提交:
git merge当我们觉得 experiment 分支的开发结束了,需要合入到 master 分支进行发布,通常会选择切到 master 分支,执行 git merge experiment,将 experiment 分支 merge 到 master 分支之中,合并后的结果如下:
合并时会生成 C5 节点,C5 节点是 C3 和 C4 的内容合并,并且一般来讲它的 commit 信息都是 Merge branch 'experiment' into 'master' 这种,甚至 master 和 ...
copyProperties 避坑指南
前言由于项目中两个对象之间需要拷贝的属性较多,使用 getter/setter 方法难免会增加代码量与可读性,因此偷懒使用了 BeanUtils.copyProperties() 方法,结果碰巧就掉到了坑里,null 值被拷贝了……因此,特意查找网上的资料找到了对应的解决方法,也总结了该方法的几个容易掉进去的坑。
当然,更好的方法还是乖乖使用 getter/setter 方法吧……
一、属性名称或类型不一致无法拷贝12345678910111213141516171819202122public class Attribute { @Data @AllArgsConstructor static class Source { private String userName; // 与Target类属性名称不一致 private Integer weight; // 与Target类属性类型不一致 } @Data static class Target { ...
博客是怎样优化的|自定义域名
前言在写博客的这段时间中,我发现将图像等静态资源放在 Github 上经常出现图片无法访问、加载速度慢的问题,前者可能是上传的过程中出现了错误,而后者会随着博客内容的增多而加剧,因此我决定使用阿里云 OSS 服务作为图床。同时,通过注册个人域名,并使用 Cloudflare 托管域名,获得 Cloudflare 提供的诸多免费功能。
因为过程中由于对部分操作不熟悉,遇到了许多问题,但完成后内心是激动万分的!在此,我会将这些过程逐步记录下来,用于纪念,也便于其他人学习。我会以两篇文章分别介绍 OSS 图床与自定义域名的实现,本文将介绍实现自定义域名的具体步骤。
注册域名在国内如阿里云、腾讯云,以及国外的 NameSilo、NameCheap 等平台能够注册域名,网络上推荐较多的平台是 NameSilo,大家也可以多个平台对比权衡。由于我使用着阿里云的 OSS 服务及其它一些功能,为了方便,我选择直接在阿里云平台上进行注册。
首先,在阿里云「产品」列表中点击「企业服务与云通信」,在右侧选择「域名」,并开通服务。
进入域名页面后,填入你想要的域名,点击「查询域名」,便可以查看到不同后缀的域 ...
雪花算法生成分布式 ID
前言为了加快数据库的查询速度,主键和索引的选择也是相当重要的一部分,此文介绍几个常见的分布式 id 生成方案,并讲述几种雪花算法的实现形式。经过综合权衡,当数据量较大时,使用雪花算法生成分布式 id 能够在确保安全性的同时保持较优的查询性能,是一种比较适合目前实际应用的 id 生成算法。
分布式 ID 基本规则
全局唯一性:不能出现重复的 id
递增性:MySQL 的 InnoDB 使用的是聚簇索引,由于多数 RDBMS 使用 B-tree 的数据结构来存储索引数据,因此在主键的选择上我们还是应该尽可能地使用有序的主键来保证写入性能,我们保证下一个 id 一定大于上一个 id,以此来满足事务版本号、IM 增量消息或者排序的特殊需求
安全性:如果 id 是连续的,那么我们在知道一些基本规则的情况下就能很轻松地推测出下一份数据,这在一些机密性较高的业务场景是很危险的。所以我们有时会希望 id 是无规则的,最好还能包含有时间戳,这样就能够在开发中快速了解这个分布式 id 的生成时间
高性能高可用性:确保在任何时候都能正确地生成 id,并且在高并发的环境下也能表现良好
常见分布式 I ...
Stable Diffusion 基础使用
前言由于目前的项目中可能会使用到文生图模型,因此对 Stable Diffusion 的安装与使用进行了些许了解,并记录在本文之中,以便于后续使用。本文中 Stable Diffusion 的安装及 API 调用过程均在 MacOS 系统实现,Windows 系统部分步骤会存在差别。
WebUI 安装步骤
安装 Homebrew
打开终端输入以下命令:
1$ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
按提示操作,等待自动安装完成,安装结束会有Installation successful提示。
安装 Python 3.10
打开终端输入以下命令,等待自动安装完成即可:
1$ brew install cmake protobuf rust [email protected] git wget
安装 WebUI 软件包
在安装的目标文件夹打开终端,输入以下命令,将代码克隆至本地:
1$ git clone https://gi ...
阿里巴巴代码规范|编程规约
前言本文章整理自《阿里巴巴 Java 开发手册》,该手册共七大部分,该文属于第一部分《编码规约内容》简单整理而成。本文目的是熟悉开发规范,在开发过程中尽可能避免简单错误,也能有效治疗我的代码洁癖(笑)。
一、命名风格
【强制】代码中的命名均不能以下划线或美元符号开始,也不能以下划线或美元符号结束。
反例:_name/__name/$name/name_/name$/name__
【强制】代码中的命名严禁使用拼音与英文混合的方式,更不允许直接使用中文的方式。
说明:正确的英文拼写和语法可以让阅读者易于理解,避免歧义。注意,纯拼音命名方式更要避免采用。
正例:renminbi/alibaba/taobao/youku/hangzhou 等国际通用的名称,可视同英文。
反例:DaZhePromotion [打折]/getPingfenByName() [评分]/int 某变量 = 3
【强制】类名使用 UpperCamelCase 风格,但以下情形例外:DO/BO ...
MacOS 安装 Linux 虚拟机
前言接触 MacOS 系统后,也是有许多不太习惯的地方,其中安装 Linux 虚拟机并设置静态 IP 的过程也是出现了小波折,因此在本文将该过程进行记录。本文使用 CentOS 7 ,是一个企业级的 Linux 发行版本。
为什么需要使用到静态 IP 呢?因为使用动态 IP 会造成虚拟机每次开机 IP 会发生变化,造成 ssh 连接需要经常性修改,会造成诸多不便。
注:该日期恰好 CentOS 停止更新后不久,我在完成联网后一直在 yum 源上出现问题,官方源报错 Cannot find a valid baseurl for repo,换成阿里云源也是连接失败,花了挺长时间也无法解决,也不清楚具体是什么情况。总之,随着 CentOS 的停更,其热度也会逐渐下降,之后我会去学习 Ubuntu 的使用了,这篇文章也就当作留念吧。
又注:虚拟机 Ubuntu 的安装过程可以参考 Bilibili 的这篇教程:macOS 使用 VMware Fusion 安装 Ubuntu 桌面版。这篇教程很详细,我就不再开新文章记录我自己的过程了,安装后使用 ITerm 2 进行 ssh 连接的过程也是可 ...
Docker 基础使用
前言java 的 学习离不开 Docker 与 k8s,后续的工作中也不可避免的会使用到,于是乎,我决定学习一下 Docker 的基础知识与应用,并以此文进行记录!加油!
快速入门Docker 是什么当我们利用 Docker 安装应用时,Docker 会自动搜索并下载应用镜像(image)。镜像不仅包含应用本身,还包含应用运行所需要的环境、配置、系统函数库。Docker 会在运行镜像时创建一个隔离环境,称为容器(container)。
Docker 与虚拟机的区别
架构层次
虚拟机在宿主机的硬件之上运行一个完整的操作系统,每个虚拟机有独立的内核;而 Docker 是基于操作系统级别的虚拟化技术,所有容器共享宿主机的操作系统内核,容器之间使用隔离机制实现相对独立的运行环境。
资源开销
每个虚拟机都包含一个完整的操作系统,因此需要更多的 CPU、内存和存储资源,启动时间也较长;而 Docker 由于共享宿主操作系统,资源开销小,启动时间也更加快速。
隔离性
每个虚拟机都有独立的操作系统和资源分配,而 Docker 隔离性不如虚拟机。
使用场景
Docker 更适合微服务架构、开发测试 ...