news 2026/7/8 0:25:03

如何导出DeepSeek-R1推理结果?数据保存教程

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
如何导出DeepSeek-R1推理结果?数据保存教程

如何导出DeepSeek-R1推理结果?数据保存教程

1. 引言

1.1 业务场景描述

在本地部署大语言模型的实践中,推理结果的可追溯性与后续分析能力是衡量系统实用性的重要指标。尤其对于 DeepSeek-R1-Distill-Qwen-1.5B 这类专注于逻辑推理任务的轻量级模型,用户常需将对话历史、中间推理步骤及最终结论进行结构化保存,用于知识归档、教学演示或工程复现。

然而,默认的 Web 界面交互模式仅提供实时响应功能,缺乏内置的数据导出机制。本文将围绕这一实际需求,详细介绍如何从本地运行的 DeepSeek-R1 推理服务中高效、完整地导出推理结果,并实现持久化存储。

1.2 痛点分析

当前使用过程中存在以下典型问题:

  • 对话内容无法自动记录,关闭页面即丢失上下文;
  • 多轮推理过程难以回溯,不利于复杂问题的调试与优化;
  • 缺乏标准化输出格式,不便与其他系统集成或做进一步处理;
  • 手动复制粘贴效率低,易出错且不适用于批量操作。

1.3 方案预告

本文将提供一套完整的解决方案,涵盖:

  • 后端 API 数据捕获方法
  • 前端日志监听与导出功能增强
  • JSON/CSV 格式化保存策略
  • 自动化脚本辅助批量导出

通过本教程,您将能够构建一个支持“输入→推理→导出→归档”闭环的本地推理系统。

2. 技术方案选型

2.1 可行路径对比

方案实现难度数据完整性实时性是否需要修改源码
修改前端 JS 直接添加导出按钮中等
调用后端 REST API 获取响应流否(若API开放)
拦截浏览器 LocalStorage 缓存延迟
使用 Python 脚本调用模型接口并写入文件完整可控

推荐选择:Python 脚本调用 + 文件写入
理由:兼容性强、易于自动化、适合长期运行和批量任务。

2.2 最终技术栈确定

我们采用如下组合方案以兼顾灵活性与稳定性:

  • 通信协议:HTTP POST 请求调用/v1/chat/completions接口
  • 数据格式:JSON 结构化存储原始响应,CSV 用于表格化展示
  • 执行环境:Python 3.9+ +requests+pandas
  • 存储方式:按时间戳命名的本地文件系统存储

该方案无需修改原项目代码,仅依赖公开接口即可完成全流程控制。

3. 实现步骤详解

3.1 环境准备

确保已成功部署 DeepSeek-R1-Distill-Qwen-1.5B 并启动服务。通常可通过以下命令启动:

python app.py --model_name_or_path deepseek-ai/deepseek-r1-distill-qwen-1.5b \ --device cpu \ --port 8080

确认服务正常运行后,访问http://localhost:8080可打开 Web 界面。

安装所需依赖库:

pip install requests pandas openpyxl

3.2 核心代码实现

以下为完整的推理请求与结果导出脚本:

import requests import json import pandas as pd from datetime import datetime import os # 配置参数 BASE_URL = "http://localhost:8080/v1/chat/completions" HEADERS = {"Content-Type": "application/json"} def query_model(prompt, history=None): """ 向本地模型发送请求并获取响应 """ payload = { "model": "deepseek-r1-distill-qwen-1.5b", "messages": [{"role": "user", "content": prompt}], "temperature": 0.7, "max_tokens": 1024, "stream": False } if history: payload["messages"] = history + payload["messages"] try: response = requests.post(BASE_URL, headers=HEADERS, json=payload) response.raise_for_status() return response.json() except requests.exceptions.RequestException as e: print(f"请求失败: {e}") return None def save_to_json(data, filename): """保存为 JSON 文件""" with open(filename, 'w', encoding='utf-8') as f: json.dump(data, f, ensure_ascii=False, indent=2) print(f"✅ JSON 文件已保存至: {filename}") def save_to_csv(records, filename): """保存为 CSV 文件""" df = pd.DataFrame(records) df.to_csv(filename, index=False, encoding='utf-8-sig') print(f"✅ CSV 文件已保存至: {filename}") def main(): # 创建输出目录 output_dir = "exported_results" os.makedirs(output_dir, exist_ok=True) timestamp = datetime.now().strftime("%Y%m%d_%H%M%S") json_file = os.path.join(output_dir, f"reasoning_result_{timestamp}.json") csv_file = os.path.join(output_dir, f"reasoning_summary_{timestamp}.csv") # 示例问题集 questions = [ "鸡兔同笼,头共35个,脚共94只,问鸡和兔各有多少只?", "请用数学归纳法证明:1 + 2 + ... + n = n(n+1)/2", "以下代码是否有逻辑错误?如果有,请指出并修复:\nfor i in range(len(arr)):\n if arr[i] == target:\n return i\nreturn -1" ] all_records = [] for idx, q in enumerate(questions, 1): print(f"\n🔍 正在处理第 {idx} 个问题...") result = query_model(q) if result: choice = result.get("choices", [{}])[0] content = choice.get("message", {}).get("content", "") # 构建记录项 record = { "question_id": idx, "question": q, "response": content, "created_at": datetime.now().isoformat(), "model": result.get("model"), "usage": result.get("usage") } all_records.append(record) # 单条 JSON 记录追加(可选) with open(json_file, 'w' if idx == 1 else 'a', encoding='utf-8') as f: if idx == 1: json.dump([record], f, ensure_ascii=False, indent=2) else: f.write(",\n") json.dump(record, f, ensure_ascii=False) else: print(f"⚠️ 第 {idx} 个问题请求失败") # 封装完整 JSON 数组 with open(json_file, 'r+', encoding='utf-8') as f: content = f.read() f.seek(0) f.write("[\n" + content.strip()[1:-1] + "\n]") # 保存 CSV 汇总 save_to_csv(all_records, csv_file) if __name__ == "__main__": main()

3.3 代码解析

请求构造说明
  • 使用标准 OpenAI 兼容接口/v1/chat/completions
  • 设置stream=False保证一次性获取完整响应
  • temperature=0.7保持适度创造性,避免过于死板
数据结构设计

每条记录包含:

  • question_id: 序号标识
  • question: 原始输入问题
  • response: 模型返回的完整推理文本
  • created_at: 时间戳
  • model: 模型名称(用于多模型管理)
  • usage: token 使用统计(便于成本评估)
文件命名策略

采用YYYYMMDD_HHMMSS时间戳命名,避免覆盖冲突,同时支持按时间排序检索。

4. 实践问题与优化

4.1 常见问题及解决方案

问题现象原因分析解决方法
请求超时CPU 推理较慢,长文本生成耗时高增加timeout=60参数,或分批处理
中文乱码文件编码未指定使用encoding='utf-8-sig'写 CSV
JSON 格式错误多次写入导致非合法数组先写列表再整体封装
接口拒绝连接服务未开启或端口占用检查netstat -an | grep 8080

4.2 性能优化建议

  1. 异步并发请求:使用asyncio+aiohttp提升批量处理效率
  2. 增量导出模式:结合数据库(如 SQLite)实现断点续传
  3. 压缩归档:对大量历史数据启用.zip.parquet存储
  4. 日志分级:区分 debug / info / error 日志级别,便于排查

示例:启用超时重试机制

from tenacity import retry, stop_after_attempt, wait_exponential @retry(stop=stop_after_attempt(3), wait=wait_exponential(multiplier=1, max=10)) def robust_query(prompt): return query_model(prompt)

5. 总结

5.1 实践经验总结

通过本次实践,我们验证了在无图形界面支持的情况下,依然可以通过编程方式高效获取 DeepSeek-R1 的推理结果,并实现结构化存储。关键收获包括:

  • 利用 OpenAI 兼容 API 可快速对接本地模型服务;
  • JSON + CSV 双格式输出满足不同层级的数据使用需求;
  • 脚本化导出流程具备良好的可复用性和扩展性。

5.2 最佳实践建议

  1. 定期备份导出目录,防止意外删除重要推理记录;
  2. 建立命名规范,如project_topic_date.json,提升文件管理效率;
  3. 结合版本控制工具(Git),对关键推理过程进行版本追踪。

获取更多AI镜像

想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/6 20:52:29

ESC-50环境声音分类数据集:从零开始的完整使用指南

ESC-50环境声音分类数据集:从零开始的完整使用指南 【免费下载链接】ESC-50 项目地址: https://gitcode.com/gh_mirrors/esc/ESC-50 ESC-50数据集是一个专门用于环境声音分类的标准化数据集,包含2000个经过标注的音频记录,为机器学习…

作者头像 李华
网站建设 2026/7/7 18:02:27

MAA明日方舟助手游戏自动化完整教程指南

MAA明日方舟助手游戏自动化完整教程指南 【免费下载链接】MaaAssistantArknights 一款明日方舟游戏小助手 项目地址: https://gitcode.com/GitHub_Trending/ma/MaaAssistantArknights 想要告别手动重复操作,享受智能化的游戏体验吗?MAA明日方舟助…

作者头像 李华
网站建设 2026/7/7 23:40:32

通义千问Embedding模型显存不足?GGUF-Q4优化部署案例解析

通义千问Embedding模型显存不足?GGUF-Q4优化部署案例解析 1. 背景与挑战:中等规模Embedding模型的部署瓶颈 随着大模型在检索增强生成(RAG)、语义搜索、文档去重等场景中的广泛应用,高质量文本向量化模型的需求日益增…

作者头像 李华
网站建设 2026/7/2 23:53:22

面向教学场景的Multisim元器件图标使用规范指南

从一根电阻说起:为什么你的Multisim电路图总被学生“看不懂”?你有没有遇到过这样的场景?讲完共射放大电路,信心满满地打开仿真演示,结果学生举手提问:“老师,这个三极管箭头怎么朝外&#xff1…

作者头像 李华
网站建设 2026/7/5 4:27:05

yamldiff终极指南:快速识别YAML文件差异的完整解决方案

yamldiff终极指南:快速识别YAML文件差异的完整解决方案 【免费下载链接】yamldiff A CLI tool to diff two YAML files. 项目地址: https://gitcode.com/gh_mirrors/ya/yamldiff 在配置驱动开发的现代应用环境中,YAML文件已成为不可或缺的配置载体…

作者头像 李华
网站建设 2026/7/1 12:43:29

万物识别推理脚本怎么改?python 推理.py定制化修改指南

万物识别推理脚本怎么改?Python 推理.py 定制化修改指南 1. 背景与使用场景 随着多模态AI技术的发展,图像理解能力在实际业务中变得愈发重要。阿里开源的“万物识别-中文-通用领域”模型,具备强大的中文语义理解能力和广泛的物体识别覆盖范…

作者头像 李华