聊天与补全 API
聊天与补全 API
相关源文件
本章引用的主要源码文件:
api/controllers/common/controller_schemas.pyapi/controllers/console/app/advanced_prompt_template.pyapi/controllers/console/app/audio.pyapi/controllers/console/app/completion.pyapi/controllers/console/app/conversation.pyapi/controllers/console/app/conversation_variables.pyapi/controllers/console/app/mcp_server.pyapi/controllers/console/app/message.pyapi/controllers/console/app/model_config.pyapi/controllers/console/app/site.pyapi/controllers/console/app/statistic.pyapi/controllers/console/app/workflow_app_log.pyapi/controllers/console/app/workflow_statistic.pyapi/controllers/console/explore/audio.pyapi/controllers/console/explore/completion.pyapi/controllers/console/explore/conversation.pyapi/controllers/console/explore/message.pyapi/controllers/console/explore/saved_message.pyapi/controllers/console/explore/workflow.pyapi/controllers/service_api/app/audio.pyapi/controllers/service_api/app/completion.pyapi/controllers/service_api/app/conversation.pyapi/controllers/service_api/app/message.pyapi/controllers/service_api/app/workflow.pyapi/controllers/web/audio.pyapi/controllers/web/completion.pyapi/controllers/web/conversation.pyapi/controllers/web/message.pyapi/controllers/web/saved_message.pyapi/controllers/web/workflow.pyapi/core/app/layers/conversation_variable_persist_layer.pyapi/core/app/task_pipeline/based_generate_task_pipeline.pyapi/services/advanced_prompt_template_service.pyapi/services/app_model_config_service.pyapi/services/audio_service.pyapi/services/auth/api_key_auth_service.pyapi/services/conversation_service.pyapi/services/conversation_variable_updater.pyapi/services/message_service.pyapi/services/saved_message_service.pyapi/services/web_conversation_service.pyapi/services/workflow/workflow_converter.pyapi/services/workflow_app_service.pyapi/tests/unit_tests/controllers/console/app/test_mcp_server_response.pyapi/tests/unit_tests/controllers/service_api/app/test_workflow.pyapi/tests/unit_tests/controllers/test_conversation_rename_payload.pyapi/tests/unit_tests/controllers/web/test_pydantic_models.py
本文档详细介绍了聊天与补全消息 API,这些 API 使外部应用能够向 Dify 应用发送消息并接收 AI 生成的响应。它们是对话式 AI 和文本生成场景的主要端点。
概述
Dify 通过 Service API 提供两个主要的消息发送 API 供外部使用:
- 聊天 API(
POST /chat-messages):用于具有会话持久化的对话式应用。支持对话历史、代理模式和工具调用。api/controllers/service_api/app/completion.py:178-180 - 补全 API(
POST /completion-messages):用于无对话上下文状态的无状态文本生成。适用于翻译、摘要和内容生成。api/controllers/service_api/app/completion.py:82-83 - 工作流 API(
POST /workflows/run):专门用于工作流应用,提供详细的节点级执行事件,不支持会话。api/controllers/service_api/app/workflow.py:13-16
聊天与补全 API 对比
| 特性 | 聊天 API | 补全 API | 工作流 API |
|---|---|---|---|
| 端点 | /chat-messages | /completion-messages | /workflows/run |
| 会话持久化 | 是(通过 conversation_id) | 否 | 否 |
| 应用模式 | CHAT、AGENT_CHAT、ADVANCED_CHAT | COMPLETION | WORKFLOW |
| 标题生成 | 支持 auto_generate_name | 不适用 | 不适用 |
来源:api/controllers/service_api/app/completion.py:103-106、api/controllers/service_api/app/completion.py:178-185、api/controllers/service_api/app/workflow.py:17-23
API 请求流程
下图展示了从 service_api 命名空间的入口点到底层服务逻辑的请求流程。
消息处理流程
来源:api/controllers/service_api/app/completion.py:117-123、api/controllers/service_api/app/completion.py:205-211、api/services/app_generate_service.py:1-20、api/services/message_service.py:66-70
认证
所有 Service API 端点均使用 API 密钥认证。系统通过 @validate_app_token 装饰器验证令牌并获取关联的 App 和 EndUser 模型。该装饰器确保只有经过授权的客户端才能访问应用资源。
来源:api/controllers/service_api/wraps.py:14-15、api/controllers/service_api/app/completion.py:96-97、api/controllers/service_api/app/completion.py:186-187
聊天 API
聊天 API(POST /chat-messages)支持对话式应用。它支持基础助手、代理助手和高级聊天(基于工作流)。
请求体参数
载荷使用 ChatRequestPayload Pydantic 模型进行校验。
| 参数 | 类型 | 必填 | 描述 |
|---|---|---|---|
query | string | 是 | 用户输入/问题内容。 |
inputs | dict | 是 | 应用定义的变量值。 |
response_mode | string | 否 | streaming(流式)或 blocking(阻塞)。 |
conversation_id | string | 否 | 用于继续现有对话的 UUID。api/controllers/service_api/app/completion.py:57-57 |
files | list[dict] | 否 | 多模态输入(图片、文档等)。api/controllers/service_api/app/completion.py:55-55 |
auto_generate_name | bool | 否 | 自动生成对话标题。默认值:true。api/controllers/service_api/app/completion.py:59-59 |
来源:api/controllers/service_api/app/completion.py:52-61、api/controllers/service_api/app/completion.py:62-76
会话与对话管理
Dify 通过 Conversation 模型和 ConversationService 管理聊天状态。会话通过 conversation_id 进行标识。
对话生命周期
| 操作 | 端点 | 服务方法 |
|---|---|---|
| 列表 | GET /conversations | ConversationService.pagination_by_last_id |
| 重命名 | POST /conversations/{id}/name | ConversationService.rename |
| 删除 | DELETE /conversations/{id} | ConversationService.delete |
| 自动命名 | POST /conversations/{id}/name | ConversationService.auto_generate_name |
来源:api/controllers/service_api/app/conversation.py:165-173、api/services/conversation_service.py:118-125、api/services/conversation_service.py:138-140、api/services/conversation_service.py:182-183
对话实体与服务映射
来源:api/controllers/service_api/app/conversation.py:138-151、api/services/conversation_service.py:33-47、api/services/conversation_service.py:152-155、api/services/message_service.py:66-76
音频与多模态 API
Dify 通过 Service API 中的专用端点支持语音转文本(ASR)和文本转语音(TTS)。
- 音频转文本:
POST /audio-to-text使用AudioService.transcript_asr将上传的文件转换为文本。api/controllers/service_api/app/audio.py:33-43 - 文本转音频:
POST /text-to-audio使用AudioService.transcript_tts将文本转换为语音。api/controllers/service_api/app/audio.py:66-78
来源:api/services/audio_service.py:32-33、api/services/audio_service.py:76-85
错误处理
API 使用标准 HTTP 状态码。控制器会捕获服务层异常并将其映射为适当的 HTTP 响应。
| 状态码 | 错误类 | 描述 |
|---|---|---|
| 400 | BadRequest | 参数校验失败(例如通过 Pydantic)。 |
| 401 | Unauthorized | API 令牌无效或缺失。 |
| 404 | NotFound | 资源(对话、消息)不存在。 |
| 429 | InvokeRateLimitError | 配额或速率限制已超出。 |
| 500 | InternalServerError | 意外的服务端故障。 |
来源:api/controllers/service_api/app/completion.py:133-145、api/controllers/service_api/app/message.py:76-79、api/controllers/service_api/app/workflow.py:17-23