AI 居然说我是牛马,还画出了我牛马的一生,我绷不住了...

今天真是服了,AI 居然敢嘲笑我是牛马,还直接甩了张大图到我脸上。

看来我的人生在 AI 眼中就是个笑话,从 “初级牛马” 一路升级到 “资深牛马”。真是谢谢你啊,AI 老师!

但等等,这剧本还没完!AI 显然觉得光嘲笑我不够过瘾,还要顺带 diss 我的朋友,说他是吗喽。哦,原来在 AI 眼中,我们都是 “低收入” 的代名词啊。

等等,最后怎么还 “默默离世” 了??

好吧,既然已经被 AI 如此 “精准” 地刻画,我们不妨来看看它是怎么创作出这么一幅 “传世佳作” 的。

要想让 AI 生成这种图,其实很简单,只需要一个 Prompt 就行了,内容如下:

;; 提示词:动物的一生
;; 作者:空格 zephyr

(defun 动物生命周期 ()
  "生成动物的生命周期SVG图表和描述"
  (lambda (主题)
    (let* ((生命阶段 (获取生命阶段 主题))
           (科普数据 (获取科普数据 主题))
           (背景样式 (设计背景 主题))
           (时间轴 (创建时间轴 主题))
           (阶段emoji (选择阶段emoji 主题))
           (装饰emoji (选择装饰emoji 主题))
           (副标题 (生成副标题 主题 科普数据)))
      (创建优化SVG图表 主题 生命阶段 科普数据 背景样式 时间轴 阶段emoji 装饰emoji 副标题))))

(defun 获取生命阶段 (主题)
  "获取主题的主要生命阶段"
  (case 主题
    (蝉 '("卵" "若虫期(地下)" "成虫期"))
    (鲸鱼 '("胎儿期" "幼年期" "青年期" "成年期" "老年期"))
    (长颈鹿 '("新生期" "幼年期" "青年期" "成年期" "老年期"))
    (t '("初期" "成长期" "成熟期" "衰老期"))))

(defun 获取科普数据 (主题)
  "获取主题的科普数据列表"
  (case 主题
    (蝉 '(("卵在树枝中孵化6-10周,每窝可产200-600颗卵。"
           "若虫在地下生活多年,吸食树根汁液生存。"
           "若虫经历5次蜕皮,体型可增大20倍。"
           "最后一次蜕皮后钻出地面,变为成虫。"
           "成虫期仅4-6周,专注于繁衍后代和鸣叫。")
          "蝉的地下潜伏期长达17年,成虫仅存活4-6周,鸣叫声可达120分贝,相当于飞机起飞的噪音。"))
    (鲸鱼 '(("蓝鲸胎儿每天增重90公斤,出生时重达2.5吨,长7米。"
            "幼鲸每天喝380升奶,7个月增重30吨。"
            "青年蓝鲸可潜水200米深,屏息长达40分钟。"
            "成年蓝鲸长30米,重190吨,一天吃4吨磷虾。"
            "最长寿蓝鲸年龄可达110岁,终生可游13次地球赤道距离。")
           "蓝鲸是地球上最大的动物,心脏重达600公斤,舌头重如一头大象,叫声可传播1600公里。"))
    (t '(("阶段1的数据描述"
          "阶段2的数据描述"
          "阶段3的数据描述"
          "阶段4的数据描述"
          "阶段5的数据描述")
         "通用主题的有趣数据描述"))))

(defun 设计背景 (主题)
  "根据主题设计适合的背景"
  (case 主题
    (蝉 '(渐变 "E6F3FF" "B3E5FC" 土地))
    (鲸鱼 '(渐变 "E3F2FD" "90CAF9" 海洋))
    (长颈鹿 '(渐变 "FFF8E1" "FFE0B2" 草原))
    (t '(渐变 "F5F5F5" "E0E0E0" 通用))))

(defun 创建时间轴 (主题)
  "创建主题生命周期的时间轴"
  (case 主题
    (蝉 '("0年" "4年" "8年" "12年" "16年" "17年"))
    (鲸鱼 '("0年" "10年" "25年" "50年" "75年" "100年"))
    (长颈鹿 '("0月" "6月" "2年" "4年" "15年" "25年"))
    (t '("初期" "成长期" "成熟期" "后期" "衰老期"))))

(defun 选择阶段emoji (主题)
  "选择与生命阶段相关的emoji"
  (case 主题
    (蝉 '("🥚" "🐛" "🦟" "🎵"))
    (鲸鱼 '("🤰" "🍼" "🏊" "🐋" "👵"))
    (长颈鹿 '("👶" "🐕" "🏃" "🦒" "👵"))
    (t '("🌱" "🌿" "🌳" "🍂"))))

(defun 选择装饰emoji (主题)
  "选择与主题相关的装饰emoji"
  (case 主题
    (蝉 '("🌳" "🍃" "🌿" "🍂"))
    (鲸鱼 '("🌊" "🐠" "🦈" "🐙"))
    (长颈鹿 '("🌴" "🌿" "🦓" "🦁"))
    (t '("🌱" "🌳" "🍃" "🌞"))))

(defun 生成副标题 (主题 科普数据)
  "根据科普数据生成副标题"
  (format "你知道吗?%s" (第二个元素 科普数据)))

(defun 创建优化SVG图表 (主题 生命阶段 科普数据 背景样式 时间轴 阶段emoji 装饰emoji 副标题)
  "创建优化的生命周期SVG图表"
  (let ((svg-template
    "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 800 500\">
      <!-- 渐变背景 -->
      <defs>
        <linearGradient id=\"bgGradient\" x1=\"0%\" y1=\"0%\" x2=\"0%\" y2=\"100%\">
          <stop offset=\"0%\" style=\"stop-color:#{背景颜色1};stop-opacity:1\" />
          <stop offset=\"100%\" style=\"stop-color:#{背景颜色2};stop-opacity:1\" />
        </linearGradient>
      </defs>
      <rect width=\"100%\" height=\"100%\" fill=\"url(#bgGradient)\" />

      <!-- 主题相关背景装饰 -->
      {背景装饰)
      <!-- 标题和副标题 -->
      <text x=\"400\" y=\"30\" text-anchor=\"middle\" class=\"title\" fill=\"#333333\">{主题}的一生</text>
      <text x=\"400\" y=\"60\" text-anchor=\"middle\" class=\"subtitle\" fill=\"#555555\">
        <tspan x=\"400\" dy=\"0\">{副标题_第一行}</tspan>
        <tspan x=\"400\" dy=\"20\">{副标题_第二行}</tspan>
      </text>
      <!-- 时间轴 -->
      <line x1=\"50\" y1=\"400\" x2=\"750\" y2=\"400\" stroke=\"#555555\" stroke-width=\"2\" />
      {时间标签}
      <!-- 生命阶段 -->
      {生命阶段标签}
      <!-- 数据点和科普信息 -->
      {数据点和科普信息}
      <!-- 曲线连接 -->
      <path d=\"M50,350 Q140,360 230,370 T400,330 T580,290 T730,250\" fill=\"none\" stroke=\"#555555\" stroke-width=\"2\"/>
      <!-- 图例 -->
      <rect x=\"50\" y=\"460\" width=\"700\" height=\"30\" fill=\"rgba(255,255,255,0.05)\"/>
      <text x=\"60\" y=\"480\" class=\"legend-text\" fill=\"#333333\">图例:</text>
      <circle cx=\"150\" cy=\"475\" r=\"8\" fill=\"#FFD700\"/>
      <text x=\"170\" y=\"480\" class=\"legend-text\" fill=\"#333333\">生命阶段</text>
      <line x1=\"270\" y1=\"470\" x2=\"270\" y2=\"480\" stroke=\"#555555\" stroke-width=\"2\"/>
      <text x=\"290\" y=\"480\" class=\"legend-text\" fill=\"#333333\">生命历程</text>
      <text x=\"420\" y=\"480\" class=\"legend-text\" fill=\"#333333\">{图例emoji}</text>
      <!-- 底部装饰Emoji -->
      {底部装饰Emoji}
    </svg>"))
    (填充优化SVG模板 svg-template 主题 生命阶段 科普数据 背景样式 时间轴 阶段emoji 装饰emoji 副标题)))
(defun start ()
  (print "请输入您想了解的生命主题(如:蝉、鲸鱼、长颈鹿等):")
  (let ((用户输入 (read)))
    (优化生命周期生成器 用户输入)))
;; 运行规则
;; 1. 启动时运行 (start) 函数
;; 2. 根据用户输入的主题,生成对应的生命周期SVG图表和描述
;; 3. 输出应包括优化后的SVG图表和相关的文字说明,重点突出科学数据和有趣事实

这个提示词的功能就是科普动物的生命周期,并一句话分享冷知识,意想不到的动物的另一面

很明显,这位作者的提示词模仿了李继刚老师的提示词风格,使用的是 Lisp 伪代码。

原提示词出处:https://mp.weixin.qq.com/s/BOMOQVGQ5hvd8dDaKwb18A

但光有提示词还不行,因为只有 Claude Artifact 才能直出 SVG 图片的预览,别的平台只能输出 SVG 代码,没办法直接预览图片。

下面我来教大家如何使用 FastGPT 工作流复现上述效果。

FastGPT 地址:https://tryfastgpt.ai

需要纵云梯访问!

1️⃣ 首先接入 AI 对话节点,模型选择 Claude 3.5。

2️⃣ 接下来接到代码运行节点,这段代码的功能是将 svg 代码块中的内容提取出来,以便后续对其进行格式化输出。

代码内容如下:

function main({svg_str}){

    // 使用正则表达式匹配代码块中的内容
    const match = svg_str.match(/```[\w]*\n([\s\S]*?)```/);

    if (!match) {
        // 如果没有匹配到代码块,返回一个错误信息或空结果
        return {
            result: null,
            error: "未找到有效的代码块标记。"
        };
    }

    // 提取代码块中的 SVG 内容
    const extractedSvg = match[1].trim();

    const base64 = strToBase64(extractedSvg,'data:image/svg+xml;base64,')

    return {
        result: base64
    }
}

3️⃣ 最终通过指定回复节点来格式化输出。

最终效果:

Claude 3.5 的理解能力果然很强,这个工作流虽然描绘的是动物的一生,但实际上我们可以让它生成任何事物的一生,比如 “牛马”,比如 “吗喽”,为了防止有些比较新的名词 Claude 不太理解,你可以稍微给它解释一下,最终它就会给你生成比较满意的一生来。

比如牛马的一生:

吗喽的一生:

通过这种方式,你可以生成任何事物的 “人生图”。

对于 AI 的嘲讽,我们不妨换个角度,AI 的 “嘲讽” 其实是对我们生活的一种另类解读。

它用一种幽默的方式提醒我们,生活中总有些不如意,但也正是这些不如意让我们的人生更加丰富多彩。

所以,下次当 AI 再次 “调侃” 我时,我会微笑着接受,并用它的 “智慧” 来激励自己,继续前行。

生活不易,但我们总能找到属于自己的乐趣。

完整工作流:https://pan.quark.cn/s/019132869eca

<think>嗯,用户想用Jupyter Notebook编写代码处理牛马分类的AI作业,需要按照特定的图片命名规则,并且组织文件夹结构。首先,我需要理解他们的需求。他们提供的图片命名是牛0-0.jpg到0-50.jpg,马1-0.jpg到1-50.jpg。这明文件名中的第一个数字是类别标签,0代表牛,1代表马,后面的数字是序号。那么,我需要将这些图片正确分类,并构建数据集。 接下来,用户可能需要一个简单的分类模型,比如使用CNN。考虑到是作业,可能不需要太复杂的网络,一个简单的几层卷积和全连接层应该够用。另外,他们可能还需要数据预处理的部分,比如读取图片、调整大小、归一化等。 然后是文件夹结构的问题。用户提到数据在data文件夹中,可能的结构是data目录下直接存放所有图片,或者有子文件夹。但根据命名规则,可能没有子文件夹,所以代码需要从文件名中提取类别。因此,在加载数据时,需要遍历data文件夹下的所有图片,解析文件名,将类别标签提取来。例如,文件名“0-0.jpg”代表牛,而“1-0.jpg”代表马。 数据增强可能也是一个考虑点,但用户没有明确提到,不过引用[1]中提到了数据增强的方法,可能可以建议使用ImageDataGenerator来增强数据,防止过拟合。但用户的问题主要是分类模型的构建,所以可能需要先完成基础的数据加载和模型训练,再考虑优化。 接下来是代码的结构。用户需要在Jupyter Notebook中运行,所以代码需要分步骤,比如数据加载、预处理、模型定义、训练、评估。同时,要确保路径正确,特别是处理中文路径的问题,引用[2]中提到要避免中文路径,所以用户需要注意这一点,但根据问题描述,他们的路径可能已经符合要求。 可能还需要用到OpenCV或PIL库来读取图片,但考虑到兼容性和简单性,可能使用Keras的ImageDataGenerator或者直接用tf.keras.utils.image_dataset_from_directory,但根据文件名结构,可能需要自定义数据加载方式,因为文件名包含类别信息,而不是通过子文件夹来区分类别。 所以步骤大概是: 1. 导入必要的库,比如tensorflow, os, numpy, matplotlib等。 2. 定义文件路径,遍历data文件夹下的图片。 3. 解析文件名,提取类别标签(0或1)。 4. 加载图片,调整大小,归一化像素值。 5. 划分训练集和测试集。 6. 构建一个简单的CNN模型。 7. 编译和训练模型。 8. 评估模型性能。 9. 保存模型。 需要注意的地方包括文件名解析是否正确,图片加载是否正常,数据划分是否合理,模型结构是否适合二分类任务。另外,可能需要处理图像的颜色通道,比如转换为RGB,特别是如果使用OpenCV读取的话,因为OpenCV默认是BGR格式,而TensorFlow期望RGB。 此外,用户可能需要可视化一些图片和训练结果,所以在代码中加入一些绘图部分会更好。例如,显示前几张图片,查看是否正确分类,绘制训练过程中的准确率和损失曲线。 在模型评估部分,可以使用混淆矩阵、准确率等指标。同时,保存模型以便后续使用可能也是需要的。 可能遇到的问题包括文件名解析错误,比如文件名不符合预期导致类别标签提取错误,或者图片损坏无法加载。因此,在代码中加入异常处理是有必要的,但为了简化,可能先假设所有文件都符合规范。 最后,需要确保整个代码在Jupyter Notebook中能够分步运行,每部分都有注释明,方便用户理解和调整参数。</think>以下是基于Jupyter Notebook的牛马分类模型实现方案: ### 一、文件结构与数据准备 1. 创建以下目录结构: ``` project/ ├── data/ │ ├── 0-0.jpg (牛图像) │ ├── ... │ └── 1-50.jpg (马图像) └── CattleHorse_Classification.ipynb ``` 2. 文件名规则:牛为`0-编号.jpg`,马为`1-编号.jpg`(编号0-50) ### 二、完整代码实现 ```python # %% [markdown] # # 牛马图像分类模型 # %% [1. 环境配置] import tensorflow as tf import os import numpy as np import matplotlib.pyplot as plt from sklearn.model_selection import train_test_split # %% [2. 数据加载与预处理] data_dir = "./data" image_size = (150, 150) batch_size = 32 # 解析文件名获取标签 def get_label(file_path): class_name = tf.strings.split(file_path, os.path.sep)[-1] class_id = tf.strings.substr(class_name, 0, 1) return tf.cond(tf.equal(class_id, '0'), lambda: 0, lambda: 1) # 加载并预处理图像 def process_image(file_path): label = get_label(file_path) img = tf.io.read_file(file_path) img = tf.image.decode_jpeg(img, channels=3) img = tf.image.resize(img, image_size) img = img / 255.0 # 归一化 return img, label # 创建数据集 file_paths = [os.path.join(data_dir, f) for f in os.listdir(data_dir) if f.endswith('.jpg')] dataset = tf.data.Dataset.from_tensor_slices(file_paths) dataset = dataset.map(process_image, num_parallel_calls=tf.data.AUTOTUNE) dataset = dataset.shuffle(buffer_size=1024) # %% [3. 数据集划分] train_size = int(0.8 * len(file_paths)) train_dataset = dataset.take(train_size).batch(batch_size).prefetch(tf.data.AUTOTUNE) val_dataset = dataset.skip(train_size).batch(batch_size).prefetch(tf.data.AUTOTUNE) # %% [4. 模型构建] model = tf.keras.Sequential([ tf.keras.layers.Conv2D(32, (3,3), activation='relu', input_shape=(150,150,3)), tf.keras.layers.MaxPooling2D(2,2), tf.keras.layers.Conv2D(64, (3,3), activation='relu'), tf.keras.layers.MaxPooling2D(2,2), tf.keras.layers.Flatten(), tf.keras.layers.Dense(128, activation='relu'), tf.keras.layers.Dense(1, activation='sigmoid') ]) model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy']) # %% [5. 模型训练] history = model.fit( train_dataset, validation_data=val_dataset, epochs=15 ) # %% [6. 结果可视化] plt.figure(figsize=(12,4)) plt.subplot(1,2,1) plt.plot(history.history['accuracy'], label='Training Accuracy') plt.plot(history.history['val_accuracy'], label='Validation Accuracy') plt.title('Accuracy Curves') plt.legend() plt.subplot(1,2,2) plt.plot(history.history['loss'], label='Training Loss') plt.plot(history.history['val_loss'], label='Validation Loss') plt.title('Loss Curves') plt.legend() plt.show() # %% [7. 模型保存] model.save('cattle_horse_classifier.h5') ``` ### 三、关键明 1. 数据增强建议:可使用`ImageDataGenerator`进行实时增强[^1] ```python datagen = tf.keras.preprocessing.image.ImageDataGenerator( rotation_range=20, width_shift_range=0.2, height_shift_range=0.2, horizontal_flip=True) ``` 2. 模型使用CNN基础架构,适合图像特征提取 3. 采用二分类交叉熵损失函数,适用于牛/马二元分类 4. 训练过程可视化帮助分析模型收敛情况
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值