基于腾讯云AIGC与OpenClaw框架构建自动化内容生成系统

📅 发布时间:2026/8/6 4:17:03
基于腾讯云AIGC与OpenClaw框架构建自动化内容生成系统
1. 项目缘起从“感知”到“创造”的AI进化之路最近在折腾一个挺有意思的项目我把它叫做“给龙虾装手”。这听起来有点无厘头但背后其实是我们团队在探索AIGC人工智能生成内容应用时一个很自然的延伸思考。过去一两年我们见证了AI在“感知”层面的巨大飞跃给它装上“眼睛”图像识别、“耳朵”语音识别、“嘴巴”语音合成它就能看、能听、能说像一个初生的婴儿开始理解世界。但理解之后呢如何让它从被动的信息接收者变成主动的创造者这就是我们这次尝试的核心——赋予AI一双“会创造的手”。这个想法的落地我们选择了腾讯云的AIGC能力作为“大脑”和“工具箱”而“手”的载体则是一个我们内部称之为“OpenClaw”的自动化执行框架。简单来说OpenClaw负责理解任务、拆解步骤、调用工具并执行而腾讯云的文生图、文生文等模型则提供了最核心的“创意”和“内容”生成能力。两者的结合目标就是打造一个能根据自然语言指令自动完成从创意构思到内容产出的全流程系统。比如你告诉它“帮我做一份关于夏日饮品的社交媒体海报”它不仅能生成文案和图片还能自动排版、调整尺寸甚至模拟发布流程。这不再是单点的AI能力调用而是一个完整的、端到端的“创造”工作流。我之所以对这个项目充满热情是因为它触及了AIGC应用的下一阶段从“玩具”和“助手”走向“生产者”。很多团队已经接入了各种AI API但往往停留在手动输入提示词、等待输出、再手动处理结果的阶段。这个过程是割裂的效率瓶颈依然存在。而“OpenClaw x 腾讯云AIGC”的组合试图打通这最后一公里让AI的创造力能够自动化、流水线化地释放出来。接下来我就把自己在搭建这套系统时从架构设计、腾讯云产品选型、核心链路实现到实际踩坑的全过程毫无保留地分享出来。无论你是想构建自己的AI智能体还是希望将AIGC深度集成到业务中相信这些实操细节都能给你带来直接的参考。2. 核心架构解析OpenClaw如何驱动腾讯云AIGC“动手”在深入代码之前我们必须先厘清整个系统的骨架。OpenClaw并非一个现成的开源项目它是我们基于对AI智能体Agent工作流的理解自行设计的一套轻量级框架。它的核心思想是“任务规划-工具调用-执行监督”。而腾讯云的AIGC能力在这里被抽象为一系列最强大的“工具”。2.1 OpenClaw框架的三层设计我们的架构主要分为三层大脑层Orchestrator这是系统的指挥中心。它接收用户的自然语言指令例如“写一首关于秋天的诗并配一张水墨风格的图”并利用一个大语言模型LLM进行任务规划。这里我们直接使用了腾讯云的混元大模型作为“大脑”。它的作用是理解用户意图并将模糊的指令拆解成一个具体的、可执行的任务列表。比如上述指令会被拆解为步骤一调用“文生文”工具生成诗歌步骤二根据生成的诗歌意境调用“文生图”工具生成图片步骤三调用“图片处理”工具将图文进行简单合成。工具层Toolkit这是“手”所能使用的所有“工具”的集合。每个工具都是一个封装好的函数有明确的输入、输出和调用方式。在这一层我们集成了腾讯云丰富的AIGC产品腾讯云TI-ONE平台提供了稳定的文生图、图生图能力。我们将其封装为generate_image(prompt, style, size)工具。腾讯云混元大模型API除了作为大脑也作为文生文的核心工具封装为generate_text(prompt, max_tokens)用于写文案、写诗、写代码等。腾讯云音视频处理封装了语音合成TTS工具text_to_speech(text, voice_type)让创造的内容可“听”。其他云服务如对象存储COS用于存放生成的图片音频云函数SCF用于编排更复杂的流程等。执行层Executor这一层负责具体“动手”。它接收来自大脑层的任务列表按顺序或并行地调用工具层对应的函数并管理整个执行过程的状态成功、失败、中间结果。它还包含一个简单的“监督”机制比如检查图片是否生成成功、内容是否符合基本安全规范等。这个三层架构的优势在于解耦。大脑只负责思考“要做什么”工具层定义“能做什么”执行层负责“怎么做”。当腾讯云更新了新的AIGC模型比如出了新的画风我们只需要在工具层更新或新增一个工具函数大脑和执行层基本无需改动系统的创造能力就得到了扩展。2.2 为什么选择腾讯云AIGC作为“工具箱”市面上AIGC的API选择很多我们最终锚定腾讯云是经过一番对比和实际测试的主要基于以下几点考量产品体系的完整性与协同性腾讯云的AIGC能力不是孤立的点而是与其庞大的云产品体系深度集成。这意味着生成的图片可以直接存入COS触发的处理流程可以用云函数来编排监控日志可以接入CLS。这种“生成-存储-计算-运维”的一站式体验对于构建稳定、可运维的生产级应用至关重要减少了大量跨平台集成的麻烦。模型效果与稳定性在多次对比测试中腾讯混元大模型在中文理解、上下文关联和指令遵循方面表现相当出色特别符合国内用户的表达习惯。其文生图模型在亚洲人脸、中文场景元素的生成上也有较好的本地化优化。更重要的是作为国内云大厂其API服务的稳定性和SLA保障是许多初创公司或开源模型无法比拟的这对于需要7x24小时自动运行的“创造之手”来说是基础。安全与合规的内置考量这是企业应用无法回避的问题。腾讯云的AIGC服务内置了内容安全审核机制这对于自动化生成内容的场景是一道重要的“安全阀”。我们在工具层可以方便地接入其内容安全CMS服务对生成的结果进行先审后发避免了潜在的风险。成本与资源的平衡腾讯云提供了清晰的按量计费和资源包模式。结合我们的使用场景任务不连续但单次任务可能消耗较多Token按量计费比盲目预留资源更划算。同时新用户和活动提供的资源包在项目初期能有效降低成本。注意模型选型没有绝对的最好只有最适合。如果你的场景极度追求极致的图像艺术效果可能需要结合Stable Diffusion等开源模型如果对多模态推理要求极高可能会考虑其他专精的模型。我们的选择是基于“企业级应用、全链路集成、中文场景优先”的综合权衡。3. 实操搭建从零组装你的“AI创造之手”理论讲完我们进入最实际的动手环节。我会以“自动生成小红书风格的探店推文配图”这个具体任务为例带你一步步搭建系统。假设我们的指令是“生成一篇推荐市中心新开咖啡馆‘豆语’的小红书文案并配三张不同角度的INS风店铺环境图。”3.1 环境准备与腾讯云资源初始化首先你需要一个腾讯云账号。在 控制台 中我们需要开通并获取以下几项关键资源访问密钥SecretId SecretKey这是调用所有API的通行证。在“访问管理”-“API密钥管理”中创建。务必妥善保管切勿泄露或上传到Git等公开仓库。建议在服务器环境变量中配置。# 在部署服务器的 ~/.bashrc 或服务配置中设置 export TENCENT_SECRET_ID你的SecretId export TENCENT_SECRET_KEY你的SecretKey开通AIGC相关服务混元大模型在“产品”中搜索“混元”进入控制台开通。通常需要实名认证。TI-ONE AI开发平台搜索“TI-ONE”开通后在“模型服务”中可以看到“文生图”等服务需要同意相关协议。对象存储COS创建一个存储桶Bucket用于存放生成的图片。记住地域如ap-beijing和桶名称。本地/服务器开发环境Python 3.8 环境。安装腾讯云Python SDK核心库tencentcloud-sdk-python以及我们可能用到的其他服务SDK。pip install tencentcloud-sdk-python cos-python-sdk-v53.2 工具层封装将腾讯云API变成可调用的“工具”我们创建一个tools.py文件来封装核心的AIGC工具。这里以文生图和文生文为例。# tools.py import json import base64 from tencentcloud.common import credential from tencentcloud.common.profile.client_profile import ClientProfile from tencentcloud.common.profile.http_profile import HttpProfile from tencentcloud.tione.v20220105 import tione_client, models as tione_models from tencentcloud.hunyuan.v20230901 import hunyuan_client, models as hunyuan_models from qcloud_cos import CosConfig, CosS3Client import sys import os # 从环境变量读取密钥 secret_id os.environ.get(TENCENT_SECRET_ID) secret_key os.environ.get(TENCENT_SECRET_KEY) region ap-beijing # 以北京为例 cos_bucket your-bucket-1250000000 # 你的COS桶名 # 初始化COS客户端用于上传图片 cos_config CosConfig(Regionregion, SecretIdsecret_id, SecretKeysecret_key) cos_client CosS3Client(cos_config) def init_hunyuan_client(): 初始化混元大模型客户端 cred credential.Credential(secret_id, secret_key) http_profile HttpProfile() http_profile.endpoint hunyuan.tencentcloudapi.com client_profile ClientProfile() client_profile.httpProfile http_profile return hunyuan_client.HunyuanClient(cred, region, client_profile) def init_tione_client(): 初始化TI-ONE客户端 cred credential.Credential(secret_id, secret_key) http_profile HttpProfile() http_profile.endpoint tione.tencentcloudapi.com client_profile ClientProfile() client_profile.httpProfile http_profile return tione_client.TioneClient(cred, region, client_profile) class AIGCToolkit: staticmethod def generate_text(prompt, max_tokens500): 工具使用混元大模型生成文本 参数 prompt: 详细的提示词 max_tokens: 生成的最大长度 返回生成的文本字符串 try: client init_hunyuan_client() req hunyuan_models.ChatCompletionsRequest() # 构建请求参数混元模型ID需参考最新文档 req.Model hunyuan-lite # 示例模型可根据需要选择hunyuan-pro等 req.Messages [ {Role: user, Content: prompt} ] req.Stream False req.MaxTokens max_tokens resp client.ChatCompletions(req) # 解析响应具体字段名需参考SDK文档 if hasattr(resp, Choices) and len(resp.Choices) 0: return resp.Choices[0].Message.Content else: return 文本生成失败未收到有效响应。 except Exception as e: return f调用文本生成API时出错{str(e)} staticmethod def generate_image(prompt, stylerealistic, size1024x1024): 工具使用TI-ONE文生图服务生成图片并自动上传至COS 参数 prompt: 图片描述提示词 style: 风格如realistic, anime, oil_painting等取决于模型支持 size: 图片尺寸如768x768, 1024x1024 返回存储在COS上的图片URL try: client init_tione_client() req tione_models.CreateTextToImageJobRequest() # 注意TI-ONE API参数可能随版本更新此处为示例请以官方文档为准 req.Input json.dumps({ Prompt: prompt, Style: style, Width: int(size.split(x)[0]), Height: int(size.split(x)[1]), # 可能还需要其他参数如NegativePrompt, NumImages等 }) req.OutputConfig json.dumps({ Bucket: cos_bucket, Region: region, # 可以指定Key前缀如generated_images/ }) # 需要指定具体的服务ID需在TI-ONE控制台创建服务后获取 req.ServiceId service-xxxxxx resp client.CreateTextToImageJob(req) job_id resp.JobId # 在实际应用中这里需要增加轮询逻辑等待异步任务完成 # 假设轮询后获取到图片的COS Key为 image_key image_key fgenerated_images/{job_id}.png # 生成预签名URL便于直接访问有效期可设 image_url cos_client.get_presigned_download_url( Bucketcos_bucket, Keyimage_key, Expired3600 # 1小时有效 ) return image_url except Exception as e: return f调用图片生成API时出错{str(e)} # 可以继续封装其他工具如TTS等实操心得封装工具时错误处理至关重要。AIGC API调用可能因为网络、参数、配额等原因失败必须用try-except包裹并返回结构化的错误信息方便上层执行层判断任务状态。另外TI-ONE的文生图通常是异步任务实际代码中需要实现一个轮询函数定期检查任务状态直到成功或失败。这里为了示例清晰简化了这部分逻辑。3.3 大脑层实现让混元大模型学会“任务规划”大脑层的核心是让LLM理解指令并输出结构化的任务计划。我们创建一个orchestrator.py。# orchestrator.py from tools import AIGCToolkit import json class TaskOrchestrator: def __init__(self): self.llm AIGCToolkit.generate_text # 直接使用我们封装的工具 def plan_tasks(self, user_instruction): 根据用户指令规划任务序列。 返回一个任务列表每个任务是一个字典。 # 构造一个详细的提示词引导LLM进行任务分解 planning_prompt f 你是一个智能任务规划助手。请将用户的指令分解为一系列具体的、可执行的任务步骤。 可用的工具包括 1. generate_text: 根据提示词生成文本内容。 2. generate_image: 根据提示词生成图片并返回图片URL。 3. 未来可扩展其他工具 用户指令{user_instruction} 请以JSON格式输出任务计划格式如下 {{ tasks: [ {{ id: 1, tool: 工具名称, params: {{参数名: 参数值}}, description: 任务描述 }}, ... ] }} 请确保任务顺序合理后一个任务可以使用前一个任务的结果。 # 调用混元大模型获取规划结果 plan_result self.llm(planning_prompt, max_tokens800) # 尝试从返回的文本中解析JSON try: # LLM的回复可能包含解释性文字我们需要提取JSON部分 # 这里是一个简单的查找实际应用中可能需要更鲁棒的解析 start_idx plan_result.find({) end_idx plan_result.rfind(}) 1 if start_idx ! -1 and end_idx ! 0: json_str plan_result[start_idx:end_idx] plan json.loads(json_str) return plan.get(tasks, []) else: raise ValueError(未在模型回复中找到有效的JSON结构) except (json.JSONDecodeError, ValueError) as e: print(f解析任务计划失败: {e}) print(f模型原始回复: {plan_result}) # 失败时返回一个兜底的简单计划 return [ {id: 1, tool: generate_text, params: {prompt: f写一篇小红书风格的文案主题是{user_instruction}}, description: 生成推荐文案}, {id: 2, tool: generate_image, params: {prompt: fINS风咖啡馆内部环境温馨明亮有咖啡机和绿植, style: realistic, size: 1024x1024}, description: 生成配图1}, # ... 可以生成多个图片任务 ]踩坑实录让LLM稳定输出结构化的JSON是一大挑战。初期我们直接让模型输出JSON它有时会在JSON前后加上额外的描述或markdown符号导致解析失败。我们的解决方案是1. 在提示词中明确要求“只输出JSON”2. 在代码中增加更健壮的解析逻辑比如使用正则表达式匹配最外层的{}3. 设置一个“兜底计划”当解析失败时根据指令关键词触发一个预设的简单任务流保证系统至少能运行下去而不是完全崩溃。3.4 执行层与主流程串联最后我们创建executor.py和主程序main.py把一切串联起来。# executor.py import time class TaskExecutor: def __init__(self, toolkit): self.toolkit toolkit self.results {} # 存储每个任务的结果 def execute(self, tasks): 按顺序执行任务列表。 for task in tasks: task_id task[id] tool_name task[tool] params task.get(params, {}) print(f[执行中] 任务{task_id}: {task[description]}) # 根据工具名调用对应的方法 if hasattr(self.toolkit, tool_name): tool_func getattr(self.toolkit, tool_name) # 一个简单的参数注入允许后续任务引用前面任务的结果 # 例如params中的“{task1_result}”会被替换 processed_params self._inject_previous_results(params) result tool_func(**processed_params) self.results[task_id] result print(f[完成] 任务{task_id} 结果: {result[:100]}... if isinstance(result, str) else f[完成] 任务{task_id} 结果已保存) # 任务间可以加入短暂延迟避免API限流 time.sleep(1) else: print(f[错误] 未知工具: {tool_name}) self.results[task_id] f错误未知工具 {tool_name} return self.results def _inject_previous_results(self, params): 将参数中的占位符替换为之前任务的结果简易版 import json params_str json.dumps(params) for tid, res in self.results.items(): placeholder f{{task{tid}_result}} if placeholder in params_str: # 这里需要根据实际情况处理结果类型简单用字符串替换 params_str params_str.replace(placeholder, str(res)) return json.loads(params_str)# main.py from orchestrator import TaskOrchestrator from executor import TaskExecutor from tools import AIGCToolkit def main(): user_instruction 生成一篇推荐市中心新开咖啡馆‘豆语’的小红书文案并配三张不同角度的INS风店铺环境图。 print( OpenClaw x 腾讯云AIGC 创造之手启动 ) print(f用户指令: {user_instruction}) # 1. 初始化组件 toolkit AIGCToolkit() orchestrator TaskOrchestrator() executor TaskExecutor(toolkit) # 2. 规划任务 print(\n[阶段一] 任务规划中...) tasks orchestrator.plan_tasks(user_instruction) print(f规划出 {len(tasks)} 个任务:) for t in tasks: print(f {t[id]}. [{t[tool]}] {t[description]}) # 3. 执行任务 print(\n[阶段二] 执行任务流...) final_results executor.execute(tasks) # 4. 输出最终成果 print(\n 任务执行完成 ) print(生成的内容如下) for tid, result in final_results.items(): print(f\n--- 任务{tid}产出 ---) # 如果是URL可以格式化为可点击链接在支持的环境下 if isinstance(result, str) and result.startswith(http): print(f链接: {result}) else: print(result[:500]) # 限制文本输出长度 if __name__ __main__: main()运行这个主程序你就会看到系统开始工作先由“大脑”规划出生成文案和3张图片的任务列表然后“执行层”依次调用腾讯云的API最终将文案内容和图片链接输出。一个简单的“AI创造之手”就搭建完成了。4. 避坑指南与效能优化让“手”更稳、更快、更聪明把系统跑通只是第一步要让它在实际生产中可靠、高效地运行我们踩过了不少坑也总结了一些优化经验。4.1 任务规划的稳定性与精准度提升最初的规划提示词Prompt比较简单导致LLM分解的任务时好时坏。我们通过以下方法进行了优化提供更详细的工具说明书在规划提示词中不仅列出工具名还详细说明每个工具的输入、输出格式和适用场景。例如明确告诉LLMgenerate_image的prompt参数需要详细的视觉描述包括主体、环境、风格、光线等。引入少样本示例Few-Shot在提示词中直接给出一两个优秀的任务分解示例。这能极大地引导LLM输出符合我们预期的格式和逻辑。示例指令“为我生成一个关于健康早餐的短视频脚本并配背景音乐推荐。” 示例任务规划 { tasks: [ {id:1, tool:generate_text, params:{prompt:写一个30秒的短视频分镜脚本主题是快速制作营养健康早餐要求节奏明快有具体画面描述。}, desc:生成视频脚本}, {id:2, tool:generate_text, params:{prompt:根据上述早餐脚本轻松愉快的氛围推荐三首适合作为背景音乐的纯音乐曲目并说明理由。}, desc:推荐背景音乐}, {id:3, tool:generate_image, params:{prompt:俯拍视角一份色彩鲜艳的酸奶水果燕麦碗旁边摆着咖啡阳光从窗户洒进来INS美食摄影风格, style:realistic, size:1024x1024}, desc:生成脚本封面图} ] }增加后处理校验对LLM规划出的任务列表增加一个校验步骤。例如检查必要的工具参数是否齐全任务之间的依赖关系是否合理比如不能在没有文案的情况下生成配图描述。如果校验不通过可以尝试让LLM重新规划或触发兜底方案。4.2 处理腾讯云API的异步性与限流腾讯云的部分AIGC服务如TI-ONE的文生图是异步接口提交任务后返回一个JobId需要轮询获取结果。而所有API都有频率限制QPS。异步任务轮询模板我们编写了一个通用的轮询函数包含指数退避重试机制。def poll_async_job(job_id, get_status_func, max_attempts30, interval2): 轮询异步任务状态 import time for attempt in range(max_attempts): status get_status_func(job_id) # 调用获取状态的具体函数 if status SUCCESS: return True, 成功 elif status FAILED: return False, 任务失败 elif status RUNNING: print(f任务 {job_id} 运行中等待 {interval}秒... (尝试 {attempt1}/{max_attempts})) time.sleep(interval) interval min(interval * 1.5, 10) # 指数退避最大间隔10秒 else: return False, f未知状态: {status} return False, 轮询超时请求队列与限流器当需要批量处理多个任务时直接并发调用API很容易触发限流。我们引入了内存中的任务队列和一个简单的令牌桶限流器控制向腾讯云API发送请求的速率确保平稳运行。4.3 成本控制与效果评估AIGC生成是按Token或按次计费的无节制地调用成本会飙升。缓存机制对于相同或相似的指令例如不同用户请求生成“早安”图片如果之前生成过我们可以将结果图片COS链接、文案文本缓存起来在一定时间内直接返回缓存结果避免重复调用。这尤其适用于热点内容或模板化任务。生成结果评估与过滤不是所有AI生成的内容都直接可用。我们增加了简单的评估环节内容安全过滤调用腾讯云内容安全CMS的图片、文本审核接口对生成结果进行过滤拦截违规内容。基础质量检查例如检查生成的图片是否成功上传到COS、链接是否有效检查生成的文案是否过短或包含大量无意义字符。人工审核队列对于重要或公开的内容可以将AI生成的结果推送到一个人工审核后台确认后再发布。我们在执行层设计了一个“need_human_review”的任务状态处于此状态的任务会暂停自动流程等待人工介入。4.4 系统的可观测性与调试当自动化流程出错时定位问题可能很困难。结构化日志我们为每个任务执行过程记录详细的结构化日志包括任务ID、使用的工具、输入参数、开始时间、结束时间、结果状态成功/失败、错误信息、腾讯云返回的RequestId等。这些日志统一输出到腾讯云CLS日志服务便于查询和聚合分析。任务状态持久化将任务规划、执行状态和中间结果存储到数据库如腾讯云TDSQL或自己的MySQL。这样即使程序重启也能恢复现场知道哪些任务已完成哪些失败需要重试或人工处理。提供“干预点”在关键节点比如LLM规划出任务列表后、执行每个工具调用前可以将中间结果输出到控制台或管理界面。这给了运营人员一个检查和干预的机会可以在必要时手动修改任务参数或跳过某个任务。5. 从Demo到生产扩展你的“创造之手”应用场景基础框架搭建好后它的潜力远不止生成小红书文案。通过扩展工具集和优化任务规划我们可以应对更复杂的场景。5.1 扩展工具集增强“手”的灵活性集成多模态理解接入腾讯云的“图片理解”或“视频理解”API让OpenClaw不仅能创造还能“看”懂已有的素材。例如用户可以上传一张产品图系统能自动分析图片内容并为其生成营销文案。接入工作流引擎将生成的内容无缝接入到实际工作流。例如生成海报后自动调用“图片裁剪”工具适配不同平台尺寸再调用“微信公众号发布”或“CMS内容更新”工具实现从创意到发布的全自动化。引入搜索与知识库让“大脑”在规划任务前可以先通过搜索工具如接入腾讯云搜或外部搜索引擎获取最新信息或者从内部知识库中检索相关数据使生成的内容更具时效性和准确性。5.2 复杂场景的任务链设计面对更复杂的指令如“为我策划一个为期三天的杭州旅游攻略包含每日行程、美食推荐和预算估算并生成一份精美的PDF文档”任务规划就需要更深的层次。第一层分解LLM将指令分解为“生成文本攻略”、“收集美食图片”、“生成每日行程图”、“合成PDF”等子目标。第二层细化每个子目标再进一步分解。例如“生成文本攻略”可以分解为“生成第一天行程文本”、“生成第二天行程文本”、“生成美食推荐列表”、“生成预算表格”。任务依赖与并行明确任务间的依赖关系必须先有行程文本才能根据文本生成行程图。无依赖的任务可以并行执行以提升效率如同时生成三天的行程图。结果聚合最后需要一个“合成PDF”的任务它依赖前面所有文本和图片任务的结果将它们按模板组装成最终文档。这就需要我们升级Orchestrator使其能处理带有依赖关系的DAG有向无环图任务流而不仅仅是线性列表。5.3 个性化与持续学习当前的系统对每个用户的指令都一视同仁。我们可以引入“用户画像”或“会话记忆”让创造之手变得更个性化。记忆上下文在同一个会话中用户后续的指令如“把刚才的海报风格改成暗黑风”可以参考之前的交互历史。这需要我们在Orchestrator中维护一个会话上下文并在规划提示词中注入历史信息。风格微调如果某个用户总是喜欢某种特定的文案风格或图片风格我们可以将他的偏好作为参数在调用工具时默认注入实现个性化的内容生成。通过以上这些扩展和优化OpenClaw框架就能从一个简单的Demo进化成一个真正能在特定领域如社交媒体运营、电商内容生成、个性化报告制作发挥价值的自动化生产力工具。它的核心价值在于将人类从重复、繁琐的内容创作劳动中解放出来让我们能更专注于策略、创意和审核这些更高价值的工作。