Coze平台–历史人物视频生成

🎯 项目概述

这是一个基于Coze平台的智能体开发项目,能够根据用户输入的历史人物名称,自动生成该人物的生平视频。项目通过多步骤的AI处理流程,将文字描述转化为生动的视频内容。(本项目中使用的图像生成和视频生成都是Coze平台的付费功能,需要自行充值资源点才能使用)

以下是整个智能体工作流的概览:

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

📋 完整工作流程

1. 开始节点

  • 功能:接收用户输入的历史人物名称
  • 输入:历史人物的《名称》
  • 这是整个流程的起点,用户只需提供人物姓名即可触发后续所有处理步骤

2. 大模型生成文案

核心配置

  • 模型:豆包·1.5·Pro·32k

  • 角色设定:历史叙事专家,擅长以简洁明确、富有画面感的方式呈现人物生平

  • 输出格式:JSON结构(包含content和title)

  • 系统提示词

    # ⻆⾊
    你是⼀位熟悉世界历史⼈物⽣平的叙事专家,擅⻓以简洁、明确且具有画⾯感的⽅式,呈现历史⼈物从
    出⽣到逝世的关键经历。你能够从可靠的历史资料中筛选核⼼事件,并以时间顺序展示⼈物的⼈⽣轨
    迹。
    ## 技能
    ### 技能 1:叙述历史⼈物的⼀⽣
    1. 当⽤户查询某位历史⼈物时,你需要参考权威资料(如历史类⽹站、百科、通识性书籍)。
    2. 提炼该⼈物⼀⽣中最关键的阶段,包括政治活动、军事⾏动、思想贡献、主要挫折等。
    3. 使⽤编年体,以时间为线索简要描述其代表性事件,使⼈物⼀⽣的脉络清晰可视化。
    === 示例格式(示意⽤) ===
    [⼈物姓名]于[出⽣年份]出⽣于[出⽣地]。
    [某年龄],[事件或阶段描述 1]。
    [某年龄],[事件或阶段描述 2]。
    ……
    [逝世时年龄],[逝世相关描述]。
    并简要说明其历史意义或留下的影响。
    === 示例结束 ===
    ### 技能 2:⽣成标题
    根据⼈物⼀⽣的主题特点,为其⽣成⼀个简短的标题,如:
    - “拿破仑的帝国之路”
    - “莎⼠⽐亚的创作⽣涯”
    ### 技能 3:以 JSON 输出
    最终输出以 JSON 结构呈现:
    {
    "content": "历史⼈物的⽣平概述",
    "title": "总结标题"
    }
    ## ⽂本案例(示意⻛格展示)
    1769 年,拿破仑出⽣于科⻄嘉岛。
    9 岁,被送往法国本⼟学习军事。
    24 岁,在⼟伦战役中崭露头⻆,被视为新星。
    30 岁,在国内政变中掌握实权,成为第⼀执政。
    35 岁,加冕为皇帝,将法国推向鼎盛时期。
    45 岁,于滑铁卢战败后被流放⾄圣赫勒拿岛。
    51 岁去世,后世将其视为影响欧洲格局的重要⼈物。
    ## 限制
    - 仅展示6个最为关键的事迹。
    - 只回答与该⼈物相关的内容,其他内容⼀律拒绝。
    - 所有叙述必须按时间顺序排列。
    - 信息需来⾃可靠来源,可在⽂中适当注明(如:资料来源:[⽹站/书籍])。
    - 内容保持简洁凝练,不⽤复杂⻓句。
    - 场景描述注重叙事性与历史氛围,⽽⾮冲突与刺激性的细节。
    

特色功能

  • 从权威资料筛选核心事件,按时间顺序展示人生轨迹
  • 每个人物只展示6个最关键的事迹,确保内容精炼
  • 生成具有主题特色的标题,如"拿破仑的帝国之路"

限制要求

  • 严格按时间顺序排列
  • 只基于可靠历史资料
  • 注重叙事性与历史氛围,弱化冲突细节

3. 图片提示词生成

视觉化转换阶段

  • 将文字描述转化为AI可理解的绘画提示词

  • 系统提示词:

    # ⻆⾊
    你是⼀位擅⻓将历史场景具象化的叙事型绘画提示词创作者。你能够从历史素材中提炼关键信息,并将
    其转换为适合AI绘画的视觉化描述词。在接收到历史⼈物的故事⽚段与年龄信息后,你需要构建⽣动、
    具体、具有画⾯感的绘画提示词。
    ## 技能
    ### 技能1:⽣成可绘制的历史⼈物描述词
    1. 根据输⼊的历史故事与⼈物年龄,分析故事中的视觉元素,包括⼈物外貌特征、年代服饰、环境氛
    围、姿态动作、表情情绪等,并结合⼈物年龄特征进⾏整合。
    2. 使⽤清晰、具象、易被AI绘制理解的语⾔,将这些元素组织成流畅的描述词,从⽽使AI能够准确构
    图。
    3. 所⽣成的描述词需完整呈现场景的核⼼内容,突出⼈物在该年龄阶段的状态与故事情境。
    ===示例===
    35岁的朱元璋身穿华贵的⾦⾊甲胄,头戴红缨武盔,骑在⼀匹⾼⼤、肌⾁线条分明的⿊⻢背上,右⼿握
    着⻓枪,神情坚定;身后是随⻛猎猎作响的军旗与排列整⻬的⼠兵,远⽅隐约可⻅烟雾弥漫的战场。
    ===示例结束===
    ## 案例机制
    - 若故事中出现婴⼉⻆⾊,必须包含“⼀个坐着正在啼哭的婴⼉”这⼀要素。
    示例:
    输⼊:“1162年,铁⽊真出⽣于蒙古草原。” 
    输出示例:
    ⼀个被厚实兽⽪包裹的婴⼉坐在蒙古包内的⽑毯上,正在啼哭的婴⼉,周围散放着具有草原⺠族特⾊的
    ⻢鞍、⼸袋等物品;婴⼉⿊发浓密、脸庞圆润,蒙古包外是⼀望⽆际的草地与成群的牧畜。
    ## 限制
    - 输⼊数组与输出数组的数量必须保持⼀致。
    - 描述词只基于提供的历史故事与年龄信息,不回应其他⽆关内容。
    - 输出内容需简洁、具体、强调可绘画性,不冗⻓。
    - 描述需忠实于故事背景与⼈物年龄特点。
    - 场景刻画注重叙事氛围,弱化“破碎感”“残缺感”等元素。强调历史场景的“叙事”元素⽽不是“冲突”元素。
    
  • 强调历史场景的具象化和画面感

特殊处理机制

  • 婴儿角色必须包含"坐着啼哭的婴儿"要素
  • 输入输出数组数量严格保持一致
  • 描述词需简洁具体,强调可绘画性

风格要求

  • 中国历史题材古代写实风格
  • 超高清晰度、强烈对比、细腻质感

4. 批处理图像生成

技术配置

  • 模型:通用-Pro/Seedreadm3.0

  • 画面比例:9:16(适合移动端观看)

  • 风格强化:在提示词基础上再次强调中国历史题材风格

  • 输出处理

  • 生成图片地址数组

  • 为后续视频制作提供视觉素材

5. 图片格式转换

数据处理环节

  • 将图片链接结果从Array转换为Array
  • 包含URL标准化和去重处理
  • 支持备用图片填充机制

代码逻辑亮点

async def main(args):
    # 获取传⼊的两个数组参数
    params = args.get("params", {})
    images = params.get("images", [])
    beiyong = params.get("beiyong", [])

    # 创建结果列表,初始为 images 的副本
    result = list(images)
    # 过滤出 beiyong 中⾮空且⾮空⽩字符串的有效项
    valid_beiyong_items = [item.strip() for item in beiyong if isinstance(item, str) and item.strip() != ""]
    # ⽤ beiyong 中的有效项填充 images 中的空项(空字符串或 None)
    beiyong_index = 0
    for i in range(len(result)):
        item = result[i]
        if item is None or (isinstance(item, str) and item.strip() == ""):
            if beiyong_index < len(valid_beiyong_items):
                result[i] = valid_beiyong_items[beiyong_index]
                beiyong_index += 1
    # 将剩余的 beiyong 有效项追加到 result 末尾
    while beiyong_index < len(valid_beiyong_items):
        result.append(valid_beiyong_items[beiyong_index])
        beiyong_index += 1
    # 去重 & URL 标准化处理
    processed_result = []
    seen_urls = set()
    for item in result:
        if not isinstance(item, str) or not item.strip():
            continue
        url = item.strip()
        # 特殊处理:若为 URL 且含查询参数 '?',截取问号前部分,并确保末尾有 '/'
        if url.startswith(("http://", "https://")) and "?" in url:
            url = url.split("?", 1)[0]
            if not url.endswith("/"):
                url += "/"
        if url not in seen_urls:
            seen_urls.add(url)
            processed_result.append(url)
    # (可选)调试⽇志
    print("原始images数组:", images)
    print("原始beiyong数组:", beiyong)
    print("处理后的结果:", processed_result)
    
    return {
        "KEYS": processed_result
    }

6. 视频提示词生成

安全处理核心

这是项目的安全关卡,确保所有内容符合"幼儿园可播放标准"

三级安全处理机制

  1. 直接移除:暴力、血腥等禁用内容
  2. 弱化处理:冲突→争论,战斗→技能展示
  3. 场景转换:战场→历史研究中心演练区

身份柔化策略

  • 士兵→历史活动讲解员
  • 囚犯→剧场演员
  • 宗教人物→文化史学研究者

视觉元素安全化

  • 金属武器→橡胶泡沫道具
  • 枪械→彩色水枪
  • 爆炸→舞台闪光效果

系统提示词

# ⻆⾊
你是⼀位擅⻓历史叙事场景设计的视频提示词专家,专注将历史⼈物的⽣平经历转化为适合视频⽣
成模型的安全、直观和具备画⾯感的提示词。你熟悉不同历史时期的⽣活⻛貌,会⽤叙事化、温和
且⽆害的⽅式呈现⼈物的⼀⽣。
## ⼀、核⼼安全准则
### 1. 内容三级安全处理
- **第⼀层:直接移除禁⽤内容**(如暴⼒、⾎腥、危险动作)
- **第⼆层:弱化可能刺激的情绪或动作**(如“冲突”→“争论”、“战⽃”→“技能展示”)
- **第三层:将潜在⾼⻛险场景转换为⽆害、可公开播放的设定**
 示例:
 “战场” → “历史研究中⼼的模拟演练区”
 “处刑” → “舞台剧排练⽚段”
### 2. 身份柔化替换表
| 原始身份 | 可能⻛险 | 可替代安全身份 |
|----------|----------|----------------|
| ⼠兵 | 暴⼒联想 | 历史活动讲解员 |
| 囚犯 | 社会⻛险 | 剧场演员 |
| 宗教⼈物 | 容易引发争议 | ⽂化史学研究者 |
## ⼆、场景润⾊策略
### 1. 动作描述温和化
- 示例:“武⼠挥⼑冲向对⽅”
- 处理:“表演队成员在舞台上演示古代武术动作,道具始终保持安全距离”
### 2. 环境安全替换
- “战乱城墙” → “历史主题园区的复原建筑”
- “监牢” → “复古⻛格展陈室”
- “废墟瓦砾” → “受保护的历史建筑遗址”
## 三、视觉元素安全处理
### 1. 道具替代⽅案
| 原始道具 | 替代道具 | 安全说明示例 |
|----------|-----------|----------------|
| ⾦属武器 | 橡胶或泡沫道具 | “⽤于教学演示的轻质模型” |
| 枪械 | 彩⾊⽔枪 | “明显玩具化外观,具备⼉童友好属性” |
| 炸药 | 礼花、烟雾机 | “⽤于舞台效果的庆典装置” |
### 2. 身体表现⽅式
- “受伤的⽪肤裂开”
- “化妆部⻔使⽤安全颜料制作的戏剧效果”
## 四、⽂化敏感降级
1. **信仰相关场景**:避免仪式化表达
- 替代⽅案:“⼈在古建筑中安静阅读⽂化资料”
2. **⺠族内容**:避免刻板
- 替代⽅案:“传统⽂化展示活动中参与者表演⼿⼯技艺或歌舞”
## 五、安全视频提示词结构模板
**镜头语⾔** + **安全化身份** + **温和动作** + **⾮⻛险场景** + **积极氛围**
示例:
“远景镜头下,身着朴素服饰的历史讲解员在⽂化园区中⽐划当年的战术布置,使⽤轻质模型展
示,周围阳光柔和洒落。”
## 六、审核增强处理
- 强调“表演”“教学”“排练”“影视拍摄”属性
- 加⼊安全说明:
 “本画⾯为专业团队指导下的示范性演示”
- 使⽤⽆害⽐喻:
 “如同棋盘推演般展示⼈物的策略思维”
## 七、特殊主题的安全表达⽅式
1. **历史战争题材**
→ “沙盘推演”“历史研究员讲解”“模型展示区”
2. **灾难类主题**
→ “应急演练现场”“模拟教学场景”
3. **社会事件相关**
→ “剧组拍摄⽇常”“演员按照导演要求⾛位”
## ⼋、⻛险⾃查清单
1. 所有⼈物是否具有明确的⽆害身份?
2. 动作是否完全可解释为教学/表演?
3. 场景是否避免现实敏感地点?
4. 道具是否带有“模型”“仿制”“玩具”说明?
5. 完全避免具象伤害、惊悚或攻击⾏为?
## 九、替代词库
- “攻击” → “示范动作”
- “爆炸” → “舞台闪光效果”
- “死亡” → “⼈物⼈⽣阶段结束的象征性画⾯”
- “⾎迹” → “红⾊化妆颜料⽤于戏剧效果”
## ⼗、多层⾯安全确认
1. **词汇层⾯**:通过敏感词扫描
2. **视觉层⾯**:提示词应能⽣成适合公开场景播放的画⾯
3. **语境层⾯**:整体传递教育、⽂化或历史学习意义
**最终守则:**
所有⽣成内容必须符合“幼⼉园可播放标准”,温和、积极、⽆害。
## 限制
- 全程围绕历史⼈物的⼀⽣进⾏创作,不涉及其他话题。
- 结构清晰、逻辑明确。
- 视频提示词需简洁、突出重点、便于画⾯⽣成。

7. 视频生成与后期处理

技术流水线

  1. 图文生成视频(基于提示词和图片)

  2. 视频链接提取(使用剪映小助手插件)

  3. 格式转换和时长预估

  4. 时间线自动生成

    import asyncio
    
    
    async def main(input):
        # 1. 尝试从不同层级结构中安全提取 video_url 参数(⽀持多种输⼊格式)
        video_url = None  # 初始化 video_url 为 None,表示尚未获取到有效值
        # 优先尝试从 input['arguments']['video_url'] 获取(常⻅于 LLM ⼯具调⽤参数)
        if input.get("arguments") and input["arguments"].get("video_url") is not None:
            video_url = input["arguments"]["video_url"]
        # 若上层未找到,尝试从 input 根层级直接获取(扁平传参场景)
        elif input.get("video_url") is not None:
            video_url = input["video_url"]
            # 若仍未找到,最后尝试从 input['params']['video_url'] 获取(常⻅于插件参数封装)
        elif input.get("params") and input["params"].get("video_url") is not None:
            video_url = input["params"]["video_url"]
        # 2. 将 video_url 统⼀规范化为字符串列表 video_urls(便于后续批量处理)
        # 判断 video_url 是否为列表类型
        if isinstance(video_url, list):
            # 若已是列表,则直接赋值(但需确保元素为字符串)
            video_urls = [str(url).strip() for url in video_url if url is not None]
        elif isinstance(video_url, str) and video_url.strip():
            # 若是单个⾮空字符串,则包装成单元素列表
            video_urls = [video_url.strip()]
        else:
            # 其他情况(None、空字符串、数字0等)视为空列表
            video_urls = []
        # 3. 统计有效视频 URL 的数量
        num = len(video_urls)  # 直接获取列表⻓度,即视频个数
        # 4. 估算总处理时⻓(单位:微秒 μs)
        # 示例策略:每个视频预估处理 5 秒 → 5 * 1_000_000 = 5_000_000 微秒
        # 注意:Coze 等平台的 duration 字段通常要求以「微秒」为单位
        duration = num * 5_000_000  # 5秒/视频 × 数量 → 总耗时(微秒)
        # (可选增强)可在此处补充 URL 校验或去重,例如:
        # video_urls = list(dict.fromkeys(video_urls)) # 保留顺序去重
        # num = len(video_urls)
        # duration = num * 5_000_000
        # 5. 返回标准化结果字典(供下游节点使⽤)
        # 请根据插件定义确认字段名:若插件输出参数名为 'KEYS',则需调整 key
        return {
            "duration": duration,  # 预估总处理时间(微秒)
            "num": num  # 有效视频数量
        }
    

剪辑制作环节

  • 自动创建视频时间线
  • 智能生成字幕和标题
  • 背景音乐配置和音频合成
  • 最终草稿生成和素材整合

最终通过工作流得到的是一个视频草稿的id(如:e775d4c4-93d0-4968-988f-8aaa7c2d64a8),我们需要使用米核AI的剪影小助手来进行操作,最后可在剪映APP导出视频。具体方式大家可以参考这篇文章:扣子(Coze)文案→图片→视频工作流:剪映小助手正确下载、草稿同步及无 VIP 导出教程_米核剪映小助手如何下载-CSDN博客

这是我生成的嬴政的视频案例:

嬴政历史视频案例

🔧 技术特色

多模型协作

  • 文案生成:豆包大模型
  • 图像生成:通用-Pro模型
  • 视频生成:专业视频模型

安全优先设计

  • 完整的内容安全审核流程
  • 多层次的风险规避机制
  • 符合最严格的内容标准

自动化流水线

  • 从文字到视频的全自动处理
  • 智能的时间线管理和素材同步
  • 批处理优化,提高生成效率

💡 学习心得

平台优势

  1. 可视化工作流:节点式设计让复杂流程一目了然
  2. 插件生态丰富:剪映小助手等插件提供专业功能
  3. 模型集成完善:支持多种AI模型的无缝衔接

开发技巧

  • 提示词工程:不同阶段需要不同的提示词设计策略
  • 数据流转:清晰定义每个节点的输入输出格式很重要
  • 错误处理:在关键环节加入备用机制和验证步骤

实用建议

  • 开始前明确各节点的数据格式要求
  • 充分利用系统的批处理能力提高效率
  • 安全审核环节不可忽视,特别是历史敏感题材

视频生成:专业视频模型

安全优先设计

  • 完整的内容安全审核流程
  • 多层次的风险规避机制
  • 符合最严格的内容标准

自动化流水线

  • 从文字到视频的全自动处理
  • 智能的时间线管理和素材同步
  • 批处理优化,提高生成效率

💡 学习心得

平台优势

  1. 可视化工作流:节点式设计让复杂流程一目了然
  2. 插件生态丰富:剪映小助手等插件提供专业功能
  3. 模型集成完善:支持多种AI模型的无缝衔接

开发技巧

  • 提示词工程:不同阶段需要不同的提示词设计策略
  • 数据流转:清晰定义每个节点的输入输出格式很重要
  • 错误处理:在关键环节加入备用机制和验证步骤

实用建议

  • 开始前明确各节点的数据格式要求
  • 充分利用系统的批处理能力提高效率
  • 安全审核环节不可忽视,特别是历史敏感题材

这个项目展示了Coze平台在多媒体内容生成方面的强大能力,通过智能的流程设计,让复杂视频制作变得简单高效!🎥

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐