Nanbeige 4.1-3B实战教程添加战利品箱功能——收藏优质对话并导出为PDF1. 项目背景与功能概述Nanbeige 4.1-3B是一款具有独特像素游戏风格的AI对话前端它将传统的聊天界面转化为一场视觉化的冒险体验。在这个充满复古情怀的数字世界中我们经常会遇到令人惊艳的对话内容——那些充满智慧的回复、富有创意的故事或是解决实际问题的精妙方案。战利品箱功能的诞生正是为了保存这些珍贵的对话时刻将重要对话保存为可收藏的战利品支持添加自定义标签和注释一键导出为精美排版的PDF文档保留原始像素风格的视觉元素这个功能特别适合以下场景保存创意写作灵感记录技术问题解决方案收藏有趣的对话故事建立个人知识库2. 环境准备与项目结构2.1 系统要求Python 3.8Streamlit 1.25Nanbeige 4.1-3B模型已部署以下额外依赖库pip install fpdf2 pillow html2image2.2 项目结构在原有Nanbeige项目基础上我们需要添加以下文件nanbeige_rpg/ ├── assets/ # 新增存放战利品箱相关资源 │ ├── trophy_icon.png # 战利品箱图标 │ └── pixel_font.ttf # 像素风格字体 ├── utils/ │ └── pdf_export.py # 新增PDF导出功能 └── app.py # 主程序需添加战利品箱功能3. 战利品箱功能实现步骤3.1 前端界面改造在Streamlit界面中添加战利品箱相关元素# 在侧边栏添加战利品箱入口 with st.sidebar: if st.button( 打开战利品箱, use_container_widthTrue): st.session_state.show_trophy not st.session_state.get(show_trophy, False) # 战利品箱主界面 if st.session_state.get(show_trophy, False): st.markdown( style .trophy-box { border: 4px solid #2C2C2C; background-color: #FDF6E3; padding: 15px; margin-bottom: 20px; } /style , unsafe_allow_htmlTrue) # 显示已保存的对话 for idx, trophy in enumerate(st.session_state.get(trophies, [])): with st.container(): st.markdown(fdiv classtrophy-boxh3 {trophy[title]}/h3, unsafe_allow_htmlTrue) st.write(f {trophy[date]}) st.write(f️ 标签: {, .join(trophy[tags])}) st.markdown(---) st.write(trophy[content]) st.markdown(/div, unsafe_allow_htmlTrue) col1, col2 st.columns(2) with col1: if st.button(f导出PDF #{idx1}): export_to_pdf(trophy) with col2: if st.button(f删除 #{idx1}): del st.session_state.trophies[idx] st.rerun()3.2 对话保存功能实现添加保存当前对话到战利品箱的功能def save_to_trophy_box(title, tags, content): if trophies not in st.session_state: st.session_state.trophies [] trophy { title: title, tags: tags, content: content, date: datetime.now().strftime(%Y-%m-%d %H:%M) } st.session_state.trophies.append(trophy) st.success(对话已保存到战利品箱) # 在对话界面添加保存按钮 if st.button( 保存当前对话到战利品箱): title st.text_input(为这个对话命名, 未命名战利品) tags st.multiselect(添加标签, [创意, 技术, 故事, 建议, 其他]) if st.button(确认保存): save_to_trophy_box(title, tags, st.session_state.current_conversation)3.3 PDF导出功能实现创建utils/pdf_export.py文件实现PDF导出from fpdf import FPDF from PIL import Image import html2image import os class TrophyPDF(FPDF): def header(self): self.set_font(Arial, B, 16) self.cell(0, 10, Nanbeige 战利品箱, 0, 1, C) self.ln(10) def footer(self): self.set_y(-15) self.set_font(Arial, I, 8) self.cell(0, 10, fPage {self.page_no()}, 0, 0, C) def export_to_pdf(trophy_data): pdf TrophyPDF() pdf.add_page() pdf.set_font(Arial, size12) # 添加标题 pdf.set_font(Arial, B, 14) pdf.cell(0, 10, trophy_data[title], 0, 1) pdf.ln(5) # 添加元数据 pdf.set_font(Arial, size10) pdf.cell(0, 10, f日期: {trophy_data[date]}, 0, 1) pdf.cell(0, 10, f标签: {, .join(trophy_data[tags])}, 0, 1) pdf.ln(10) # 添加对话内容 pdf.set_font(Arial, size12) pdf.multi_cell(0, 10, trophy_data[content]) # 保存PDF filename ftrophy_{trophy_data[date].replace( , _).replace(:, )}.pdf pdf.output(filename) return filename4. 功能优化与进阶技巧4.1 保留像素风格视觉效果为了使导出的PDF保持原汁原味的像素风格我们可以使用像素字体# 在PDF类中添加 pdf.add_font(PixelFont, , assets/pixel_font.ttf, uniTrue) pdf.set_font(PixelFont, size12)对话气泡样式# 在导出前预处理对话内容 def format_conversation(content): lines content.split(\n) formatted [] for line in lines: if line.startswith(PLAYER:): formatted.append(f[玩家] {line[7:]}) elif line.startswith(NANBEIGE:): formatted.append(f[大贤者] {line[9:]}) else: formatted.append(line) return \n.join(formatted)4.2 批量导出与分享功能添加批量导出和分享功能# 批量导出所有战利品 if st.button( 导出所有战利品): zip_filename nanbeige_trophies.zip with zipfile.ZipFile(zip_filename, w) as zipf: for trophy in st.session_state.trophies: pdf_filename export_to_pdf(trophy) zipf.write(pdf_filename) os.remove(pdf_filename) with open(zip_filename, rb) as f: st.download_button( label下载战利品合集, dataf, file_namezip_filename, mimeapplication/zip )4.3 数据持久化存储将战利品箱数据保存到本地# 保存到JSON文件 def save_trophies_to_file(): with open(trophies.json, w) as f: json.dump(st.session_state.trophies, f) # 从文件加载 def load_trophies_from_file(): try: with open(trophies.json, r) as f: st.session_state.trophies json.load(f) except FileNotFoundError: st.session_state.trophies [] # 在应用启动时调用 load_trophies_from_file()5. 总结与下一步计划通过本教程我们成功为Nanbeige 4.1-3B像素冒险聊天终端添加了实用的战利品箱功能。现在您可以轻松收藏有价值的对话内容为每段对话添加标签和注释导出为精美的PDF文档永久保存批量管理您的对话收藏下一步可能的改进方向云同步功能将战利品箱内容同步到云端实现多设备访问高级搜索基于标签和内容的全文检索功能分享社区创建一个平台让用户分享他们的精彩对话模板系统为不同类型的对话提供导出模板技术笔记、故事创作等这个功能的添加不仅提升了Nanbeige的实用性也让AI对话体验更加完整和有成就感。就像在RPG游戏中收集稀有物品一样您现在可以收集和珍藏那些闪耀着智慧光芒的对话时刻了。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。
Nanbeige 4.1-3B实战教程:添加‘战利品箱’功能——收藏优质对话并导出为PDF
Nanbeige 4.1-3B实战教程添加战利品箱功能——收藏优质对话并导出为PDF1. 项目背景与功能概述Nanbeige 4.1-3B是一款具有独特像素游戏风格的AI对话前端它将传统的聊天界面转化为一场视觉化的冒险体验。在这个充满复古情怀的数字世界中我们经常会遇到令人惊艳的对话内容——那些充满智慧的回复、富有创意的故事或是解决实际问题的精妙方案。战利品箱功能的诞生正是为了保存这些珍贵的对话时刻将重要对话保存为可收藏的战利品支持添加自定义标签和注释一键导出为精美排版的PDF文档保留原始像素风格的视觉元素这个功能特别适合以下场景保存创意写作灵感记录技术问题解决方案收藏有趣的对话故事建立个人知识库2. 环境准备与项目结构2.1 系统要求Python 3.8Streamlit 1.25Nanbeige 4.1-3B模型已部署以下额外依赖库pip install fpdf2 pillow html2image2.2 项目结构在原有Nanbeige项目基础上我们需要添加以下文件nanbeige_rpg/ ├── assets/ # 新增存放战利品箱相关资源 │ ├── trophy_icon.png # 战利品箱图标 │ └── pixel_font.ttf # 像素风格字体 ├── utils/ │ └── pdf_export.py # 新增PDF导出功能 └── app.py # 主程序需添加战利品箱功能3. 战利品箱功能实现步骤3.1 前端界面改造在Streamlit界面中添加战利品箱相关元素# 在侧边栏添加战利品箱入口 with st.sidebar: if st.button( 打开战利品箱, use_container_widthTrue): st.session_state.show_trophy not st.session_state.get(show_trophy, False) # 战利品箱主界面 if st.session_state.get(show_trophy, False): st.markdown( style .trophy-box { border: 4px solid #2C2C2C; background-color: #FDF6E3; padding: 15px; margin-bottom: 20px; } /style , unsafe_allow_htmlTrue) # 显示已保存的对话 for idx, trophy in enumerate(st.session_state.get(trophies, [])): with st.container(): st.markdown(fdiv classtrophy-boxh3 {trophy[title]}/h3, unsafe_allow_htmlTrue) st.write(f {trophy[date]}) st.write(f️ 标签: {, .join(trophy[tags])}) st.markdown(---) st.write(trophy[content]) st.markdown(/div, unsafe_allow_htmlTrue) col1, col2 st.columns(2) with col1: if st.button(f导出PDF #{idx1}): export_to_pdf(trophy) with col2: if st.button(f删除 #{idx1}): del st.session_state.trophies[idx] st.rerun()3.2 对话保存功能实现添加保存当前对话到战利品箱的功能def save_to_trophy_box(title, tags, content): if trophies not in st.session_state: st.session_state.trophies [] trophy { title: title, tags: tags, content: content, date: datetime.now().strftime(%Y-%m-%d %H:%M) } st.session_state.trophies.append(trophy) st.success(对话已保存到战利品箱) # 在对话界面添加保存按钮 if st.button( 保存当前对话到战利品箱): title st.text_input(为这个对话命名, 未命名战利品) tags st.multiselect(添加标签, [创意, 技术, 故事, 建议, 其他]) if st.button(确认保存): save_to_trophy_box(title, tags, st.session_state.current_conversation)3.3 PDF导出功能实现创建utils/pdf_export.py文件实现PDF导出from fpdf import FPDF from PIL import Image import html2image import os class TrophyPDF(FPDF): def header(self): self.set_font(Arial, B, 16) self.cell(0, 10, Nanbeige 战利品箱, 0, 1, C) self.ln(10) def footer(self): self.set_y(-15) self.set_font(Arial, I, 8) self.cell(0, 10, fPage {self.page_no()}, 0, 0, C) def export_to_pdf(trophy_data): pdf TrophyPDF() pdf.add_page() pdf.set_font(Arial, size12) # 添加标题 pdf.set_font(Arial, B, 14) pdf.cell(0, 10, trophy_data[title], 0, 1) pdf.ln(5) # 添加元数据 pdf.set_font(Arial, size10) pdf.cell(0, 10, f日期: {trophy_data[date]}, 0, 1) pdf.cell(0, 10, f标签: {, .join(trophy_data[tags])}, 0, 1) pdf.ln(10) # 添加对话内容 pdf.set_font(Arial, size12) pdf.multi_cell(0, 10, trophy_data[content]) # 保存PDF filename ftrophy_{trophy_data[date].replace( , _).replace(:, )}.pdf pdf.output(filename) return filename4. 功能优化与进阶技巧4.1 保留像素风格视觉效果为了使导出的PDF保持原汁原味的像素风格我们可以使用像素字体# 在PDF类中添加 pdf.add_font(PixelFont, , assets/pixel_font.ttf, uniTrue) pdf.set_font(PixelFont, size12)对话气泡样式# 在导出前预处理对话内容 def format_conversation(content): lines content.split(\n) formatted [] for line in lines: if line.startswith(PLAYER:): formatted.append(f[玩家] {line[7:]}) elif line.startswith(NANBEIGE:): formatted.append(f[大贤者] {line[9:]}) else: formatted.append(line) return \n.join(formatted)4.2 批量导出与分享功能添加批量导出和分享功能# 批量导出所有战利品 if st.button( 导出所有战利品): zip_filename nanbeige_trophies.zip with zipfile.ZipFile(zip_filename, w) as zipf: for trophy in st.session_state.trophies: pdf_filename export_to_pdf(trophy) zipf.write(pdf_filename) os.remove(pdf_filename) with open(zip_filename, rb) as f: st.download_button( label下载战利品合集, dataf, file_namezip_filename, mimeapplication/zip )4.3 数据持久化存储将战利品箱数据保存到本地# 保存到JSON文件 def save_trophies_to_file(): with open(trophies.json, w) as f: json.dump(st.session_state.trophies, f) # 从文件加载 def load_trophies_from_file(): try: with open(trophies.json, r) as f: st.session_state.trophies json.load(f) except FileNotFoundError: st.session_state.trophies [] # 在应用启动时调用 load_trophies_from_file()5. 总结与下一步计划通过本教程我们成功为Nanbeige 4.1-3B像素冒险聊天终端添加了实用的战利品箱功能。现在您可以轻松收藏有价值的对话内容为每段对话添加标签和注释导出为精美的PDF文档永久保存批量管理您的对话收藏下一步可能的改进方向云同步功能将战利品箱内容同步到云端实现多设备访问高级搜索基于标签和内容的全文检索功能分享社区创建一个平台让用户分享他们的精彩对话模板系统为不同类型的对话提供导出模板技术笔记、故事创作等这个功能的添加不仅提升了Nanbeige的实用性也让AI对话体验更加完整和有成就感。就像在RPG游戏中收集稀有物品一样您现在可以收集和珍藏那些闪耀着智慧光芒的对话时刻了。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。