在Dify工作流中添加One-shot提示遇变量问题,求解决方案
问题解答
思路正确性
你的思路完全没问题。One-shot提示通过提供样本输入输出,能让模型明确理解结构化信息的提取规则和格式要求,大幅降低发票信息提取的歧义,非常适配这类场景。
解决方法
1. 调整样本文件的使用方式(核心方案)
不要将样本文件设置为工作流启动时的用户输入变量,而是作为工作流的内部静态资源处理:
- 在Dify工作流中添加「文件读取」节点,直接上传你的样本PDF和样本JSON文件,将它们作为工作流内置的固定资源;
- 对样本PDF执行和目标PDF完全一致的「文本提取」操作,得到样本文本内容;
- 按照One-shot提示的格式,将样本文本、样本JSON与目标PDF提取的文本拼接成模型的输入prompt,示例格式如下:
请从发票文本中提取发票ID、客户参考编号信息,严格返回JSON格式: 样本输入: [样本PDF提取的文本内容] 样本输出: {"发票ID": "INV-2024-001", "客户参考编号": "REF-12345"} 目标文本: [目标PDF提取的文本内容] - 将拼接后的完整prompt传递给Ollama模型即可。
2. 排查“文件必填”/“类型未知”错误的具体原因
如果坚持要把样本设为变量(不推荐),需注意:
- 确保变量类型设置为「文件」,且在工作流节点中先完成文本提取操作,再将提取后的内容传递给模型,不能直接把原始文件对象传给模型(模型无法识别未解析的文件);
- 检查工作流的节点输入输出映射,确认样本文件的处理结果已正确关联到模型节点的输入字段,没有出现未解析的变量引用。
3. 简化替代方案
如果样本内容固定无需频繁更新,可直接将样本提取后的文本和样本JSON复制粘贴到模型的prompt模板中,完全跳过文件变量的配置,操作更简单高效。
内容的提问来源于stack exchange,提问作者shackdown
相关产品推荐
相关产品推荐

