Dify使用事項(xiàng)
安裝部署
- 內(nèi)網(wǎng)環(huán)境下以docker形式部署
- 需在外網(wǎng)環(huán)境下通過docker部署完成,具體參考:https://docs.dify.ai/zh-hans/getting-started/install-self-hosted/docker-compose
安裝完成后通過docker ps能看到有以下容器:

- 9個(gè)容器逐個(gè)打包
# 舉例
docker save -o docker-db-1.tar postgres:15-alpine
- 9個(gè)壓縮包和源碼文件遷移到內(nèi)網(wǎng)機(jī)器,需確保docker和docker compose均已安裝
# 舉例
docker load -i docker-db-1.tar
- 執(zhí)行docker images查看鏡像,若名稱有變化,則需要在
docker/docker-compose.yaml中修改 - 在源碼docker文件夾下執(zhí)行
docker compose up -d啟動(dòng)服務(wù)
- 源碼部署
源碼部署可能會(huì)出現(xiàn)跨域問題
- docker部署,如何修改前端?
在源碼部署中修改前端代碼,npm run build編譯后,生成.next文件,將其打包更新到docker-web-1容器中,重啟容器即可
docker cp /path/on/host my_container:/path/in/container
docker restart docker-web-1
- 源碼部署時(shí),前端代碼編譯時(shí)可能會(huì)出錯(cuò),需要重新下載依賴
rm -rf node_modules
rm -f package-lock.json
npm cache clean --force
npm install
API調(diào)用工作流
字符串輸出
【開始】輸入中字段類型為文本或段落時(shí):

'''
python
'''
import requests
import json
API_KEY = "******"
text_input = '''
A: 嗨,親愛的!今天過得怎么樣?
B: 嗨,親愛的!今天過得還不錯(cuò),謝謝關(guān)心。你今天工作忙嗎?
'''
# 確保變量名與 workflow 中定義的變量一致
data = {
"inputs": {
"input": text_input # 假設(shè) workflow 中定義的變量名為 "input"
},
"response_mode": "blocking", # 這里是塊模式輸出
"user": "abc-123"
}
url = "https://api.dify.ai/v1/workflows/run"
headers = {
"Authorization": f"Bearer {API_KEY}",
"Content-Type": "application/json"
}
response = requests.post(url, headers=headers, json=data)
if response.status_code == 200:
print("workflow 執(zhí)行成功")
print("響應(yīng)內(nèi)容:", response.json()['data']['outputs']['output'])
else:
print(f"workflow 執(zhí)行失敗,狀態(tài)碼: {response.status_code}")
print("錯(cuò)誤信息:", response.text)
文件上傳
【開始】輸入中字段類型為單文件時(shí):

'''
python
'''
import requests,json
class DifyAPI:
def __init__(self, api_key):
self.api_key = api_key
self.upload_url = "https://api.dify.ai/v1/files/upload"
self.workflow_url = "https://api.dify.ai/v1/workflows/run"
def upload_file(self, local_file_path, user):
"""
上傳文件
"""
# 替換為你的實(shí)際文件類型
file_type = 'application/txt' # 可以根據(jù)實(shí)際情況修改為 jpeg、jpg、webp、gif 等
# 設(shè)置請(qǐng)求頭
headers = {
'Authorization': f'Bearer {self.api_key}'
}
# 打開本地文件
with open(local_file_path, 'rb') as file:
# 構(gòu)建表單數(shù)據(jù)
files = {
'file': (local_file_path, file, file_type)
}
data = {
'user': user
}
# 發(fā)送 POST 請(qǐng)求
response = requests.post(self.upload_url, headers=headers, files=files, data=data)
# 檢查響應(yīng)狀態(tài)碼
if response.status_code == 201:
print("文件上傳成功")
print(json.dumps(response.json(),indent=4))
file_id = response.json()['id']
return file_id
else:
print(f"文件上傳失敗,狀態(tài)碼: {response.status_code}")
print(response.text)
return None
def run_workflow(self, file_id, user, response_mode="blocking"):
"""
運(yùn)行工作流
"""
# 認(rèn)證
headers = {
"Authorization": f"Bearer {self.api_key}",
"Content-Type": "application/json"
}
# 構(gòu)建請(qǐng)求數(shù)據(jù)
data = {
"inputs": {
"file": {
"transfer_method": "local_file", # 本地還是網(wǎng)絡(luò)
"upload_file_id": file_id, # 文件ID
"type": "document" # 類型
}
},
"response_mode": response_mode,
"user": user
}
try:
print("\n運(yùn)行工作流...")
response = requests.post(self.workflow_url, headers=headers, json=data)
if response.status_code == 200:
print("工作流執(zhí)行成功")
return response.json()
else:
print(f"工作流執(zhí)行失敗,狀態(tài)碼: {response.status_code}")
return {"status": "error", "message": f"Failed to execute workflow, status code: {response.status_code}"}
except Exception as e:
print(f"發(fā)生錯(cuò)誤: {str(e)}")
return {"status": "error", "message": str(e)}
# 使用示例
if __name__ == "__main__":
api_key = "*******"
file_path = "1.txt" # 這里上傳的是text文件
user = "difyuser"
dify_api = DifyAPI(api_key)
# 上傳文件
file_id = dify_api.upload_file(file_path, user)
if file_id:
# 文件上傳成功,繼續(xù)運(yùn)行工作流
result = dify_api.run_workflow(file_id, user)
print(json.dumps(result, indent=4, ensure_ascii=False))
# print(result)
else:
print("文件上傳失敗,無法執(zhí)行工作流")
圖片上傳

import requests
API_KEY = "app-MrNL5pmejGA3BOYqJig2805o"
# 文件上傳 主要得到上傳后的ID(后面可以復(fù)用
def upload_file(local_file_path,user):
"""
上傳文件
"""
# 替換為你的實(shí)際文件類型
file_type = 'image/png'# 可以根據(jù)實(shí)際情況修改為 jpeg、jpg、webp、gif 等
# API 端點(diǎn)
url = 'https://api.dify.ai/v1/files/upload'
# 設(shè)置請(qǐng)求頭
headers = {
'Authorization': f'Bearer {API_KEY}'
}
# 打開本地文件
with open(local_file_path, 'rb') as file:
# 構(gòu)建表單數(shù)據(jù)
files = {
'file': (local_file_path, file, file_type)
}
data = {
'user': user
}
# 發(fā)送 POST 請(qǐng)求
response = requests.post(url, headers=headers, files=files, data=data)
# 檢查響應(yīng)狀態(tài)碼
if response.status_code == 201:
print("文件上傳成功")
print(response.json())
id = response.json()['id']
return id
else:
print(f"文件上傳失敗,狀態(tài)碼: {response.status_code}")
print(response.text)
# 把上傳的文件ID作為參數(shù)
def run_workflow(file_id, user, response_mode="blocking"):
# API地址
workflow_url = "https://api.dify.ai/v1/workflows/run"
# 認(rèn)證
headers = {
"Authorization": f"Bearer {API_KEY}",
"Content-Type": "application/json"
}
# 第一個(gè)調(diào)用的demo里面有提到 參數(shù)再inputs里面
# type很重要
# 這里面其實(shí)也可以是網(wǎng)絡(luò)圖片transfer_method:remote_url
data = {
"inputs": {
"input": {
"transfer_method": "local_file", # 本地還是網(wǎng)絡(luò)
"upload_file_id": file_id, # 文件ID
"type": "image" # 類型
}
},
"response_mode": response_mode,
"user": user
}
try:
print("運(yùn)行工作流...")
response = requests.post(workflow_url, headers=headers, json=data)
if response.status_code == 200:
print("工作流執(zhí)行成功")
return response.json()['data']['outputs']['files']
else:
print(f"工作流執(zhí)行失敗,狀態(tài)碼: {response.status_code}")
return {"status": "error", "message": f"Failed to execute workflow, status code: {response.status_code}"}
except Exception as e:
print(f"發(fā)生錯(cuò)誤: {str(e)}")
return {"status": "error", "message": str(e)}
# 使用示例
file_path = "test.png"
user = "difyuser"
# 上傳文件
file_id = upload_file(file_path, user)
if file_id:
# 文件上傳成功,繼續(xù)運(yùn)行工作流
result = run_workflow(file_id, user)
print(result)
else:
print("文件上傳失敗,無法執(zhí)行工作流")



浙公網(wǎng)安備 33010602011771號(hào)