学习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
不行
尝试
该错误表明华为云镜像源中部分软件包已失效或路径变更,需按以下步骤处理:
一、立即修复方案
-
清理缓存并重试
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.