学习dify:一个开源的 LLM 应用开发平台

Dify 是一个开源的 LLM 应用开发平台。其直观的界面结合了 AI 工作流、RAG 管道、Agent、模型管理、可观测性功能等,让您可以快速从原型到生产。以下是其核心功能列表:
 

1. 工作流: 在画布上构建和测试功能强大的 AI 工作流程,利用以下所有功能以及更多功能。

2. 全面的模型支持: 与数百种专有/开源 LLMs 以及数十种推理提供商和自托管解决方案无缝集成,涵盖 GPT、Mistral、Llama3 以及任何与 OpenAI API 兼容的模型。

 首先学习dify

dify 官网:https://github.com/langgenius/dify

入门指南:Dify:企业级 Agentic AI 解决方案开发平台

手册:产品简介 - Dify Docs

本想尝试手工部署dify,但是看到这段一定要装docker才能部署吗 · Issue #2826 · langgenius/dify:

是的,您可以不使用Docker从源代码启动应用程序。主要的应用服务(服务器和前端服务)的部署并不固定需要Docker,因为我们提供的指南包括了在主机上设置环境和直接运行服务的步骤。然而,中间件服务(如PostgresSQL,Redis,Weaviate)建议使用Docker Compose启动,但如果Docker不是选项,这些中间件服务也可以直接在主机或其他合适的环境上安装和运行。

所以最终决定还是用Docker部署吧,这样就不用再去配置PostgresSQL、Redis等中间件了。

快速启动:

启动 Dify 服务器的最简单方法是运行我们的 docker-compose.yml 文件。在运行安装命令之前,请确保您的机器上安装了 Docker 和 Docker Compose:

cd docker
cp .env.example .env
docker compose up -d

运行后,可以在浏览器上访问 http://localhost/install 进入 Dify 控制台并开始初始化安装操作。

Ollama部署DeepSeek具体参考:

使用Ollama 在Ubuntu运行deepseek大模型:以deepseek-r1为例_ubuntu deepseek-CSDN博客

在Windows下安装Ollama并体验DeepSeek r1大模型

实践

Dify 社区版即开源版本。

下载源代码

首先下载dify的源代码

git clone https://githubfast.com/langgenius/dify

安装docker

sudo apt install docker-compose-v2

运行docker

cd dify/docker
cp middleware.env.example middleware.env
docker compose -f docker-compose.middleware.yaml up -d

启动API

进入目录

cd api

准备环境变量

cp .env.example .env

 生成随机密钥并替换 .env 文件中的 SECRET_KEY 值

这句还没执行:

awk -v key="$(openssl rand -base64 42)" '/^SECRET_KEY=/ {sub(/=.*/, "=" key)} 1' .env > temp_env && mv temp_env .env

分步执行,以免出错:

openssl rand -base64 42
V8Ye+wDwIWMLLeMghrPv6NZ019GtsltpuycNT3vlRyNc3T3SVvkST62U

 将秘钥放入.env文件:

SECRET_KEY=V8Ye+wDwIWMLLeMghrPv6NZ019GtsltpuycNT3vlRyNc3T3SVvkST62U

安装依赖

uv sync

如果慢,就加上镜像

uv sync -i https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple

 执行数据库迁移

uv run flask db upgrade

迁移升级完成

INFO  [alembic.runtime.migration] Running upgrade 4474872b0ee6 -> 0ab65e1cc7fa, remove sequence_number from workflow_runs
INFO  [alembic.runtime.migration] Running upgrade 0ab65e1cc7fa -> 58eb7bdb93fe, add mcp server tool and app server
INFO  [alembic.runtime.migration] Running upgrade 58eb7bdb93fe -> 1c9ba48be8e4, add uuidv7 function in SQL
INFO  [alembic.runtime.migration] Running upgrade 1c9ba48be8e4 -> 71f5020c6470, tool oauth
INFO  [alembic.runtime.migration] Running upgrade 71f5020c6470 -> 1a83934ad6d1, update models
INFO  [alembic.runtime.migration] Running upgrade 1a83934ad6d1 -> 375fe79ead14, oauth_refresh_token
INFO  [alembic.runtime.migration] Running upgrade 375fe79ead14 -> 8bcc02c9bd07, add_tenant_plugin_autoupgrade_table

启动API服务

uv run flask run --host 0.0.0.0 --port=5001 --debug

安装web

安装pnpm

npm i -g pnpm

进入 web 目录

cd web

安装依赖

pnpm install --frozen-lockfile

Done in 4m 23.1s using pnpm v10.13.1 

 修改.env.local文件

# For production release, change this to PRODUCTION
NEXT_PUBLIC_DEPLOY_ENV=DEVELOPMENT
# The deployment edition, SELF_HOSTED or CLOUD
NEXT_PUBLIC_EDITION=SELF_HOSTED
# The base URL of console application, refers to the Console base URL of WEB service if console domain is
# different from api or web app domain.
# example: http://cloud.dify.ai/console/api
NEXT_PUBLIC_API_PREFIX=http://localhost:5001/console/api
# The URL for Web APP, refers to the Web App base URL of WEB service if web app domain is different from
# console or api domain.
# example: http://udify.app/api
NEXT_PUBLIC_PUBLIC_API_PREFIX=http://localhost:5001/api# SENTRY
NEXT_PUBLIC_SENTRY_DSN=
NEXT_PUBLIC_SENTRY_ORG=
NEXT_PUBLIC_SENTRY_PROJECT=

构建web服务

pnpm build

启动web服务

pnpm start

待续 

先进行到这里,以后再继续

未知,也许是最后一步吧

 然后用浏览器配置:

http://127.0.0.1/install

创建一个用户,登录

创建空白应用

 集成ollama模型

调试

启动docker compose -f docker-compose.middleware.yaml up -d报错

docker compose -f docker-compose.middleware.yaml up -d unknown shorthand flag: 'f' in -f

后来发现,原来以前这样安装的:

sudo apt install docker.io

需要这样安装

sudo apt install docker-compose

最后知道需要安装版本2

 启动docker compose报错ERROR: Invalid interpolation format for "db" option in service "services":

docker-compose -f docker-compose.middleware.yaml up
ERROR: Invalid interpolation format for "db" option in service "services": "${POSTGRES_PASSWORD:-difyai123456}"

插值语法冲突
${VAR:-default}是标准的shell变量替换语法,但Docker Compose对某些版本(特别是v2.3以下)要求严格遵循${VAR}$VAR格式‌12

  • 检查当前版本:docker-compose --version
  • 升级到最新版可解决大多数语法兼容性问题‌

看下版本

docker-compose -version
docker-compose version 1.25.0, build unknown

升级

sudo apt update
sudo apt upgrade docker-compose

升级docker-compose的时候报错

E: Failed to fetch http://repo.huaweicloud.com/ubuntu/pool/main/i/intel-microcode/intel-microcode_3.20250211.0ubuntu0.20.04.1_amd64.deb  404  Not Found [IP: 120.52.95.245 80]
E: Failed to fetch http://repo.huaweicloud.com/ubuntu/pool/main/l/linux-meta/linux-generic_5.4.0.211.206_amd64.deb  404  Not Found [IP: 120.52.95.245 80]
E: Failed to fetch http://repo.huaweicloud.com/ubuntu/pool/main/l/linux-meta/linux-image-generic_5.4.0.211.206_amd64.deb  404  Not Found [IP: 120.52.95.245 80]
E: Failed to fetch http://repo.huaweicloud.com/ubuntu/pool/main/l/linux-meta/linux-headers-generic_5.4.0.211.206_amd64.deb  404  Not Found [IP: 120.52.95.245 80]
E: Failed to fetch http://repo.huaweicloud.com/ubuntu/pool/main/s/sosreport/sosreport_4.7.2-0ubuntu1~20.04.2_amd64.deb  404  Not Found [IP: 120.52.95.245 80]
E: Unable to fetch some archives, maybe run apt-get update or try with --fix-missing?

尝试

sudo apt update --fix-missing

不行

尝试

该错误表明华为云镜像源中部分软件包已失效或路径变更,需按以下步骤处理:


一、立即修复方案

  1. 清理缓存并重试

    sudo apt cleansudo apt update --fix-missing

    哦了,果然清理缓存之后就好了!

怎么更新之后还是老版本? 

 docker-compose -v
docker-compose version 1.25.0, build unknown

原来如此啊,需要安装版本2

apt search docker-compose
Sorting... Done
Full Text Search... Done
docker-compose/focal,focal,now 1.25.0-1 all [installed]Punctual, lightweight development environments using Dockerdocker-compose-v2/focal-updates 2.27.1+ds1-0ubuntu1~20.04.1 amd64tool for running multi-container applications on Docker

安装docker-compose-v2: 

sudo apt install docker-compose-v2

删除老版本

sudo apt remove docker-compose

启动用这句话
 

sudo docker compose -f docker-compose.middleware.yaml up

docker启动报错Error response from daemon: Get "https://registry-1.docker.io/v2/":

Error response from daemon: Get "https://registry-1.docker.io/v2/": net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)

上网问题,配置加速镜像即可。参考:Python、Ubuntu、FreeBSD、docker、Huggingface、github、npm等常用加速镜像_清华大学github镜像-CSDN博客

pnpm build报错

FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory
----- Native stack trace -----1: 0xe16044 node::OOMErrorHandler(char const*, v8::OOMDetails const&) [node]2: 0x11e0dd0 v8::Utils::ReportOOMFailure(v8::internal::Isolate*, char const*, v8::OOMDetails const&) [node]3: 0x11e10a7 v8::internal::V8::FatalProcessOutOfMemory(v8::internal::Isolate*, char const*, v8::OOMDetails const&) [node]4: 0x140e985  [node]5: 0x140e9b3  [node]6: 0x1427a8a  [node]7: 0x142ac58  [node]8: 0x1c90921  [node]
Aborted (core dumped)ELIFECYCLE  Command failed with exit code 134.

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

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

相关文章

VEX实现物体沿线条流动

1. 效果如下:float offset fit01(rand(ptnum654),0.5,1)*Time*chf("speed") rand(ptnum547);int num nprimitives(1); vector pos primuv(1,"P",ptnum%num,offset%1);P pos;2.效果如下: float min detail(1,"min");…

puppeteer 系列模块的系统性、详细讲解

puppeteer 系列模块的系统性、详细讲解 🧩 一、核心模块介绍 1. puppeteer全功能 Puppeteer 包,默认包含 Chromium 浏览器npm install puppeteer包含内容:Puppeteer API Chromium 浏览器适合场景: 想直接运行,不关心浏…

golang实现一个规则引擎,功能包括实时增加、修改、删除规则

以下是一个用 Go 实现的轻量级规则引擎,支持实时增加、修改、删除规则,并基于表达式评估触发规则动作: package mainimport ("errors""fmt""sync" )// Rule 定义规则结构体 type Rule struct {ID string // 规则唯一标…

算法训练营day34 动态规划② 62.不同路径、63. 不同路径 II、343整数拆分、96.不同的二叉搜索树

动态规划的第二篇博客!进阶题目,有一说一,尤其最后一道题,真的难想到这种解法 找规律!!! 62.不同路径 注意本题是路径不是路程!!! 动态规划 确定dp数组&am…

Spring 5 事务详解

一、核心使用方式声明式事务(推荐)通过 Transactional 注解实现,需配合配置启用:Configuration EnableTransactionManagement public class AppConfig {Beanpublic PlatformTransactionManager txManager(DataSource dataSource) …

[ctfshow web入门]web99 in_array的弱比较漏洞

信息收集 array_push(array, value):向数组最后的位置插入value in_array(value, array, type):其中value是要查找的值,array是需要查找的的数组,type是查找的类型,如果没有指定类型,则以弱比较方式查找 i…

mysql5.6 常用查询sql

mysql5.6 常用查询sql 文章目录 mysql5.6 常用查询sql 1.查询版本 2.MySQL 运行状态(Ping) 3.慢查询数量 4.连接数 5.最大连接数 6.InnoDB 缓冲池命中率 7.表锁等待次数 8.二进制日志状态 9.表空间使用率 10.查询缓存效率 11.每次自动扩展空间大小 12.导入导出 ✅ 一、导出(…

【在Unity游戏开发中Dictionary、List介绍】

在Unity游戏开发中&#xff0c;Dictionary和List是最核心的两种数据结构&#xff0c;它们各自有优势和应用场景。以下是介绍&#xff1a;&#x1f9e0; 数据结构本质对比特性Dictionary<TKey, TValue>List底层结构哈希表&#xff08;Hash Table&#xff09;动态数组&…

windows平台计划任务批处理实现定时任务

无限循环加定时延时计划任务用户登录执行一次下文中300代表300秒执行一次第2,3,4行为vbs隐藏窗口C:\me\corn\test.batecho off if "%1""hide" goto CmdBegin start mshta vbscript:createobject("wscript.shell").run("""%~0&quo…

深入理解 TCP 协议:从原理到实践的技术解析

目录 一、TCP 协议的核心定位与特性 1.1 协议栈中的位置 1.2 五大核心特性 二、TCP 连接建立与终止的底层逻辑 2.1 三次握手&#xff08;连接建立&#xff09; 2.2 四次挥手&#xff08;连接终止&#xff09; 三、TCP 可靠传输的核心机制 3.1 序列号与确认机制 3.2 滑…

JAVA后端开发——“全量同步”和“增量同步”

“全量同步”和“增量同步”是数据处理、系统集成和数据库领域中两个基本概念。描述了两种截然不同的数据同步策略&#xff0c;理解它们的区别对于设计任何数据系统都至关重要。全量同步 核心思想&#xff1a;全部替换&#xff0c;一步到位。在技术上&#xff0c;全量同步通常意…

修改CentOS的SSH登录端口(22端口)

要修改CentOS系统的SSH服务默认端口(22端口)&#xff0c;请按照以下步骤操作&#xff1a; 备份SSH配置文件 sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak编辑SSH配置文件 sudo vi /etc/ssh/sshd_config查找并修改端口设置 找到以下行(大约在第13行左右)&#xff1a;…

python导包机制-更优方式

在学习某个大模型应用的后端时&#xff0c;发现&#xff1a; xxx |-----src |------\---modules |------\------\------b.py |-----app.py在app.py中可以使用src.modules.b来进行导入。之前我导入时是形如.modules.b这种形式&#xff08;前面有.&#xff09;&#xff0c;但是当…

检索召回率优化探究一:基于 LangChain 0.3集成 Milvus 2.5向量数据库构建的智能问答系统

背景 基于 LangChain 0.3集成 Milvus 2.5向量数据库构建的 NFRA&#xff08;National Financial Regulatory Administration&#xff0c;国家金融监督管理总局&#xff09;政策法规智能问答系统&#xff0c;第一个版本的检索召回率是 79.52%&#xff0c;尚未达到良好、甚至是优…

《整合Spring Cache:本地缓存、Redis与Caffeine对比实践》

&#x1f680; 整合Spring Cache&#xff1a;本地缓存、Redis与Caffeine对比实践 &#x1f4cc; 前言 在高并发、高性能的系统设计中&#xff0c;缓存始终扮演着不可替代的角色。Spring Cache 作为 Spring 框架原生提供的缓存抽象层&#xff0c;极大简化了缓存接入的复杂度。…

easyexcel填充方式导出-合并单元格并设置边框

填充的模板最后导出效果实体 /*** 账户实体类* author test* date 2025-07-28*/ Getter Setter class Test {/*** 账户类型*/private String accType;/*** 账户余额*/private String money; }导出逻辑 /*** 导出文件逻辑*/ public void exportReport(List<Test> data) { …

Jenkins + SonarQube 从原理到实战一:基于 K8s 部署与使用(含中文插件与 Python 扫描)

前言 公司开发部门希望在 Jenkins 构建过程中自动集成 C/C 的代码扫描&#xff0c;正好我也没接触过 SonarQube&#xff0c;于是记录下从零开始部署 SonarQube 服务并集成到 CI/CD 的过程&#xff0c;供后来者参考。 一、SonarQube 原理与工作机制详解 1.1 什么是 SonarQube&…

Linux(Centos 7.6)命令详解:sz

1.命令作用使用ZMODEM/YMODEM/XMODEM协议发送文件(Send file(s) with ZMODEM/YMODEM/XMODEM protocol)注意: 需要yum install lrzsz (yum provides sz可以查看rz命令是什么rpm包提供的)2.命令语法Usage: sz [options] file ...or: sz [options] -{c|i} COMMAND3.参数详解OPTION…

智能运维中的数据转换

《智能运维实践 苏娜 孙琳 王鸽著 人工智能技术丛书 自然语言处理的常用算法 日志异常检测 根因定位 网络流量异常检测 清华大学出版社》【摘要 书评 试读】- 京东图书 数据转换是数据预处理中的关键步骤&#xff0c;用于将数据从原始格式转换为适合分析和建模的形式。这一过程…

IAR编辑器如何让左侧的工具栏显示出来?

在IAR编辑器中恢复左侧工具栏显示&#xff0c;可通过以下方法操作&#xff1a; 一、通过菜单栏启用工具栏 ‌进入视图菜单‌ 点击顶部菜单栏的 ‌"View"‌ → 在弹出列表中勾选 ‌"Workspace"‌ 若工具栏仍不显示&#xff0c;查看菜单栏右侧是否有 ‌"…