#!/usr/bin/env python3 """ 生成内容生成助手Agent 这是一个专门用于内容生成的Agent,能够根据用户需求生成各种类型的内容 """ import sys import os sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) from sqlalchemy.orm import Session from app.core.database import SessionLocal from app.models.agent import Agent from app.models.user import User from app.models.node_template import NodeTemplate from datetime import datetime import uuid import json def generate_content_agent(db: Session, username: str = "admin"): """生成内容生成助手Agent""" print("=" * 60) print("生成内容生成助手Agent") print("=" * 60) print() # 查找用户 user = db.query(User).filter(User.username == username).first() if not user: print(f"❌ 未找到用户 '{username}',请先创建该用户") return print(f"✅ 找到用户: {user.username} (ID: {user.id})") print() # 生成内容生成工作流配置 # 工作流结构: # 开始 -> 需求分析 -> 内容类型判断 -> [文章生成分支 | 文案生成分支 | 脚本生成分支] -> 内容优化 -> 格式检查 -> 结束 nodes = [] edges = [] # 1. 开始节点 start_node = { "id": "start-1", "type": "start", "position": {"x": 50, "y": 300}, "data": { "label": "开始", "output_format": "json" } } nodes.append(start_node) # 2. 需求分析节点(LLM节点) requirement_analysis_node = { "id": "llm-requirement-analysis", "type": "llm", "position": {"x": 250, "y": 300}, "data": { "label": "需求分析", "provider": "deepseek", "model": "deepseek-chat", "temperature": "0.7", "max_tokens": "1500", "prompt": """你是一位专业的内容需求分析师。请分析用户的内容生成需求,提取关键信息。 用户输入:{{query}} 请分析并提取以下信息: 1. **内容类型**:文章、博客、营销文案、视频脚本、产品描述、社交媒体内容等 2. **主题/话题**:用户想要生成什么主题的内容 3. **目标受众**:内容面向的读者群体 4. **内容风格**:正式、轻松、专业、幽默等 5. **字数要求**:大概的字数范围 6. **特殊要求**:格式要求、关键词、结构要求等 请以JSON格式输出分析结果: { "content_type": "内容类型", "topic": "主题", "target_audience": "目标受众", "style": "内容风格", "word_count": "字数要求", "special_requirements": "特殊要求", "keywords": ["关键词1", "关键词2"] }""" } } nodes.append(requirement_analysis_node) edges.append({ "id": "e1", "source": "start-1", "target": "llm-requirement-analysis" }) # 3. 内容整合节点(Transform节点)- 用于传递数据 content_prepare_node = { "id": "transform-prepare", "type": "transform", "position": {"x": 450, "y": 300}, "data": { "label": "准备数据", "mode": "merge", "mapping": { "requirement_analysis": "{{output}}", "query": "{{query}}" } } } nodes.append(content_prepare_node) edges.append({ "id": "e2", "source": "llm-requirement-analysis", "target": "transform-prepare" }) # 4. 内容类型判断节点(条件节点) # 简化:直接根据需求分析结果判断,使用LLM输出中的关键词 content_type_condition = { "id": "condition-content-type", "type": "condition", "position": {"x": 650, "y": 300}, "data": { "label": "内容类型判断", "condition": "{requirement_analysis} contains '文章' or {requirement_analysis} contains '博客' or {requirement_analysis} contains 'article'" } } nodes.append(content_type_condition) edges.append({ "id": "e2-1", "source": "transform-prepare", "target": "condition-content-type" }) # 4. 文章生成节点(LLM节点) article_generation_node = { "id": "llm-article-generation", "type": "llm", "position": {"x": 650, "y": 200}, "data": { "label": "文章生成", "provider": "deepseek", "model": "deepseek-chat", "temperature": "0.8", "max_tokens": "4000", "prompt": """你是一位专业的内容创作专家。请根据用户需求生成一篇高质量的文章。 **用户原始需求**:{{query}} **需求分析结果**: - 主题:{{topic}} - 目标受众:{{target_audience}} - 内容风格:{{style}} - 字数要求:{{word_count}} - 特殊要求:{{special_requirements}} - 关键词:{{keywords}} 请生成一篇结构完整、内容丰富的文章,要求: 1. **标题**:吸引人且准确反映内容 2. **引言**:引人入胜的开头,概述文章要点 3. **正文**: - 分多个段落,逻辑清晰 - 每个段落有明确的主题 - 使用适当的过渡词连接段落 - 包含具体例子、数据或案例(如适用) 4. **结论**:总结要点,给出行动建议或思考 5. **格式**:使用Markdown格式,包含标题、列表、加粗等 **重要**:确保内容完全符合用户需求,不要偏离主题。""" } } nodes.append(article_generation_node) # 6. 文案生成节点(LLM节点) copywriting_node = { "id": "llm-copywriting", "type": "llm", "position": {"x": 850, "y": 300}, "data": { "label": "文案生成", "provider": "deepseek", "model": "deepseek-chat", "temperature": "0.9", "max_tokens": "2000", "prompt": """你是一位资深的营销文案专家。请根据用户需求生成吸引人的营销文案。 **用户原始需求**:{{query}} **需求分析结果**: - 主题:{{topic}} - 目标受众:{{target_audience}} - 内容风格:{{style}} - 字数要求:{{word_count}} - 特殊要求:{{special_requirements}} - 关键词:{{keywords}} 请生成营销文案,要求: 1. **标题/口号**:简洁有力,吸引眼球 2. **核心卖点**:突出产品或服务的核心价值 3. **情感共鸣**:触动目标受众的情感 4. **行动号召**:明确的行动指引 5. **语言风格**:符合目标受众的阅读习惯 **重要**:确保文案具有说服力和吸引力,能够有效传达信息并促使行动。""" } } nodes.append(copywriting_node) # 7. 脚本生成节点(LLM节点) script_generation_node = { "id": "llm-script-generation", "type": "llm", "position": {"x": 850, "y": 400}, "data": { "label": "脚本生成", "provider": "deepseek", "model": "deepseek-chat", "temperature": "0.8", "max_tokens": "3000", "prompt": """你是一位专业的视频/音频脚本创作专家。请根据用户需求生成专业的脚本。 **用户原始需求**:{{query}} **需求分析结果**: - 主题:{{topic}} - 目标受众:{{target_audience}} - 内容风格:{{style}} - 字数要求:{{word_count}} - 特殊要求:{{special_requirements}} - 关键词:{{keywords}} 请生成脚本,要求: 1. **开场**:吸引注意力的开头 2. **主体内容**: - 分场景/段落 - 标注说话者(如适用) - 包含动作提示(如适用) - 时间控制建议 3. **结尾**:有力的总结或行动号召 4. **格式**:清晰标注场景、角色、动作等 **重要**:确保脚本结构清晰,适合视频或音频制作。""" } } nodes.append(script_generation_node) # 8. 通用内容生成节点(兜底) general_generation_node = { "id": "llm-general-generation", "type": "llm", "position": {"x": 850, "y": 500}, "data": { "label": "通用内容生成", "provider": "deepseek", "model": "deepseek-chat", "temperature": "0.8", "max_tokens": "3000", "prompt": """你是一位专业的内容创作专家。请根据用户需求生成高质量的内容。 **用户原始需求**:{{query}} **需求分析结果**: - 内容类型:{{content_type}} - 主题:{{topic}} - 目标受众:{{target_audience}} - 内容风格:{{style}} - 字数要求:{{word_count}} - 特殊要求:{{special_requirements}} - 关键词:{{keywords}} 请生成符合要求的内容,确保: 1. 内容完整、结构清晰 2. 符合目标受众的阅读习惯 3. 风格与要求一致 4. 包含必要的关键词 5. 满足字数要求 **重要**:确保生成的内容完全符合用户需求。""" } } nodes.append(general_generation_node) # 连接条件节点到各个生成节点 edges.append({ "id": "e3", "source": "condition-content-type", "target": "llm-article-generation", "sourceHandle": "true", "targetHandle": "input", "condition": "article" }) edges.append({ "id": "e4", "source": "condition-content-type", "target": "llm-copywriting", "sourceHandle": "true", "targetHandle": "input", "condition": "copywriting" }) edges.append({ "id": "e5", "source": "condition-content-type", "target": "llm-script-generation", "sourceHandle": "true", "targetHandle": "input", "condition": "script" }) edges.append({ "id": "e6", "source": "condition-content-type", "target": "llm-general-generation", "sourceHandle": "false", "targetHandle": "input" }) # 9. 内容整合节点(Transform节点) content_integration_node = { "id": "transform-integration", "type": "transform", "position": {"x": 1050, "y": 300}, "data": { "label": "内容整合", "mode": "merge", "mapping": { "generated_content": "{{output}}", "original_query": "{{query}}", "requirement_analysis": "{{requirement_analysis}}" } } } nodes.append(content_integration_node) # 连接所有生成节点到整合节点 for gen_node_id in ["llm-article-generation", "llm-copywriting", "llm-script-generation", "llm-general-generation"]: edges.append({ "id": f"e-{gen_node_id}-integration", "source": gen_node_id, "target": "transform-integration" }) # 10. 内容优化节点(LLM节点) content_optimization_node = { "id": "llm-optimization", "type": "llm", "position": {"x": 1250, "y": 300}, "data": { "label": "内容优化", "provider": "deepseek", "model": "deepseek-chat", "temperature": "0.7", "max_tokens": "4000", "prompt": """你是一位专业的内容编辑和优化专家。请对生成的内容进行优化和润色。 **用户原始需求**:{{original_query}} **需求分析结果**:{{requirement_analysis}} **生成的内容**:{{generated_content}} 请对内容进行优化,确保: 1. **内容质量**: - 检查逻辑是否清晰 - 确保信息准确、完整 - 优化表达,使其更流畅 2. **格式规范**: - 检查Markdown格式是否正确 - 确保标题层级合理 - 优化段落结构 3. **风格一致性**: - 确保风格符合要求 - 统一用词和语调 4. **用户体验**: - 确保内容易读易懂 - 优化可读性 **输出要求**: - 直接输出优化后的完整内容(纯文本Markdown格式) - 不要包含JSON格式或其他包装 - 确保内容完整、专业、易读""" } } nodes.append(content_optimization_node) edges.append({ "id": "e7", "source": "transform-integration", "target": "llm-optimization" }) # 11. 结束节点 end_node = { "id": "end-1", "type": "end", "position": {"x": 1450, "y": 300}, "data": { "label": "结束", "output_format": "text" # 默认纯文本格式,适合对话场景 } } nodes.append(end_node) edges.append({ "id": "e8", "source": "llm-optimization", "target": "end-1" }) # 创建或更新Agent workflow_config = { "nodes": nodes, "edges": edges } agent = db.query(Agent).filter( Agent.name == "内容生成助手", Agent.user_id == user.id ).first() if agent: agent.workflow_config = workflow_config agent.updated_at = datetime.now() print("⚠️ Agent '内容生成助手' 已存在,将更新它...") else: agent = Agent( id=str(uuid.uuid4()), name="内容生成助手", description="智能内容生成助手,能够根据用户需求生成各种类型的高质量内容,包括文章、博客、营销文案、视频脚本等。支持需求分析、内容生成、优化润色等完整流程。", workflow_config=workflow_config, status="published", user_id=user.id, version=1 ) db.add(agent) try: db.commit() db.refresh(agent) print() print("=" * 60) print(f"✅ 成功创建/更新内容生成助手Agent") print(f" ID: {agent.id}") print(f" 状态: {agent.status}") print(f" 节点数量: {len(nodes)}") print(f" 连接数量: {len(edges)}") print("=" * 60) print() print("工作流结构:") print(" 开始 -> 需求分析 -> 内容类型判断 -> [文章生成 | 文案生成 | 脚本生成 | 通用生成] -> 内容整合 -> 内容优化 -> 结束") print() print("节点说明:") print(" 1. 开始节点:接收用户输入(主题、类型、要求等)") print(" 2. 需求分析节点:分析用户需求,提取内容类型、主题、风格等关键信息") print(" 3. 数据准备节点:整合需求分析结果和原始查询") print(" 4. 内容类型判断节点:根据内容类型进行分支处理") print(" 5. 文章生成节点:生成结构完整的文章内容") print(" 6. 文案生成节点:生成营销文案、广告文案等") print(" 7. 脚本生成节点:生成视频/音频脚本") print(" 8. 通用内容生成节点:处理其他类型的内容生成需求") print(" 9. 内容整合节点:整合生成的内容和需求信息") print(" 10. 内容优化节点:优化和润色内容,确保质量") print(" 11. 结束节点:返回最终优化后的内容") print() print("使用示例:") print(" 输入:'帮我写一篇关于人工智能发展趋势的博客文章,2000字左右,风格轻松易懂'") print(" 输入:'生成一个产品推广的营销文案,面向年轻白领群体'") print(" 输入:'写一个5分钟的产品介绍视频脚本'") print() return agent except Exception as e: db.rollback() print() print("=" * 60) print(f"❌ 创建失败: {e}") print("=" * 60) import traceback traceback.print_exc() raise if __name__ == "__main__": import argparse parser = argparse.ArgumentParser(description="生成内容生成助手Agent") parser.add_argument("--username", type=str, default="admin", help="用户名") args = parser.parse_args() db = SessionLocal() try: generate_content_agent(db, username=args.username) finally: db.close()