工作流编排对话型应用 API 对话应用支持会话持久化,可将之前的聊天记录作为上下文进行回答,可适用于聊天/客服 AI 等。 基础 URL https://api.dify.ai/v1 鉴权 Service API 使用 API-Key 进行鉴权。 强烈建议开发者把 API-Key 放在后端存储,而非分享或者放在客户端存储,以免 API-Key 泄露,导致财产损失。 所有 API 请求都应在 Authorization HTTP Header 中包含您的 API-Key,如下所示: Authorization: Bearer {API_KEY} POST /chat-messages 发送对话消息 创建会话消息。 Request Body Name query Type string Description 用户输入/提问内容。 Name inputs Type object Description 允许传入 App 定义的各变量值。 inputs 参数包含了多组键值对(Key/Value pairs),每组的键对应一个特定变量,每组的值则是该变量的具体值。 如果变量是文件类型,请指定一个包含以下 files 中所述键的对象。 默认 {} Name response_mode Type string Description streaming 流式模式(推荐)。基于 SSE(Server-Sent Events)实现类似打字机输出方式的流式返回。 blocking 阻塞模式,等待执行完毕后返回结果。(请求若流程较长可能会被中断)。 由于 Cloudflare 限制,请求会在 100 秒超时无返回后中断。 Name user Type string Description 用户标识,用于定义终端用户的身份,方便检索、统计。 由开发者定义规则,需保证用户标识在应用内唯一。服务 API 不会共享 WebApp 创建的对话。 Name conversation_id Type string Description (选填)会话 ID,需要基于之前的聊天记录继续对话,必须传之前消息的 conversation_id。 Name files Type array[object] Description 文件列表,适用于传入文件结合文本理解并回答问题,仅当模型支持 Vision 能力时可用。 type (string) 支持类型: document 具体类型包含:'TXT', 'MD', 'MARKDOWN', 'PDF', 'HTML', 'XLSX', 'XLS', 'DOCX', 'CSV', 'EML', 'MSG', 'PPTX', 'PPT', 'XML', 'EPUB' image 具体类型包含:'JPG', 'JPEG', 'PNG', 'GIF', 'WEBP', 'SVG' audio 具体类型包含:'MP3', 'M4A', 'WAV', 'WEBM', 'AMR' video 具体类型包含:'MP4', 'MOV', 'MPEG', 'MPGA' custom 具体类型包含:其他文件类型 transfer_method (string) 传递方式: remote_url: 图片地址。 local_file: 上传文件。 url 图片地址。(仅当传递方式为 remote_url 时)。 upload_file_id 上传文件 ID。(仅当传递方式为 local_file 时)。 Name auto_generate_name Type bool Description (选填)自动生成标题,默认 true。 若设置为 false,则可通过调用会话重命名接口并设置 auto_generate 为 true 实现异步生成标题。 Response 当 response_mode 为 blocking 时,返回 ChatCompletionResponse object。 当 response_mode 为 streaming时,返回 ChunkChatCompletionResponse object 流式序列。 ChatCompletionResponse 返回完整的 App 结果,Content-Type 为 application/json。 event (string) 事件类型,固定为 message task_id (string) 任务 ID,用于请求跟踪和下方的停止响应接口 id (string) 唯一ID message_id (string) 消息唯一 ID conversation_id (string) 会话 ID mode (string) App 模式,固定为 chat answer (string) 完整回复内容 metadata (object) 元数据 usage (Usage) 模型用量信息 retriever_resources (array[RetrieverResource]) 引用和归属分段列表 created_at (int) 消息创建时间戳,如:1705395332 ChunkChatCompletionResponse 返回 App 输出的流式块,Content-Type 为 text/event-stream。 每个流式块均为 data: 开头,块之间以 \n\n 即两个换行符分隔,如下所示: data: {"event": "message", "task_id": "900bbd43-dc0b-4383-a372-aa6e6c414227", "id": "663c5084-a254-4040-8ad3-51f2a3c1a77c", "answer": "Hi", "created_at": 1705398420}\n\n 流式块中根据 event 不同,结构也不同: event: message LLM 返回文本块事件,即:完整的文本以分块的方式输出。 task_id (string) 任务 ID,用于请求跟踪和下方的停止响应接口 message_id (string) 消息唯一 ID conversation_id (string) 会话 ID answer (string) LLM 返回文本块内容 created_at (int) 创建时间戳,如:1705395332 event: message_file 文件事件,表示有新文件需要展示 id (string) 文件唯一ID type (string) 文件类型,目前仅为image belongs_to (string) 文件归属,user或assistant,该接口返回仅为 assistant url (string) 文件访问地址 conversation_id (string) 会话ID event: message_end 消息结束事件,收到此事件则代表流式返回结束。 task_id (string) 任务 ID,用于请求跟踪和下方的停止响应接口 message_id (string) 消息唯一 ID conversation_id (string) 会话 ID metadata (object) 元数据 usage (Usage) 模型用量信息 retriever_resources (array[RetrieverResource]) 引用和归属分段列表 event: tts_message TTS 音频流事件,即:语音合成输出。内容是Mp3格式的音频块,使用 base64 编码后的字符串,播放的时候直接解码即可。(开启自动播放才有此消息) task_id (string) 任务 ID,用于请求跟踪和下方的停止响应接口 message_id (string) 消息唯一 ID audio (string) 语音合成之后的音频块使用 Base64 编码之后的文本内容,播放的时候直接 base64 解码送入播放器即可 created_at (int) 创建时间戳,如:1705395332 event: tts_message_end TTS 音频流结束事件,收到这个事件表示音频流返回结束。 task_id (string) 任务 ID,用于请求跟踪和下方的停止响应接口 message_id (string) 消息唯一 ID audio (string) 结束事件是没有音频的,所以这里是空字符串 created_at (int) 创建时间戳,如:1705395332 event: message_replace 消息内容替换事件。 开启内容审查和审查输出内容时,若命中了审查条件,则会通过此事件替换消息内容为预设回复。 task_id (string) 任务 ID,用于请求跟踪和下方的停止响应接口 message_id (string) 消息唯一 ID conversation_id (string) 会话 ID answer (string) 替换内容(直接替换 LLM 所有回复文本) created_at (int) 创建时间戳,如:1705395332 event: workflow_started workflow 开始执行 task_id (string) 任务 ID,用于请求跟踪和下方的停止响应接口 workflow_run_id (string) workflow 执行 ID event (string) 固定为 workflow_started data (object) 详细内容 id (string) workflow 执行 ID workflow_id (string) 关联 Workflow ID created_at (timestamp) 开始时间 event: node_started node 开始执行 task_id (string) 任务 ID,用于请求跟踪和下方的停止响应接口 workflow_run_id (string) workflow 执行 ID event (string) 固定为 node_started data (object) 详细内容 id (string) workflow 执行 ID node_id (string) 节点 ID node_type (string) 节点类型 title (string) 节点名称 index (int) 执行序号,用于展示 Tracing Node 顺序 predecessor_node_id (string) 前置节点 ID,用于画布展示执行路径 inputs (object) 节点中所有使用到的前置节点变量内容 created_at (timestamp) 开始时间 event: node_finished node 执行结束,成功失败同一事件中不同状态 task_id (string) 任务 ID,用于请求跟踪和下方的停止响应接口 workflow_run_id (string) workflow 执行 ID event (string) 固定为 node_finished data (object) 详细内容 id (string) node 执行 ID node_id (string) 节点 ID index (int) 执行序号,用于展示 Tracing Node 顺序 predecessor_node_id (string) optional 前置节点 ID,用于画布展示执行路径 inputs (object) 节点中所有使用到的前置节点变量内容 process_data (json) Optional 节点过程数据 outputs (json) Optional 输出内容 status (string) 执行状态 running / succeeded / failed / stopped error (string) Optional 错误原因 elapsed_time (float) Optional 耗时(s) execution_metadata (json) 元数据 total_tokens (int) optional 总使用 tokens total_price (decimal) optional 总费用 currency (string) optional 货币,如 USD / RMB created_at (timestamp) 开始时间 event: workflow_finished workflow 执行结束,成功失败同一事件中不同状态 task_id (string) 任务 ID,用于请求跟踪和下方的停止响应接口 workflow_run_id (string) workflow 执行 ID event (string) 固定为 workflow_finished data (object) 详细内容 id (string) workflow 执行 ID workflow_id (string) 关联 Workflow ID status (string) 执行状态 running / succeeded / failed / stopped outputs (json) Optional 输出内容 error (string) Optional 错误原因 elapsed_time (float) Optional 耗时(s) total_tokens (int) Optional 总使用 tokens total_steps (int) 总步数(冗余),默认 0 created_at (timestamp) 开始时间 finished_at (timestamp) 结束时间 event: error 流式输出过程中出现的异常会以 stream event 形式输出,收到异常事件后即结束。 task_id (string) 任务 ID,用于请求跟踪和下方的停止响应接口 message_id (string) 消息唯一 ID status (int) HTTP 状态码 code (string) 错误码 message (string) 错误消息 event: ping 每 10s 一次的 ping 事件,保持连接存活。 Errors 404,对话不存在 400,invalid_param,传入参数异常 400,app_unavailable,App 配置不可用 400,provider_not_initialize,无可用模型凭据配置 400,provider_quota_exceeded,模型调用额度不足 400,model_currently_not_support,当前模型不可用 400,completion_request_error,文本生成失败 500,服务内部异常