ChatGLM-6B开源模型教程:如何导出对话历史为Markdown/PDF便于归档
2026/3/26 0:28:13 网站建设 项目流程

ChatGLM-6B开源模型教程:如何导出对话历史为Markdown/PDF便于归档

1. 为什么需要导出对话历史

你有没有遇到过这样的情况:和ChatGLM-6B聊了整整一小时,从技术方案讨论到创意文案打磨,中间生成了十几段高质量回复,结果一刷新页面,所有内容全没了?或者想把某次关键对话整理成文档发给同事,却发现Web界面只支持复制粘贴,格式混乱、图片丢失、代码块错位?

这正是很多用户在使用ChatGLM-6B智能对话服务时的真实痛点。虽然Gradio界面交互友好,但默认不提供对话归档功能——而实际工作中,我们真正需要的不只是“即时问答”,更是可追溯、可复用、可分享的知识资产

本教程不讲模型原理,也不堆砌参数配置,而是聚焦一个非常具体、高频、实用的需求:如何把你在ChatGLM-6B中产生的每一段对话,原样、整洁、带格式地保存下来。我们将手把手带你实现两种最常用、最稳妥的归档方式:

  • 导出为结构清晰、支持代码高亮的Markdown文件(适合技术团队内部沉淀)
  • 转换为排版专业、打印友好的PDF文件(适合汇报、交付、存档)

整个过程无需修改源码、不依赖外部API、不安装复杂工具,全部基于镜像已预装环境完成,10分钟内即可上手。

2. 对话数据在哪?先理解ChatGLM-6B的存储机制

在动手导出前,得先搞清楚:你的对话到底存在哪?不是浏览器缓存,也不是远程服务器数据库——它就安静地躺在你正在运行的这个镜像里,以最轻量、最可控的方式被管理。

2.1 对话历史的实际存储位置

ChatGLM-6B WebUI(Gradio版本)本身不主动写入磁盘,但本镜像做了关键增强:所有用户对话均实时记录在本地日志文件中。路径明确、格式规范、无需额外权限:

/var/log/chatglm-conversation.log

这不是普通文本日志,而是结构化JSONL(JSON Lines)格式——每行一条完整对话记录,包含时间戳、用户输入、模型回复、会话ID等字段。打开看看长什么样:

{"timestamp":"2024-05-12T14:22:36","session_id":"sess_abc123","user":"请帮我写一个Python函数,计算斐波那契数列前N项","assistant":"def fibonacci(n):\n if n <= 0:\n return []\n elif n == 1:\n return [0]\n elif n == 2:\n return [0, 1]\n fib = [0, 1]\n for i in range(2, n):\n fib.append(fib[-1] + fib[-2])\n return fib"}

关键提示:该日志由app.py中的日志模块自动写入,每次点击「发送」即追加一行。即使WebUI意外关闭,只要服务进程在运行,记录就不会丢失。

2.2 为什么不用浏览器控制台或复制粘贴?

  • 浏览器控制台看到的是渲染后的HTML片段,含大量Gradio样式标签,粘贴后格式全乱
  • 手动复制会丢失代码缩进、数学公式LaTeX、多级列表等结构信息
  • 无法批量导出历史会话,更无法按日期/关键词筛选

而直接读取chatglm-conversation.log,你拿到的是原始、干净、结构化的数据源——这才是可靠归档的起点。

3. 方案一:一键导出为Markdown文件(推荐新手)

Markdown是技术人的通用语言。导出为.md文件后,你可以:
✔ 在VS Code、Typora等编辑器中完美渲染
✔ 直接提交到Git仓库做版本管理
✔ 拖入Obsidian、Logseq等笔记软件构建知识图谱
✔ 用Pandoc转成Word、HTML、EPUB等任意格式

3.1 准备工作:确认环境已就绪

本镜像已预装所有依赖,无需额外安装。只需确认两点:

# 检查Python版本(需3.9+) python3 --version # 应输出 Python 3.10.x 或更高 # 检查核心库是否存在 python3 -c "import json, re, datetime; print(' 依赖齐全')"

3.2 执行导出:三行命令搞定

在镜像终端中,依次执行以下命令(复制粘贴即可):

# 创建归档目录 mkdir -p ~/chatglm-archives # 运行导出脚本(镜像内置,无需下载) python3 /ChatGLM-Service/scripts/export_to_md.py \ --log-path /var/log/chatglm-conversation.log \ --output-dir ~/chatglm-archives \ --include-timestamp # 查看生成结果 ls -lh ~/chatglm-archives/

执行后,你会在~/chatglm-archives/下看到类似这样的文件:

chatglm_20240512_142236.md # 文件名含日期+时间,避免覆盖 chatglm_20240512_150842.md

3.3 生成的Markdown长什么样?

打开任意一个.md文件,内容结构如下(已做脱敏处理):

# ChatGLM-6B 对话归档 **会话时间**:2024-05-12 14:22:36 **会话ID**:sess_abc123 --- ### 用户提问 请帮我写一个Python函数,计算斐波那契数列前N项 ### 模型回复 ```python def fibonacci(n): if n <= 0: return [] elif n == 1: return [0] elif n == 2: return [0, 1] fib = [0, 1] for i in range(2, n): fib.append(fib[-1] + fib[-2]) return fib

代码块自动识别语言并高亮
中文标点、数学符号、特殊字符完整保留
每次对话独立分隔,用---清晰区隔

### 3.4 进阶技巧:按条件筛选导出 不想导出全部历史?可以加参数精准控制: ```bash # 只导出今天(2024-05-12)的对话 python3 /ChatGLM-Service/scripts/export_to_md.py \ --log-path /var/log/chatglm-conversation.log \ --output-dir ~/chatglm-archives \ --date-filter "2024-05-12" # 只导出包含关键词“API”的对话 python3 /ChatGLM-Service/scripts/export_to_md.py \ --log-path /var/log/chatglm-conversation.log \ --output-dir ~/chatglm-archives \ --keyword "API"

4. 方案二:转换为专业PDF文档(适合交付场景)

当对话需要正式汇报、客户交付、或长期存档时,PDF是无可争议的标准。本镜像采用无头Chrome + Markdown转PDF方案,确保:

  • 保留所有Markdown样式(标题层级、代码高亮、表格、数学公式)
  • 自动添加页眉页脚(含时间戳、页码、水印)
  • 支持A4纸张、边距、字体大小等专业排版设置
  • 生成速度快(平均3秒/页),不卡顿

4.1 安装PDF生成依赖(仅首次需运行)

镜像已预装Chrome,但需补充PDF转换工具链:

# 安装weasyprint(轻量、纯Python、无需X11) pip3 install weasyprint # 验证安装 weasyprint --version # 应输出 62.0 或更高

注意:此步骤仅需执行一次。后续所有PDF导出均无需重复安装。

4.2 将Markdown转为PDF:两步完成

假设你已按3.2节导出chatglm_20240512_142236.md,现在将其转为PDF:

# 步骤1:进入归档目录 cd ~/chatglm-archives # 步骤2:执行转换(镜像内置脚本) python3 /ChatGLM-Service/scripts/md_to_pdf.py \ --input chatglm_20240512_142236.md \ --output chatglm_20240512_142236.pdf \ --title "ChatGLM-6B 技术方案讨论记录" \ --author "AI工程组"

几秒钟后,同目录下即生成chatglm_20240512_142236.pdf。用任意PDF阅读器打开,效果如下:

  • 封面页含自定义标题、作者、生成时间
  • 正文严格遵循Markdown语义:H1/H2标题自动分级、代码块带行号与语法高亮
  • 每页底部显示「第X页 共Y页」及时间水印
  • 表格自动适配A4宽度,文字不溢出

4.3 批量转换:一次处理多个Markdown

如果当天有10个对话需要归档,不必逐个执行:

# 批量转换当前目录下所有.md文件为.pdf for mdfile in *.md; do pdfname="${mdfile%.md}.pdf" python3 /ChatGLM-Service/scripts/md_to_pdf.py \ --input "$mdfile" \ --output "$pdfname" \ --title "ChatGLM-6B 日常对话归档" \ --author "个人知识库" done # 查看结果 ls -lh *.pdf

5. 实用技巧与避坑指南

再好的工具,用错方式也会事倍功半。以下是我们在真实场景中踩过的坑,帮你省下至少2小时调试时间:

5.1 日志文件过大怎么办?自动轮转策略

默认日志不自动切割,长时间运行后可能达GB级别。启用镜像内置的日志轮转:

# 编辑日志配置 nano /etc/logrotate.d/chatglm # 确保包含以下内容(镜像已预设,可跳过) /var/log/chatglm-conversation.log { daily missingok rotate 30 compress delaycompress notifempty }

启用后,每天0点自动将当日日志重命名为chatglm-conversation.log.1,最多保留30天。

5.2 导出时中文乱码?统一编码设置

极少数终端环境可能因locale导致中文显示异常。强制指定UTF-8:

# 导出前执行(临时生效) export PYTHONIOENCODING=utf-8 # 或永久生效(写入.bashrc) echo 'export PYTHONIOENCODING=utf-8' >> ~/.bashrc source ~/.bashrc

5.3 如何让PDF支持中文显示?(关键!)

WeasyPrint默认字体不包含中文字体,会导致PDF中文字显示为方框。本镜像已预装思源黑体,并在脚本中自动调用:

# 验证字体是否可用 fc-list | grep "Source Han" # 应输出:/usr/share/fonts/opentype/noto/NotoSansCJKsc-Regular.otf: Noto Sans CJK SC:style=Regular # 若未找到,手动安装(极少发生) apt-get update && apt-get install -y fonts-noto-cjk

5.4 安全提醒:敏感信息过滤

导出的文件可能含API Key、内部路径等敏感内容。镜像提供自动脱敏选项:

# 导出时自动过滤常见敏感模式(密钥、token、密码) python3 /ChatGLM-Service/scripts/export_to_md.py \ --log-path /var/log/chatglm-conversation.log \ --output-dir ~/chatglm-archives \ --anonymize

启用后,脚本会自动将sk-xxxtoken-xxxpassword: xxx等替换为[REDACTED]

6. 总结:让每一次对话都成为可积累的知识资产

回顾整个流程,你其实只做了三件事:
1⃣理解数据源头:对话就存在/var/log/chatglm-conversation.log里,结构清晰、随时可取;
2⃣选择归档格式:用export_to_md.py生成Markdown,用md_to_pdf.py转为PDF,各取所需;
3⃣掌握进阶控制:按日期筛选、关键词过滤、批量处理、自动脱敏——让归档真正服务于工作流。

这背后没有复杂的模型微调,也没有烧脑的系统集成。它只是回归技术本质:把确定的、可重复的操作,封装成简单可靠的命令。当你下次和ChatGLM-6B完成一次深度对话,不再担心“一刷新就消失”,而是自然地敲下python3 export_to_md.py,看着整齐的.md文件出现在归档目录里——那一刻,你已经把AI对话,真正变成了自己的生产力工具。

获取更多AI镜像

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

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询