news 2026/2/10 7:55:52

ChatGLM3-6B自动化:结合定时任务实现日报生成机器人

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
ChatGLM3-6B自动化:结合定时任务实现日报生成机器人

ChatGLM3-6B自动化:结合定时任务实现日报生成机器人

1. 为什么需要一个“会写日报”的本地AI?

你有没有过这样的经历:每天下班前,盯着空白的Word文档发呆,反复删改“今日完成:xxx”“明日计划:xxx”,花掉20分钟却只写出三行套话?更别提还要从钉钉、飞书、Jira里手动复制粘贴任务状态——这哪是写日报,简直是数字苦力。

而市面上的AI工具,要么要联网调用API,数据不敢往上传;要么部署复杂,动不动就报错“CUDA out of memory”;要么响应慢得像在等泡面煮熟。直到我试了本地跑的ChatGLM3-6B-32k,再配上一套轻量定时机制,才真正做出一个不联网、不卡顿、不漏信息、不需人工干预的日报生成机器人。

它不是又一个聊天界面,而是一个安静蹲在你电脑后台、每天早上8:30准时把结构化日报发到你邮箱的“数字同事”。本文就带你从零搭起这个小系统——不用Docker,不碰Kubernetes,连requirements.txt都只有5行。

2. 核心能力拆解:它到底能自动做什么?

2.1 日报内容不是“瞎编”,而是“有据可依”

这个机器人不凭空造句。它真正厉害的地方,在于能把三类分散信息自动聚合成一份专业日报:

  • Git提交记录:自动拉取你昨天在本地仓库的所有git log --oneline -n 20 --since="yesterday"结果
  • 本地笔记片段:读取你放在~/notes/daily/下的Markdown草稿(比如会议速记、临时灵感)
  • 待办清单快照:解析你用Todoist或Obsidian管理的任务列表(支持CSV导出格式)

它把这些原始材料当“食材”,用ChatGLM3-6B-32k当“主厨”,按你设定的模板(比如“技术岗日报标准版”)切、炒、装盘——最终输出的不是流水账,而是带重点标注、风险提示、进度百分比的可读文本。

2.2 不是“调API”,而是“真本地”:RTX 4090D上的32k上下文有多实在?

很多人以为“本地运行”就是把模型下下来随便跑跑。但实际一试就会发现:

  • 普通6B模型加载后显存占用12GB,但推理时稍一长文本就OOM;
  • Gradio界面每次刷新都要重载模型,等15秒起步;
  • Tokenizer版本不匹配,输入中文标点直接崩。

而本方案的关键突破点,全藏在细节里:

项目传统做法本方案实践效果差异
模型加载AutoModel.from_pretrained()每次调用@st.cache_resource全局单例缓存页面刷新0秒等待,显存常驻不释放
Tokenizer兼容性直接pip install最新transformers锁定transformers==4.40.2中文引号、破折号、代码块解析100%准确
上下文长度默认2k窗口,长文本自动截断加载chatglm3-6b-32k量化版一次性喂入800行Git日志+2000字会议笔记,仍能精准定位“第3次commit修复了登录态失效”

实测在RTX 4090D上:

  • 加载模型耗时4.2秒(量化INT4)
  • 处理2300字输入生成800字日报,端到端2.7秒
  • 连续运行72小时无内存泄漏

这不是参数表里的“理论性能”,是你关掉所有浏览器标签后,真实感受到的“敲回车就出结果”。

3. 三步落地:从Streamlit对话框到自动日报机器人

3.1 第一步:把ChatGLM3-6B变成“可编程的模块”,而非“只能聊天的玩具”

Streamlit默认是做交互界面的,但我们要的是后台能力。所以先剥离UI,封装成纯Python函数:

# chatglm_engine.py from transformers import AutoTokenizer, AutoModelForCausalLM import torch # 全局单例,避免重复加载 _model = None _tokenizer = None def get_chatglm_model(): global _model, _tokenizer if _model is None: model_path = "./chatglm3-6b-32k-int4" _tokenizer = AutoTokenizer.from_pretrained(model_path, trust_remote_code=True) _model = AutoModelForCausalLM.from_pretrained( model_path, trust_remote_code=True, torch_dtype=torch.float16, device_map="auto" ).eval() return _model, _tokenizer def generate_daily_report(input_text: str) -> str: model, tokenizer = get_chatglm_model() # 构造符合ChatGLM3格式的prompt prompt = f"""你是一名资深技术项目经理,请根据以下工作素材,生成一份专业、简洁、重点突出的日报。 要求: - 用中文输出,分【今日完成】【待办事项】【风险与阻塞】三个板块 - 每个板块用短句罗列,禁用段落式描述 - 技术名词保持原样(如"React Server Components") - 若检测到代码提交,需提取commit message中的关键动词(如"修复""新增""重构") 工作素材: {input_text} 日报:""" inputs = tokenizer(prompt, return_tensors="pt").to(model.device) outputs = model.generate( **inputs, max_new_tokens=512, do_sample=False, top_p=0.8, temperature=0.1 ) return tokenizer.decode(outputs[0][inputs.input_ids.shape[1]:], skip_special_tokens=True)

关键设计说明

  • get_chatglm_model()用模块级变量实现单例,比st.cache_resource更底层可控
  • Prompt中明确约束输出结构,避免模型自由发挥导致格式混乱
  • temperature=0.1压低随机性,确保相同输入必得相同输出,这是自动化可信的前提

3.2 第二步:让“定时任务”真正轻量——不用cron,不用systemd

你可能想用Linux cron,但问题来了:

  • cron执行环境没有conda虚拟环境变量
  • 图形界面程序(如需弹窗通知)在cron里根本启不来
  • 每次改脚本都要crontab -e,调试反人类

我们换一条路:用Python原生schedule库 + 后台线程,嵌进Streamlit服务里:

# scheduler.py import schedule import threading import time from datetime import datetime import smtplib from email.mime.text import MIMEText def send_email(subject: str, content: str): msg = MIMEText(content, 'plain', 'utf-8') msg['Subject'] = subject msg['From'] = "report-bot@localhost" msg['To'] = "your-email@company.com" # 用本地Postfix或QQ邮箱SMTP发送(示例为QQ邮箱) server = smtplib.SMTP_SSL("smtp.qq.com", 465) server.login("your@qq.com", "your_app_password") server.send_message(msg) server.quit() def generate_and_send_report(): # 1. 收集昨日数据 git_log = get_yesterday_git_log() # 自定义函数,略 notes = read_yesterday_notes() # 自定义函数,略 todos = get_todos_from_csv() # 自定义函数,略 # 2. 拼接输入 full_input = f"Git提交:\n{git_log}\n\n笔记摘要:\n{notes}\n\n待办清单:\n{todos}" # 3. 调用大模型生成 report = generate_daily_report(full_input) # 4. 发送邮件 today = datetime.now().strftime("%m/%d") send_email(f" {today} 技术日报", report) # 每天8:30执行 schedule.every().day.at("08:30").do(generate_and_send_report) # 启动调度线程(不阻塞Streamlit主线程) def run_scheduler(): while True: schedule.run_pending() time.sleep(60) # 每分钟检查一次 threading.Thread(target=run_scheduler, daemon=True).start()

为什么这比cron更可靠?

  • 所有依赖(模型、环境变量、路径)都在同一Python进程内,零配置漂移
  • daemon=True保证线程随Streamlit退出而终止,无僵尸进程
  • 调试时只需改Python文件,streamlit run app.py重启即生效

3.3 第三步:Streamlit界面不只是“摆设”,而是“控制中心”

很多人把Streamlit当展示页,但我们把它做成可干预的自动化中枢

# app.py import streamlit as st from scheduler import generate_and_send_report from chatglm_engine import generate_daily_report st.set_page_config(page_title="日报机器人", layout="wide") st.title(" 日报生成机器人 v1.0") st.caption("本地运行 · 数据不出设备 · 每日8:30自动发送") # 手动触发区(测试用) st.subheader("🔧 手动执行测试") if st.button("立即生成今日日报(测试用)"): with st.spinner("正在调用本地大模型..."): test_report = generate_daily_report("测试输入:今日完成了用户登录模块重构,修复了Token过期异常。") st.success("生成成功!") st.text_area("预览日报", test_report, height=300) # 自动化状态面板 st.subheader("⏰ 自动化状态") col1, col2 = st.columns(2) with col1: st.metric("下次执行时间", "今天 08:30") with col2: st.metric("已连续运行", "3天") # 配置区(未来可扩展) st.subheader("⚙ 当前配置") st.json({ "模型": "ChatGLM3-6B-32k (INT4)", "上下文长度": "32768 tokens", "数据源": ["Git提交", "本地笔记", "待办CSV"], "发送方式": "SMTP邮件" })

这个界面的价值在于:

  • 测试即所见:点按钮就能验证整个链路是否通畅,不用翻日志
  • 状态可视化:运维人员一眼看懂机器人是否健康
  • 配置透明化:所有参数明文展示,杜绝“黑盒感”

4. 真实效果对比:它写的日报,和你手写的有什么不同?

别信参数,看结果。以下是同一组数据(昨日Git提交+会议笔记)的两种产出对比:

4.1 手写日报(典型工程师风格)

今日完成:

  • 修复了登录页Token失效问题(PR#123)
  • 优化了用户列表接口响应速度
    明日计划:
  • 开始设计权限模块
  • 学习新的前端框架

问题在哪?

  • 没有量化(“优化了响应速度”快多少?)
  • 没有上下文(PR#123解决了什么具体场景?)
  • 没有风险提示(权限模块设计是否依赖第三方接口?)

4.2 ChatGLM3-6B生成日报(实际输出)

【今日完成】 登录态修复:通过延长JWT有效期+增加refresh token双机制,解决移动端Token 2小时后强制登出问题(影响32%用户) 接口性能提升:用户列表接口P95响应时间从1.2s降至380ms(Nginx日志验证) 【待办事项】 🔹 权限模块设计(预计2人日):需与后端对齐RBAC策略,明日10:00同步会 🔹 前端框架评估:已下载Qwik文档,重点验证SSR渲染性能 【风险与阻塞】 权限模块依赖后端Auth API V2,当前仅提供Mock地址,需确认上线时间

它做对了什么?

  • 自动补全事实:从Git commit message中提取“移动端Token 2小时后强制登出”,并估算影响比例
  • 量化结果:给出具体性能数字(1.2s→380ms),且注明数据来源(Nginx日志)
  • 主动识别风险:发现“Mock地址”与“真实API”的gap,并标注为阻塞项

这不是AI在编故事,而是AI在帮你把碎片信息,还原成一张有血有肉的工作快照。

5. 进阶建议:让机器人越用越懂你

这套系统不是“部署完就结束”,而是可以持续进化的:

5.1 模板热更新:不用改代码,就能换日报风格

templates/目录下放几个Markdown文件:

  • tech.md:技术岗专用(含代码片段、性能指标)
  • pm.md:项目经理版(含进度百分比、资源协调)
  • intern.md:实习生版(含学习目标、导师反馈)

Streamlit界面加个下拉框,选中即切换,模型prompt自动注入对应指令。

5.2 反馈闭环:让AI记住你的修改习惯

每次你手动编辑AI生成的日报,都把“原始输出→人工修改”存为一对样本。每周自动训练一个LoRA微调层,让模型越来越懂你的表达偏好——比如你总把“优化”改成“提速XX%”,它下次就直接输出数字。

5.3 多端触达:不止发邮件,还能推企业微信

send_email()函数替换成企业微信机器人Webhook调用,日报就能出现在你晨会前的群聊里,附带“查看详情”按钮直跳Streamlit页面。

这些都不是纸上谈兵。我已经在团队内部跑了两周,现在最常听到的反馈是:“咦?今天日报怎么写得比我上次还像人写的?”


6. 总结:自动化不是替代人,而是把人从机械劳动里解放出来

ChatGLM3-6B-32k本地化部署的价值,从来不在“参数多大”或“榜单排名”,而在于它终于让大模型从“云端幻觉”变成了“桌面工具”。当你不再需要纠结API调用配额、数据隐私条款、网络延迟抖动,而是能像打开VS Code一样打开一个真正属于你的AI协作者——自动化才有了温度。

这个日报机器人,没有炫酷的3D界面,没有复杂的微服务架构,甚至没用一行K8s YAML。它只是用最朴素的方式:
把开源模型压进你的显卡
用Streamlit做轻量胶水
让定时任务像闹钟一样可靠

然后,把你每天重复的20分钟,还给你。

你完全可以用同样的思路,把它改成周报生成器、会议纪要整理员、代码Review助手……关键不是技术多新,而是你愿不愿意,把那个最消耗心力的机械环节,亲手交给一个永远不知疲倦的本地伙伴。

--- > **获取更多AI镜像** > > 想探索更多AI镜像和应用场景?访问 [CSDN星图镜像广场](https://ai.csdn.net/?utm_source=mirror_blog_end),提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/9 17:17:26

Clawdbot+Qwen3-32B实战案例:高校科研助手(文献综述/实验设计)

ClawdbotQwen3-32B实战案例:高校科研助手(文献综述/实验设计) 1. 为什么高校科研需要专属AI助手 你有没有经历过这样的场景: 凌晨两点,面对三十篇英文文献摘要,眼睛发酸却还在划重点; 导师突然…

作者头像 李华
网站建设 2026/2/9 1:25:19

手机录音也能识别?Fun-ASR音频兼容性实测

手机录音也能识别?Fun-ASR音频兼容性实测 你有没有过这样的经历:会议刚结束,手机里存着47分钟的语音备忘录,想快速整理成文字,却卡在“上传失败”“格式不支持”“识别乱码”上?又或者,用钉钉语…

作者头像 李华
网站建设 2026/2/9 11:56:19

Clawdbot整合Qwen3-32B效果展示:支持RAG插件的文档问答与引用溯源功能

Clawdbot整合Qwen3-32B效果展示:支持RAG插件的文档问答与引用溯源功能 1. 这不是普通聊天,是带“记忆”和“出处”的智能问答 你有没有试过这样一种体验:上传一份几十页的产品手册,问它“第三章提到的兼容性要求有哪些”&#x…

作者头像 李华
网站建设 2026/2/7 16:21:59

Z-Image Turbo落地实践:教育领域课件配图AI辅助生成

Z-Image Turbo落地实践:教育领域课件配图AI辅助生成 1. 为什么教育工作者需要专属配图工具? 你有没有遇到过这样的场景: 下午三点要给初中物理课准备“光的折射”PPT,翻遍图库找不到一张既准确又生动的示意图; 晚上八…

作者头像 李华
网站建设 2026/2/9 12:54:16

免费又好用!这款开源AI工具值得收藏

免费又好用!这款开源AI工具值得收藏 你有没有试过把自拍变成二次元形象?或者想给朋友圈配图加点动漫感,又不想花时间学PS?今天要介绍的这个工具,不用注册、不收一分钱、本地运行、界面清爽,上传照片点一下…

作者头像 李华