Write the Code. Change the World.

6月 15

dify 默认的数据库表,不一定是自己想要的。这个时候就需要取修改数据库表。修改数据库表最爽的方式就是用迁移文件。在 dify 原本的迁移目录下新增迁移文件会出现迁移版本错位的问题。比如你当前建立了一个迁移文件,过段时间拉 dify 官网代码合并后,迁移有改动,这个时候就会出现迁移版本对不上。为了解决这个问题,自定义个人迁移目录,新建迁移文件就很有必要了。

现在想给 api_tokens 表新增一个 account_id 字段。因为之前的 api_tokens 表只和 tenant 表进行关联,满足不了需求。

新建自定义迁移文件夹【该思路放弃】

修改 docker-compose.yaml 的 api 的配置。主要修改 volumes,因为默认是没有挂载目录,就会出现在容器中生成的文件在宿主机上没有。

api:
    volumes:
    - ../api:/app/api
    # 匿名卷:让 .venv 目录不被宿主机覆盖,保留镜像内的内容
    - /app/api/.venv

然后启动服务,开始干活。(从尝试到放弃)

# 启动 docker 服务
docker compose up -d

# 进入 api 容器
docker exec -it docker-api-1 bash

# 创建自定义迁移目录
flask db init --directory migrations_custom

# 查看官方迁移当前版本
flask db current

# 给自定义迁移库打基线(7bad07dc267d 是上一步查询出来的)
flask db stamp --directory migrations_custom 7bad07dc267d --purge

从尝试到放弃

想法是很美好,可是执行起来,各种问题就来了。所以,还是放弃自建迁移文件的想法了。既然迁移文件不好使,那就调用 sql 来达到实现修改字段的目的了。

在 api/extensions 目录下,新建 ext_database_custom.py 文件。代码入下。

# ext_database_custom.py
from sqlalchemy import text as sql_text
from extensions.ext_database import db
from dify_app import DifyApp

def init_custom_db_fields():
    """初始化自定义数据库字段/索引,启动自动执行"""
    try:
        with db.engine.connect() as conn:
            # 新增 account_id 字段
            conn.execute(
                sql_text(
                    "ALTER TABLE api_tokens ADD COLUMN IF NOT EXISTS account_id UUID;"
                )
            )
            # 新增联合索引
            conn.execute(
                sql_text(
                    "CREATE INDEX IF NOT EXISTS api_token_account_idx ON api_tokens(account_id, type);"
                )
            )
            conn.commit()
        print("[CustomDB] 自定义字段&索引初始化完成")
    except Exception as e:
        print(f"[CustomDB] 初始化异常: {str(e)}")

# 关键:实现 Dify 扩展标准接口 init_app
def init_app(app: DifyApp):
    # 这里要在 app 上下文里执行,否则 db 可能没绑定
    with app.app_context():
        init_custom_db_fields()

然后在 api/app_factory.py 的 initialize_extensions 函数中,引入注册插件。放在 ext_database 后边即可。

最后执行 docker compose restart 就可以了。

运行起来,查看数据库,会看到 在 api_tokens 表中已经有 account_id 字段了。

虽然数据库表里字段有了。但是模型这里也要加。

# api\models\model.py

class ApiToken(Base):  
    account_id = mapped_column(StringUUID, nullable=True)

阅读全文 >>

6月 15

拉取 dify 官方源代码构建服务。虽然能跑起来,正常运行。可是很多功能不是自己想要的,或者自己想要更多的功能。这个时候就需要修改源码。 dify 源码都提供了,修改后,重新构建镜像使用不就可以实现愿望了吗。

使用自定义镜像

修改 docker/docker-compose.yaml 文件,删掉官方的镜像,使用本地的镜像构建。前端 web 页面和 api 接口的配置修改。

  api:
    <<: *shared-api-worker-config
    image: user-dify-api:1.14.2
    user: root
    build:
      context: ..
      dockerfile: api/Dockerfile

  web:
    image: user-dify-web:1.14.2
    build:
      context: ..
      dockerfile: web/Dockerfile

这样就好了。如果需要增加环境变量,在 .env 和 .env.example 还有 docker-compose.yaml 中加入就好。 volumes 也看着办。

阅读全文 >>

5月 26

如果遇到安装插件失败。比如:

dfiy 安装插件失败,报错 failed to launch plugin: failed to install dependencies: failed to install dependencies: signal: killed, output: DEBUG Found workspace root: `/app/storage/cwd/langgenius/deepseek-0.0.15@725407927b04e236212083d20e92830d60fa944e42cd357ef6902c160414f6f1`
DEBUG Adding root workspace member: `/app/storage/cwd/langgenius/deepseek-0.0.15@725407927b04e236212083d20e92830d60fa944e42cd357ef6902c160414f6f1`
DEBUG Skipping `pyproject.toml` in `/app/storage/cwd/langgenius/deepseek-0.0.15@725407927b04e236212083d20e92830d6...multidict-6.7.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
DEBUG Sending fresh GET request for: https://files.pythonhosted.org/packages/0d/e2/9baffdae21a76f77ef8447f1a05a96ec4bc0a24dae08767abc0a2fe680b8/multidict-6.7.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Downloading pydantic-core (2.0MiB)
Downloading gevent (2.0MiB)
Downloading tiktoken (1.1MiB)
init process exited due to no activity for 120 seconds
failed to init environment

可以将超时时间设置长一点,还有可以配置 python 镜像。

# .env 中,将默认的 120 秒改为 300秒
PLUGIN_PYTHON_ENV_INIT_TIMEOUT=600
PLUGIN_DAEMON_TIMEOUT=600.0

还可以设置镜像

# PIP_MIRROR_URL=https://mirrors.aliyun.com
PIP_MIRROR_URL=https://pypi.tuna.tsinghua.edu.cn/simple

阅读全文 >>

5月 09

MCP(模型上下文协议)是一个使大型语言模型(LLMs,如 Claude)能够与外部工具和数据源交互的协议。使用 MCP,您可以:

  • 构建为 LLMs 提供工具和数据的服务器
  • 将这些服务器连接到兼容 MCP 的客户端
  • 通过自定义功能扩展 LLM 的能力

中文文档

英文文档

阅读全文 >>

3月 26

运行 dify

下载好 dify 源码后,就可以使用 docker 开始运行 dify。

cd docker

cp .env.example .env

docker compose up -d

等待拉取镜像,构建服务,初始化。


如果宿主机的80,443 端口已经被使用了。请在 .env 中修改 dify 的本地映射端口为其他端口。比如:

EXPOSE_NGINX_PORT=8080
EXPOSE_NGINX_SSL_PORT=8443

这个时候,如果宿主机的 nginx 想访问 dify 的服务,可以用宿主机的 ip + dify 本地映射端口来访问。

通过 hostname -I 可以查看宿主机的 ip,第一个就是的。下边给一个 nginx 的示例。

# 映射 WebSocket 升级头
map $http_upgrade $connection_upgrade {
    default upgrade;
    '' close;
}

server {
    listen       80;
    server_name  xxx.yuepaibao.com;

    return 301 https://$host$request_uri;
}

server {
    listen       443 ssl;
    server_name  xxx.yuepaibao.com;

    charset utf-8;
    index  index.php index.html index.htm;

    ssl_certificate /etc/letsencrypt/live/xxx.yuepaibao.com/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/xxx.yuepaibao.com/privkey.pem; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
    ssl_session_timeout 5m;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
    ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;
    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
    add_header X-XSS-Protection "1; mode=block";
    add_header X-Frame-Options SAMEORIGIN always;
    add_header X-Content-Type-Options nosniff always;

    add_header X-Frame-Options "ALLOW-FROM https://www.yuepaibao.com";
    add_header Content-Security-Policy "frame-ancestors https://www.yuepaibao.com";

    location / {
    proxy_pass http://172.17.0.1:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Forwarded-Host $server_name;

        # WebSocket 支持(Dify 实时聊天必需)
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection $connection_upgrade;

        # 超时配置:适配长连接
        proxy_read_timeout 3600s;
        proxy_send_timeout 3600s;
        proxy_connect_timeout 60s;
    }

    # API 路径:增大文件上传限制
    location /api {
        proxy_pass http://172.17.0.1:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        client_max_body_size 100M;
    }

    location /xxabcxxx.txt {
        return 200 "33b454d18da17ebb845c9e046e2c4956";
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

    access_log  /var/log/nginx/xxx.yuepaibao.com.log  main;
    error_log  /var/log/nginx/xxx.yuepaibao.com.error.log  warn;
}

使用 docker compose ps -a 可以查看服务的情况。其中 docker-init_permissions-1 只是在启动的时候调用一下,然后就退出了。

配置管理员账号

运行起来后,输入 http://localhost/ 会进入安装配置管理员界面。设置好邮箱,账号和密码确定好就可以。

开始使用

创建知识库

然后开始配置知识库。

Dify 里的知识库检索必须用 Embedding 模型,作用是:把文字变成向量 → 让系统能计算相似度 → 实现文档检索、问答匹配。

知识库 embedding 模型选择,可以选择使用云端,也可以使用本地的。都是以插件的方式进行安装,配置和使用。

1 选择云端。

模型 优点 缺点
OpenAI text-embedding-3-small 效果顶级、稳定、Dify 原生支持 需要付费 API Key
阿里通义 Embedding 国内速度快、便宜 需要阿里云账号
百度千帆 Embedding 国内稳定、免费额度高 需要百度智能云
智谱 GLM Embedding 中文效果好 需要 API Key

先配置云端插件。

插件已经下载安装,还需要配置。去对应的官网获取 apikey 信息,配置进去。

然后添加知识库文件,配置 embedding 模型,继续下去。

参考和相关

https://blog.csdn.net/weixin_28931449/article/details/156266015

阅读全文 >>

3月 23

dify 官方仓库: https://github.com/langgenius/dify/

下载 dify 和建立 git 仓库

# 先 clone 最新版本,体积小,不容易出错
git clone --depth 1 https://github.com/langgenius/dify.git

# 更新完整历史
git fetch --unshallow

# 添加官方仓库为 upstream(用于同步更新)
git remote add upstream https://github.com/langgenius/dify.git

# 移除默认的 origin,添加自己的 git 仓库
git remote remove origin
git remote add origin git@github.com:xxxx/dify.git

建立自己的项目分支

假如你的项目叫 mimo

# 创建 mimo 分支。后期修改都在这个分支做。
git checkout -b mimo

# 将代码推送到远程服务器上
git push -u origin mimo

开发日常

# 切换到 mimo 分支
git checkout mimo

# 修改代码后,提交代码
git add .
git commit -m '修改 ui界面,替换 logo 等'

# 推送到服务端
git push

同步更新

# 切换到 main 分支
git checkout main

# 拉取官方最新的代码
git pull upstream main

# 推送更新后的 main 分支
git push origin main

# 切换到项目分支
git checkout mimo

# 合并 main 分支
git merge main

阅读全文 >>

3月 18

当初想移动硬盘在 win 系统和 mac 系统,选择了 exFAT 文件系统。现在却出现了一个很烦的问题。在 mac 电脑上,没有安全退出(直接拔出或电脑关机重启)移动硬盘,下次再插入移动硬盘就识别不了。

用 mac 自己的修复工具也修复不了。只能去用 win 系统来修复。

但是,在 mac 下识别不了的移动硬盘,在 win 上却是可以直接识别的。但是,现在是要修复移动硬盘使得在 mac 上继续使用。

修复

将移动硬盘插入到 win 系统上。执行下边命令开始修复。

# E 是移动硬盘插入到 win 系统显示的盘符。 /f 是修复的意思,不加参数就是只检查
chkdsk E: /f

等待修复完成就好。这个修复时间不确定,快的几分钟,慢的话几个小时。固态硬盘貌似会快一些。

退出移动硬盘

虽然修复完成了,却发现移动硬盘不能安全退出,就是右键没有安全退出还有在设备那里也没有。找了好几个方法都不太行。最后还是使用命令行解决的问题。

使用 win的磁盘管理命令工具。

使用管理员身份打开终端。

# 进入磁盘管理
diskpart

# 显示磁盘列表
list disk

# 选择磁盘(这个时候不再是盘符 C、D、E这些了,而是 0,1,2)
select disk 3

# 磁盘脱机
offline disk

这样就好了,在磁盘列表里也不见移动硬盘了。然后直接拔出,插入到 mac 电脑上,又可以继续识别和读写了。

阅读全文 >>

1月 30

“Skills”(技能)是当前 AI 编程和智能体(Agent)生态中一个核心机制,它的目标是:让大模型从“通用聊天机器人”变成“具备特定领域专业能力的数字员工”。

一、Skills 是干什么的?

核心作用:

把人类的“领域经验”打包成可复用、可调用的标准化流程(SOP),交给 AI 执行。

  • 比如:你有一套写爆款公众号文章的方法论(选题→查数据→列大纲→润色→配图),你可以把它做成一个 Skill。
  • 当你下次说“帮我写一篇关于AI编程的爆款文”,AI 就会自动调用这个 Skill,按你的 SOP 执行。

技术本质:

  • Skills 是一种 结构化的提示工程 + 脚本执行 + 资源绑定 的组合。
  • 典型结构包括:
    1. SKILL.md:描述技能名称、用途、触发条件、执行步骤(SOP)
    2. **scripts/"":Python/Bash 等可执行脚本
    3. refs/ 或 references/:参考资料、模板、示例

二、Skills 解决了什么问题?

问题 Skills 如何解决
大模型“泛而不精” 通过绑定领域 SOP,让它在特定任务上表现专业
提示词不稳定、效果差 把最佳实践固化为代码+文档,确保一致性
重复劳动无法自动化 一次创建,多次调用,甚至可共享、可变现
Token 浪费严重 采用“渐进式加载”:只在需要时注入详细指令
幻觉率高 通过脚本在沙盒中执行复杂逻辑,结果更可靠

💡 简单说:Skills = 把你的“工作经验”变成 AI 能执行的“入职培训手册”。

三、怎么入门 Skills?

三种主流入门方式(以 Claude / Coze / Antigravity 等平台为例):

✅ 方式1:用自然语言让 AI 帮你创建(推荐新手)

  • 在支持 Skills 的平台(如 Coze 2.0、Claude with skill-creator)中:
    • 输入:“帮我创建一个技能,能自动生成小红书爆款文案”
    • AI 会引导你定义输入、输出、步骤,并自动生成完整技能包
    • 支持一键测试、部署、上架

✅ 方式2:手动编写 SKILL.md(适合开发者)

  • 创建文件夹 my-skill/
  • 编写 SKILL.md,包含:markdown编辑
    ---name: "UI Designer Pro"description: "根据简单提示生成高质量网页UI设计,使用Tailwind和现代字体"---# 执行步骤1. 分析用户需求中的关键词(如“商品列表页”、“深色模式”)2. 调用 scripts/generate_ui.py3. 返回HTML+CSS代码

    放入 scripts/ 和 refs/ 资源

安装到指定目录(见下文)

✅ 方式3:下载现成的 Skills 使用

  • 推荐资源站:
    • skills.directory(超6万个开源 Skills)
    • GitHub 搜索 awesome-claude-skills 或 antigravity-skills
    • Coze / 通义万相 / Cosmic 的官方技能商店

四、怎么安装 Skills?

不同工具安装路径不同,但逻辑一致:

🔧 通用规则:

Skills 分两类作用域:

项目级(Project-level):只在当前项目生效→ 放在项目根目录下的 .skills/ 或 skills/ 文件夹
全局级(Global):所有项目可用→ 放在用户主目录或工具指定的全局目录,如:

  • Antigravity:~/.antigravity/skills/
  • Cosmic:~/.cosmic/skills/
  • Cloud-based 工具(如 Coze):直接在 Web 界面“安装”即可,无需本地操作

📦 安装步骤(以 Antigravity 为例):

  • 升级到 v1.14+
  • 在项目中新建 skills/ 目录
  • 下载技能(如 ui-ux-pro)放入该目录
  • 确保包含 SKILL.md
  • 在对话中提及任务(如“设计一个商品列表页”),AI 自动匹配并调用

⚠️ 注意:部分工具(如早期 Antigravity)不支持直接读取 Cloud 目录的技能,需手动拷贝;而 Coze、Cosmic 2.4+、通义万相等已支持云端技能直连。

五、目前有哪些热门 Skills?

以下是 2026 年初最火的几类 Skills:

类别 热门技能示例 功能
内容创作 花叔写作技能、爆款选题分析器 自动生成选题、大纲、润色、多平台适配
UI/UX 设计 UI UX ProMax、Tailwind Generator 输入文字 → 输出精美网页代码
数据分析 超级分析师(含12种分析框架) 用第一性原理、SWOT 等方法论分析问题
自媒体运营 公众号自动采集+热度分析 抓取100+公众号,生成Top10选题报告
办公自动化 PPT 生成器(16:9 + 3:4 双比例) 文案 → 多页PPT图片/PDF
开发辅助 Code Reviewer、API Tester 自动审查代码、生成测试用例

文章来源

https://cloud.tencent.com/developer/article/2625392?policyId=1003

相关

https://github.com/antfu/skills

https://mp.weixin.qq.com/s?__biz=MzIyMzA5NjEyMA==&mid=2647679068&idx=1&sn=6b3ae5770982ec685d57fe8a006e6317

阅读全文 >>