达摩院春联模型实战教程:接入钉钉机器人实现群内春联点播

news2026/4/16 3:42:01
达摩院春联模型实战教程接入钉钉机器人实现群内春联点播过年贴春联是咱们中国人的传统习俗。但每年想一副有新意、有文采的春联可不容易。现在好了有了AI技术这事儿变得简单又有趣。今天要给大家分享的就是如何把达摩院出品的“春联生成模型”玩出花来——把它接入钉钉群聊机器人让群里的同事、朋友或者家人随时随地都能在群里“点播”一副专属的AI春联。想象一下群里有人喊一声“兔年”机器人立马送上一副应景的对联是不是既热闹又智能这个教程我会手把手带你从零开始完成整个流程。你不需要是AI专家只要会一些基础的Python和命令行操作就能轻松搞定。咱们的目标是让技术小白也能玩转AI春联让传统年俗焕发科技新意。1. 环境准备与模型部署在开始接入钉钉之前我们得先把春联生成模型这个“核心引擎”给跑起来。别担心过程很简单。1.1 获取并启动模型镜像首先你需要一个能运行这个模型的环境。最省事的方法就是使用已经预置好所有环境的Docker镜像。获取镜像你可以从一些AI镜像平台如CSDN星图镜像广场找到名为“AI春联生成器”或类似名称的镜像。这个镜像里已经包含了达摩院的PALM大模型、Gradio界面以及所有必要的Python依赖。启动容器通过平台的一键部署功能或者使用Docker命令启动这个镜像。启动后它会自动运行我们需要的服务。1.2 验证模型服务模型启动后我们需要确认它工作正常。根据提供的说明模型服务会运行在7860端口。你可以在浏览器中访问http://你的服务器IP:7860。如果一切顺利你会看到一个简洁的网页界面中间有一个输入框提示你输入“两字祝福词”。试着输入“新春”或“吉祥”然后点击“提交”。稍等片刻你就能看到AI生成的一副完整春联了通常还包括横批。这个界面是用Gradio框架搭建的它把复杂的模型调用包装成了一个简单的Web应用。我们后续的钉钉机器人本质上就是通过程序来自动访问这个Web应用获取生成结果。1.3 理解模型工作原理这个“春联生成模型-中文-base”是达摩院AliceMind团队的作品。它的原理并不复杂输入你给它两个字的祝福词比如“团圆”、“福气”。处理模型基于达摩院强大的PALM大模型理解这两个字背后的美好寓意和春节语境。输出它自动创作出一副上下联对仗工整、平仄协调且主题紧扣输入词汇的春联。它就像一个精通诗词格律的AI书法家你给个主题它立马挥毫泼墨。2. 搭建钉钉机器人中间件模型服务在本地跑起来了但它还是个“宅男”只在自己的小屋里7860端口工作。我们要做的就是建一个“传话员”中间件让它能接收钉钉群里的消息跑去问模型要春联再把结果带回群里。我们将使用Python的Flask框架来快速搭建这个“传话员”它轻量又简单。2.1 创建项目目录与文件在你的服务器上找一个合适的位置比如/root/dingtalk_bot创建我们的机器人项目。mkdir -p /root/dingtalk_bot cd /root/dingtalk_bot然后创建两个主要的Python文件app.py主程序处理钉钉消息和调用模型。requirements.txt列出项目需要的Python库。2.2 编写核心代码 (app.py)下面是app.py的完整代码我已经添加了详细的注释你可以直接复制使用。#!/usr/bin/env python3 # -*- coding: utf-8 -*- 钉钉春联机器人服务端 功能接收钉钉群消息调用春联生成模型返回结果到群聊。 import json import requests from flask import Flask, request, jsonify import logging # 配置日志方便查看运行情况 logging.basicConfig(levellogging.INFO, format%(asctime)s - %(levelname)s - %(message)s) logger logging.getLogger(__name__) app Flask(__name__) # 配置区域需要你修改的地方 # 1. 你的春联模型服务地址就是前面Gradio界面的地址 COUPLET_MODEL_URL http://localhost:7860 # 如果模型跑在其他服务器请修改IP # 2. 钉钉机器人Webhook地址创建机器人后获得 # 格式类似https://oapi.dingtalk.com/robot/send?access_tokenxxxxxx DINGTALK_WEBHOOK YOUR_DINGTALK_WEBHOOK_URL_HERE # def generate_couplet(keyword): 调用春联模型生成对联 :param keyword: 两个字的祝福词如“新春” :return: 生成的春联文本如果失败返回None try: # Gradio的API接口通常通过/api/predict路径调用 api_url f{COUPLET_MODEL_URL}/api/predict # 构造请求数据格式需要根据Gradio应用的输入组件名来定 # 通常Gradio的输入组件变量名在源码里能找到这里假设为input_text payload { data: [keyword] # 注意这里是一个列表包含输入数据 } logger.info(f正在向模型请求春联关键词: {keyword}) response requests.post(api_url, jsonpayload, timeout30) response.raise_for_status() # 如果状态码不是200抛出异常 result response.json() # Gradio API返回的数据结构通常是 {data: [...]} # 我们需要从中提取生成的春联文本。具体路径需要根据实际返回调整。 # 假设返回的春联在 result[data][0] 里 couplet_text result.get(data, [])[0] if result.get(data) else None if couplet_text: logger.info(f春联生成成功: {couplet_text[:50]}...) # 日志只打印前50字符 return couplet_text else: logger.error(模型返回了数据但未找到春联内容。) return None except requests.exceptions.RequestException as e: logger.error(f请求模型服务失败: {e}) return None except (KeyError, IndexError, json.JSONDecodeError) as e: logger.error(f解析模型返回结果失败: {e}, 原始返回: {response.text}) return None def send_dingtalk_message(text): 发送消息到钉钉群 :param text: 要发送的文本内容 if not DINGTALK_WEBHOOK or DINGTALK_WEBHOOK YOUR_DINGTALK_WEBHOOK_URL_HERE: logger.error(钉钉Webhook地址未配置) return False headers {Content-Type: application/json} # 钉钉机器人支持Markdown格式让消息更美观 data { msgtype: markdown, markdown: { title: AI春联已送达, text: text } } try: resp requests.post(DINGTALK_WEBHOOK, headersheaders, datajson.dumps(data), timeout10) resp.raise_for_status() logger.info(消息已成功发送至钉钉群。) return True except requests.exceptions.RequestException as e: logger.error(f发送钉钉消息失败: {e}) return False app.route(/dingtalk, methods[POST]) def handle_dingtalk(): 处理钉钉机器人回调的入口 钉钉的“自定义机器人”收到消息后会POST到这个地址 try: # 获取钉钉POST过来的数据 incoming_data request.get_json() logger.info(f收到钉钉回调: {json.dumps(incoming_data, ensure_asciiFalse)}) # 提取关键信息谁发的、发了什么、是否了机器人 # 钉钉消息结构比较复杂这里做简化处理提取文本内容 text_content if incoming_data.get(text, {}).get(content): # 处理普通文本消息 text_content incoming_data[text][content].strip() # 注意实际还需要处理机器人的标识符移除等此处为简化示例 # 简单判断如果消息包含“春联”二字则尝试提取关键词 if 春联 in text_content: # 这里用一个简单的方法提取两个中文字作为关键词 # 例如“来一副新春的春联” - 提取“新春” # 更健壮的做法可以用正则表达式匹配两个中文字 import re keywords re.findall(r[\u4e00-\u9fa5]{2}, text_content) if keywords: keyword keywords[0] # 取第一个找到的两字词 logger.info(f提取到关键词: {keyword}) # 调用模型生成春联 couplet generate_couplet(keyword) if couplet: # 组织回复消息使用Markdown格式更美观 reply_text f** 您点的「{keyword}」主题春联到啦** \n\n{couplet} \n\n---\n*由达摩院春联AI生成* send_dingtalk_message(reply_text) return jsonify({msg: 春联已发送}) else: send_dingtalk_message(抱歉AI书法家今天灵感不佳生成春联失败请稍后再试~) return jsonify({msg: 生成失败}) else: send_dingtalk_message(请告诉我两个字的祝福词哦比如新春、吉祥、团圆我就能为你创作春联啦) return jsonify({msg: 未找到关键词}) else: # 如果不是春联相关指令可以忽略或回复帮助信息 # 此处选择静默不回复 return jsonify({msg: 忽略非春联指令}) except Exception as e: logger.error(f处理钉钉回调时发生错误: {e}) return jsonify({msg: 服务器内部错误}), 500 app.route(/health, methods[GET]) def health_check(): 健康检查端点用于验证服务是否运行 return jsonify({status: healthy, service: DingTalk Couplet Bot}) if __name__ __main__: logger.info(钉钉春联机器人服务启动中...) logger.info(f春联模型地址: {COUPLET_MODEL_URL}) # 运行Flask应用默认端口5000对所有IP开放以便钉钉回调 app.run(host0.0.0.0, port5000, debugFalse)2.3 安装依赖并运行创建requirements.txt文件内容如下Flask2.0.0 requests2.25.0然后安装依赖并运行服务# 安装Python依赖 pip install -r requirements.txt # 运行机器人服务后台运行 nohup python app.py bot.log 21 现在你的“传话员”就在5000端口上待命了。你可以通过访问http://你的服务器IP:5000/health来检查它是否正常运行。3. 配置钉钉群自定义机器人我们的“传话员”准备好了现在需要在钉钉群里给它开个门让它能进出自由。这就是钉钉的“自定义机器人”。3.1 在钉钉群中添加机器人打开你想要添加机器人的钉钉群。点击群右上角的“设置”...图标。选择“智能群助手”。点击“添加机器人”。在机器人列表里选择“自定义机器人”通过Webhook接入。给机器人起个名字比如“AI春联小助手”并上传一个喜庆的图标。在“安全设置”中选择“自定义关键词”并添加“春联”这个词。这一步很重要它意味着只有当群消息包含“春联”时钉钉才会把消息转发给我们的服务。阅读并同意条款点击“完成”。完成后钉钉会提供一个Webhook地址长得像https://oapi.dingtalk.com/robot/send?access_tokenxxxxxx。请务必复制并保存好这个地址。3.2 配置机器人回调默认的机器人只能单向发送消息。为了让机器人能“听懂”它的指令并回复我们需要配置“消息接收”。在机器人创建完成后的页面或进入“群设置”-“智能群助手”-找到你的机器人进行管理。找到“消息接收”配置点击“设置”。将“消息接收模式”下的“Webhook”地址填写为我们刚才启动的Flask服务的地址。格式为http://你的公网服务器IP:5000/dingtalk。注意你的服务器必须有公网IP或者使用了内网穿透工具如ngrok、frp确保钉钉的服务器能访问到这个地址。点击“验证”和“保存”。至此钉钉机器人就配置好了。当群里有人发送包含“春联”关键词并机器人或根据安全设置的消息时钉钉就会把这条消息POST到你配置的/dingtalk地址。4. 在群内体验AI春联点播所有配置都完成了让我们来体验一下成果回到你的钉钉群尝试你的机器人“AI春联小助手”并发送一条消息例如AI春联小助手 来一副“新春”的春联稍等几秒钟你就会看到机器人回复了一条Markdown格式的消息 您点的「新春」主题春联到啦上联东风化雨山山翠 下联政策归心处处春 横批春风化雨由达摩院春联AI生成恭喜你你的群内AI春联点播系统已经成功运行。大家可以尽情尝试不同的祝福词比如“吉祥”、“团圆”、“福气”、“兔年”看看AI能创作出怎样精彩的对联。4.1 可能遇到的问题与解决机器人不回复检查Flask服务日志 (cat bot.log)看是否收到钉钉的请求。检查钉钉机器人安全设置中的关键词是否正确以及Webhook回调地址是否能从外网访问。春联生成失败检查COUPLET_MODEL_URL配置是否正确以及春联模型服务 (http://localhost:7860) 本身是否运行正常。消息格式错误我们的示例代码做了简化处理。钉钉实际回调的消息结构很复杂包含会话ID、发送者、信息等。如果需要对消息进行更精确的解析如只处理机器人的消息需要参考钉钉开放平台文档完善handle_dingtalk函数中的解析逻辑。5. 总结与扩展思路通过这个教程我们完成了一个非常有趣的AI应用落地案例将达摩院的春联生成模型与钉钉的协作场景相结合。回顾一下我们做了什么部署核心启动了达摩院的春联生成模型服务它提供了AI创作能力。搭建桥梁用Python Flask编写了一个轻量的中间件服务负责接收钉钉消息、调用AI模型、返回结果。连接场景在钉钉群中创建并配置了一个自定义机器人将群聊指令与我们的后端服务打通。这个项目的价值在于技术体验让你亲身实践了AI模型服务化、Web API调用、机器人回调等实用技能。场景创新为传统的AI模型找到了一个生动、有趣的落地场景提升了技术的趣味性和参与感。可扩展性这个框架完全可以复用。你可以把“春联模型”换成“诗词模型”、“笑话模型”、“天气查询接口”就能快速打造出其他类型的群聊机器人。一些扩展思路供你继续探索增强交互让指令更灵活例如支持“春联 平安”、“来对对联 富贵”等多种句式。美化输出将生成的春联文本通过其他API如图片生成转换成一张精美的、带有书法字体的春联图片再发送效果更震撼。多群管理改造服务使其能区分不同钉钉群的消息甚至记录每个群的点播历史。限流与缓存为避免模型被频繁调用导致压力过大可以加入简单的限流机制或对相同关键词的生成结果进行缓存。希望这个教程不仅能帮你实现一个好玩的小工具更能启发你探索更多AI技术与日常场景结合的可能性。技术不再是冷冰冰的代码它可以成为传递祝福、增添乐趣的桥梁。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2522044.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…

网络编程(Modbus进阶)

思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…