Chinese-Chatbot-PyTorch-Implementation
“小智”是一个基于 PyTorch 实现的中文聊天机器人,最初作为智能工单处理系统的子模块开发,用于在知识库无匹配时自动回复用户提问。它结合了 Seq2Seq 模型与注意力机制(Global Attention + dot 分数计算),使用青云语料库训练,能进行生活化对话。系统优先从 QA 知识库(如云服务器、域名等常见问题)中检索答案,未命中时才调用小智生成回复,适合客服场景下的兜底应答。项目结构清晰,包含数据预处理、模型训练、评估和交互测试全流程,适合 NLP 初学者学习或开发者二次开发。虽然模型规模不大、效果尚有提升空间,但完整实现了从语料清洗到部署交互的闭环,是理解对话系统实战的好案例。依赖库轻量(PyTorch 1.0+、jieba 等),支持灵活配置是否启用知识库,普通用户可直接体验对话,开发者可轻松修改语料或模型结构。作者为课程设计作品,充满学习热情,也欢迎社区反馈与支持。
使用场景
某中小型云服务商的技术支持团队,每天需处理大量客户关于服务器配置、域名解析等重复性咨询,人工客服疲于应对基础问题。
没有 Chinese-Chatbot-PyTorch-Implementation 时
- 客服人员需手动翻查知识库或文档,响应速度慢,高峰期常排队超5分钟
- 同一类技术问题(如“如何重置密码”)被反复回答,人力浪费严重
- 非工作时间无自动应答能力,客户凌晨提问只能干等,满意度下降
- 新员工培训成本高,需记忆上百条标准问答才能上岗
- 知识库更新后,客服常因不熟悉新内容给出错误回复,引发二次投诉
使用 Chinese-Chatbot-PyTorch-Implementation 后
- 系统优先匹配知识库精准答案,3秒内自动回复80%的常见技术问题,释放人工压力
- 无法匹配时调用聊天机器人生成自然语言回复,避免“查无此问”的尴尬冷场
- 7×24小时在线,深夜客户提问也能获得即时引导,工单转化率提升40%
- 新客服只需学习复杂case处理,基础问答由系统兜底,上岗培训周期缩短60%
- 知识库更新后机器人自动适配,结合语义理解减少误答,客户首次解决率提高至85%
Chinese-Chatbot-PyTorch-Implementation 用轻量级PyTorch架构实现了“知识库+生成式对话”双引擎,在有限资源下让中小团队也能拥有接近大厂的智能客服体验。
运行环境要求
未说明
未说明

快速开始
🍀 小智,又一个中文聊天机器人:yum:
💖 基于有趣的中文语料库 qingyun,由 @Doragd 同学编写的中文聊天机器人:snowman:
尽管她还不够完善:muscle:,也不够出色:paw_prints:
但她是我亲手 coding 出来的:sparkling_heart: ,所以
希望大家多多 star 支持:star: 这位 NLP(自然语言处理)初学者:runner: 和他的朋友🍀 小智
:rainbow: 背景
本项目是软件工程课程设计的一个子模块。我们的目标是开发一个智能客服工单处理系统。
该智能客服工单系统的实际工作流程如下:当用户向系统提问时,系统首先在知识库中查找是否存在相关问题;若存在,则返回对应答案,若用户不满意,可直接提交工单;若知识库中不存在相关问题,则调用此聊天机器人进行自动回复。
系统服务的场景类似于腾讯云的客服系统,客户多为咨询云服务器、域名等问题,因此知识库内容也主要围绕云服务器、域名等相关的咨询与故障处理(问题, 答案)集合。
系统的前端界面及前后端消息交互由另一位同学 @adjlyadv 完成,主要采用 React + Django 架构。
@Doragd 同学负责的是知识库的构建以及聊天机器人的编写、训练与测试。本仓库的内容即与此部分相关。
:star2: 测试效果
- 不使用知识库进行回答
- 使用知识库进行回答
- 整个系统效果:

:floppy_disk: 项目结构
│ .gitignore
│ config.py # 模型配置参数
│ corpus.pth # 已处理的数据集
│ dataload.py # 数据加载器(dataloader)
│ datapreprocess.py # 数据预处理
│ LICENSE
│ main.py
│ model.py
│ README.md
│ requirements.txt
│ train_eval.py # 训练、验证与测试
│
├─checkpoints
│ chatbot_0509_1437 # 已训练好的模型
│
├─clean_chat_corpus
│ qingyun.tsv # 语料库
│
├─QA_data
│ QA.db # 知识库
│ QA_test.py # 使用知识库时调用
│ stop_words.txt # 停用词
│ __init__.py
│
└─utils
beamsearch.py # 待完成(to do)
greedysearch.py # 贪婪搜索,用于测试
__init__.py
:couple: 依赖库
安装依赖:
$ pip install -r requirements.txt
:sparkling_heart: 开始使用
数据预处理(可省略)
$ python datapreprocess.py
对语料库进行预处理,生成 corpus.pth 文件(此处已上传 corpus.pth,故此步骤可跳过)
可修改参数:
# datapreprocess.py
corpus_file = 'clean_chat_corpus/qingyun.tsv' # 未处理的对话数据集
max_voc_length = 10000 # 词典最大长度
min_word_appear = 10 # 加入词典的词最小词频
max_sentence_length = 50 # 最大句子长度
save_path = 'corpus.pth' # 已处理对话数据集保存路径
使用方式
- 使用知识库
启用知识库时,需传入参数 use_QA_first=True。此时,对于输入的问题,系统会优先在知识库中匹配最佳问答对并返回;若未找到匹配项,才调用聊天机器人自动生成回复。
此处的知识库是从腾讯云官方文档中爬取整理的常见问题与答案(共100条),仅用于测试!
$ python main.py chat --use_QA_first=True
- 不使用知识库
由于课程设计需求,加入了腾讯云问答对,但对聊天机器人本身而言并非必需。通常使用时设为 use_QA_first=False(该参数默认值为 True):
$ python main.py chat --use_QA_first=False
- 使用默认参数
$ python main.py chat
- 退出聊天:输入
exit、quit或q均可退出
其他可配置参数
详见 config.py 文件说明。
如需传入新参数,只需在命令行中指定即可,例如:
$ python main.py chat --model_ckpt='checkpoints/chatbot_0509_1437' --use_QA_first=False
上述命令指定了加载已训练模型的路径及是否使用知识库。
:cherry_blossom: 技术实现
语料库
| 语料名称 | 语料数量 | 语料来源说明 | 语料特点 | 语料样例 | 是否已分词 |
|---|---|---|---|---|---|
| qingyun(青云语料) | 10W | 某聊天机器人交流群 | 相对不错,生活化 | Q:看来你很爱钱 A:噢是吗?那么你也差不多了 | 否 |
Seq2Seq(序列到序列模型)
- Encoder(编码器):两层双向 GRU(门控循环单元)
- Decoder(解码器):双层单向 GRU
Attention(注意力机制)
- Global attention(全局注意力),采用 dot 方式计算分数
- 参考文献:https://arxiv.org/abs/1508.04025
:construction_worker: 模型训练与评估
$ python train_eval.py train [--options]
定量评估部分尚未完成,计划采用困惑度(perplexity)作为衡量指标,目前仅能生成句子并人工评估质量。
$ python train_eval.py eval [--options]
:sob: 踩坑记录与总结
- 最深刻的体会是:“对深度学习知识的了解”与“真正理解”之间隔着 N 个编程实现的距离。虽然理论大家都懂,但实际编码时总会遇到各种问题:从数据集处理、公式实现、参数调优,到 GPU 配置等等。
- 本次实践过程先是跟随 PyTorch Tutorial 的 Chatbot 部分跑通代码,然后更换语料库、处理语料、按类风格重构代码,接着进入无尽 Debug 阶段,踩了不少坑,尤其是张量移至 GPU 时的各种问题——不清楚
to(device)到底移动了哪些内容。- 经测试发现,
model.to(device)仅将模型参数移至 GPU,不会移动类中定义的成员张量。因此,若在forward方法中定义了新张量,需手动移动。 - 移动顺序也很重要:应先将模型移至 GPU,再定义优化器;且移动方法应为
model = model.to(device),别忘了赋值。 - 显存不足是常见问题,写代码时需注意内存利用率,尽量减少重复张量。
- 更换中文语料后,训练一直不收敛,最终发现是
batch_size设置过小。实际上,在显存允许的情况下,batch_size应尽可能大。之前虽看过相关资料,但写代码时完全忘了这回事——说明当时对 mini-batch 的理解不够深入,只有真正动手编码才能刻骨铭心(至少 bug 让人刻骨铭心)。 - 另一个问题是误以为
torch.long是高精度浮点类型,结果其实是 int64,导致一个 bug 花了很久才发现。这提醒我们:一定要认真阅读文档。 - 最终收获是熟悉了如何从零实现一个模型,这点非常重要。
- 经测试发现,
- 实际上,当前模型效果并不理想。抛开模型本身的问题,我发现分词质量会极大影响生成句子的质量,而目前我甚至还未设置停用词,导致出现一些奇怪的结果。
- 另一个问题是在处理变长序列时,若使用自定义损失函数,容易出现不稳定情况,目前仍在研究官方 API。
- 此次实践还暴露出我对某些参数理解不够深入,不知如何调整,仍需补充理论知识。
- 模型评估部分还需继续完善。
:pray: 致谢
- PyTorch 官方 Chatbot 教程
- 提供中文语料库
- 内容与官方 Chatbot 教程一致,但附有详细代码注释
- 模型写法与编码习惯参考
常见问题
相似工具推荐
stable-diffusion-webui
stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。
everything-claude-code
everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上
ComfyUI
ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。
NextChat
NextChat 是一款轻量且极速的 AI 助手,旨在为用户提供流畅、跨平台的大模型交互体验。它完美解决了用户在多设备间切换时难以保持对话连续性,以及面对众多 AI 模型不知如何统一管理的痛点。无论是日常办公、学习辅助还是创意激发,NextChat 都能让用户随时随地通过网页、iOS、Android、Windows、MacOS 或 Linux 端无缝接入智能服务。 这款工具非常适合普通用户、学生、职场人士以及需要私有化部署的企业团队使用。对于开发者而言,它也提供了便捷的自托管方案,支持一键部署到 Vercel 或 Zeabur 等平台。 NextChat 的核心亮点在于其广泛的模型兼容性,原生支持 Claude、DeepSeek、GPT-4 及 Gemini Pro 等主流大模型,让用户在一个界面即可自由切换不同 AI 能力。此外,它还率先支持 MCP(Model Context Protocol)协议,增强了上下文处理能力。针对企业用户,NextChat 提供专业版解决方案,具备品牌定制、细粒度权限控制、内部知识库整合及安全审计等功能,满足公司对数据隐私和个性化管理的高标准要求。
ML-For-Beginners
ML-For-Beginners 是由微软推出的一套系统化机器学习入门课程,旨在帮助零基础用户轻松掌握经典机器学习知识。这套课程将学习路径规划为 12 周,包含 26 节精炼课程和 52 道配套测验,内容涵盖从基础概念到实际应用的完整流程,有效解决了初学者面对庞大知识体系时无从下手、缺乏结构化指导的痛点。 无论是希望转型的开发者、需要补充算法背景的研究人员,还是对人工智能充满好奇的普通爱好者,都能从中受益。课程不仅提供了清晰的理论讲解,还强调动手实践,让用户在循序渐进中建立扎实的技能基础。其独特的亮点在于强大的多语言支持,通过自动化机制提供了包括简体中文在内的 50 多种语言版本,极大地降低了全球不同背景用户的学习门槛。此外,项目采用开源协作模式,社区活跃且内容持续更新,确保学习者能获取前沿且准确的技术资讯。如果你正寻找一条清晰、友好且专业的机器学习入门之路,ML-For-Beginners 将是理想的起点。
ragflow
RAGFlow 是一款领先的开源检索增强生成(RAG)引擎,旨在为大语言模型构建更精准、可靠的上下文层。它巧妙地将前沿的 RAG 技术与智能体(Agent)能力相结合,不仅支持从各类文档中高效提取知识,还能让模型基于这些知识进行逻辑推理和任务执行。 在大模型应用中,幻觉问题和知识滞后是常见痛点。RAGFlow 通过深度解析复杂文档结构(如表格、图表及混合排版),显著提升了信息检索的准确度,从而有效减少模型“胡编乱造”的现象,确保回答既有据可依又具备时效性。其内置的智能体机制更进一步,使系统不仅能回答问题,还能自主规划步骤解决复杂问题。 这款工具特别适合开发者、企业技术团队以及 AI 研究人员使用。无论是希望快速搭建私有知识库问答系统,还是致力于探索大模型在垂直领域落地的创新者,都能从中受益。RAGFlow 提供了可视化的工作流编排界面和灵活的 API 接口,既降低了非算法背景用户的上手门槛,也满足了专业开发者对系统深度定制的需求。作为基于 Apache 2.0 协议开源的项目,它正成为连接通用大模型与行业专有知识之间的重要桥梁。