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网页上还有一些后续的完善和处理的操作。