Dify RAG 学习实战 02:Chat Assistant 从页面调试到 API 调用

0 阅读4分钟

02-chat-assistant-image-01.png

本地 Dify 跑起来后,第一步先创建一个 Chat Assistant 应用。

应用名称:

简单的求职聊天助手

模型使用豆包。

第一版 Prompt:

你是一个求职准备助手,请根据用户输入,用中文给出清晰、可执行的建议。

这个实验目标不是做一个复杂助手。

而是验证 Dify Chat Assistant 的基础链路:

Prompt
变量
调试预览
发布更新
blocking API
streaming API
conversation_id
日志与监测
模型参数

1. 创建 Chat Assistant

在 Dify 控制台创建 Chat Assistant 应用。

配置模型:

供应商:豆包
模型:doubao-seed-2-0-lite-260428

配置 Prompt:

你是一个求职准备助手,请根据用户输入,用中文给出清晰、可执行的建议。

这个 Prompt 很短。

原因是先验证平台链路,不希望一开始引入太多 Prompt 变量。

2. 配置输入变量

应用里配置了一个变量:

job_type = 前端开发

后续 API 请求中传入:

{
  "inputs": {
    "job_type": "前端开发"
  }
}

这个变量可以用于让同一个助手适配不同岗位。

例如:

前端开发
后端开发
产品经理
测试工程师

3. 调试预览

02-chat-assistant-image-02.png

在调试预览中输入:

我准备面试前端开发岗位,只有 3 天时间,应该怎么准备?

返回结果可以正常按天拆解计划。

大概包括:

第 1 天:HTML / CSS / JS 基础
第 2 天:算法、框架、工程化
第 3 天:项目复盘、模拟面试、反问准备

调试预览用于验证:

Prompt 是否生效
变量是否生效
模型参数是否合适
回答格式是否符合预期
多轮上下文是否正常

4. 发布更新机制

02-chat-assistant-image-03.png

后续修改 Prompt:

每次回答开头都输出【求职助手V2】。

如果不点击发布更新,API 调用不会使用最新 Prompt。

发布前调用:

返回中没有【求职助手V2】

发布后调用:

返回中包含【求职助手V2】

结论:

调试配置 ≠ API 发布配置
修改 Prompt / 知识库 / 检索配置后,需要发布更新

这个机制避免了配置随手修改后直接影响线上调用。

5. Blocking API

Chat Assistant API 使用:

POST /v1/chat-messages

blocking 请求示例:

curl --location --request POST 'http://localhost:8080/v1/chat-messages' \
  --header 'Authorization: Bearer DIFY_APP_API_KEY' \
  --header 'Content-Type: application/json' \
  --data-raw '{
    "inputs": {
      "job_type": "前端开发"
    },
    "query": "我主要薄弱在项目表达和算法,这两块怎么安排?",
    "response_mode": "blocking",
    "conversation_id": "",
    "user": "abc-123"
  }'

关键返回字段:

answer
conversation_id
message_id
metadata.usage
metadata.retriever_resources

当未接入知识库时:

metadata.retriever_resources = []

这是正常结果。

6. conversation_id 多轮对话

第一次请求:

"conversation_id": ""

Dify 返回:

conversation_id: xxx

第二次请求带上同一个 conversation_id

"conversation_id": "xxx"

模型会基于同一会话上下文继续回答。

这说明 Dify 的多轮对话由 conversation_id 串起来。

对照自研项目,可以理解为:

Dify conversation_id ≈ Conversation ID
Dify message_id ≈ Message ID

7. Streaming API

将请求参数改成:

"response_mode": "streaming"

接口会返回多个事件。

普通 message 事件:

{
  "event": "message",
  "answer": "3"
}

结束事件:

{
  "event": "message_end",
  "metadata": {
    "usage": {}
  }
}

前端处理时需要:

监听 message 事件
拼接 answer
遇到 message_end 后收尾
处理错误事件
记录 conversation_id / message_id

这和 SSE 流式响应解析逻辑一致。

8. 模型参数测试

测试问题:

简单说说前端开发在 AI 盛行的背景下,未来的职业方向应该是什么。

分别测试:

temperature = 0
temperature = 0.2
temperature = 0.8

观察:

温度低:回答稳定、收敛
温度高:回答发散、表达更丰富

应用建议:

求职建议助手:低温度更合适
创意写作助手:可以适当提高温度

模型参数应服务具体应用目标。

9. 日志与监测

Dify 的日志与标注可以看到历史对话。

监测页面可以看到:

会话数
活跃用户
token 消耗
token 速度
延迟

这说明 Chat Assistant 不只是回答接口。

它还包含运行观测能力。

一个 AI 应用如果要长期使用,需要关注:

用户问题
模型回答
token 成本
响应延迟
异常情况
标注反馈

10. 本阶段结论

完成 Chat Assistant 后,已经验证:

页面调试可用
Prompt 生效
变量可传入
发布更新影响 API 配置
blocking API 可用
streaming API 可用
conversation_id 支持多轮
日志与监测可观察

对照 SuperAgentConsole:

Dify Chat Assistant:
平台配置 + App API + 基础监测

SuperAgentConsole:
Agent Runtime + Tool Router + AgentEvent + Run Detail

下一步进入 Knowledge / RAG。

目标是验证:

模型如何基于自己的 Markdown 学习文档回答问题