第四章:大模型(LLM)

第八部分:Agent 教程

第九节:使用 LangGraph 和 通义千问构建GIF 动画生成器


1. 概述

GIF 动画生成器是一种将用户文本描述自动转化为短动画的智能 Agent。
通过 LangGraph 构建多节点数据流流程,将 通义千问(Tongyi Qianwen) 模型用于图像生成与动画处理,可以实现用户输入 → 图像生成 → 动画合成 → 输出 GIF 的自动化过程。

应用场景:

  • 社交媒体内容生成

  • 教育短动画制作

  • 产品宣传 GIF 制作


2. 系统设计思路

GIF 动画生成器的功能模块包括:

  1. 用户输入解析:提取动画主题、场景、风格、时长等信息。

  2. 场景图像生成:根据描述生成每一帧或关键帧图像。

  3. 帧动画生成:将多张关键帧插帧合成为动画序列。

  4. GIF 编码:将序列转换为标准 GIF 格式。

  5. 输出生成:返回 GIF 文件或可嵌入链接。

LangGraph 的作用是把每个步骤做成节点,串联成可复用的数据流图。


3. LangGraph 架构设计

节点设计示例
节点类型 功能描述 输入 输出
用户输入解析节点 解析文本生成动画参数 用户文本 JSON 参数(主题、风格、帧数、尺寸)
图像生成节点 使用通义千问生成关键帧 参数、描述文本 图片序列
插帧节点 可选:生成过渡帧 关键帧序列 完整帧序列
GIF 编码节点 将帧序列合成为 GIF 帧序列 GIF 文件
输出节点 返回结果或链接 GIF 文件 可直接展示或下载链接
数据流示意
用户输入
    │
    ▼
[用户输入解析节点] → 动画参数
    │
    ▼
[图像生成节点] → 关键帧序列
    │
    ▼
[插帧节点] → 完整帧序列
    │
    ▼
[GIF 编码节点] → GIF 文件
    │
    ▼
[输出节点] → 最终 GIF

4. LangGraph + 通义千问代码示例(Python)

假设我们使用通义千问 API 生成图像,并使用 PIL/FFmpeg 生成 GIF:

from langgraph import Graph, LLMNode
from PIL import Image
import requests
from io import BytesIO

# 创建图
gif_graph = Graph(name="GIF Generator Agent")

# 1. 用户输入解析节点
parse_input_node = LLMNode(
    name="ParseInput",
    model="gpt-5-mini",
    prompt_template="""
    解析用户输入描述:
    {user_input}
    输出 JSON,包括:
    {{
        "theme": "...",
        "style": "...",
        "frame_count": ...,
        "size": "WxH"
    }}
    """
)

# 2. 图像生成节点(调用通义千问 API)
def generate_image_sequence(params):
    theme = params["theme"]
    style = params["style"]
    frame_count = params["frame_count"]
    size = params["size"]
    images = []
    for i in range(frame_count):
        # 假设调用通义千问接口返回图片 URL
        response = requests.post("https://openapi.tongyi.com/image/generate", json={
            "prompt": f"{theme}, {style}, frame {i+1}",
            "size": size
        }).json()
        img_url = response["image_url"]
        img = Image.open(BytesIO(requests.get(img_url).content))
        images.append(img)
    return images

# 3. GIF 编码节点
def create_gif_node(frame_sequence, duration=200):
    output_path = "output.gif"
    frame_sequence[0].save(
        output_path,
        save_all=True,
        append_images=frame_sequence[1:],
        duration=duration,
        loop=0
    )
    return output_path

# 4. 将节点添加到图
gif_graph.add_nodes([parse_input_node])

# 5. 自定义执行逻辑
user_input = "一个可爱的小猫在海边奔跑,动画风格卡通,5帧"
parsed_params = parse_input_node.run(inputs={"user_input": user_input})
frames = generate_image_sequence(parsed_params["ParseInput"])
gif_file = create_gif_node(frames)
print("GIF 已生成:", gif_file)

5. 优化建议

  1. 插帧平滑动画:可使用 AI 插帧模型生成中间帧,使动画流畅。

  2. 多风格支持:在输入解析中添加风格选项(如水彩、像素、卡通)。

  3. 自定义帧率:根据帧数和时长计算动画速度。

  4. 并行生成帧:利用多线程或异步请求加快生成速度。

  5. GIF 压缩:优化输出 GIF 文件大小,适合社交平台分享。


6. 总结

  • 使用 LangGraph 可以将 GIF 动画生成流程模块化,清晰可控。

  • 通义千问负责生成高质量图像,使动画内容丰富多样。

  • 通过节点组合,实现从文本描述到 GIF 输出的自动化。

  • 可拓展性强,方便加入风格选择、插帧优化、动画特效等功能。

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐