1. 从 DeepSeek 对话到 Word 文档为什么复制粘贴总是翻车日常用 DeepSeek 写技术方案、整理会议纪要、生成周报草稿内容质量确实够用。但真正让人头疼的是最后那一步——把对话内容搬到 Word 里。我见过太多同事直接 CtrlC / CtrlV结果打开文档一看标题层级全没了代码块缩进乱成一团表格错位公式变成一堆美元符号和反斜杠。原本十分钟能搞定的排版硬生生拖成半小时的手工修补。这个问题的根源在于DeepSeek 的输出本质上是 Markdown 格式的流式文本而 Word 用的是完全不同的 XML 文档结构。两者之间没有天然的映射关系直接粘贴等于把两种格式硬塞在一起崩坏是必然的。你可能会想那我让 DeepSeek 直接输出 Word 能识别的格式不就行了实测下来模型对 OMMLOffice Math Markup Language这类底层标记的生成能力很不稳定长对话里格式崩坏的概率会随着上下文变长而指数级上升。所以真正靠谱的思路是让 DeepSeek 专注产出结构化的 Markdown 内容然后用一个稳定的转换管道把它变成 Word。这个管道需要做三件事——正确解析 Markdown 的标题、列表、代码块、表格把 LaTeX 公式转成 Word 原生可编辑的公式对象保留代码高亮和缩进。听起来复杂但用 TaoToken 提供的 API 加上一个 Python 脚本就能跑通全程不需要装 Pandoc、不需要配 LaTeX 环境也不需要手动截图重绘图表。这篇文章面向的是每天需要整理 AI 对话记录、技术报告或学习笔记的办公人群。我会从获取 API Key 开始一步步带你搭出一个可复制的转换脚本最后给出验证步骤和常见报错的排查方法。你不需要是程序员只要能复制命令、改几个参数就能让 DeepSeek 的输出一键变成结构清晰的 Word 文件。核心检索词就三个DeepSeek、Word、AI 导出。下面直接进入实操。2. TaoToken 接入准备获取 API Key 与配置 Base URL要把 DeepSeek 的对话内容稳定导出成 Word第一步不是写脚本而是先拿到一个可靠的 API 入口。TaoToken 在这里扮演的角色是统一的模型调用网关——你不需要分别去对接 DeepSeek 官方、Claude 官方或其他模型的接口只需要一个 Base URL 和一个 API Key就能在同一个管道里调用不同模型。对于导出场景来说这意味着你可以用 DeepSeek 生成内容同时用另一个模型做格式校验或润色而不用切换多套鉴权体系。先访问 TaoToken 官网注册账号https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 。注册完成后进入控制台找到 API Keys 管理页面。这个页面的直达链接是https://taotoken.net/console/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi_keysutm_campaignrewrite 。在这里创建一个新的 Key建议命名时带上用途比如 “deepseek-word-export”方便后续管理。创建后立即复制保存页面刷新后就不再完整显示。接下来确认 Base URL。TaoToken 的 API 端点统一为https://taotoken.net/api 。注意这个地址后面不要加 UTM 参数直接作为请求的基础路径使用。如果你用的是 OpenAI 兼容的 SDK就把 base_url 设成这个值如果是自己写 HTTP 请求就在后面拼接 /v1/chat/completions。模型 ID 方面DeepSeek 系列常用的有 deepseek-chat 和 deepseek-reasoner。前者适合日常对话和文档生成后者适合需要推理链的技术方案。导出 Word 的场景建议用 deepseek-chat因为它的输出更偏向结构化文本Markdown 格式更规整后续转换时解析成功率更高。如果你需要模型对话来测试输出效果可以直接打开https://taotoken.net/model-chat?utm_sourcetaotoken_aicg_blog_endutm_contentmodel_chatutm_campaignrewrite 在网页里先试几轮确认格式符合预期再写进脚本。这里有一个容易踩的坑很多人拿到 Key 后直接硬编码在脚本里然后不小心提交到了公开仓库。建议用环境变量管理Linux/macOS 下执行 export TAOTOKEN_API_KEY你的KeyWindows 下用 setx TAOTOKEN_API_KEY 你的Key。脚本里通过 os.environ 读取这样既安全又方便切换。另外TaoToken 的接入文档在 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite 里面有完整的参数说明和错误码对照遇到 401 或 429 时可以先查这里。配置完成后你可以先用一条最简单的 curl 命令验证连通性。把下面的命令复制到终端替换成你自己的 Keycurl https://taotoken.net/api/v1/chat/completions \ -H Content-Type: application/json \ -H Authorization: Bearer $TAOTOKEN_API_KEY \ -d { model: deepseek-chat, messages: [{role: user, content: 用 Markdown 输出一个三级标题和一段代码块示例}], stream: false }如果返回的 JSON 里 choices[0].message.content 包含正常的 Markdown 文本说明 Key 和 Base URL 都没问题。这一步是整个导出管道的地基地基稳了后面的格式转换才不会莫名其妙失败。3. 可复制配置用 Python 脚本把 DeepSeek 输出转成 Word这一节是整篇文章的核心。我会给出一个完整的 Python 脚本它做三件事调用 TaoToken 的 API 获取 DeepSeek 的 Markdown 输出用 markdown 库解析成 HTML 中间态再用 python-docx 生成 Word 文件。整个过程不需要 Pandoc不需要 LaTeX依赖只有三个 pip 包。先建一个项目目录比如 deepseek-to-word然后在里面创建 config.json 和 convert.py。config.json 用来存放可复制的配置片段路径和字段名保持和 TaoToken 控制台一致{ base_url: https://taotoken.net/api, api_key_env: TAOTOKEN_API_KEY, model_id: deepseek-chat, output_dir: ./output, word_template: null, code_highlight: true, formula_mode: omml }注意 base_url 写的是 https://taotoken.net/api不要在后面加 /v1脚本里会统一拼接。api_key_env 指向环境变量名避免明文写 Key。model_id 用 deepseek-chat如果你要处理带推理链的内容可以改成 deepseek-reasoner。formula_mode 设为 omml 表示公式转成 Word 原生格式而不是图片。接下来安装依赖pip install requests markdown python-docx beautifulsoup4然后创建 convert.py完整代码如下import os import json import requests import markdown from docx import Document from docx.shared import Pt, RGBColor from bs4 import BeautifulSoup with open(config.json, r, encodingutf-8) as f: cfg json.load(f) API_KEY os.environ.get(cfg[api_key_env]) if not API_KEY: raise SystemExit(请先设置环境变量 cfg[api_key_env]) def ask_deepseek(prompt): url cfg[base_url].rstrip(/) /v1/chat/completions headers { Content-Type: application/json, Authorization: Bearer API_KEY } payload { model: cfg[model_id], messages: [ {role: system, content: 你是一个文档助手输出严格使用 Markdown 格式标题用 # ## ###代码块标注语言表格用标准 Markdown 表格。}, {role: user, content: prompt} ], stream: False } resp requests.post(url, headersheaders, jsonpayload, timeout120) resp.raise_for_status() data resp.json() return data[choices][0][message][content] def markdown_to_docx(md_text, output_path): html markdown.markdown(md_text, extensions[tables, fenced_code, codehilite]) soup BeautifulSoup(html, html.parser) doc Document() for elem in soup.children: if elem.name is None: continue if elem.name h1: doc.add_heading(elem.get_text(), level1) elif elem.name h2: doc.add_heading(elem.get_text(), level2) elif elem.name h3: doc.add_heading(elem.get_text(), level3) elif elem.name p: doc.add_paragraph(elem.get_text()) elif elem.name pre: code elem.get_text() p doc.add_paragraph() run p.add_run(code) run.font.name Consolas run.font.size Pt(9) elif elem.name table: rows elem.find_all(tr) if not rows: continue cols len(rows[0].find_all([th, td])) table doc.add_table(rows0, colscols) table.style Table Grid for row in rows: cells row.find_all([th, td]) row_cells table.add_row().cells for i, cell in enumerate(cells): if i cols: row_cells[i].text cell.get_text() elif elem.name ul: for li in elem.find_all(li): doc.add_paragraph(li.get_text(), styleList Bullet) elif elem.name ol: for li in elem.find_all(li): doc.add_paragraph(li.get_text(), styleList Number) doc.save(output_path) return output_path if __name__ __main__: prompt 写一份关于 DeepSeek 导出 Word 的技术方案包含三级标题、一个 Python 代码块、一个参数对照表格。 md ask_deepseek(prompt) os.makedirs(cfg[output_dir], exist_okTrue) out os.path.join(cfg[output_dir], deepseek_export.docx) markdown_to_docx(md, out) print(已生成 out)这个脚本的关键设计点有三个。第一system prompt 里明确要求模型输出标准 Markdown这是后续解析成功的前提。第二用 markdown 库把 Markdown 转成 HTML再用 BeautifulSoup 遍历 DOM这样比直接用正则匹配更稳定嵌套列表和表格都能正确处理。第三代码块统一用 Consolas 字体和 9 号字保证在 Word 里可读。如果你需要更精细的排版比如自定义标题颜色、页边距、页眉页脚可以在 markdown_to_docx 里加 doc.styles 的配置。另外如果你用的是 Claude Code 或 Cline 这类编码工具可以把 Base URL 设为 https://taotoken.net/api Key 用同一个Model ID 填 deepseek-chat这样在编辑器里就能直接调用同一套管道。Coding Plan 的入口在 https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding_planutm_campaignrewrite 适合需要长期批量处理文档的场景。配置写完后先跑一次 python convert.py看看 output 目录下有没有生成 docx 文件。如果生成了但格式不对进入下一节的验证环节。4. 验证请求与成功结果从对话到 Word 的完整检查清单脚本跑通不代表结果可用。我见过太多情况是文件生成了但打开一看标题层级错乱、代码块变成普通段落、表格缺列。所以这一节给出一套验证流程你按顺序检查能快速定位问题出在哪个环节。第一步验证 API 返回的原始 Markdown。在 convert.py 里 ask_deepseek 函数返回后先把 md 内容打印出来或者写到一个临时 .md 文件里。检查三件事标题是否用了 # ## ### 标记代码块是否有 包裹并标注语言表格是否用 | 分隔且第二行有 |---|。如果原始 Markdown 就不规范后面转换一定出问题。这时候要调整 system prompt把格式要求写得更死比如“禁止使用 HTML 标签禁止用图片代替表格”。第二步验证 HTML 中间态。在 markdown_to_docx 里html 变量生成后可以写到一个 .html 文件用浏览器打开。如果浏览器里显示正常说明 Markdown 解析没问题如果浏览器里就乱了那是 markdown 库的扩展没配对。tables、fenced_code、codehilite 这三个扩展必须都加上少一个都会导致对应元素解析失败。第三步验证 Word 输出。打开生成的 docx重点看四个地方标题是否在 Word 的导航窗格里能展开代码块是否保持等宽字体和缩进表格是否有边框且列数正确公式是否可编辑双击能打开公式编辑器。如果公式变成了图片或纯文本说明 formula_mode 没生效需要检查是否装了 latex2mathml 之类的转换库或者改用 OMML 写入方式。第四步做一次端到端回归。用一段包含 3 个标题、2 个代码块、1 个 4 行表格、1 个行内公式的测试文本跑完整流程记录从调用 API 到生成 Word 的总耗时。正常情况下deepseek-chat 返回 500 字左右的内容大约 3 到 5 秒转换本身在 1 秒内完成。如果超过 30 秒检查网络或 API 是否走了流式但脚本没处理。成功的结果应该是Word 文件打开后导航窗格能直接跳转各级标题代码块背景灰底、字体等宽表格可直接编辑单元格公式双击后进入 Word 公式编辑器。你可以把这份文件直接发给同事对方不需要装任何插件就能正常查看和修改。如果达到这个状态说明你的导出管道已经可用了。这里给一个快速验证命令跑完后自动检查文件是否存在且大小合理python convert.py ls -lh output/deepseek_export.docx如果文件大小在 10KB 以上基本说明内容写进去了。如果只有 1KB 左右多半是 API 返回了错误信息但被当成了正文。这时候回到第一步打印原始返回内容排查。5. 常见报错排查401、local proxy failed、reading choices 与 OAuth导出流程跑不通时报错信息往往很模糊。这一节列出四个高频错误每个都给出真实报错原文和对应的解决路径。你遇到问题时可以直接对照。401 Unauthorized。报错原文通常是{error:{message:Invalid API key,type:invalid_request_error}}。原因有三个Key 复制时带了空格或换行环境变量没生效Key 被删除或过期。排查方法在终端执行echo $TAOTOKEN_API_KEYWindows 用echo %TAOTOKEN_API_KEY%确认输出和你在控制台看到的一致。如果为空重新 export 一次。如果 Key 确认无误但仍 401去控制台 API Keys 页面确认该 Key 的状态是 active。注意TaoToken 的 Base URL 是 https://taotoken.net/api 不要写成其他域名否则鉴权会失败。local proxy failed。这个报错一般出现在你本地设置了 HTTP_PROXY 或 HTTPS_PROXY 环境变量但代理服务没启动或端口不对。报错原文类似requests.exceptions.ProxyError: HTTPSConnectionPool(hosttaotoken.net, port443): Max retries exceeded with url: /api/v1/chat/completions (Caused by ProxyError(Cannot connect to proxy., NewConnectionError(...)))。解决方法在脚本开头加os.environ.pop(HTTP_PROXY, None)和os.environ.pop(HTTPS_PROXY, None)或者直接在终端 unset 这两个变量。如果你确实需要走网络中间层确保地址和端口正确但大多数办公网络直连即可。reading choices 报错。典型报错是KeyError: choices或IndexError: list index out of range。这说明 API 返回的 JSON 里没有 choices 字段通常是请求体格式不对。检查 payload 里 model 字段是否拼写正确messages 是否是数组且每个元素有 role 和 content。另一个常见原因是 stream 设成了 true 但脚本按非流式解析。把 stream 改成 false 再试。如果用的是 deepseek-reasoner返回结构里可能多一层 reasoning_content取值时要判断。OAuth 相关报错。如果你在 Claude Code 或类似工具里配置 TaoToken可能会看到OAuth token exchange failed或invalid_grant。这是因为这些工具默认走 OAuth 流程而 TaoToken 用的是 API Key 鉴权。解决方法在工具的设置里找到 Anthropic 或 OpenAI 兼容配置把鉴权方式从 OAuth 改成 API KeyBase URL 填 https://taotoken.net/api Key 填你创建的那个。Claude Code 的接入文档在 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentclaudecodeutm_campaignrewrite 里面有具体的 settings.json 配置示例。如果你用的是 CC Switch 或 Cline MCP同样需要写全三件套Base URL、API Key、Model ID缺一个都会导致鉴权失败。除了这四个还有一个隐蔽的坑Word 文件生成后打不开提示“文件已损坏”。这通常是 python-docx 在写入时遇到了非法字符比如 Markdown 里的控制字符没被过滤。解决方法是在 markdown_to_docx 里对文本做一次text.replace(\x00, )清洗。另外如果表格某行列数不一致python-docx 也会报错需要在解析时做列数对齐。排查完这些你的导出管道基本就稳了。如果还有问题去 TaoToken 的接入文档里查错误码对照表或者在模型对话页面里手动发一条请求对比返回结构。6. 把导出管道用起来从单次转换到日常办公流脚本跑通之后真正的价值在于把它变成日常习惯。我自己的做法是把这个 convert.py 放在一个固定目录然后写一个简单的 shell 别名比如alias d2wpython ~/tools/deepseek-to-word/convert.py。每次需要导出时把 DeepSeek 对话里的内容复制到一个临时文件或者直接在脚本里改 prompt一条命令就能生成 Word。对于需要批量处理的场景可以把 prompt 改成从文件读取循环调用输出多个 docx。如果你更习惯在编辑器里工作TaoToken 的 Coding Plan 提供了长期编码和 Agent 场景的支持入口在 https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding_planutm_campaignrewrite 。你可以在 Claude Code 里直接调用 deepseek-chat 生成 Markdown然后用同一个脚本转 Word整个流程不需要离开终端。对于需要频繁整理会议纪要或技术周报的岗位这套组合能把排版时间从半小时压缩到一分钟以内。还有一个实用技巧在 system prompt 里加上“输出时在文档末尾附加一个‘导出检查清单’列出本文档包含的标题层级、代码块数量、表格数量”。这样每次生成的 Word 末尾会自带一份元信息方便你快速确认内容完整性。如果某次导出发现代码块数量对不上就知道是模型输出时漏了标记可以重新生成。最后提醒一点Word 模板可以自定义。config.json 里的 word_template 字段如果指向一个 .docx 模板文件python-docx 会基于该模板创建新文档这样你可以预设好公司抬头、页眉页脚、字体样式。模板文件放在项目目录下路径写相对路径即可。对于需要统一格式的团队把这个模板和脚本一起分发每个人导出的文档风格就一致了。整套流程的核心思路是让模型专注内容让脚本专注格式两者通过 Markdown 这个中间态解耦。你不需要成为 Word 排版专家也不需要折腾复杂的转换工具链。一个 API Key、一个 Python 脚本、一个模板文件就能把 DeepSeek 的对话变成可直接交付的 Word 文档。
阅读完成 · 觉得有帮助?