Dify 的智能体后端服务 API 为开发者提供便捷方式,能让前端应用直接调用大语言模型能力。在请求时,需先前往应用左侧导航的 “API Access” 部分,在此可查看文档和管理访问凭据。为保障安全,API 密钥应通过后端调用,避免在前端代码中暴露。比如文本生成应用,可调用 completion - messages API,向其发送用户输入来获取生成的文本;而对话应用则调用 chat - messages API,首次调用发起对话,后续通过返回的 conversation_id 维持会话,实现与用户的持续问答交互。
Dify发布页面测试:
API方式设置:
点击“监测“,然后点击”API密钥“,进行相关设置
整体代码:
import requests
import json
import time
url = '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网页上还有一些后续的完善和处理的操作。