本文档即将弃用
作为我们文档重组的一部分,此页面正在逐步淘汰。
点击此卡片跳转到包含最新信息的更新版本。
如果您在新的文档中发现任何差异或需要改进的地方,请使用页面底部的“报告问题”按钮。
反向调用 App 指的是插件能够访问 Dify 中的 App 数据。该模块同时支持流式与非流式的 App 调用。
接口类型:
- 对于
Chatbot/Agent/Chatflow
类型应用而言,它们都属于聊天类型的应用,因此拥有相同类型的输入参数和输出参数,因此可被统一视为聊天接口。
- 对于 Workflow 应用而言,它单独占据一个 Workflow 接口。
- 对于 Completion(文本生成应用)应用而言,它单独占据一个 Completion 接口。
请注意,插件仅允许访问插件所在的 Workspace 中的 App。
调用聊天接口
接口规范
def invoke(
self,
app_id: str,
inputs: dict,
response_mode: Literal["streaming", "blocking"],
conversation_id: str,
files: list,
) -> Generator[dict, None, None] | dict:
pass
当 response_mode
为 streaming
时,该接口将直接返回 Generator[dict]
,否则直接返回 dict
,具体的接口字段请参考 ServiceApi
的返回结果。
我们可以在一个 Endpoint
中调用 Chat 类型的 App,并将结果直接返回。
import json
from typing import Mapping
from werkzeug import Request, Response
from dify_plugin import Endpoint
class Duck(Endpoint):
def _invoke(self, r: Request, values: Mapping, settings: Mapping) -> Response:
"""
Invokes the endpoint with the given request.
"""
app_id = values["app_id"]
def generator():
response = self.session.app.workflow.invoke(
app_id=app_id, inputs={}, response_mode="streaming", files=[]
)
for data in response:
yield f"{json.dumps(data)} <br>"
return Response(generator(), status=200, content_type="text/html")
调用 Workflow 接口
self.session.app.workflow
接口规范
def invoke(
self,
app_id: str,
inputs: dict,
response_mode: Literal["streaming", "blocking"],
files: list,
) -> Generator[dict, None, None] | dict:
pass
调用 Completion 接口
self.session.app.completion
接口规范
def invoke(
self,
app_id: str,
inputs: dict,
response_mode: Literal["streaming", "blocking"],
files: list,
) -> Generator[dict, None, None] | dict:
pass