Dify 如何用代码节点精简 Promp

张开发
2026/6/28 12:01:28 15 分钟阅读
Dify 如何用代码节点精简 Promp
在 Dify 工作流中使用“代码节点”是精简 Prompt 最直接、有效的手段。其核心思路是将原本需要大模型在 Prompt 中处理的“数据清洗”和“逻辑判断”工作转移到代码节点中预先完成只将最终结果传递给大模型。 核心思路从“描述”转向“结果”与其在 Prompt 中详细描述复杂的规则不如在代码节点中计算出最终结果再让大模型基于结果进行决策。传统方式 (高 Token 消耗):Prompt:​ 请根据以下规则判断用户意图1. 包含‘退款’、‘退货’为售后2. 包含‘多少钱’、‘价格’为价格咨询…… 用户问题是{{query}}优化方式 (低 Token 消耗):代码节点:​ 预先运行规则判断输出intent 售后。Prompt:​ 用户意图是 {{intent}}请据此回答{{query}}通过这种方式可以将成百上千的 Token 消耗降至个位数。️ 实战案例1. 意图分类用代码替代冗长规则将复杂的 if-else 逻辑在代码节点中实现Prompt 只负责传递结果。代码节点 (Python):def main(query: str) - dict: q query.lower() if 多少钱 in q or 价格 in q or 费用 in q: intent 价格咨询 elif 退款 in q or 退货 in q or 换货 in q: intent 售后 elif 你好 in q or 在吗 in q: intent 问候 else: intent 其他 return {intent: intent}LLM 节点 Prompt:你是一个客服助手。用户意图是 {{intent}}请据此回答{{query}}2. 数据压缩聚合信息后再输入当处理日志、表格等长文本时先在代码节点进行聚合和摘要避免将原始数据全部塞入 Prompt。代码节点 (Python):def main(logs: list) - dict: # logs 为 HTTP 请求返回的日志列表 summary {} for log in logs: level log.get(level, unknown) summary[level] summary.get(level, 0) 1 # 构造简洁的文本描述 text 日志统计结果 .join([f{k}级日志 {v} 条 for k, v in summary.items()]) return {summary: text}LLM 节点 Prompt:请根据以下摘要生成一份运维报告{{summary}}3. 文本清洗移除无关内容在文本进入大模型前使用代码节点清洗掉 HTML 标签、多余空格等噪声。代码节点 (Python):import re def main(html_text: str) - dict: # 移除 HTML 标签 text re.sub(r[^], , html_text) # 压缩多余空白符 text re.sub(r\s, , text).strip() return {clean_text: text}LLM 节点 Prompt:请对以下内容进行摘要{{clean_text}}4. 历史摘要压缩对话上下文对于多轮对话将冗长的历史记录压缩成一条摘要而非全部传入。代码节点 (Python):def main(history: list) - dict: # history 为对话历史列表每项包含 role 和 content user_queries [item[content] for item in history if item[role] user] summary 用户主要关心 .join(user_queries[-3:]) # 仅保留最近3条 return {history_summary: summary}LLM 节点 Prompt:对话历史摘要{{history_summary}}\n\n请回答当前问题{{query}}5. 条件路由用代码替代复杂 Prompt 判断将“是否调用知识库”、“是否触发特定工具”等逻辑用代码实现简化 LLM 节点的 Prompt。代码节点 (Python):def main(query: str) - dict: q query.lower() use_kb any(kw in q for kw in [政策, 规定, 流程, 制度]) return {use_kb: use_kb}后续流程:​ 根据use_kb的值使用“条件分支”节点决定是走“知识检索LLM”路径还是直接走“LLM”路径。✨ 最佳实践总结数据预处理在代码节点完成清洗、格式转换、聚合统计等工作。规则前置将明确的 if-else 规则在代码中实现输出结果供 LLM 使用。信息压缩将长文本、列表、历史记录等压缩为短文本或结构化摘要。逻辑分流用代码节点进行条件判断简化 LLM 节点的 Prompt 和后续流程分支。通过以上方法你可以显著减少 Prompt 的长度从而有效控制 Token 消耗提升响应速度并降低成本。

更多文章