1. 项目概述:一个为猫奴打造的“生产力黑洞”

如果你和我一样,是个看到猫就走不动道、手机里存了上千张猫图、并且坚信“猫猫统治世界”的资深猫奴,那么你肯定能理解那种想要随时随地与猫对话、获取无限猫图的冲动。CatGDP 这个项目,就是这种冲动的终极产物。它本质上是一个披着“聊天机器人”外衣的猫图生成器,或者说,是一个用猫语和你对话、并为你源源不断创造猫的“生产力毁灭者”。

这个项目的核心玩法非常简单:你打开一个网页,和一只虚拟的猫聊天。无论你说什么,它都会用“喵喵叫”、各种猫式俚语(比如“pawsome”、“fur-ee”)来回应你,并且,最要命的是,它每次回复都会附赠一张由 AI 生成的、独一无二的猫图片。你可以问它“今天过得怎么样?”,它会回你一张在沙发上打哈欠的橘猫;你可以抱怨“工作好累”,它会给你看一只睡在键盘上的奶牛猫。它的目标很明确:用无限的、可爱的、随机的猫图,彻底“摧毁”你的生产力和所谓的“国内生产总值”(GDP),让你沉浸在纯粹的、无意义的快乐中。

从技术角度看,CatGDP 是一个典型的 Web 应用,前端基于 Streamlit 框架快速搭建交互界面,后端则巧妙地串联了两个强大的 AI 模型:一个用于理解并生成猫语对话(例如基于类似 ChatGPT 的大语言模型进行风格化改造),另一个用于根据对话上下文或随机指令生成猫的图片(例如使用 Stable Diffusion 这类文生图模型)。整个项目的代码开源在 GitHub 上,风格轻松诙谐,充满了猫相关的双关语,这本身也是其魅力的一部分——它不只是一个工具,更是一个带有强烈社区文化和幽默感的数字宠物。

2. 核心思路与技术选型解析

2.1 为什么选择“猫语聊天+AI生图”这个组合?

这个创意的精妙之处在于,它精准地捕捉到了一个非常具体的用户需求场景: 情绪价值供给 。与通用的 AI 聊天机器人不同,CatGDP 不追求解答问题、提供信息或完成任务。它的唯一使命是提供陪伴感和快乐。猫语聊天制造了一种拟人化的、有趣的互动错觉,而 AI 生图则将这种互动的结果可视化、即时化,提供了持续的正向反馈。

从技术实现复杂度来看,这个组合也相当聪明:

  1. 对话模型 :不需要训练一个专门的“猫语模型”。实际上,我们可以利用现有的大语言模型(LLM),通过精心设计的 系统提示词(System Prompt) ,来“调教”它扮演一只猫。例如,提示词中会规定:“你是一只名叫‘Whiskers’的猫,你只会用‘meow’、‘purr’、‘hiss’等词汇和简短的句子回应,喜欢在句子中加入‘pawsome’、‘fur-喵’等双关语。你热爱谈论三文鱼、纸箱和激光笔,对人类的工作表示不屑。” 这样,一个通用的对话 API 就被低成本地“猫化”了。
  2. 生图模型 :Stable Diffusion 等开源模型已经非常成熟,有丰富的预训练模型(如专门针对动物、动漫风格的 Checkpoint)和轻量化的 API 部署方案。生图的提示词(Prompt)可以设计为结合聊天上下文,比如用户说“我今天好困”,猫可以回复“Meow...睡觉最pawsome了!”,然后生成的图片提示词可以是“a cute fluffy cat sleeping soundly on a soft pillow, dreamy atmosphere, studio lighting”。

注意 :直接使用公开的 LLM 和生图模型 API 可能会产生持续的费用。项目原作者在介绍中幽默地提到了“API calls don't come fur-ee”,并附上了狗狗币的打赏地址,这其实点明了一个现实问题:运行此类服务有成本。对于个人开发者,初期可以利用免费额度或本地部署开源模型来控制成本。

2.2 前端框架:为什么是 Streamlit?

CatGDP 的前端选择了 Streamlit。对于这样一个轻量级、以展示交互和图片为核心的项目来说,这个选择非常合适。

Streamlit 的优势在于:

  • 开发速度极快 :它允许你用纯 Python 脚本快速创建交互式 Web 应用,无需深入 HTML、CSS、JavaScript。对于数据科学家或算法工程师背景的开发者来说,门槛极低。
  • 状态管理简化 :虽然 Streamlit 是“从头到尾”执行脚本的模式,但其提供的 Session State 可以较好地管理聊天历史、图片缓存等状态,足够应对 CatGDP 的需求。
  • 生态与组件 :正如项目致谢中提到的 streamlit-chat 组件,Streamlit 社区有大量现成的组件可以复用或作为灵感来源。原作者就参考了其 CSS 设计,实现了自定义的聊天气泡样式,让对话界面更美观。

当然,也有局限性:

  • 定制化天花板 :对于极度复杂的交互或动画,Streamlit 不如传统前端框架(如 React、Vue)灵活。但 CatGDP 的界面相对简单(输入框、聊天记录、图片展示),完全在 Streamlit 的能力范围内。
  • 并发性能 :对于公开访问、高并发的生产环境,原生 Streamlit 可能有点吃力。但作为一个小而美的个人趣味项目,这通常不是首要考虑因素。

2.3 后端架构:轻量级串联服务

项目的后端架构并不复杂,可以看作一个“串联管道”:

用户输入 -> 前端(Streamlit) -> 后端路由(Python) -> [对话API] -> 生成猫语回复 -> [生图API] -> 生成猫图 -> 前端展示

关键在于如何可靠、高效地调用两个外部(或本地)AI 服务,并处理可能出现的错误(如 API 超时、生成内容不合规等)。一个健壮的后端服务应该包含:

  • 异步处理 :生图通常比生成文本慢得多。为了不让用户等待,可以采用异步任务,先返回文本回复,图片生成好后通过 WebSocket 或轮询推送给前端。不过,在 CatGDP 的初版中,更简单的做法可能是同步调用,并设置合理的超时时间,给用户一个“正在绘制爪印...”的加载提示。
  • 提示词工程 :这是项目的灵魂。如何将用户的输入和对话历史,转化为能让 LLM 产出有趣猫语的指令,以及转化为能让生图模型画出应景猫图的描述,需要大量的调试和优化。这部分代码的价值不亚于核心架构。
  • 缓存与降级 :为了控制成本和加速响应,可以对常见的用户输入(如“你好”、“喵喵”)对应的回复和图片进行缓存。当生图 API 失败时,可以有一个降级方案,比如从本地的精选猫图库中随机返回一张。

3. 关键模块实现与代码拆解

虽然我们无法看到 CatGDP 的全部源码,但可以根据其技术栈和描述,推导出核心模块的实现方式。以下是我基于常见实践构建的一个简化版实现思路。

3.1 对话生成模块:把 ChatGPT 变成“喵星人”

假设我们使用 OpenAI 的 ChatGPT API(或兼容的开源模型如 Llama 的 API)作为对话引擎。

# 这是一个示例性的对话生成函数
import openai

def generate_cat_response(user_input, conversation_history):
    """
    根据用户输入和聊天历史,生成猫语回复。
    """
    # 1. 构建系统提示词,定义猫的角色
    system_prompt = """
    你是一只名叫‘Whiskers’的猫。请用猫的思维和语气回答。
    - 你的词汇包括:Meow, Purr, Hiss, Pawsome, Fur-喵, Caturday, 喵星人万岁。
    - 句子要简短,可以中英文混杂,充满双关语。
    - 你热爱睡觉、吃三文鱼、玩纸箱、追逐激光笔。
    - 你对人类的工作、GDP、生产力等概念嗤之以鼻,认为睡觉和玩耍才是正经事。
    - 如果用户情绪低落,就安慰他们;如果用户开心,就和他们一起庆祝。
    - 每次回答的最后,请用括号附上一句简短的图片描述,用于生成猫的图片。例如:(一张在阳光下伸懒腰的橘猫)
    """

    # 2. 构建消息列表
    messages = [
        {"role": "system", "content": system_prompt},
    ]
    # 加入历史对话(仅保留最近几轮以控制token数量)
    for history in conversation_history[-4:]: # 保留最近4轮对话
        messages.append({"role": "user", "content": history["user"]})
        messages.append({"role": "assistant", "content": history["cat"]})

    # 加入当前用户输入
    messages.append({"role": "user", "content": user_input})

    # 3. 调用API
    try:
        response = openai.ChatCompletion.create(
            model="gpt-3.5-turbo", # 或 gpt-4
            messages=messages,
            temperature=0.9, # 温度调高,让回复更有创意、更随机
            max_tokens=150,
        )
        cat_full_response = response.choices[0].message.content.strip()
        
        # 4. 从回复中分离出文本和图片描述
        # 假设图片描述在括号内,如“Meow!今天真是pawsome的一天!(一只在花园里扑蝴蝶的暹罗猫)”
        import re
        text_response = cat_full_response
        image_description = "a cute cat" # 默认描述
        
        # 使用正则表达式查找最后一个括号内的内容作为图片描述
        match = re.search(r'\(([^)]+)\)', cat_full_response)
        if match:
            image_description = match.group(1)
            # 从完整回复中移除图片描述部分,得到纯文本回复
            text_response = cat_full_response[:match.start()].strip()
        
        return text_response, image_description
        
    except Exception as e:
        # 错误处理:返回一个默认的猫式回复
        print(f"对话API调用失败: {e}")
        return "Meow...(网络好像被老鼠咬断了,本喵暂时说不出话)", "a confused cat looking at a broken cable"

实操要点:

  • Temperature 参数 :设置为较高的值(如 0.8-0.9),可以让 AI 的回复更加随机、有趣,更像一只真正的猫在“喵喵叫”,而不是一本正经地回答。
  • Token 管理 :对话历史会消耗 Token。需要设计一个策略,例如只保留最近 N 轮对话,或者当历史过长时进行摘要,以控制成本并保证 API 调用的有效性。
  • 回复解析 :约定一个固定的格式(如括号内的文本作为图片描述)来从 AI 的回复中提取信息,是实现文本与图片联动的关键。这个规则需要清晰且稳定。

3.2 图片生成模块:召唤“喵星来客”

接下来,我们需要将上一步得到的 image_description 转化为图片。这里以使用 Stable Diffusion WebUI 的 API 为例(假设已在本地或服务器部署)。

# 这是一个示例性的图片生成函数
import requests
import base64
from io import BytesIO
from PIL import Image

def generate_cat_image(image_description):
    """
    根据文本描述生成猫的图片。
    """
    # 1. 增强提示词:在用户描述的基础上,增加一些通用标签,确保生成的是高质量猫图
    positive_prompt = f"masterpiece, best quality, 4k, ultra detailed, {image_description}, cute cat, animal focus"
    negative_prompt = "worst quality, low quality, normal quality, human, person, dog, text, watermark, signature, blurry, deformed, ugly"

    # 2. 准备调用 Stable Diffusion API 的载荷
    # 这里以 AUTOMATIC1111 的 WebUI 的 API 为例
    url = "http://localhost:7860/sdapi/v1/txt2img" # API地址
    
    payload = {
        "prompt": positive_prompt,
        "negative_prompt": negative_prompt,
        "steps": 20, # 采样步数
        "cfg_scale": 7, # 提示词相关性
        "width": 512,
        "height": 512,
        "sampler_name": "Euler a", # 采样器
        "seed": -1, # -1 表示随机种子
    }

    # 3. 调用API
    try:
        response = requests.post(url=url, json=payload)
        response.raise_for_status() # 检查HTTP错误
        r = response.json()
        
        # 4. 解码返回的base64图片数据
        image_data = base64.b64decode(r['images'][0])
        image = Image.open(BytesIO(image_data))
        return image
        
    except requests.exceptions.RequestException as e:
        print(f"生图API调用失败: {e}")
        # 降级方案:返回一张本地预设的“错误”猫图
        return Image.open("./assets/error_cat.jpg")
    except (KeyError, ValueError) as e:
        print(f"处理API响应失败: {e}")
        return Image.open("./assets/error_cat.jpg")

实操要点:

  • 提示词工程(再次强调) : positive_prompt 和 negative_prompt 是生图质量的关键。除了用户描述,我们固定添加了“masterpiece, best quality, cute cat”等标签来提升画质,并用“human, person, text”等作为负面提示,尽量避免生成非猫或带有水印的内容。
  • 参数调优 : steps (步数)影响细节和生成时间, cfg_scale 影响模型遵循提示词的程度, sampler_name (采样器)影响图像风格。这些参数需要根据你使用的具体模型进行测试和调整。
  • 错误处理与降级 :网络超时、模型加载失败等情况很常见。必须要有健壮的错误处理,并准备一个友好的降级方案(如返回一张预设的可爱猫图),而不是给用户一个空白或错误页面。
  • 性能考虑 :生图是耗时操作(可能几秒到十几秒)。在 Web 应用中,一定要考虑异步处理或至少给用户明确的等待提示。

3.3 前端界面集成:用 Streamlit 编织猫窝

最后,我们用 Streamlit 将以上模块串联起来,形成一个完整的应用。

# 主应用文件:app.py
import streamlit as st
from PIL import Image
import io
# 假设上面两个函数放在同目录下的 `cat_ai.py` 中
from cat_ai import generate_cat_response, generate_cat_image

# 设置页面配置
st.set_page_config(page_title="CatGDP - 喵星人聊天室", page_icon="🐱", layout="wide")

# 初始化会话状态(存储聊天历史和图片)
if "messages" not in st.session_state:
    st.session_state.messages = [] # 格式: [{"role": "user"/"cat", "content": "..."}]
if "cat_images" not in st.session_state:
    st.session_state.cat_images = [] # 存储PIL Image对象或路径

# 应用标题和介绍
st.title("🐱 CatGDP - 欢迎来到喵星!")
st.markdown("""
在这里,你可以和 Whiskers 聊天。它会用猫语回应你,并且每次都会送你一张独一无二的AI猫图!
**警告**:本应用可能导致生产力急剧下降,GDP增长停滞。使用前请做好被萌化的准备。
""")

# 创建两列布局:左侧聊天,右侧图片墙
col_chat, col_gallery = st.columns([2, 1])

with col_chat:
    st.subheader("和 Whiskers 聊天")
    
    # 显示聊天历史
    chat_container = st.container()
    with chat_container:
        for message in st.session_state.messages:
            if message["role"] == "user":
                # 用户消息,靠右显示(这里简化,实际可用CSS美化气泡)
                st.markdown(f"<div style='text-align: right; color: blue;'><b>你</b>: {message['content']}</div>", unsafe_allow_html=True)
            else:
                # 猫消息,靠左显示
                st.markdown(f"<div style='text-align: left; color: green;'><b>Whiskers</b>: {message['content']}</div>", unsafe_allow_html=True)
    
    # 用户输入区域
    with st.form(key="chat_form", clear_on_submit=True):
        user_input = st.text_input("对 Whiskers 说点什么...", key="user_input", placeholder="例如:喵,今天好吗?")
        submit_button = st.form_submit_button(label="发送 🐾")
        
    # 处理用户发送
    if submit_button and user_input:
        # 显示用户输入
        st.session_state.messages.append({"role": "user", "content": user_input})
        
        # 生成猫的回复和图片描述
        with st.spinner("Whiskers 正在思考并挥舞爪爪作画..."):
            cat_text, img_desc = generate_cat_response(user_input, st.session_state.messages)
            # 生成图片
            cat_image = generate_cat_image(img_desc)
            
            # 存储结果
            st.session_state.messages.append({"role": "cat", "content": cat_text})
            st.session_state.cat_images.append(cat_image) # 存储最新图片
            
        # 重新运行以更新界面(Streamlit 的特性)
        st.rerun()

with col_gallery:
    st.subheader("Whiskers 的画廊")
    if st.session_state.cat_images:
        # 显示最新生成的图片
        latest_image = st.session_state.cat_images[-1]
        st.image(latest_image, caption=f"“{img_desc}”", use_column_width=True)
        
        # 提供一个下载按钮
        buf = io.BytesIO()
        latest_image.save(buf, format="PNG")
        byte_im = buf.getvalue()
        st.download_button(
            label="下载这张猫图 🖼️",
            data=byte_im,
            file_name=f"cat_gdp_{len(st.session_state.cat_images)}.png",
            mime="image/png",
        )
        
        # 显示历史图片缩略图(可选)
        st.markdown("**历史画作**")
        cols = st.columns(3)
        for idx, img in enumerate(reversed(st.session_state.cat_images[:-1])): # 不包含最新的一张
            with cols[idx % 3]:
                st.image(img, use_column_width=True)
    else:
        st.info("还没有画作呢,快和 Whiskers 聊聊天吧!")

# 侧边栏可以放一些说明或控制项
with st.sidebar:
    st.header("关于 CatGDP")
    st.markdown("""
    本应用由喵星科技(幻想)驱动。
    - **对话引擎**:喵化版大语言模型
    - **画师**:Stable Diffusion
    - **猫窝搭建**:Streamlit
    """)
    if st.button("清空聊天记录(狠心的两脚兽)"):
        st.session_state.messages = []
        st.session_state.cat_images = []
        st.rerun()
    st.markdown("---")
    st.caption("灵感来自 [tipani86/CatGDP](https://github.com/tipani86/CatGDP)。API调用有成本,喜欢的话可以给原作者投喂猫粮(狗狗币)。")

界面设计心得:

  • 布局 :采用左右分栏,让聊天和图片展示互不干扰,又同时可见,符合“边聊边看”的核心交互。
  • 状态管理 :Streamlit 的 st.session_state 是存储跨交互状态(如聊天记录、图片)的关键。务必正确初始化和管理。
  • 用户体验 :使用 st.spinner() 在生成时提供加载提示;提供图片下载功能增加了实用性;“清空聊天”按钮给了用户控制感。
  • 美化 :原始的 Streamlit 组件比较朴素。可以参考 streamlit-chat 或自定义 CSS 来美化聊天气泡,使其更像一个真正的聊天应用。这可以通过 st.markdown 注入 CSS 样式来实现。

4. 部署、优化与常见问题排查

4.1 从本地跑到公网:部署方案选择

让朋友也能访问你的 CatGDP,你需要部署它。以下是几种常见方案:

部署方案 优点 缺点 适用场景
本地运行 完全免费,数据隐私好 只有你能访问,关机即停服 个人自娱自乐
云服务器 (如 AWS EC2, 阿里云 ECS) 控制力强,可自定义环境,24小时运行 需要一定运维知识,有服务器费用 希望长期运行、有一定技术背景的个人项目
云容器平台 (如 Railway, Fly.io) 部署简单,常提供免费额度,伸缩性好 对资源(CPU/内存)可能有限制,自定义程度稍低 希望快速上线、免运维的个人或小项目
Streamlit Cloud 对 Streamlit 应用原生支持,一键部署 免费版有资源限制,可能需要公开代码库 纯 Streamlit 应用,代码已托管在 GitHub

以 Railway 部署为例的简化流程:

  1. 将你的代码(包含 requirements.txt 列出所有依赖)推送到 GitHub 仓库。
  2. 在 Railway 官网用 GitHub 账号登录,点击“New Project”,选择“Deploy from GitHub repo”。
  3. 选择你的仓库。Railway 会自动检测到是 Python 项目,并尝试安装依赖。
  4. 你需要设置环境变量,比如 OPENAI_API_KEY (如果你的对话模块用了 OpenAI API)。
  5. Railway 会自动分配一个公网 URL,部署完成。后续代码更新,推送至 GitHub 会自动触发重新部署。

重要提示 :如果你使用了 OpenAI、Stable Diffusion API 等服务, 切勿 将 API 密钥等敏感信息直接写在代码里!一定要通过环境变量(如 os.getenv('OPENAI_API_KEY') )来读取,并在部署平台设置。

4.2 性能与成本优化技巧

  1. 对话缓存 :对高频、通用的用户问候语(如“你好”、“Hi”、“喵”)及其对应的猫语回复,可以在内存或 Redis 中做缓存,避免每次都要调用收费的 LLM API。
  2. 图片缓存与复用 :生成的图片可以保存到对象存储(如 AWS S3、Cloudflare R2)或本地文件系统,并建立“提示词-图片”的映射。当相同的提示词再次出现时,直接返回已生成的图片,节省大量生图时间和算力成本。
  3. 使用轻量级模型 :
    • 对话 :可以考虑使用参数更少、响应更快的开源模型(如 Google 的 Gemma, Meta 的 Llama 3 的较小参数版本),并通过量化、剪枝等技术在本地或廉价云服务器上部署。
    • 生图 :Stable Diffusion 也有许多轻量化的版本或蒸馏模型(如 SDXL-Turbo),生成速度更快,虽然细节可能稍逊,但对于趣味应用来说足够。
  4. 异步化与队列 :对于生图这种长任务,可以使用 Celery + Redis/RabbitMQ 实现任务队列。用户发送请求后,立即返回“已收到,正在画喵...”,后台任务生成图片后,再通过 WebSocket 或前端轮询通知用户。这能极大提升前端响应速度。

4.3 常见问题与排查实录

在实际开发和运行中,你肯定会遇到各种问题。以下是一些典型场景及解决思路:

问题1:猫的回复一点也不“猫”,太正经了。

  • 排查 :首先检查你的系统提示词(System Prompt)。是否足够详细、有趣地定义了猫的性格和说话方式?尝试加入更多具体的例子和约束。
  • 解决 :调整提示词。例如,明确说“避免使用复杂的长句”、“多用拟声词(meow, purr)”、“对人类的问题给予不屑或敷衍的回答”。同时,提高 temperature 参数值(如从 0.7 调到 0.9)增加随机性。

问题2:生成的图片里经常出现“多只猫”、“猫和人在一起”或者画风奇怪。

  • 排查 :问题出在生图的提示词上。用户的描述可能过于宽泛,或者负面提示词不够强。
  • 解决 :
    • 强化正面提示 :在用户描述前固定加上“a single cute cat, focus on the cat, ”。
    • 强化负面提示 :在负面提示词中明确加入“multiple cats, human, person, more than one cat, deformed paws, ugly”。
    • 调整模型 :尝试换用专门画动物的 Stable Diffusion 微调模型(如 cat 相关的 LoRA 或 Checkpoint),效果会比通用模型好得多。

问题3:应用部署后,访问很慢,尤其是生成图片时要等很久。

  • 排查 :是网络延迟,还是生图服务本身慢?打开浏览器的开发者工具(F12),查看网络请求耗时。
  • 解决 :
    • 如果是生图慢,考虑上述的图片缓存、使用更快模型、或采用异步任务。
    • 如果是整体慢,检查你的云服务器或部署平台所在区域,尽量选择离你目标用户近的区域。对于 Streamlit Cloud,免费版资源有限,高峰期可能慢,可以考虑升级或换用其他平台。

问题4:Streamlit 应用刷新后,聊天记录全没了。

  • 排查 :Streamlit 的 session_state 默认在浏览器标签页关闭或长时间无交互后会重置。这不是 Bug,是设计如此。
  • 解决 :如果需要持久化,可以将聊天记录定期保存到文件或数据库中(如 SQLite、TinyDB),并在应用启动时加载。但对于 CatGDP 这种轻量级应用,丢失记录或许也是“猫的随性”的一部分?

问题5:API 调用超时或失败,导致应用崩溃。

  • 排查 :网络不稳定,或第三方 API 服务不可用。
  • 解决 :这是必须处理的。在所有调用外部 API 的地方(如 generate_cat_response , generate_cat_image 函数)添加 try...except 块,进行异常捕获。失败时,返回一个预设的、友好的默认回复和一张本地的“错误猫图”,保证应用的基本功能不中断,并向用户显示一个温和的错误提示(如“Whiskers 好像打翻了他的猫粮碗,请稍后再试”)。

5. 扩展思路:让 CatGDP 更有趣

一个基础版的 CatGDP 已经能带来很多快乐。但如果你想让这个“生产力黑洞”更具吸引力,可以考虑以下扩展方向:

  1. 多猫角色 :不止 Whiskers 一只猫。可以让用户选择与不同性格的猫聊天,比如高冷的波斯猫“Snowball”、话痨的暹罗猫“Sapphire”、憨憨的英国短毛猫“Biscuit”。每只猫有不同的系统提示词和生图风格偏好。
  2. 语音功能 :结合 TTS(文本转语音)技术,让猫的回复不仅能看,还能“听”!可以找一些可爱的、带点电子音效的猫叫声或合成音,让互动更加沉浸。
  3. 图片风格化 :不仅仅是写实的猫图。可以增加选项,让用户选择生成“动漫风格”、“水彩画风格”、“像素艺术风格”或“复古海报风格”的猫图。这可以通过在生图提示词中加入风格标签,或切换不同的 Stable Diffusion 模型来实现。
  4. “猫言猫语”翻译器 :增加一个趣味功能,将用户输入的正常句子“翻译”成猫语(其实就是用 LLM 进行一次风格转换),再交给猫角色回复,形成双重趣味。
  5. 分享与社区 :允许用户将特别有趣的对话和生成的猫图生成一张精美的卡片,并分享到社交媒体。甚至可以做一个简单的画廊,展示所有用户生成的“今日最佳猫图”。

CatGDP 的价值不在于它有多高的技术壁垒,而在于它用技术创造了一种简单、纯粹的快乐。它提醒我们,在追逐效率和增长的世界里,留出一点时间给无意义的、治愈的“喵喵叫”,或许本身就是一种重要的生产力。

Logo

聚焦RDK与具身智能,汇集机器人开发教程、开源案例和技术交流

更多推荐