Dify 的智能體后端服務 API 為開發者提供便捷方式,能讓前端應用直接調用大語言模型能力。在請求時,需先前往應用左側導航的 “API Access” 部分,在此可查看文檔和管理訪問憑據。為保障安全,API 密鑰應通過后端調用,避免在前端代碼中暴露。比如文本生成應用,可調用 completion - messages API,向其發送用戶輸入來獲取生成的文本;而對話應用則調用 chat - messages API,首次調用發起對話,后續通過返回的 conversation_id 維持會話,實現與用戶的持續問答交互。
Dify發布頁面測試:
API方式設置:
點擊“監測“,然后點擊”API密鑰“,進行相關設置
整體代碼:
import requests
import json
import timeurl = 'http://101.10.1.4:8850/v1/chat-messages'
api_key = 'app-kQ8NiePzWojwefCNRKXG2Xqv' headers = {'Authorization': f'Bearer {api_key}','Content-Type': 'application/json',
}data1 = {"inputs": {},"query": "軍人撫恤優待管理單位、參與單位及其工作人員的相關規定有哪些","response_mode": "blocking","conversation_id": "","user": "1"
}
response1 = requests.post(url, headers=headers, json=data1)
print("#########blocking測試\n")
print(response1.json())data2 = {"inputs": {},"query": "軍人撫恤優待管理單位、參與單位及其工作人員的相關規定有哪些","response_mode": "streaming","conversation_id": "","user": "1"
}response2 = requests.post(url, headers=headers, json=data2)
print("#########streaming測試\n")for r in response2.text.split("\n"):if r!="":r_json = json.loads(r[5:])if "answer" in r_json.keys():print(r_json["answer"],end="")time.sleep(0.01)for r in response2.text.split("\n"):if r!="":r_json = json.loads(r[5:])if "metadata" in r_json.keys():for content_json in r_json["metadata"]["retriever_resources"]:print("\n####文件引用:" + content_json["document_name"])print(content_json["content"],end="")time.sleep(0.01)
代碼中包含了阻塞式請求、流式請求2種請求方式。
阻塞式測試結果,
流式測試結果,
總結:
(1)通過接口請求和基于dify網頁請求2者的結果基本是相同的,但是細節處還是有些差別,感覺應該是dify網頁上還有一些后續的完善和處理的操作。