当前位置: 首页 > news >正文

【实战】Dify从0到100进阶--文档解读(13)API前端再开发

在这里插入图片描述

一、基于 API 的开发

1. 核心理念

Dify 的“后端即服务”(BaaS)理念,意味着所有大模型、Prompt 工程、知识库和工具能力都已在后端封装,前端只需通过标准化的 HTTP 接口即可调用,不必关心模型部署、运维与扩缩容。

2. 典型流程

  1. 获取凭据

    • 在 Dify 控制台,打开目标应用 → “访问 API” → 创建或复制 Access Token
    • 推荐在后端安全地存储和管理 Token,前端仅通过自己后端代理转发请求,避免明文暴露。
  2. 调用 Completion(文本生成)

    • 接口:POST https://api.dify.ai/v1/completion-messages

    • 入参示例(cURL):

      curl --location --request POST 'https://api.dify.ai/v1/completion-messages' \--header 'Authorization: Bearer {YOUR_TOKEN}' \--header 'Content-Type: application/json' \--data-raw '{"inputs": {"text": "请给我写一首七言绝句"},"response_mode": "streaming","user": "user-001"}'
      
    • 返回:分片流或完整 JSON,包含生成的文本。

  3. 调用 Chat(对话型)

    • 接口:POST https://api.dify.ai/v1/chat-messages

    • 第一次对话时不传 conversation_id,后续交互需带上同一个 ID,保持上下文。

    • 入参示例(Python):

      import requests, jsonurl = "https://api.dify.ai/v1/chat-messages"
      headers = {"Authorization": "Bearer {YOUR_TOKEN}","Content-Type": "application/json",
      }
      # 新会话
      data = {"inputs": {},"query": "你好,请介绍一下上海","response_mode": "streaming","user": "user-001"
      }
      resp = requests.post(url, headers=headers, json=data)
      print(resp.text)
      # 假设返回 conversation_id = "abc-123"
      # 继续对话
      data["conversation_id"] = "abc-123"
      data["query"] = "那它有哪些著名景点?"
      resp2 = requests.post(url, headers=headers, json=data)
      

3. 优势与实践建议

  • 安全可控:后端统一管理 Token、使用权限;前端只需调用封装好的能力
  • 供应商无关:可在 Dify 控制台随时切换模型厂商,或者在 Prompts 面板微调提示词
  • 快速迭代:新增工具能力、知识库后,前端无需改动,实时生效
  • 监控与分析:Dify 提供日志、使用量、活跃度、标注等可视化面板

最佳实践

  • Token 切勿直接写在浏览器 JS 里,应通过自己后端做二次鉴权转发。
  • 流式响应时,前端可使用原生 Fetch API 的 ReadableStream 接口逐步渲染 AI 内容。
  • 针对对话场景,建议维护本地的 conversation_id 存储(如 localStorage),确保用户刷新页面也能恢复会话。

二、基于前端改造的开发

1. 核心思路

除了纯粹的 API 调用,Dify 还提供 Web SDK/嵌入式组件,让你在前端页面里「零后端」或「极少后端」地集成 AI 聊天、知识问答、问卷或任务型 Agent。

  • 组件化:一行脚本或 NPM 包即可加载聊天界面
  • 可视化设置:通过控制台可视化配置界面样式、行为、工具列表
  • 事件钩子:在 JS 里监听用户输入、AI 回复、错误回调等,做二次加工

2. 快速上手示例

  1. 通过 <script> 标签嵌入

    <!-- 在页面 <head> 或 </body> 前加载 SDK -->
    <script src="https://cdn.jsdelivr.net/npm/@dify/chat-widget"></script><!-- 聊天组件占位 -->
    <div id="dify-chat-container"></div><script>// 初始化DifyChatWidget.init({el: '#dify-chat-container',appId: 'YOUR_APP_ID',       // 在 Dify 控制台获取userId: 'user-001',         // 区分会话theme: { accent: '#1a73e8' },onMessage: (msg) => console.log('AI:', msg.content),onError: (err) => console.error(err)});
    </script>
    
  2. NPM 引入(React/Vue 等框架)

    npm install @dify/chat-widget
    
    import React, { useEffect } from 'react';
    import { ChatWidget } from '@dify/chat-widget';export default function App() {return (<ChatWidgetappId="YOUR_APP_ID"userId="user-001"locale="zh-CN"onMessage={(msg) => console.log('AI:', msg)}style={{ width: 350, height: 500 }}/>);
    }
    

3. 定制化与扩展

  • UI 样式

    • 主题色、字体、按钮样式都可通过配置项或 CSS 变量覆盖
  • 插件能力

    • 在控制台 “工具能力” 里绑定第三方插件(如 翻译、检索、表单)
    • 前端无感知,只需在 SDK 配置打开工具面板
  • 会话变量

    • 通过 sessionVars 参数注入上下文变量,让不同用户看到差异化回应
  • 事件与埋点

    • onSend, onReceive, onOpen, onClose 等回调,可用于埋点或二次渲染

4. 与纯 API 的区别

特性基于 API 开发基于前端改造
上手难度需编写网络请求代码仅需引入 SDK,零代码接入
灵活度自由拼接任何前端逻辑受限于 SDK 提供的接口与样式
运营能力需自建分析面板可直接使用 Dify 可视化面板
安全性自行管理 TokenApp ID + JS Secret,可配置白名单域名
二次开发自由度更高在 SDK 能力范围内扩展
http://www.dtcms.com/a/294367.html

相关文章:

  • 苍穹外卖DAY11
  • 【LeetCode数据结构】栈和队列的应用——设计循环队列问题详解
  • 【后端】FastAPI的Pydantic 模型
  • Excel 将数据导入到SQLServer数据库
  • Java TCP 通信详解:从基础到实战,彻底掌握面向连接的网络编程
  • 通用表格识别技术的应用,深刻改变人们处理表格数据的方式
  • 如何最简单、通俗地理解Python的numpy库?
  • Ubuntu22.04.5 LTS安装与使用Docker
  • 【优选算法-多源 BFS】多源 BFS:解决多个起点的广度优先搜索
  • AI语境下创新教学模式应用示范与推广联盟成立| 南开大学携手和鲸,破解智能化时代教育难题
  • 只能在栈上创建对象
  • Linux网络-------1.socket编程基础---(UDP-socket)
  • 广州邮科万兆6光千兆48电工业级光纤交换机:三层功能如何重新定义网络智能化
  • Vue Scoped样式:当动态元素成为“无家可归“的孤儿
  • 2025年云南燃气经营企业从业人员考试题
  • Axios封装以及添加拦截器
  • UniApp X 网络请求避坑指南:从 JS 到 UTS 的 JSON 数据处理全解析
  • MCU驱动AD5231BRUZ_10K
  • GoLang学习笔记
  • Qt 菜单与工具栏设计:提升用户体验
  • stm32使用USB虚拟串口,因电脑缺少官方驱动而识别失败(全系列32单片机可用)
  • Git下载全攻略
  • 状压Dp和记忆化搜索
  • k8s怎么找deploy历史版本?
  • UDP通信是否需要使用bind,connect,send等函数
  • 如何高效合并音视频文件
  • iview+Tree 在数据中添加selected和expand属性默认展开后点不动问题
  • 【数据结构】——时间与空间复杂度深度解析
  • MATLAB近红外光谱分析:MATLAB编程+BP神经网络+SVM+随机森林+遗传算法+变量降维+卷积神经网络等
  • 云蝠智能 Voice Agent:重构企业语音交互,引领 AI 服务新范式