找回密码
 立即注册
首页 业界区 安全 Dify使用事项

Dify使用事项

卜笑 2025-6-1 18:16:49
安装部署


  • 内网环境下以docker形式部署

  • 需在外网环境下通过docker部署完成,具体参考:https://docs.dify.ai/zh-hans/getting-started/install-self-hosted/docker-compose
安装完成后通过docker ps能看到有以下容器:
1.png


  • 9个容器逐个打包
  1. # 举例
  2. docker save -o docker-db-1.tar postgres:15-alpine
复制代码

  • 9个压缩包和源码文件迁移到内网机器,需确保docker和docker compose均已安装
  1. # 举例
  2. docker load -i docker-db-1.tar
复制代码

  • 执行docker images查看镜像,若名称有变化,则需要在docker/docker-compose.yaml中修改
  • 在源码docker文件夹下执行docker compose up -d启动服务


  • 源码部署
源码部署可能会出现跨域问题

  • docker部署,如何修改前端?
在源码部署中修改前端代码,npm run build编译后,生成.next文件,将其打包更新到docker-web-1容器中,重启容器即可
  1. docker cp /path/on/host my_container:/path/in/container
  2. docker restart docker-web-1
复制代码

  • 源码部署时,前端代码编译时可能会出错,需要重新下载依赖
  1. rm -rf node_modules
  2. rm -f package-lock.json
  3. npm cache clean --force
  4. npm install
复制代码
API调用工作流


  • 字符串输出
【开始】输入中字段类型为文本段落时:
2.png
  1. '''
  2. python
  3. '''
  4. import requests
  5. import json
  6. API_KEY = "******"
  7. text_input = '''
  8. A: 嗨,亲爱的!今天过得怎么样?
  9. B: 嗨,亲爱的!今天过得还不错,谢谢关心。你今天工作忙吗?
  10. '''
  11. # 确保变量名与 workflow 中定义的变量一致
  12. data = {
  13.     "inputs": {
  14.         "input": text_input  # 假设 workflow 中定义的变量名为 "input"
  15.     },
  16.     "response_mode": "blocking",        # 这里是块模式输出
  17.     "user": "abc-123"
  18. }
  19. url = "https://api.dify.ai/v1/workflows/run"
  20. headers = {
  21.     "Authorization": f"Bearer {API_KEY}",
  22.     "Content-Type": "application/json"
  23. }
  24. response = requests.post(url, headers=headers, json=data)
  25. if response.status_code == 200:
  26.     print("workflow 执行成功")
  27.     print("响应内容:", response.json()['data']['outputs']['output'])
  28. else:
  29.     print(f"workflow 执行失败,状态码: {response.status_code}")
  30.     print("错误信息:", response.text)
复制代码

  • 文件上传
【开始】输入中字段类型为单文件时:
3.png
  1. '''
  2. python
  3. '''
  4. import requests,json
  5. class DifyAPI:
  6.     def __init__(self, api_key):
  7.         self.api_key = api_key
  8.         self.upload_url = "https://api.dify.ai/v1/files/upload"
  9.         self.workflow_url = "https://api.dify.ai/v1/workflows/run"
  10.     def upload_file(self, local_file_path, user):
  11.         """
  12.         上传文件
  13.         """
  14.         # 替换为你的实际文件类型
  15.         file_type = 'application/txt'  # 可以根据实际情况修改为 jpeg、jpg、webp、gif 等
  16.         # 设置请求头
  17.         headers = {
  18.             'Authorization': f'Bearer {self.api_key}'
  19.         }
  20.         # 打开本地文件
  21.         with open(local_file_path, 'rb') as file:
  22.             # 构建表单数据
  23.             files = {
  24.                 'file': (local_file_path, file, file_type)
  25.             }
  26.             data = {
  27.                 'user': user
  28.             }
  29.             # 发送 POST 请求
  30.             response = requests.post(self.upload_url, headers=headers, files=files, data=data)
  31.         # 检查响应状态码
  32.         if response.status_code == 201:
  33.             print("文件上传成功")
  34.             print(json.dumps(response.json(),indent=4))
  35.             file_id = response.json()['id']
  36.             return file_id
  37.         else:
  38.             print(f"文件上传失败,状态码: {response.status_code}")
  39.             print(response.text)
  40.             return None
  41.     def run_workflow(self, file_id, user, response_mode="blocking"):
  42.         """
  43.         运行工作流
  44.         """
  45.         # 认证
  46.         headers = {
  47.             "Authorization": f"Bearer {self.api_key}",
  48.             "Content-Type": "application/json"
  49.         }
  50.         # 构建请求数据
  51.         data = {
  52.             "inputs": {
  53.                 "file": {
  54.                     "transfer_method": "local_file",  # 本地还是网络
  55.                     "upload_file_id": file_id,  # 文件ID
  56.                     "type": "document"  # 类型
  57.                 }
  58.             },
  59.             "response_mode": response_mode,
  60.             "user": user
  61.         }
  62.         try:
  63.             print("\n运行工作流...")
  64.             response = requests.post(self.workflow_url, headers=headers, json=data)
  65.             if response.status_code == 200:
  66.                 print("工作流执行成功")
  67.                 return response.json()
  68.             else:
  69.                 print(f"工作流执行失败,状态码: {response.status_code}")
  70.                 return {"status": "error", "message": f"Failed to execute workflow, status code: {response.status_code}"}
  71.         except Exception as e:
  72.             print(f"发生错误: {str(e)}")
  73.             return {"status": "error", "message": str(e)}
  74. # 使用示例
  75. if __name__ == "__main__":
  76.     api_key = "*******"
  77.     file_path = "1.txt"        # 这里上传的是text文件
  78.     user = "difyuser"
  79.     dify_api = DifyAPI(api_key)
  80.     # 上传文件
  81.     file_id = dify_api.upload_file(file_path, user)
  82.     if file_id:
  83.         # 文件上传成功,继续运行工作流
  84.         result = dify_api.run_workflow(file_id, user)
  85.         print(json.dumps(result, indent=4, ensure_ascii=False))
  86.         # print(result)
  87.     else:
  88.         print("文件上传失败,无法执行工作流")
复制代码
参考学习


  • https://personel-zhouxinle888-a66353926f9185cff28f2bd374a5c3a9dd89d5206.gitlab.io/dify/dify-1.html
  • https://docs.dify.ai/zh-hans

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册