周志洋

个人站

持续学习 才能不被淘汰


Dify提示词工程

提示词工程概述

提示词工程是构建高质量AI应用的关键技能。在Dify中,良好的提示词设计可以显著提高应用的准确性和用户体验。

提示词的重要性

# 提示词的重要性
prompt_importance = {
    "准确性": "好的提示词提高回答准确性",
    "相关性": "确保回答与需求相关",
    "格式": "控制输出格式和结构",
    "行为": "定义AI的行为和角色"
}

提示词基础

1. 提示词结构

# 提示词基本结构
提示词结构:
  系统提示词:
    - 定义AI角色
    - 设定行为规范
    - 说明能力范围
  
  用户提示词:
    - 用户输入内容
    - 具体问题或任务
  
  上下文:
    - 历史对话
    - 知识库检索结果
    - 外部数据

2. 提示词类型

# 提示词类型
提示词类型:
  指令型:
    - 明确的任务指令
    - 示例: "请总结以下文档内容"
  
  对话型:
    - 自然对话形式
    - 示例: "你是一个专业的客服,请回答用户问题"
  
  示例型:
    - 提供示例引导
    - 示例: "以下是正确的格式示例:..."
  
  角色型:
    - 定义AI角色
    - 示例: "你是一位经验丰富的Python开发专家"

提示词设计

1. 角色定义

# 角色定义示例
角色定义:
  专业角色:
    示例: "你是一位拥有10年经验的软件架构师"
    作用: "让AI以专业身份回答问题"
  
  性格设定:
    示例: "你是一个友好、耐心的客服助手"
    作用: "控制AI的交流风格"
  
  能力范围:
    示例: "你擅长Python、Java和Go语言开发"
    作用: "限定AI的回答范围"

2. 任务描述

# 任务描述设计
任务描述:
  明确性:
    - 清晰描述任务目标
    - 避免模糊表达
    - 使用具体指令
  
  完整性:
    - 包含所有必要信息
    - 说明输入输出格式
    - 提供约束条件
  
  示例:
    好的: "请将以下JSON数据转换为Markdown表格格式"
    差的: "处理这个数据"

3. 输出格式

# 输出格式控制
格式控制:
  结构化输出:
    - 使用JSON格式
    - 使用Markdown格式
    - 使用列表格式
  
  格式示例:
    示例: |
      请按以下格式输出:
      - 标题: [标题]
      - 摘要: [摘要]
      - 要点: [要点列表]

上下文管理

1. 上下文构建

# 上下文构建策略
上下文策略:
  知识库上下文:
    - 从知识库检索相关内容
    - 按相关性排序
    - 限制上下文长度
  
  对话历史:
    - 保留最近N轮对话
    - 重要信息持久化
    - 上下文压缩
  
  外部数据:
    - 集成外部API数据
    - 实时数据更新
    - 数据验证

2. 上下文优化

# 上下文优化方法
优化方法:
  相关性过滤:
    - 只包含相关内容
    - 过滤无关信息
    - 提高上下文质量
  
  长度控制:
    - 限制上下文长度
    - 优先保留重要信息
    - 使用摘要技术
  
  结构优化:
    - 清晰的上下文结构
    - 使用分隔符
    - 标注信息来源

变量使用

1. 变量引用

# 变量引用语法
变量引用:
  基本变量: ""
  对象属性: ""
  数组元素: ""
  条件变量: "默认值"

2. 变量示例

# 提示词中的变量使用
提示词示例: |
  你是一位,擅长。
  
  用户问题:
  
  相关知识:
  
  - <article class="post-container post-container--single" itemscope itemtype="http://schema.org/BlogPosting">
  <header class="post-header">
    <h1 class="post-title">Dify API使用指南</h1>
    <div class="post-meta">
      <img src="/images/calendar.png" width="20px"/> 
      <time datetime="2025-06-25 00:00:00 +0000" itemprop="datePublished" class="post-meta__date date">2025-06-25</time>  
         
      <span id="busuanzi_container_page_pv"> | 阅读:<span id="busuanzi_value_page_pv"></span>次</span>
    </p>
    </div>
  </header>

  <section class="post">
    <h2 id="api概述">API概述</h2>

<p>Dify提供了完整的RESTful API接口,允许开发者通过编程方式集成Dify功能到自己的应用中。API支持对话、工作流、知识库等所有核心功能。</p>

<h3 id="api特点">API特点</h3>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1"># API特点
</span><span class="n">api_features</span> <span class="o">=</span> <span class="p">{</span>
    <span class="s">"RESTful设计"</span><span class="p">:</span> <span class="s">"标准的REST API设计"</span><span class="p">,</span>
    <span class="s">"完整功能"</span><span class="p">:</span> <span class="s">"覆盖所有平台功能"</span><span class="p">,</span>
    <span class="s">"多语言SDK"</span><span class="p">:</span> <span class="s">"提供Python、JavaScript等SDK"</span><span class="p">,</span>
    <span class="s">"文档完善"</span><span class="p">:</span> <span class="s">"详细的API文档和示例"</span><span class="p">,</span>
    <span class="s">"认证安全"</span><span class="p">:</span> <span class="s">"支持API Key认证"</span>
<span class="p">}</span>
</code></pre></div></div>

<h2 id="api认证">API认证</h2>

<h3 id="1-api-key获取">1. API Key获取</h3>

<div class="language-yaml highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1"># API Key获取</span>
<span class="na">获取方式</span><span class="pi">:</span>
  <span class="na">1</span><span class="pi">:</span> <span class="s2">"</span><span class="s">登录Dify控制台"</span>
  <span class="na">2</span><span class="pi">:</span> <span class="s2">"</span><span class="s">进入应用设置"</span>
  <span class="na">3</span><span class="pi">:</span> <span class="s2">"</span><span class="s">找到API设置"</span>
  <span class="na">4</span><span class="pi">:</span> <span class="s2">"</span><span class="s">生成API</span><span class="nv"> </span><span class="s">Key"</span>
  <span class="na">5</span><span class="pi">:</span> <span class="s2">"</span><span class="s">保存API</span><span class="nv"> </span><span class="s">Key(只显示一次)"</span>

<span class="na">API Key类型</span><span class="pi">:</span>
  <span class="na">应用API Key</span><span class="pi">:</span>
    <span class="pi">-</span> <span class="s">绑定到特定应用</span>
    <span class="pi">-</span> <span class="s">只能访问该应用</span>
    <span class="pi">-</span> <span class="s">推荐使用</span>
  
  <span class="na">全局API Key</span><span class="pi">:</span>
    <span class="pi">-</span> <span class="s">可以访问所有应用</span>
    <span class="pi">-</span> <span class="s">权限更高</span>
    <span class="pi">-</span> <span class="s">谨慎使用</span>
</code></pre></div></div>

<h3 id="2-认证方式">2. 认证方式</h3>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c"># API认证方式</span>
<span class="c"># 方式1:Header认证(推荐)</span>
curl <span class="nt">-X</span> POST <span class="s2">"https://api.dify.ai/v1/chat-messages"</span> <span class="se">\</span>
  <span class="nt">-H</span> <span class="s2">"Authorization: Bearer YOUR_API_KEY"</span> <span class="se">\</span>
  <span class="nt">-H</span> <span class="s2">"Content-Type: application/json"</span> <span class="se">\</span>
  <span class="nt">-d</span> <span class="s1">'{
    "inputs": {},
    "query": "Hello",
    "response_mode": "blocking",
    "conversation_id": "",
    "user": "user-1234"
  }'</span>

<span class="c"># 方式2:Query参数(不推荐,安全性较低)</span>
curl <span class="nt">-X</span> POST <span class="s2">"https://api.dify.ai/v1/chat-messages?authorization=YOUR_API_KEY"</span> <span class="se">\</span>
  <span class="nt">-H</span> <span class="s2">"Content-Type: application/json"</span> <span class="se">\</span>
  <span class="nt">-d</span> <span class="s1">'{...}'</span>
</code></pre></div></div>

<h2 id="对话api">对话API</h2>

<h3 id="1-发送消息">1. 发送消息</h3>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c"># 发送对话消息</span>
POST /v1/chat-messages

<span class="c"># 请求示例</span>
curl <span class="nt">-X</span> POST <span class="s2">"https://api.dify.ai/v1/chat-messages"</span> <span class="se">\</span>
  <span class="nt">-H</span> <span class="s2">"Authorization: Bearer YOUR_API_KEY"</span> <span class="se">\</span>
  <span class="nt">-H</span> <span class="s2">"Content-Type: application/json"</span> <span class="se">\</span>
  <span class="nt">-d</span> <span class="s1">'{
    "inputs": {
      "variable1": "value1"
    },
    "query": "用户的问题",
    "response_mode": "blocking",
    "conversation_id": "",
    "user": "user-1234"
  }'</span>

<span class="c"># 响应示例</span>
<span class="o">{</span>
  <span class="s2">"event"</span>: <span class="s2">"message"</span>,
  <span class="s2">"task_id"</span>: <span class="s2">"task-1234"</span>,
  <span class="s2">"id"</span>: <span class="s2">"msg-1234"</span>,
  <span class="s2">"message_id"</span>: <span class="s2">"msg-1234"</span>,
  <span class="s2">"conversation_id"</span>: <span class="s2">"conv-1234"</span>,
  <span class="s2">"answer"</span>: <span class="s2">"AI的回答内容"</span>,
  <span class="s2">"created_at"</span>: 1234567890
<span class="o">}</span>
</code></pre></div></div>

<h3 id="2-流式响应">2. 流式响应</h3>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c"># 流式响应(SSE)</span>
POST /v1/chat-messages

<span class="c"># 请求参数</span>
<span class="o">{</span>
  <span class="s2">"response_mode"</span>: <span class="s2">"streaming"</span>,  <span class="c"># 设置为streaming</span>
  <span class="s2">"query"</span>: <span class="s2">"用户问题"</span>,
  <span class="s2">"conversation_id"</span>: <span class="s2">"conv-1234"</span>,
  <span class="s2">"user"</span>: <span class="s2">"user-1234"</span>
<span class="o">}</span>

<span class="c"># 响应格式(SSE)</span>
event: message
data: <span class="o">{</span><span class="s2">"event"</span>: <span class="s2">"message"</span>, <span class="s2">"id"</span>: <span class="s2">"msg-1"</span>, <span class="s2">"answer"</span>: <span class="s2">"部分回答"</span><span class="o">}</span>

event: message_end
data: <span class="o">{</span><span class="s2">"event"</span>: <span class="s2">"message_end"</span>, <span class="s2">"id"</span>: <span class="s2">"msg-1"</span>, <span class="s2">"answer"</span>: <span class="s2">"完整回答"</span><span class="o">}</span>
</code></pre></div></div>

<h3 id="3-python-sdk示例">3. Python SDK示例</h3>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1"># Python SDK使用示例
</span><span class="kn">from</span> <span class="nn">dify_client</span> <span class="kn">import</span> <span class="n">ChatClient</span>

<span class="c1"># 初始化客户端
</span><span class="n">client</span> <span class="o">=</span> <span class="n">ChatClient</span><span class="p">(</span>
    <span class="n">api_key</span><span class="o">=</span><span class="s">"YOUR_API_KEY"</span><span class="p">,</span>
    <span class="n">base_url</span><span class="o">=</span><span class="s">"https://api.dify.ai"</span>
<span class="p">)</span>

<span class="c1"># 发送消息(阻塞模式)
</span><span class="n">response</span> <span class="o">=</span> <span class="n">client</span><span class="p">.</span><span class="n">create_message</span><span class="p">(</span>
    <span class="n">inputs</span><span class="o">=</span><span class="p">{},</span>
    <span class="n">query</span><span class="o">=</span><span class="s">"用户问题"</span><span class="p">,</span>
    <span class="n">response_mode</span><span class="o">=</span><span class="s">"blocking"</span><span class="p">,</span>
    <span class="n">user</span><span class="o">=</span><span class="s">"user-1234"</span>
<span class="p">)</span>
<span class="k">print</span><span class="p">(</span><span class="n">response</span><span class="p">.</span><span class="n">answer</span><span class="p">)</span>

<span class="c1"># 发送消息(流式模式)
</span><span class="k">for</span> <span class="n">chunk</span> <span class="ow">in</span> <span class="n">client</span><span class="p">.</span><span class="n">create_message_stream</span><span class="p">(</span>
    <span class="n">inputs</span><span class="o">=</span><span class="p">{},</span>
    <span class="n">query</span><span class="o">=</span><span class="s">"用户问题"</span><span class="p">,</span>
    <span class="n">response_mode</span><span class="o">=</span><span class="s">"streaming"</span><span class="p">,</span>
    <span class="n">user</span><span class="o">=</span><span class="s">"user-1234"</span>
<span class="p">):</span>
    <span class="k">if</span> <span class="n">chunk</span><span class="p">.</span><span class="n">event</span> <span class="o">==</span> <span class="s">"message"</span><span class="p">:</span>
        <span class="k">print</span><span class="p">(</span><span class="n">chunk</span><span class="p">.</span><span class="n">answer</span><span class="p">,</span> <span class="n">end</span><span class="o">=</span><span class="s">""</span><span class="p">,</span> <span class="n">flush</span><span class="o">=</span><span class="bp">True</span><span class="p">)</span>
</code></pre></div></div>

<h2 id="工作流api">工作流API</h2>

<h3 id="1-运行工作流">1. 运行工作流</h3>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c"># 运行工作流</span>
POST /v1/workflows/run

<span class="c"># 请求示例</span>
curl <span class="nt">-X</span> POST <span class="s2">"https://api.dify.ai/v1/workflows/run"</span> <span class="se">\</span>
  <span class="nt">-H</span> <span class="s2">"Authorization: Bearer YOUR_API_KEY"</span> <span class="se">\</span>
  <span class="nt">-H</span> <span class="s2">"Content-Type: application/json"</span> <span class="se">\</span>
  <span class="nt">-d</span> <span class="s1">'{
    "inputs": {
      "input_variable": "value"
    },
    "response_mode": "blocking",
    "user": "user-1234"
  }'</span>

<span class="c"># 响应示例</span>
<span class="o">{</span>
  <span class="s2">"task_id"</span>: <span class="s2">"task-1234"</span>,
  <span class="s2">"workflow_run_id"</span>: <span class="s2">"run-1234"</span>,
  <span class="s2">"data"</span>: <span class="o">{</span>
    <span class="s2">"output_variable"</span>: <span class="s2">"result_value"</span>
  <span class="o">}</span>,
  <span class="s2">"created_at"</span>: 1234567890
<span class="o">}</span>
</code></pre></div></div>

<h3 id="2-工作流状态查询">2. 工作流状态查询</h3>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c"># 查询工作流运行状态</span>
GET /v1/workflows/runs/<span class="o">{</span>workflow_run_id<span class="o">}</span>

<span class="c"># 响应示例</span>
<span class="o">{</span>
  <span class="s2">"id"</span>: <span class="s2">"run-1234"</span>,
  <span class="s2">"status"</span>: <span class="s2">"succeeded"</span>,
  <span class="s2">"inputs"</span>: <span class="o">{</span>...<span class="o">}</span>,
  <span class="s2">"outputs"</span>: <span class="o">{</span>...<span class="o">}</span>,
  <span class="s2">"created_at"</span>: 1234567890,
  <span class="s2">"finished_at"</span>: 1234567891
<span class="o">}</span>
</code></pre></div></div>

<h2 id="知识库api">知识库API</h2>

<h3 id="1-上传文档">1. 上传文档</h3>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c"># 上传文档到知识库</span>
POST /v1/datasets/<span class="o">{</span>dataset_id<span class="o">}</span>/documents

<span class="c"># 请求示例(multipart/form-data)</span>
curl <span class="nt">-X</span> POST <span class="s2">"https://api.dify.ai/v1/datasets/{dataset_id}/documents"</span> <span class="se">\</span>
  <span class="nt">-H</span> <span class="s2">"Authorization: Bearer YOUR_API_KEY"</span> <span class="se">\</span>
  <span class="nt">-F</span> <span class="s2">"data=@document.pdf"</span> <span class="se">\</span>
  <span class="nt">-F</span> <span class="s2">"indexing_technique=high_quality"</span>

<span class="c"># 响应示例</span>
<span class="o">{</span>
  <span class="s2">"document"</span>: <span class="o">{</span>
    <span class="s2">"id"</span>: <span class="s2">"doc-1234"</span>,
    <span class="s2">"name"</span>: <span class="s2">"document.pdf"</span>,
    <span class="s2">"data_source_type"</span>: <span class="s2">"upload_file"</span>,
    <span class="s2">"indexing_status"</span>: <span class="s2">"parsing"</span>,
    <span class="s2">"created_at"</span>: 1234567890
  <span class="o">}</span>
<span class="o">}</span>
</code></pre></div></div>

<h3 id="2-查询文档状态">2. 查询文档状态</h3>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c"># 查询文档索引状态</span>
GET /v1/datasets/<span class="o">{</span>dataset_id<span class="o">}</span>/documents/<span class="o">{</span>document_id<span class="o">}</span>

<span class="c"># 响应示例</span>
<span class="o">{</span>
  <span class="s2">"id"</span>: <span class="s2">"doc-1234"</span>,
  <span class="s2">"name"</span>: <span class="s2">"document.pdf"</span>,
  <span class="s2">"indexing_status"</span>: <span class="s2">"completed"</span>,
  <span class="s2">"indexing_progress"</span>: 100,
  <span class="s2">"created_at"</span>: 1234567890
<span class="o">}</span>
</code></pre></div></div>

<h3 id="3-删除文档">3. 删除文档</h3>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c"># 删除文档</span>
DELETE /v1/datasets/<span class="o">{</span>dataset_id<span class="o">}</span>/documents/<span class="o">{</span>document_id<span class="o">}</span>

<span class="c"># 响应</span>
<span class="o">{</span>
  <span class="s2">"result"</span>: <span class="s2">"success"</span>
<span class="o">}</span>
</code></pre></div></div>

<h2 id="应用管理api">应用管理API</h2>

<h3 id="1-获取应用信息">1. 获取应用信息</h3>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c"># 获取应用信息</span>
GET /v1/apps/<span class="o">{</span>app_id<span class="o">}</span>

<span class="c"># 响应示例</span>
<span class="o">{</span>
  <span class="s2">"app"</span>: <span class="o">{</span>
    <span class="s2">"id"</span>: <span class="s2">"app-1234"</span>,
    <span class="s2">"name"</span>: <span class="s2">"我的应用"</span>,
    <span class="s2">"mode"</span>: <span class="s2">"chat"</span>,
    <span class="s2">"icon"</span>: <span class="s2">"icon-url"</span>,
    <span class="s2">"icon_background"</span>: <span class="s2">"#FFFFFF"</span>
  <span class="o">}</span>
<span class="o">}</span>
</code></pre></div></div>

<h3 id="2-获取对话历史">2. 获取对话历史</h3>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c"># 获取对话历史</span>
GET /v1/messages?conversation_id<span class="o">={</span>conversation_id<span class="o">}</span>&amp;limit<span class="o">=</span>20

<span class="c"># 响应示例</span>
<span class="o">{</span>
  <span class="s2">"data"</span>: <span class="o">[</span>
    <span class="o">{</span>
      <span class="s2">"id"</span>: <span class="s2">"msg-1"</span>,
      <span class="s2">"conversation_id"</span>: <span class="s2">"conv-1234"</span>,
      <span class="s2">"inputs"</span>: <span class="o">{}</span>,
      <span class="s2">"query"</span>: <span class="s2">"用户问题"</span>,
      <span class="s2">"answer"</span>: <span class="s2">"AI回答"</span>,
      <span class="s2">"created_at"</span>: 1234567890
    <span class="o">}</span>
  <span class="o">]</span>,
  <span class="s2">"has_more"</span>: <span class="nb">false</span>
<span class="o">}</span>
</code></pre></div></div>

<h2 id="sdk使用">SDK使用</h2>

<h3 id="1-python-sdk">1. Python SDK</h3>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1"># 安装SDK
# pip install dify-client
</span>
<span class="kn">from</span> <span class="nn">dify_client</span> <span class="kn">import</span> <span class="n">ChatClient</span><span class="p">,</span> <span class="n">CompletionClient</span>

<span class="c1"># 对话客户端
</span><span class="n">chat_client</span> <span class="o">=</span> <span class="n">ChatClient</span><span class="p">(</span>
    <span class="n">api_key</span><span class="o">=</span><span class="s">"YOUR_API_KEY"</span><span class="p">,</span>
    <span class="n">base_url</span><span class="o">=</span><span class="s">"https://api.dify.ai"</span>
<span class="p">)</span>

<span class="c1"># 发送消息
</span><span class="n">response</span> <span class="o">=</span> <span class="n">chat_client</span><span class="p">.</span><span class="n">create_message</span><span class="p">(</span>
    <span class="n">inputs</span><span class="o">=</span><span class="p">{},</span>
    <span class="n">query</span><span class="o">=</span><span class="s">"Hello"</span><span class="p">,</span>
    <span class="n">response_mode</span><span class="o">=</span><span class="s">"blocking"</span><span class="p">,</span>
    <span class="n">user</span><span class="o">=</span><span class="s">"user-1234"</span>
<span class="p">)</span>

<span class="c1"># 完成客户端(文本补全)
</span><span class="n">completion_client</span> <span class="o">=</span> <span class="n">CompletionClient</span><span class="p">(</span>
    <span class="n">api_key</span><span class="o">=</span><span class="s">"YOUR_API_KEY"</span><span class="p">,</span>
    <span class="n">base_url</span><span class="o">=</span><span class="s">"https://api.dify.ai"</span>
<span class="p">)</span>

<span class="n">response</span> <span class="o">=</span> <span class="n">completion_client</span><span class="p">.</span><span class="n">create</span><span class="p">(</span>
    <span class="n">inputs</span><span class="o">=</span><span class="p">{},</span>
    <span class="n">query</span><span class="o">=</span><span class="s">"Complete this:"</span><span class="p">,</span>
    <span class="n">response_mode</span><span class="o">=</span><span class="s">"blocking"</span><span class="p">,</span>
    <span class="n">user</span><span class="o">=</span><span class="s">"user-1234"</span>
<span class="p">)</span>
</code></pre></div></div>

<h3 id="2-javascript-sdk">2. JavaScript SDK</h3>

<div class="language-javascript highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">// 安装SDK</span>
<span class="c1">// npm install @difyai/dify-client</span>

<span class="k">import</span> <span class="p">{</span> <span class="nx">ChatClient</span> <span class="p">}</span> <span class="k">from</span> <span class="dl">'</span><span class="s1">@difyai/dify-client</span><span class="dl">'</span><span class="p">;</span>

<span class="c1">// 创建客户端</span>
<span class="kd">const</span> <span class="nx">client</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">ChatClient</span><span class="p">({</span>
  <span class="na">apiKey</span><span class="p">:</span> <span class="dl">'</span><span class="s1">YOUR_API_KEY</span><span class="dl">'</span><span class="p">,</span>
  <span class="na">baseUrl</span><span class="p">:</span> <span class="dl">'</span><span class="s1">https://api.dify.ai</span><span class="dl">'</span>
<span class="p">});</span>

<span class="c1">// 发送消息</span>
<span class="kd">const</span> <span class="nx">response</span> <span class="o">=</span> <span class="k">await</span> <span class="nx">client</span><span class="p">.</span><span class="nx">createMessage</span><span class="p">({</span>
  <span class="na">inputs</span><span class="p">:</span> <span class="p">{},</span>
  <span class="na">query</span><span class="p">:</span> <span class="dl">'</span><span class="s1">Hello</span><span class="dl">'</span><span class="p">,</span>
  <span class="na">responseMode</span><span class="p">:</span> <span class="dl">'</span><span class="s1">blocking</span><span class="dl">'</span><span class="p">,</span>
  <span class="na">user</span><span class="p">:</span> <span class="dl">'</span><span class="s1">user-1234</span><span class="dl">'</span>
<span class="p">});</span>

<span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="nx">response</span><span class="p">.</span><span class="nx">answer</span><span class="p">);</span>
</code></pre></div></div>

<h2 id="错误处理">错误处理</h2>

<h3 id="1-错误码">1. 错误码</h3>

<div class="language-yaml highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1"># 常见错误码</span>
<span class="na">错误码</span><span class="pi">:</span>
  <span class="na">400</span><span class="pi">:</span> <span class="s2">"</span><span class="s">请求参数错误"</span>
  <span class="na">401</span><span class="pi">:</span> <span class="s2">"</span><span class="s">认证失败"</span>
  <span class="na">403</span><span class="pi">:</span> <span class="s2">"</span><span class="s">权限不足"</span>
  <span class="na">404</span><span class="pi">:</span> <span class="s2">"</span><span class="s">资源不存在"</span>
  <span class="na">429</span><span class="pi">:</span> <span class="s2">"</span><span class="s">请求频率过高"</span>
  <span class="na">500</span><span class="pi">:</span> <span class="s2">"</span><span class="s">服务器内部错误"</span>
</code></pre></div></div>

<h3 id="2-错误处理示例">2. 错误处理示例</h3>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1"># Python错误处理
</span><span class="kn">from</span> <span class="nn">dify_client</span> <span class="kn">import</span> <span class="n">ChatClient</span>
<span class="kn">from</span> <span class="nn">dify_client.errors</span> <span class="kn">import</span> <span class="n">APIError</span>

<span class="k">try</span><span class="p">:</span>
    <span class="n">client</span> <span class="o">=</span> <span class="n">ChatClient</span><span class="p">(</span><span class="n">api_key</span><span class="o">=</span><span class="s">"YOUR_API_KEY"</span><span class="p">)</span>
    <span class="n">response</span> <span class="o">=</span> <span class="n">client</span><span class="p">.</span><span class="n">create_message</span><span class="p">(</span>
        <span class="n">query</span><span class="o">=</span><span class="s">"Hello"</span><span class="p">,</span>
        <span class="n">response_mode</span><span class="o">=</span><span class="s">"blocking"</span>
    <span class="p">)</span>
<span class="k">except</span> <span class="n">APIError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
    <span class="k">if</span> <span class="n">e</span><span class="p">.</span><span class="n">status_code</span> <span class="o">==</span> <span class="mi">401</span><span class="p">:</span>
        <span class="k">print</span><span class="p">(</span><span class="s">"API Key无效"</span><span class="p">)</span>
    <span class="k">elif</span> <span class="n">e</span><span class="p">.</span><span class="n">status_code</span> <span class="o">==</span> <span class="mi">429</span><span class="p">:</span>
        <span class="k">print</span><span class="p">(</span><span class="s">"请求频率过高,请稍后重试"</span><span class="p">)</span>
    <span class="k">else</span><span class="p">:</span>
        <span class="k">print</span><span class="p">(</span><span class="sa">f</span><span class="s">"错误: </span><span class="si">{</span><span class="n">e</span><span class="p">.</span><span class="n">message</span><span class="si">}</span><span class="s">"</span><span class="p">)</span>
</code></pre></div></div>

<h2 id="最佳实践">最佳实践</h2>

<h3 id="1-api使用建议">1. API使用建议</h3>

<div class="language-yaml highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1"># API使用建议</span>
<span class="na">使用建议</span><span class="pi">:</span>
  <span class="na">认证安全</span><span class="pi">:</span>
    <span class="pi">-</span> <span class="s">妥善保管API Key</span>
    <span class="pi">-</span> <span class="s">不要在客户端暴露API Key</span>
    <span class="pi">-</span> <span class="s">定期轮换API Key</span>
  
  <span class="na">错误处理</span><span class="pi">:</span>
    <span class="pi">-</span> <span class="s">实现完善的错误处理</span>
    <span class="pi">-</span> <span class="s">处理网络异常</span>
    <span class="pi">-</span> <span class="s">实现重试机制</span>
  
  <span class="na">性能优化</span><span class="pi">:</span>
    <span class="pi">-</span> <span class="s">使用流式响应提高体验</span>
    <span class="pi">-</span> <span class="s">合理设置超时时间</span>
    <span class="pi">-</span> <span class="s">使用连接池</span>
</code></pre></div></div>

<h3 id="2-集成示例">2. 集成示例</h3>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1"># 完整集成示例
</span><span class="kn">from</span> <span class="nn">dify_client</span> <span class="kn">import</span> <span class="n">ChatClient</span>
<span class="kn">import</span> <span class="nn">time</span>

<span class="k">class</span> <span class="nc">DifyIntegration</span><span class="p">:</span>
    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">api_key</span><span class="p">,</span> <span class="n">base_url</span><span class="o">=</span><span class="s">"https://api.dify.ai"</span><span class="p">):</span>
        <span class="bp">self</span><span class="p">.</span><span class="n">client</span> <span class="o">=</span> <span class="n">ChatClient</span><span class="p">(</span>
            <span class="n">api_key</span><span class="o">=</span><span class="n">api_key</span><span class="p">,</span>
            <span class="n">base_url</span><span class="o">=</span><span class="n">base_url</span>
        <span class="p">)</span>
    
    <span class="k">def</span> <span class="nf">chat</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">query</span><span class="p">,</span> <span class="n">conversation_id</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">user_id</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
        <span class="s">"""发送聊天消息"""</span>
        <span class="k">try</span><span class="p">:</span>
            <span class="n">response</span> <span class="o">=</span> <span class="bp">self</span><span class="p">.</span><span class="n">client</span><span class="p">.</span><span class="n">create_message</span><span class="p">(</span>
                <span class="n">inputs</span><span class="o">=</span><span class="p">{},</span>
                <span class="n">query</span><span class="o">=</span><span class="n">query</span><span class="p">,</span>
                <span class="n">response_mode</span><span class="o">=</span><span class="s">"blocking"</span><span class="p">,</span>
                <span class="n">conversation_id</span><span class="o">=</span><span class="n">conversation_id</span> <span class="ow">or</span> <span class="s">""</span><span class="p">,</span>
                <span class="n">user</span><span class="o">=</span><span class="n">user_id</span> <span class="ow">or</span> <span class="sa">f</span><span class="s">"user-</span><span class="si">{</span><span class="nb">int</span><span class="p">(</span><span class="n">time</span><span class="p">.</span><span class="n">time</span><span class="p">())</span><span class="si">}</span><span class="s">"</span>
            <span class="p">)</span>
            <span class="k">return</span> <span class="p">{</span>
                <span class="s">"success"</span><span class="p">:</span> <span class="bp">True</span><span class="p">,</span>
                <span class="s">"answer"</span><span class="p">:</span> <span class="n">response</span><span class="p">.</span><span class="n">answer</span><span class="p">,</span>
                <span class="s">"conversation_id"</span><span class="p">:</span> <span class="n">response</span><span class="p">.</span><span class="n">conversation_id</span>
            <span class="p">}</span>
        <span class="k">except</span> <span class="nb">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
            <span class="k">return</span> <span class="p">{</span>
                <span class="s">"success"</span><span class="p">:</span> <span class="bp">False</span><span class="p">,</span>
                <span class="s">"error"</span><span class="p">:</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span>
            <span class="p">}</span>
    
    <span class="k">def</span> <span class="nf">chat_stream</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">query</span><span class="p">,</span> <span class="n">conversation_id</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">user_id</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
        <span class="s">"""流式聊天"""</span>
        <span class="k">try</span><span class="p">:</span>
            <span class="k">for</span> <span class="n">chunk</span> <span class="ow">in</span> <span class="bp">self</span><span class="p">.</span><span class="n">client</span><span class="p">.</span><span class="n">create_message_stream</span><span class="p">(</span>
                <span class="n">inputs</span><span class="o">=</span><span class="p">{},</span>
                <span class="n">query</span><span class="o">=</span><span class="n">query</span><span class="p">,</span>
                <span class="n">response_mode</span><span class="o">=</span><span class="s">"streaming"</span><span class="p">,</span>
                <span class="n">conversation_id</span><span class="o">=</span><span class="n">conversation_id</span> <span class="ow">or</span> <span class="s">""</span><span class="p">,</span>
                <span class="n">user</span><span class="o">=</span><span class="n">user_id</span> <span class="ow">or</span> <span class="sa">f</span><span class="s">"user-</span><span class="si">{</span><span class="nb">int</span><span class="p">(</span><span class="n">time</span><span class="p">.</span><span class="n">time</span><span class="p">())</span><span class="si">}</span><span class="s">"</span>
            <span class="p">):</span>
                <span class="k">if</span> <span class="n">chunk</span><span class="p">.</span><span class="n">event</span> <span class="o">==</span> <span class="s">"message"</span><span class="p">:</span>
                    <span class="k">yield</span> <span class="n">chunk</span><span class="p">.</span><span class="n">answer</span>
        <span class="k">except</span> <span class="nb">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
            <span class="k">yield</span> <span class="sa">f</span><span class="s">"错误: </span><span class="si">{</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span><span class="si">}</span><span class="s">"</span>

<span class="c1"># 使用示例
</span><span class="n">dify</span> <span class="o">=</span> <span class="n">DifyIntegration</span><span class="p">(</span><span class="n">api_key</span><span class="o">=</span><span class="s">"YOUR_API_KEY"</span><span class="p">)</span>
<span class="n">result</span> <span class="o">=</span> <span class="n">dify</span><span class="p">.</span><span class="n">chat</span><span class="p">(</span><span class="s">"Hello, Dify!"</span><span class="p">)</span>
<span class="k">print</span><span class="p">(</span><span class="n">result</span><span class="p">[</span><span class="s">"answer"</span><span class="p">])</span>
</code></pre></div></div>

<h2 id="总结">总结</h2>

<p>Dify API使用指南的关键要点:</p>

<ol>
  <li><strong>API概述</strong>:RESTful API、完整功能、多语言SDK</li>
  <li><strong>API认证</strong>:API Key获取、认证方式</li>
  <li><strong>对话API</strong>:发送消息、流式响应、SDK示例</li>
  <li><strong>工作流API</strong>:运行工作流、状态查询</li>
  <li><strong>知识库API</strong>:上传文档、查询状态、删除文档</li>
  <li><strong>应用管理API</strong>:获取应用信息、对话历史</li>
  <li><strong>SDK使用</strong>:Python SDK、JavaScript SDK</li>
  <li><strong>错误处理</strong>:错误码、错误处理示例</li>
  <li><strong>最佳实践</strong>:使用建议、集成示例</li>
</ol>

<p>掌握API使用,可以将Dify功能集成到自己的应用中,实现灵活的AI能力集成。</p>

<p>转载请注明:<a href="http://zhouzhiyang.cn">周志洋的博客</a> » <a href="http://zhouzhiyang.cn/2025/06/Dify_API_Usage/">Dify API使用指南</a></p>



  </section>
</article>

<section>

            <div class="content-play">
              <p><a href="javascript:void(0)" onclick="dashangToggle()" class="dashang" title="打赏,支持一下">打赏一个呗</a></p>
              <div class="hide_box-play"></div>
              <div class="shang_box-play">
                <a class="shang_close-play" href="javascript:void(0)" onclick="dashangToggle()" title="关闭"><img src="/images/payimg/close.jpg" alt="取消" /></a>
                <div class="shang_tit-play">
                  <p>感谢您的支持,我会继续努力的!</p>
                </div>
                <div class="shang_payimg">
                    <img src="/images/payimg/alipayimg.jpg" alt="扫码支持" title="扫一扫" />
                </div>
              <div class="shang_payimg">    
                    <img src="/images/payimg/weipayimg.jpg" alt="扫码支持" title="扫一扫" />
                </div>
                <div class="pay_explain">扫码打赏,你说多少就多少</div>
                <div class="shang_payselect">
                  <div class="pay_item checked" data-id="alipay">
                    <span class="pay_logo"><img src="/images/payimg/alipay.jpg" alt="支付宝" /></span>
                  </div>
                  <div class="pay_item" data-id="weipay">
                    <span class="pay_logo"><img src="/images/payimg/wechat.jpg" alt="微信" /></span>
                  </div>
                </div>
                <div class="shang_info-play">
                  <p>打开<span id="shang_pay_txt">支付宝</span>扫一扫,即可进行扫码打赏哦</p>
                </div>
              </div>
            </div>
            <script type="text/javascript">
            function dashangToggle(){
              $(".hide_box-play").fadeToggle();
              $(".shang_box-play").fadeToggle();
            }
            </script>

            <div style="text-align:center;margin:50px 0; font:normal 14px/24px 'MicroSoft YaHei';"></div>

            <style type="text/css">
              .content-play{width:80%;margin-top: 20px;margin-bottom: 10px;height:40px;}
              .hide_box-play{z-index:999;filter:alpha(opacity=50);background:#666;opacity: 0.5;-moz-opacity: 0.5;left:0;top:0;height:99%;width:100%;position:fixed;display:none;}
              .shang_box-play{width:540px;height:540px;padding:10px;background-color:#fff;border-radius:10px;position:fixed;z-index:1000;left:50%;top:50%;margin-left:-280px;margin-top:-280px;border:1px dotted #dedede;display:none;}
              .shang_box-play img{border:none;border-width:0;}
              .dashang{display:block;width:100px;margin:5px auto;height:25px;line-height:25px;padding:10px;background-color:#E74851;color:#fff;text-align:center;text-decoration:none;border-radius:10px;font-weight:bold;font-size:16px;transition: all 0.3s;}
              .dashang:hover{opacity:0.8;padding:15px;font-size:18px;}
              .shang_close-play{float:right;display:inline-block;
                margin-right: 10px;margin-top: 20px;
              }
              .shang_logo{display:block;text-align:center;margin:20px auto;}
              .shang_tit-play{width: 100%;height: 75px;text-align: center;line-height: 66px;color: #a3a3a3;font-size: 16px;background: url('/images/payimg/cy-reward-title-bg.jpg');font-family: 'Microsoft YaHei';margin-top: 7px;margin-right:2px;}
              .shang_tit-play p{color:#a3a3a3;text-align:center;font-size:16px;}
              .shang_payimg{width:140px;padding:10px;padding-left: 80px; /*border:6px solid #EA5F00;**/margin:0 auto;border-radius:3px;height:140px;display:inline-block;}
              .shang_payimg img{display:inline-block;margin-right:10px;float:left;text-align:center;width:140px;height:140px; }
              .pay_explain{text-align:center;margin:10px auto;font-size:12px;color:#545454;}
              .shang_payselect{text-align:center;margin:0 auto;margin-top:40px;cursor:pointer;height:60px;width:500px;margin-left:110px;}
              .shang_payselect .pay_item{display:inline-block;margin-right:140px;float:left;}
              .shang_info-play{clear:both;}
              .shang_info-play p,.shang_info-play a{color:#C3C3C3;text-align:center;font-size:12px;text-decoration:none;line-height:2em;}
            </style>

       <ul class="pager">
        
        <li class="previous">
            <a href="/2025/06/Dify_Application_Development/" data-toggle="tooltip" data-placement="top" title="Dify应用开发基础">上一篇:  <span>Dify应用开发基础</span>
            </a>
        </li>
        
        
        <li class="next">
            <a href="/2025/06/Dify_Prompt_Engineering/" data-toggle="tooltip" data-placement="top" title="Dify提示词工程">下一篇:  <span>Dify提示词工程</span>
            </a>
        </li>
        
    </ul>
</section>

<section class="post-comments">

  
    <div id="disqus_thread"></div>
    <script>
    
    var disqus_config = function () {
        this.page.url = "http://zhouzhiyang.cn/2025/06/Dify_API_Usage/";
        this.page.identifier = "/2025/06/Dify_API_Usage/";
    };
    var disqus_shortname = 'zhouzhiyang';
    
    (function() { // DON'T EDIT BELOW THIS LINE
        var d = document, s = d.createElement('script');
        s.src = '//' + disqus_shortname + '.disqus.com/embed.js';
        s.setAttribute('data-timestamp', +new Date());
            (d.head || d.body).appendChild(s);
        })();
    </script>
    <noscript>要查看<a href="http://disqus.com/?ref_noscript"> Disqus </a>评论,请启用 JavaScript</noscript>
    
  

</section>


  
  
  请基于以上信息回答用户问题。

提示词优化技巧

1. 清晰度优化

# 清晰度优化
优化技巧:
  使用明确指令:
    - "请列出"而不是"可以列出"
    - "必须包含"而不是"最好包含"
  
  避免歧义:
    - 使用具体术语
    - 避免模糊表达
    - 提供示例说明
  
  结构化表达:
    - 使用列表
    - 使用标题
    - 使用分隔符

2. 准确性优化

# 准确性优化
优化技巧:
  提供约束:
    - 明确回答范围
    - 设置回答限制
    - 指定信息来源
  
  错误预防:
    - 说明常见错误
    - 提供正确示例
    - 设置验证规则
  
  质量控制:
    - 要求引用来源
    - 要求验证信息
    - 要求说明不确定性

3. 效率优化

# 效率优化
优化技巧:
  精简提示词:
    - 去除冗余内容
    - 合并相似指令
    - 使用简洁表达
  
  优先级明确:
    - 重要信息前置
    - 使用强调标记
    - 分层组织信息
  
  Token优化:
    - 减少不必要的上下文
    - 使用摘要代替全文
    - 优化变量使用

常见场景提示词

1. 问答场景

# 问答场景提示词
提示词模板: |
  你是一位专业的专家。
  
  基于以下知识库内容回答用户问题:
  
  
  用户问题:
  
  要求:
  1. 基于知识库内容回答,不要编造信息
  2. 如果知识库中没有相关信息,请明确说明
  3. 回答要准确、简洁、易懂
  4. 如果问题涉及多个方面,请分点回答

2. 内容生成场景

# 内容生成场景提示词
提示词模板: |
  你是一位专业的写作专家。
  
  请根据以下要求生成内容:
  - 主题:
  - 长度:字
  - 风格:
  - 目标受众:
  
  要求:
  1. 内容要有逻辑性和可读性
  2. 符合指定的风格和长度
  3. 适合目标受众阅读
  4. 使用Markdown格式输出

3. 代码生成场景

# 代码生成场景提示词
提示词模板: |
  你是一位经验丰富的开发专家。
  
  请根据以下要求生成代码:
  - 编程语言:
  - 功能需求:
  - 代码风格:
  
  要求:
  1. 代码要符合最佳实践
  2. 添加必要的注释
  3. 处理异常情况
  4. 代码要可运行和可测试

4. 数据分析场景

# 数据分析场景提示词
提示词模板: |
  你是一位数据分析专家。
  
  请分析以下数据:
  
  
  分析要求:
  1. 识别数据中的关键趋势
  2. 发现异常值和模式
  3. 提供数据洞察
  4. 给出建议和结论
  
  输出格式:
  - 数据概览
  - 关键发现
  - 趋势分析
  - 建议措施

提示词测试与优化

1. A/B测试

# A/B测试方法
测试方法:
  版本对比:
    - 创建多个提示词版本
    - 使用相同测试用例
    - 对比输出质量
  
  评估指标:
    - 准确性
    - 相关性
    - 完整性
    - 用户满意度
  
  迭代优化:
    - 基于测试结果优化
    - 持续改进提示词
    - 记录最佳实践

2. 提示词优化流程

# 优化流程
优化流程:
  1: "分析当前提示词问题"
  2: "设计优化方案"
  3: "创建新版本提示词"
  4: "进行测试对比"
  5: "评估优化效果"
  6: "应用最佳版本"
  7: "持续监控和改进"

最佳实践

1. 提示词设计原则

# 设计原则
设计原则:
  明确性: "指令清晰明确"
  完整性: "包含所有必要信息"
  结构化: "使用结构化格式"
  可测试: "易于测试和验证"
  可维护: "易于理解和修改"

2. 常见错误避免

# 常见错误
错误类型:
  过于模糊: "请处理这个"
  信息不足: "生成内容"
  格式混乱: "没有结构"
  缺乏约束: "没有限制条件"
  
  正确做法:
    - 使用具体指令
    - 提供完整信息
    - 结构化表达
    - 设置明确约束

总结

Dify提示词工程的关键要点:

  1. 提示词基础:提示词结构、提示词类型
  2. 提示词设计:角色定义、任务描述、输出格式
  3. 上下文管理:上下文构建、上下文优化
  4. 变量使用:变量引用、变量示例
  5. 优化技巧:清晰度、准确性、效率优化
  6. 常见场景:问答、内容生成、代码生成、数据分析
  7. 测试优化:A/B测试、优化流程
  8. 最佳实践:设计原则、错误避免

掌握提示词工程,可以显著提高AI应用的质量和用户体验。

转载请注明:周志洋的博客 » Dify提示词工程

打赏一个呗

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦