当前位置:首页>python>小技巧 | 通过Python向飞书发送训练日志

小技巧 | 通过Python向飞书发送训练日志

  • 2026-10-11 06:39:43
小技巧 | 通过Python向飞书发送训练日志
机器学习模型训练过程往往耗时较长,很难长时间盯着日志判断训练状态。本文将介绍通过python向飞书发送训练日志的方法,让模型的开始结束都会在飞书上留痕。这样每天早上一起床,不需要打开服务器也能知道前一晚的训练情况了。
首先需要一个飞书账户,并在电脑客户端登录。接着点击左上角的“+”,再点击新建群聊
不需要在这个群聊中加任何人(当然如果想把训练通知发给其他人,可以把其他人一起拉到这个群聊中)。
接着你就拥有了一个以你为名字的群聊,依次点击右上角的“...-设置-群机器人-添加机器人-自定义机器人”,点击添加。
接着将下面这个界面的webhook链接复制到本地,我会建议放在.env文件里。注意这个webhook相当于是这个机器人的密码,一定不可以外传,否则别人可以通过这个链接操作你的机器人发消息。
接着就可以到代码端,打开一个新的python文件,我叫notification.py,贴入如下的代码。.env要放在项目根目录下。
import osimport requestsfrom dotenv import load_dotenvload_dotenv()def send_slack(message: str) -> None:    webhook_url = os.environ.get("SLACK_WEBHOOK_URL")    if not webhook_url:        return    response = requests.post(        webhook_url,        json={"text": message},        timeout=10,    )    response.raise_for_status()def send_feishu(message: str) -> None:    webhook_url = os.environ.get("FEISHU_WEBHOOK_URL")    print(webhook_url)    if not webhook_url:        raise ValueError("webhook not found")    response = requests.post(        webhook_url,        json={            "msg_type": "text",            "content": {                "text": message,            },        },        timeout=10,    )    response.raise_for_status()def send_notification(message: str) -> None:    """同时向已配置的平台发送消息;单个平台失败不影响另一个。"""    for sender in (send_slack, send_feishu):        try:            sender(message)        except Exception as exc:            print(f"Notification failed: {exc}")if __name__ == "__main__":    try:        send_feishu("✅ Python Webhook 最小测试成功")        print("请求已发送,请检查 Slack 或飞书")    except Exception as exc:        print(f"发送失败:{type(exc).__name__}: {exc}")        raise
接着,在我们的训练脚本中,通常会写一个main函数,然后
if __name__ == "__main__":  main()
此时只需要把main用下面的代码包裹起来:
args = parser.parse_args()task_name = f"\"{args.experiment_name}_{args.dataset}_{current_time}\""send_feishu(f"Task: {task_name} starts")try:    main(args)except Exception as error:    error_message = (f"Task: {task_name} failed\nError: {type(error).__name__}: {error}")    send_feishu(error_message)    # 在终端输出完整报错栈    traceback.print_exc()    # 继续抛出异常,使脚本以非零状态码退出    raiseelse:    send_feishu(f"Task: {task_name} completed")
task_name不一定要来自args,可以自己定义。这样的好处是几乎没有侵入原本代码,而且如果不嫌烦的话也可以把所有的日志都输出到飞书,改起来非常方便。
除了飞书,Slack也是可以的,方法差不多,不过不是建群聊,而是建一个新的APP。另外要注意下,飞书最好自己是管理员(建个人账户就可以了),不然可能没法设置机器人。
相关的代码已经传在我的github ml template上了(也可以点文末阅读原文):https://github.com/LinyongGAN/Machine_Learning_Templates/,欢迎大家帮忙点点star⭐

最新文章

随机文章