dify自动化批量询问LLM并且保存回复为文件
dify自动化批量询问LLM并且保存回复为文件在AI应用开发中我们常常需要批量调用大语言模型LLM来处理大量文本数据例如批量生成摘要、批量翻译文档、批量抽取结构化信息等。手动一条条输入不仅效率低下还容易出错。本文将从实战角度出发演示如何使用dify的API接口结合Python脚本实现自动化批量询问LLM并将所有回复保存为文件。### 准备工作dify与API密钥在开始之前请确保你已经部署了dify或使用云端dify并创建了一个应用如“通用对话”应用。从应用设置中获取API密钥API Key和应用IDApp ID。我们将使用dify的chat-messages接口流式/非流式进行批量调用。本示例使用Python 3.8需要安装requests库bashpip install requests### 核心思路循环调用与文件持久化批量询问的本质是准备一个待问列表例如从CSV、JSON或文本文件读取然后循环调用dify API每次传入不同的用户输入最后将每次返回的LLM回复写入一个文件中如.txt或.json。为了便于追踪我们还会记录输入与输出的对应关系。### 代码示例一简单批量询问并保存为文本文件以下脚本从questions.txt读取每行一个问题逐条发送给dify然后将回复追加到answers.txt中格式为“问题 - 回答”。pythonimport requestsimport json# 配置dify API信息DIFY_API_URL https://your-dify-domain.com/api/v1/chat-messages # 替换为你的dify地址API_KEY app-xxxxxxxxxxxxxxxxxxxxxxxxx # 替换为你的API Keydef ask_dify(question: str) - str: 调用dify的非流式chat接口返回LLM的回复文本。 headers { Authorization: fBearer {API_KEY}, Content-Type: application/json } payload { inputs: {}, # 可以传入变量如 {topic: question} query: question, response_mode: blocking, # 非流式等待完整回复 conversation_id: , # 每次新对话 user: batch-user } try: resp requests.post(DIFY_API_URL, headersheaders, jsonpayload, timeout60) resp.raise_for_status() data resp.json() # 解析回复文本dify blocking模式返回结构中的answer字段 answer data.get(answer, ) return answer except Exception as e: print(f请求失败: {e}) return [ERROR]def main(): # 1. 从文件读取问题列表每行一个问题 questions [] with open(questions.txt, r, encodingutf-8) as f: for line in f: line line.strip() if line: questions.append(line) print(f共读取到 {len(questions)} 个问题开始批量询问...) # 2. 逐条询问并写入结果文件 with open(answers.txt, w, encodingutf-8) as out: for idx, q in enumerate(questions, 1): print(f正在处理第 {idx} 个问题: {q[:30]}...) ans ask_dify(q) # 写入格式问题 - 回答 out.write(f问题 {idx}: {q}\n) out.write(f回答 {idx}: {ans}\n) out.write( * 50 \n) print(所有问题处理完毕结果已保存至 answers.txt)if __name__ __main__: main()使用说明- 在脚本同目录下创建questions.txt每行写一个问题例如什么是人工智能 请用中文解释什么是机器学习。 请写一首关于秋天的诗。- 运行脚本等待完成后查看answers.txt。### 代码示例二批量处理JSON数据并保存为结构化文件实际业务中问题可能附带元数据如ID、类别。以下示例从input.json读取结构化数据每条包含id和question字段调用dify后将回复与原数据组合保存为output.json便于后续分析。pythonimport requestsimport json# 配置dify API信息同上DIFY_API_URL https://your-dify-domain.com/api/v1/chat-messagesAPI_KEY app-xxxxxxxxxxxxxxxxxxxxxxxxxdef ask_dify(question: str) - str: 与示例一相同调用dify并返回回答文本 headers { Authorization: fBearer {API_KEY}, Content-Type: application/json } payload { inputs: {}, query: question, response_mode: blocking, conversation_id: , user: batch-user } try: resp requests.post(DIFY_API_URL, headersheaders, jsonpayload, timeout60) resp.raise_for_status() data resp.json() return data.get(answer, ) except Exception as e: print(f请求失败: {e}) return [ERROR]def main(): # 1. 读取JSON格式的输入数据 with open(input.json, r, encodingutf-8) as f: records json.load(f) # 预期格式: [{id: 1, question: xxx}, ...] print(f共处理 {len(records)} 条记录) results [] for idx, record in enumerate(records): q record.get(question, ) print(f处理记录 {idx1}: id{record.get(id)}, 问题{q[:30]}...) ans ask_dify(q) # 2. 构建输出记录保留原始字段添加answer output_record { id: record.get(id), question: q, answer: ans, status: success if ans ! [ERROR] else error } results.append(output_record) # 3. 保存为JSON文件 with open(output.json, w, encodingutf-8) as f: json.dump(results, f, ensure_asciiFalse, indent2) print(f处理完成结果已保存至 output.json共 {len(results)} 条)if __name__ __main__: main()input.json示例json[ {id: 101, question: 解释一下量子计算的基本原理。}, {id: 102, question: 写一段关于区块链的科普文字。}, {id: 103, question: 简述TCP/IP协议栈的四层结构。}]运行后output.json将包含每个问题的回答方便后续程序读取或导入数据库。### 进阶优化并发请求与错误重试当问题数量达到几百甚至上千时串行调用会非常慢。我们可以使用concurrent.futures或aiohttp进行并发请求。以下是一个简单的线程池并发版本基于示例一改造pythonfrom concurrent.futures import ThreadPoolExecutor, as_completedimport requests# ... 相同的ask_dify函数 ...def process_question(q: str, idx: int): print(f开始处理第 {idx} 个问题) ans ask_dify(q) return idx, q, ansdef main_concurrent(): questions [] with open(questions.txt, r, encodingutf-8) as f: for line in f: line line.strip() if line: questions.append(line) results [None] * len(questions) # 预分配列表保持顺序 with ThreadPoolExecutor(max_workers5) as executor: # 同时并发5个请求 futures {executor.submit(process_question, q, i): i for i, q in enumerate(questions)} for future in as_completed(futures): idx, q, ans future.result() results[idx] (q, ans) # 按原始索引存放 # 写入文件 with open(answers_concurrent.txt, w, encodingutf-8) as out: for idx, (q, ans) in enumerate(results): out.write(f问题 {idx1}: {q}\n) out.write(f回答 {idx1}: {ans}\n) out.write( * 50 \n) print(并发处理完成结果保存至 answers_concurrent.txt)注意并发数不宜过大以免被dify限流。建议根据dify的部署配置调整max_workers通常5-10比较安全。### 总结本文通过两个实战代码示例展示了如何使用Python调用dify API实现自动化批量询问LLM并将回复保存为文本文件或JSON文件。核心要点包括1.批量循环从文件或JSON读取问题列表逐条调用dify的chat-messages接口。2.结果持久化使用文本文件或JSON文件保存输入与输出便于后续查看或二次处理。3.错误处理通过try/except捕获网络异常避免单个失败中断整个流程。4.并发优化使用线程池提升处理效率适合大规模数据。实际生产环境中还可以加入进度条显示、失败重试机制指数退避、断点续传等功能。希望这篇文章能帮助你快速搭建自己的批量LLM调用工具节省重复劳动的时间。

相关新闻

AI汇报工具实战:Notion+Gamma+Tome高效组合

AI汇报工具实战:Notion+Gamma+Tome高效组合

1. 职场汇报的痛点与变革契机 每次季度汇报前夜的办公室灯火通明,是当代职场人最熟悉的场景。市场部的Lisa正在第17次修改PPT配色,技术部的王工反复调试着永远对不齐的数据图表,而管理层最常收到的却是"信息过载却重点模糊"的汇报材…

2026/10/16 23:22:13 阅读更多 →
分库分表后SQL全崩?这些坑我替你踩完了

分库分表后SQL全崩?这些坑我替你踩完了

分库分表后SQL全崩?这些坑我替你踩完了 还记得我们第一次把2亿条订单数据拆成16个分片段上线的那天,本来信心满满觉得性能肯定能起飞,结果上线刚十分钟告警就炸了:订单列表接口超时率冲到35%,订单count统计接口最长要1…

2026/10/15 15:27:53 阅读更多 →
C++ CRC16校验:从原理到查表法与硬件优化的工程实践

C++ CRC16校验:从原理到查表法与硬件优化的工程实践

1. 项目概述:为什么CRC16校验在C开发中如此重要?在嵌入式通信、文件传输、网络协议这些对数据可靠性要求极高的领域,数据在传输或存储过程中,一个比特的翻转都可能导致灾难性的后果。想象一下,你通过串口向一台工业设备…

2026/10/15 15:27:57 阅读更多 →

最新新闻

C++实现线性代数三大操作:行列式、矩阵乘法与求逆

C++实现线性代数三大操作:行列式、矩阵乘法与求逆

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 1:50:28 阅读更多 →
两节锂电池主动均衡设计:MP2642+PIC18F8520工业级实现

两节锂电池主动均衡设计:MP2642+PIC18F8520工业级实现

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 1:50:28 阅读更多 →
两串锂电池均衡方案:MP2642GR-Z与PIC18F86J10实战

两串锂电池均衡方案:MP2642GR-Z与PIC18F86J10实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 1:50:28 阅读更多 →
JMeter断言实战指南:类型选择、配置细节与失败排查

JMeter断言实战指南:类型选择、配置细节与失败排查

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 1:50:28 阅读更多 →
UE5蓝图不是拖拽玩具:可视化编程的编译机制与工业级实践

UE5蓝图不是拖拽玩具:可视化编程的编译机制与工业级实践

简介:本资源是一份面向UE5初学者与游戏开发入门者的系统性学习指南,聚焦蓝图编辑器的可视化逻辑构建能力,帮助零代码基础的开发者快速掌握Lumen光照、Nanite几何体等UE5核心特性下的交互实现。内容涵盖蓝图编辑器界面详解、变量创建、节点连接…

2026/10/17 1:50:28 阅读更多 →
Zabbix 社区模板实战:用 SNMP 模板 SNMP HP v1905 POE 监控 HP 1905 网管型 PoE 交换机的 26 个端口

Zabbix 社区模板实战:用 SNMP 模板 SNMP HP v1905 POE 监控 HP 1905 网管型 PoE 交换机的 26 个端口

【免费下载链接】community-templates Zabbix Community Templates repository 项目地址: https://gitcode.com/gh_mirrors/co/community-templates 点击查看 免费下载 本文围绕 Zabbix 社区模板仓库(community-templates)中的 SNMP HP v190…

2026/10/17 1:49:28 阅读更多 →

日新闻

DeepSeek选型与部署:V3/R1、Ollama、API全攻略

DeepSeek选型与部署:V3/R1、Ollama、API全攻略

简介:《DeepSeek使用方法.pdf》是一份面向DeepSeek入门及进阶用户的完整使用指南,重点围绕V3与R1两款模型的能力差异与适用场景展开,帮助读者根据任务类型与成本选择合适的模型。资源共1个PDF文件,压缩包大小约311KB,篇…

2026/10/17 0:00:25 阅读更多 →
200+Deepseek润色指令拆解:从底层原理到场景落地的完整指南

200+Deepseek润色指令拆解:从底层原理到场景落地的完整指南

简介:这是一份聚焦DeepSeek提示词优化的《200Deepseek润色指令》PDF文档,共收录两百余条可直接套用的润色指令,涵盖语法修正、风格统一、逻辑梳理、表达精炼等维度,并针对商务写作、学术论文、广告文案等场景给出差异化建议。文档…

2026/10/17 0:00:25 阅读更多 →
OpenCV轮廓法物体计数系统:轻量、可控、可落地的工业级实现

OpenCV轮廓法物体计数系统:轻量、可控、可落地的工业级实现

简介:本资源是一份基于OpenCV的本科课程设计完整报告,面向计算机视觉初学者、图像处理学习者及高校通信/信息类专业学生,解决物体智能计数与检测结果结构化记录的实际问题。项目覆盖图像预处理、轮廓检测、边界框绘制、轨迹栏交互式参数调节、…

2026/10/17 0:00:25 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/16 21:35:51 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/17 1:44:59 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/16 15:04:24 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 21:54:38 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 3:49:43 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 14:23:36 阅读更多 →