Loading...
Loading...
自媒体运营自动化技能,支持小红书、抖音、微信公众号、视频号等平台的内容生成、图片生成、数据管理和自动化发布。包含 Tavily API 搜索、内容生成、图片生成、HAP 数据管理和自动化发布等完整流程。新增每日热点内容推荐功能。图片生成支持并行生成、自动下载、自动跳过已存在图片等优化功能。强制要求从 HAP "账号人设" 表读取账号人设配置,禁止使用本地文件。
npx skill4agent add garfield-bb/hap-skills-collection social-media-automation{"hap-mcp-{应用名称}": {"url": "https://api.mingdao.com/mcp?HAP-Appkey=...&HAP-Sign=..."}}mcp_hap-mcp-_get_app_info()get_app_worksheets_list()get_app_worksheets_list()aliasnameget_worksheet_structure()用户请求
↓
1. 识别用户提供的 MCP 配置或指定的 MCP
↓
2. 调用 get_app_info() 确认当前连接的 MCP 应用
↓
3. 对比:当前连接 vs 用户指定的 MCP
↓
4. 如果不匹配 → 与用户确认
↓
5. 确认后执行操作用户输入主题
↓
Step 1: 从 HAP "API服务配置" 表动态读取搜索 API 配置(Tavily/Serper)
↓
Step 2: 调用搜索 API 获取主题相关资料(Tavily API)
↓
Step 3: **【强制要求】从 HAP "账号人设" 表读取账号人设配置(必须在生成内容之前执行)**
- **禁止使用本地文件**:绝对不允许使用 `AGENTS.md` 或其他本地文件作为账号人设来源
- **必须调用 HAP MCP**:必须通过 MCP 调用 `get_record_list()` 从 HAP "账号人设" 表读取
- **读取流程**:
1. 确认当前连接的 HAP MCP 应用(通过 `get_app_info()`)
2. 动态获取"账号人设"表的 ID(通过别名 `account_persona` 或名称 `账号人设` 匹配)
3. 根据 `platform_type` 查询对应平台的账号人设(如:小红书)
4. **读取所有必需字段**:
- 账号定位(positioning)
- 目标受众(target_audience)
- 内容方向(content_direction)
- 内容风格(content_style)**【必须严格遵循】**
- 内容原则(content_principles)**【必须严格遵守】**
- 图片生成提示词(image_generation_prompt)
- **验证要求**:如果未找到账号人设配置,必须抛出异常,不允许继续生成内容
↓
Step 4: 根据搜索结果和账号人设撰写内容
- **严格遵循账号人设**:必须严格按照从 HAP 读取的 `content_style` 和 `content_principles` 生成内容
- **禁止使用本地人设**:不允许参考或使用本地 `AGENTS.md` 文件中的内容
- **结合搜索资料**:将搜索到的资料与从 HAP 读取的账号人设结合,生成符合账号定位的内容
- **确保符合人设**:确保内容符合目标受众、内容方向和账号定位
↓
Step 5: 生成封面标题(5-10个备选)
- 根据账号人设的内容风格生成标题
- 符合账号定位和目标受众
↓
Step 6: 选择话题标签(从 HAP 话题库)
- 根据内容主题和账号人设的内容方向选择
↓
Step 7: 生成配图建议
- 结合账号人设的图片生成提示词风格
- 根据内容主题生成配图建议
↓
Step 8: 保存到本地文件(预览,按笔记目录结构组织)
↓
Step 9: 与用户确认内容、标题、图片
↓
Step 10: 用户确认后,从 HAP "账号人设" 表读取图片生成提示词(图片风格)
↓
Step 11: 从 HAP "API服务配置" 表动态读取图片生成功能配置
↓
Step 12: 结合图片风格提示词和配图建议,生成完整提示词
↓
Step 13: 提取密钥,生成图片(可选,使用配置的 API 服务)
↓
Step 14: 与用户确认是否直接发布至小红书
↓
Step 15: 与用户确认是否同步到 HAP,确认后才上传
- **小红书笔记**:只上传图片 URL(封面图和其他配图),不上传 Markdown 文档
- **其他平台**:根据平台需求上传图片和文档
- **关联选题(如果适用)**:
- 如果内容是基于选题库中的选题创作的,在创建内容记录时关联对应的选题(`related_topic` 字段)
- 如果内容不是基于选题创作的,不关联选题
↓
Step 16: 发布到目标平台(使用 Playwright MCP,如用户确认)用户请求热点内容推荐
↓
Step 1: 从 HAP "热点平台关注表" 读取用户关注的平台(is_followed = 1)
- 按优先级(priority)排序
- 获取平台代码(platform_code)
↓
Step 2: 从 HAP "API服务配置" 表读取热点新闻 API 配置
- 功能名称:热点新闻API
- 服务类型:热点新闻
- Endpoint URL: https://orz.ai/api/v1/dailynews
↓
Step 3: 调用热点新闻 API 获取各平台热点
- 对每个关注的平台调用:GET https://orz.ai/api/v1/dailynews/?platform={platform_code}
- 获取热点标题、URL、评分、描述等信息
- 合并所有平台的热点数据
↓
Step 4: 从 HAP "账号人设" 表读取账号人设配置
- 账号定位(positioning)
- 目标受众(target_audience)
- 内容方向(content_direction)
- 内容风格(content_style)
- 内容原则(content_principles)
↓
Step 5: 基于热点和账号人设分析选题
- 筛选与账号定位和内容方向相关的热点
- 分析每个热点的选题价值(热度、相关性、可创作性)
- 生成 5-10 个选题建议,每个选题包含:
- 选题标题
- 来源平台
- 选题角度(如何结合账号人设)
- 预期内容方向
- 推荐理由
- 相关度评分(1-10分)
- **按相关度评分排序,标注最推荐的选题**
↓
Step 6: 以 Markdown 表格形式展示选题建议,供用户选择
- **必须使用 Markdown 表格格式展示**,更加直观
- **表格结构**:
- 最推荐选题表格(AI 相关或评分 10/10 的选题)
- 其他推荐选题表格(评分 6-9/10 的选题)
- **表格列**:序号、选题标题、来源平台、选题角度、推荐理由、相关度评分
- **明确标注最推荐的选题**(如:⭐ 最推荐选题)
- 展示所有选题建议
- 用户选择一个或多个选题
↓
Step 6.5: 询问用户是否将选题加入选题库
- **询问用户**:是否将推荐的选题加入 HAP "选题库" 表
- **询问方式**:在展示选题建议后,询问"是否将这些选题加入选题库?"
- 如果用户确认,将用户选择的选题保存到 HAP "选题库" 表:
- `topic_title`: 选题标题
- `source_platform`: 来源平台(关联热点平台关注表,使用平台记录的 rowid)
- `topic_angle`: 选题角度
- `recommendation_reason`: 推荐理由
- `relevance_score`: 相关度评分
- `source_url`: 原文链接
- `content_preview`: 内容预览
- `topic_status`: 选题状态(默认:待创作)
- 如果用户不加入,跳过此步骤
- **批量保存**:如果用户选择了多个选题,使用 `batch_create_records` 批量保存
↓
Step 7: 用户选择选题后,深度搜索相关资料
- 从 HAP "API服务配置" 表读取搜索 API 配置(Tavily)
- 基于选题标题和角度,调用搜索 API 获取深度资料
- 结合热点新闻中的原始信息
↓
Step 8: 基于热点信息和搜索资料生成内容
- 结合热点信息(原始标题、描述、URL)
- 结合搜索到的深度资料
- 严格遵循账号人设中的内容风格和内容原则
- 生成符合账号定位的内容
↓
Step 9: 后续流程与标准内容生成流程相同
- 生成封面标题(5-10个备选)
- 选择话题标签(从 HAP 话题库)
- 生成配图建议
- 保存到本地文件(预览)
- 与用户确认内容、标题、图片
- 生成图片(用户确认后)
- 同步到 HAP(用户确认后):
- **如果内容是基于选题库中的选题创作的**:
- 在创建内容记录时,关联对应的选题(`related_topic` 字段)
- 更新选题状态为"创作中"或"已创作"
- 选题库中的 `related_content` 字段会自动关联已创作的内容(双向关联)
- **如果内容不是基于选题创作的**:
- 不关联选题,`related_topic` 字段留空
- 发布到目标平台(用户确认后)https://orz.ai/api/v1/dailynewsGETplatformGET https://orz.ai/api/v1/dailynews/?platform=baidu
GET https://orz.ai/api/v1/dailynews/?platform=weibo
GET https://orz.ai/api/v1/dailynews/?platform=zhihu{
"status": "200",
"data": [
{
"title": "热点标题",
"url": "热点链接",
"score": "热度评分",
"desc": "热点描述"
}
],
"msg": "success"
}is_followed = 1priorityplatform_code## ⭐ 最推荐选题(AI 相关,强烈推荐)
| 序号 | 选题标题 | 来源平台 | 选题角度 | 推荐理由 |
|------|---------|---------|---------|---------|
| 1 | 选题标题1 | 平台1 | AI 技术科普 | 符合账号定位... |
## 📌 其他推荐选题
| 序号 | 选题标题 | 来源平台 | 选题角度 | 推荐理由 | 相关度 |
|------|---------|---------|---------|---------|--------|
| 1 | 选题标题2 | 平台2 | 技术趋势解读 | 符合内容方向... | 8/10 |https://creator.xiaohongshu.com/publish/publish?type=image_textsetInputFiles内容管理platform_typecontent_titlecover_titlecontenttagscover_imageother_imagesmarkdown_docpublish_statuspublish_timenote_urlviewslikescollectionscommentshttps://creator.douyin.com/https://mp.weixin.qq.com/get_app_info()function_nameservice_typeconfig_status# Step 1: 确认当前连接的 MCP 应用
current_app = mcp_hap-mcp-_get_app_info()
current_app_name = current_app['data']['name']
# Step 2: 动态获取工作表列表,通过别名匹配找到"API服务配置"表
# 重要:优先使用别名(alias)匹配,不要使用硬编码的 ID
worksheets = mcp_hap-mcp-_get_app_worksheets_list()
api_config_worksheet_id = None
for ws in worksheets:
# 优先通过别名匹配,如果别名不存在则使用名称匹配
if ws.get('alias') == 'api_service_config' or ws.get('name') == 'API服务配置':
api_config_worksheet_id = ws['id']
break
if not api_config_worksheet_id:
raise Exception(f"在应用「{current_app_name}」中未找到「API服务配置」表(别名:api_service_config)")
# Step 3: 查询 Tavily 搜索 API 配置
configs = mcp_hap-mcp-_get_record_list(
worksheet_id=api_config_worksheet_id,
filter={
"type": "group",
"logic": "AND",
"children": [
{
"type": "condition",
"field": "function_name",
"operator": "contains",
"value": ["Tavily"]
},
{
"type": "condition",
"field": "config_status",
"operator": "eq",
"value": ["启用"]
}
]
}
)
# Step 4: 提取配置并调用 API
if configs and len(configs) > 0:
config = configs[0]
api_key = config.get('api_key') # Tavily API Key(必需)
endpoint_url = config.get('endpoint_url') # Endpoint URL(必需)
# 验证必需字段
if not api_key:
raise Exception("Tavily API Key 未配置,请在 HAP 'API服务配置' 表中填写 api_key 字段")
if not endpoint_url:
raise Exception("Endpoint URL 未配置,请在 HAP 'API服务配置' 表中填写 endpoint_url 字段")
# 调用 Tavily API 搜索
import requests
response = requests.post(
f"{endpoint_url}/search",
headers={"Content-Type": "application/json"},
json={
"api_key": api_key,
"query": topic, # 用户输入的主题
"search_depth": "basic",
"max_results": 5,
"topic": "general",
"include_answer": False,
"include_raw_content": False,
"include_images": False
}
)
search_results = response.json().get('results', [])
# 使用搜索结果生成内容function_nameproviderservice_typeapi_keyendpoint_urlconfig_statuspurposequerysearch_depthmax_resultstopicinclude_answerinclude_raw_contentinclude_imagesapi_keyendpoint_urlapi_keyendpoint_urlhttps://api.tavily.comapi_keyendpoint_urlAGENTS.mdget_record_list()content_stylecontent_principlesplatform_nameplatform_typeplatform_nameplatform_typepositioningtarget_audiencecontent_directioncontent_stylecontent_principlesimage_generation_prompt# Step 1: 确认当前连接的 HAP MCP 应用
current_app = mcp_hap-mcp-_get_app_info()
current_app_name = current_app['data']['name']
print(f"当前连接的 HAP 应用:{current_app_name}")
# Step 2: 通过别名匹配找到"账号人设"表(不要使用硬编码 ID)
worksheets = mcp_hap-mcp-_get_app_worksheets_list()
persona_worksheet_id = None
for ws in worksheets:
# 优先通过别名匹配,如果别名不存在则使用名称匹配
if ws.get('alias') == 'account_persona' or ws.get('name') == '账号人设':
persona_worksheet_id = ws['id']
break
if not persona_worksheet_id:
raise Exception(f"在应用「{current_app_name}」中未找到「账号人设」表(别名:account_persona)。请确保 HAP 应用中存在此表。")
# Step 3: 查询小红书账号人设(重要:必须在生成内容之前读取)
personas = mcp_hap-mcp-_get_record_list(
worksheet_id=persona_worksheet_id, # 使用通过别名匹配获取的 ID
filter={
"type": "group",
"logic": "AND",
"children": [
{
"type": "condition",
"field": "platform_type",
"operator": "eq",
"value": ["小红书"]
}
]
}
)
# Step 4: 验证是否读取到账号人设(强制要求)
if not personas or len(personas) == 0:
raise Exception(f"在应用「{current_app_name}」的「账号人设」表中未找到小红书账号人设配置。请先在 HAP 中添加账号人设记录。")
persona = personas[0]
# Step 5: 读取所有账号人设字段(必需)
positioning = persona.get('positioning') # 账号定位
target_audience = persona.get('target_audience') # 目标受众
content_direction = persona.get('content_direction') # 内容方向
content_style = persona.get('content_style') # 内容风格(必须严格遵循)
content_principles = persona.get('content_principles') # 内容原则(必须严格遵守)
image_prompt_base = persona.get('image_generation_prompt', '') # 图片风格基础提示词
# Step 6: 验证必需字段是否存在
if not content_style:
raise Exception(f"账号人设配置中缺少「内容风格」(content_style)字段,无法生成内容。")
if not content_principles:
raise Exception(f"账号人设配置中缺少「内容原则」(content_principles)字段,无法生成内容。")
# Step 7: 打印账号人设信息(用于确认)
print(f"\n✅ 已从 HAP 读取账号人设配置:")
print(f" - 账号定位:{positioning}")
print(f" - 目标受众:{target_audience}")
print(f" - 内容方向:{content_direction}")
print(f" - 内容风格:{content_style[:100]}...")
print(f" - 内容原则:{content_principles[:100]}...")
# Step 8: 根据账号人设和搜索结果生成内容
# **必须严格遵循从 HAP 读取的 content_style 和 content_principles**
# **禁止使用本地 AGENTS.md 文件或其他本地文件**
# 生成内容示例:
# 1. 根据 content_style 确定写作风格(如:通俗易懂、专业但不高冷等)
# 2. 根据 content_principles 确定内容原则(如:用简单语言解释复杂技术、避免专业术语堆砌等)
# 3. 根据 positioning 确定内容定位(如:IT公司产品经理视角)
# 4. 根据 target_audience 调整内容深度和表达方式
# 5. 根据 content_direction 确定内容主题和范围
# 6. 结合搜索结果中的资料,生成符合账号人设的内容
# 生成标题时,也要遵循从 HAP 读取的 content_style 和 positioning
# 生成配图建议时,要结合从 HAP 读取的 image_prompt_base
# 生成图片时,将从 HAP 读取的 image_prompt_base 与具体内容结合content_stylecontent_principlespositioningtarget_audiencecontent_directioncontent_stylecontent_principlescontent_stylepositioningtarget_audiencecontent_directiontarget_audience# Step 1: 通过别名匹配找到"话题库"表(不要使用硬编码 ID)
worksheets = mcp_hap-mcp-_get_app_worksheets_list()
topics_worksheet_id = None
for ws in worksheets:
# 优先通过别名匹配,如果别名不存在则使用名称匹配
if ws.get('alias') == 'topic_library' or ws.get('name') == '话题库':
topics_worksheet_id = ws['id']
break
if not topics_worksheet_id:
raise Exception(f"在应用「{current_app_name}」中未找到「话题库」表(别名:topic_library)")
# Step 2: 查询高热度话题
mcp_hap-mcp-_get_record_list(
worksheet_id=topics_worksheet_id, # 使用通过别名匹配获取的 ID
filter={
"type": "group",
"logic": "AND",
"children": [
{
"type": "condition",
"field": "heat_level",
"operator": "eq",
"value": ["高热度"]
}
]
}
)
# 查询特定平台的内容(通过别名匹配获取工作表ID)
# Step 1: 通过别名匹配找到"内容管理"表(不要使用硬编码 ID)
worksheets = mcp_hap-mcp-_get_app_worksheets_list()
content_worksheet_id = None
for ws in worksheets:
# 优先通过别名匹配,如果别名不存在则使用名称匹配
if ws.get('alias') == 'content_management' or ws.get('name') == '内容管理':
content_worksheet_id = ws['id']
break
if not content_worksheet_id:
raise Exception(f"在应用「{current_app_name}」中未找到「内容管理」表(别名:content_management)")
# Step 2: 查询小红书内容
mcp_hap-mcp-_get_record_list(
worksheet_id=content_worksheet_id,
filter={
"type": "group",
"logic": "AND",
"children": [
{
"type": "condition",
"field": "platform_type",
"operator": "eq",
"value": ["小红书"]
}
]
}
)is_defaultconfig_statusget_app_info()service_type = 图片生成config_status = 启用is_default = 1# Step 1: 确认当前连接的 MCP 应用
current_app = mcp_hap-mcp-_get_app_info()
current_app_name = current_app['data']['name']
# Step 2: 通过别名匹配找到"API服务配置"表
worksheets = mcp_hap-mcp-_get_app_worksheets_list()
api_config_worksheet_id = None
for ws in worksheets:
if ws.get('alias') == 'api_service_config' or ws.get('name') == 'API服务配置' or ws.get('name') == '密钥管理':
api_config_worksheet_id = ws['id']
break
if not api_config_worksheet_id:
raise Exception(f"在应用「{current_app_name}」中未找到「API服务配置」表(别名:api_service_config)")
# Step 3: 查询所有图片生成 API 配置(启用状态)
configs = mcp_hap-mcp-_get_record_list(
worksheet_id=api_config_worksheet_id,
filter={
"type": "group",
"logic": "AND",
"children": [
{
"type": "condition",
"field": "service_type",
"operator": "eq",
"value": ["图片生成"]
},
{
"type": "condition",
"field": "config_status",
"operator": "eq",
"value": ["启用"]
}
]
}
)
# Step 4: 选择配置(优先使用默认配置)
if configs and len(configs) > 0:
# 优先选择标记为"默认"的配置
default_config = None
for config in configs:
if config.get('is_default') == 1:
default_config = config
break
# 如果没有默认配置,使用第一个启用的配置
if not default_config:
default_config = configs[0]
config = default_config
# 根据服务提供商读取对应的配置字段
provider = config.get('provider', '').upper()
if 'TUZI' in provider:
# TUZI API (OpenAI 兼容接口)
api_key = config.get('api_key') # 必需
endpoint_url = config.get('endpoint_url', 'https://api.tu-zi.com/v1') # 必需
# 使用 OpenAI SDK 调用
elif '火山引擎' in provider or '即梦' in config.get('function_name', ''):
# 火山引擎即梦 API
access_key_id = config.get('access_key_id') # 必需
secret_access_key = config.get('secret_access_key') # 必需
region = config.get('region', 'cn-beijing')
service = config.get('service', 'cv')
api_version = config.get('api_version', 'jimeng_t2i_v31')
sdk_name = config.get('sdk_name', 'volcenginesdkcv20240606')
# 使用火山引擎 SDK 调用image_generation_promptis_default = 1api_keyendpoint_urlaccess_key_idsecret_access_keyregionservice{image_generation_prompt},{具体配图内容描述}手绘风格插画,清新活泼的卡通插画风格,{具体图片内容}response_format="url"modelpromptn=1response_format="url"size="{width}x{height}"配图/image_urls.json配图/{图片名称}.pngimage_generation_promptimage_generation_prompt{image_generation_prompt},{具体图片内容描述,与内容强相关}{image_generation_prompt},封面图内容: {具体内容描述},标题文字: "{封面标题}",使用粗体装饰性字体,带笔画和渐变效果创建一个手绘风格的插画作品,具有以下特点: 整体风格: 清新活泼的卡通插画风格,充满正能量和活力...展示"agentic 是什么"的核心概念,中心是一个可爱的大脑图标,大脑周围有多个小机器人或执行箭头,表示自主规划和执行能力3分钟搞懂 agentic AI!{image_generation_prompt},封面图内容: 展示"agentic 是什么"的核心概念,中心是一个可爱的大脑图标,大脑周围有多个小机器人或执行箭头,表示自主规划和执行能力。上方有粗体装饰性标题文字"3分钟搞懂 agentic AI!",使用粗体装饰性字体,带笔画和渐变效果,增强视觉冲击力。标题文字要醒目,占据封面重要位置,符合小红书封面图设计规范。创建一个手绘风格的插画作品...左右分屏对比,左侧展示传统AI - 一个简单的问答机形象,只能被动回答问题,用问号表示。右侧展示agentic AI - 一个智能助手形象,正在自主规划任务、执行操作,用执行箭头和任务卡片表示。中间用粗箭头连接,表示从"被动响应"到"主动执行"的转变。整体清晰易懂,色彩对比鲜明。{image_generation_prompt},{具体图片内容描述}platform_typecontent_titlecover_titlecontenttagscover_imageother_imagesmarkdown_docrelated_topicpublish_statuspublish_timenote_urlviewslikescollectionscommentsmarkdown_docrelated_contentplatform_typetopic_nametopic_typeheat_leveldescriptionlast_updatedtopic_titlesource_platformtopic_anglerecommendation_reasonrelevance_scoresource_urlcontent_previewtopic_statusrelated_contentnotesrelated_contentrelated_topicplatform_nameplatform_typepositioningtarget_audiencecontent_directioncontent_stylecontent_principlesimage_generation_promptplatform_nameplatform_codeplatform_typeis_followedprioritydescriptionlast_fetch_timebaidusspaiweibozhihutskrftpojiebilibilidoubanhuputiebajuejindouyinvtexjinritoutiaostackoverflowgithubhackernewssina_financeeastmoneyxueqiuclstenxunwangfunction_nameproviderservice_typepurposeis_defaultis_default = 1endpoint_urlhttps://orz.ai/api/v1/dailynewsapi_keyendpoint_urlhttps://api.tavily.comhttps://api.openai.com/v1https://proxy.example.comaccess_key_idsecret_access_keyapi_secrettokenapp_idapp_secretendpoint_urlhttps://api.tavily.comhttps://api.openai.com/v1https://ark.cn-beijing.volces.com/api/v3https://proxy.example.comregionserviceapi_versionsdk_nameextra_configconfig_statusnotesendpoint_urlapi_keyendpoint_urlaccess_key_idsecret_access_keyendpoint_urlapi_keyendpoint_urlapp_idapp_secretendpoint_urlendpoint_urlhttps://api.tavily.comhttps://api.openai.com/v11. 搜索资料(Tavily API)→ 获取最新信息
2. 生成内容 → 保存到本地文件(预览,按笔记目录结构:`内容/{平台}/{笔记标题}/{笔记标题}.md`)
3. 与用户确认内容、标题、图片
4. 用户确认后生成图片 → 保存到笔记目录的配图文件夹(`内容/{平台}/{笔记标题}/配图/`)
5. 与用户确认是否发布和同步
6. 用户确认后同步到 HAP:
- **小红书笔记**:只上传图片 URL(封面图和其他配图),不上传 Markdown 文档
- **其他平台**:根据平台需求上传图片和文档
7. 用户确认后发布 → 使用 Playwright 发布到目标平台
8. 发布成功 → 更新发布状态和笔记链接
目录结构说明:
- `内容/`:根目录
- `内容/{平台}/`:平台目录(小红书/抖音/微信公众号/视频号)
- `内容/{平台}/{笔记标题}/`:笔记目录,使用封面标题作为目录名
- `内容/{平台}/{笔记标题}/{笔记标题}.md`:Markdown 文档(仅本地保存,小红书不同步到 HAP)
- `内容/{平台}/{笔记标题}/配图/`:配图文件夹
重要说明:
- **小红书笔记的 Markdown 文档不同步到 HAP**,只同步图片 URL
- Markdown 文档仅保存在本地,用于预览和编辑
- 图片生成后:
1. 保存图片 URL 到 `配图/image_urls.json`
2. **下载图片到本地**:保存图片文件到 `配图/{图片名称}.png`(如:封面图.png、对比图.png),方便本地查看和展示
3. 通过 MCP 上传 URL 到 HAP(上传时使用 URL,不需要 base64)// 1. 导航到发布页面
await page.goto('https://creator.xiaohongshu.com/publish/publish?type=image_text');
// 2. 上传图片
const fileInput = await page.locator('input[type="file"]').first();
await fileInput.setInputFiles(imageFiles);
// 3. 填写标题
await page.getByRole('textbox', { name: '填写标题会有更多赞哦~' }).fill(title);
// 4. 填写正文(包含话题标签)
await page.getByRole('textbox').nth(1).fill(content + '\n\n' + tags);
// 5. 点击发布
await page.getByRole('button', { name: '发布' }).click();
// 6. 等待发布成功,获取笔记链接
// 7. 更新 HAP 记录:发布状态、发布时间、笔记链接platform_typepublish_statuspublish_timenote_url用户:帮我生成一篇关于 "Skills 科普介绍" 的小红书笔记并发布
执行流程:
1. **确认 MCP**:确认当前连接的 HAP 应用 MCP(通过用户提供或指定)
2. **读取搜索配置**:从 HAP "API服务配置" 表读取 Tavily 搜索 API 配置
3. **搜索资料**:调用 Tavily API 搜索主题相关资料(获取最新 5 条结果)
4. **【强制要求】读取账号人设**(必须在生成内容之前执行):从 HAP "账号人设" 表读取账号人设配置
- **禁止使用本地文件**:绝对不允许使用 `AGENTS.md` 或其他本地文件
- **必须调用 HAP MCP**:必须通过 MCP 调用 `get_record_list()` 从 HAP "账号人设" 表读取
- **读取所有必需字段**:
- **账号定位**(positioning):了解账号的核心定位
- **目标受众**(target_audience):了解内容面向的受众群体
- **内容方向**(content_direction):了解内容的主要方向
- **内容风格**(content_style):了解内容应该采用的风格(必须严格遵循)
- **内容原则**(content_principles):了解内容创作的原则和注意事项(必须严格遵守)
- **图片生成提示词**(image_generation_prompt):了解图片风格要求
- **验证要求**:如果未找到账号人设配置,必须抛出异常,不允许继续生成内容
5. **撰写内容**:根据搜索结果和从 HAP 读取的账号人设撰写内容
- **严格遵循账号人设**:必须严格按照从 HAP 读取的 `content_style` 和 `content_principles` 来撰写
- **禁止使用本地人设**:不允许参考或使用本地 `AGENTS.md` 文件中的内容
- **结合搜索资料**:将搜索到的资料与从 HAP 读取的账号人设结合,生成符合定位的内容
- **符合目标受众**:确保内容适合目标受众阅读
6. **生成封面标题**:根据账号人设的内容风格生成 5-10 个封面标题
- 标题风格必须符合账号人设的内容风格
- 标题要符合账号定位和目标受众
7. **选择话题标签**:从 HAP 话题库选择 5-8 个话题标签(动态查询)
- 根据内容主题和账号人设的内容方向选择
8. **生成配图建议**:结合账号人设的图片生成提示词风格,生成配图建议
9. **保存预览**:保存到本地文件(按笔记目录结构:`内容/小红书/{笔记标题}/{笔记标题}.md`)
10. **与用户确认**:与用户确认内容、标题、图片
11. **生成图片**(用户确认后):从 HAP "账号人设" 表读取图片生成提示词,从 HAP "API服务配置" 表读取图片生成配置,生成图片
12. **与用户确认发布**:与用户确认是否直接发布至小红书
13. **与用户确认同步**:与用户确认是否同步到 HAP,确认后才上传
14. **同步 HAP**(用户确认后):同步到 HAP "内容管理" 表(platform_type = 小红书)
- **只上传图片**:上传封面图和其他配图的 URL 到 HAP
- **不上传 Markdown 文档**:小红书笔记的 Markdown 文档不同步到 HAP
15. **发布内容**(用户确认后):使用 Playwright 发布到小红书
16. **更新状态**:更新 HAP 发布状态和内容链接用户:帮我生成一周的小红书笔记(7篇),主题如下:
1. Claude Code 新功能
2. AI 工具推荐
3. 大模型应用场景
...
执行流程:
1. **确认 MCP**:确认当前连接的 HAP 应用 MCP
2. **批量生成**:对每个主题重复上述流程
3. **动态读取配置**:每次生成图片时从 HAP "API服务配置" 表动态读取配置
4. **批量保存**:批量生成并保存到 HAP "内容管理" 表(platform_type = 小红书)用户:将这篇笔记发布到小红书和微信公众号
执行流程:
1. **确认 MCP**:确认当前连接的 HAP 应用 MCP
2. **读取内容**:从 HAP "内容管理" 表读取内容(platform_type = 小红书)
3. **动态获取工作表**:动态获取"内容管理"表的 ID 和字段结构
4. **适配格式**:适配不同平台的格式要求:
- 小红书:300-400字,5-8个话题标签
- 微信公众号:2000-5000字,HTML格式
5. **发布内容**:分别发布到两个平台
6. **更新 HAP**:在 HAP "内容管理" 表中创建新记录(platform_type = 微信公众号),或更新现有记录的发布状态social-media-operation/
├── AGENTS.md # 账号人设配置(可选,本地参考文件)
├── 笔记生成工作流.md # 工作流说明
├── 内容/ # 内容根目录
│ └── 小红书/ # 平台分类(小红书/抖音/微信公众号/视频号)
│ └── {笔记标题}/ # 每个笔记一个目录,使用封面标题作为目录名
│ ├── {笔记标题}.md # Markdown 文档(使用笔记标题命名)
│ └── 配图/ # 配图目录
│ ├── 封面图.png
│ ├── 架构图.png
│ └── 应用场景图.png
├── 话题库/ # 话题标签库(可选,本地参考文件)
│ └── {类型}.md
└── README.md # 项目说明
目录结构说明:
- 内容/:根目录,包含所有平台的内容
- 小红书/:平台目录,展示该平台的所有笔记标题(目录名)
- {笔记标题}/:笔记目录,使用封面标题作为目录名,更清晰直观
- {笔记标题}.md:Markdown 文档,使用笔记标题命名
- 配图/:配图文件夹,包含该笔记的所有配图
示例:
内容/
└── 小红书/
└── MCP 是什么?/ # 笔记标题作为目录名
├── MCP科普介绍.md # Markdown 文档
└── 配图/
├── 封面图.png
├── 架构图.png
└── 应用场景图.png
注意:
- 账号人设和话题库数据统一存储在 HAP 中
- 本地文件仅作为参考,实际使用时从 HAP 表读取
- 内容按笔记目录结构组织,每个笔记包含 md 文档和配图
- 目录名使用笔记标题,更清晰直观get_app_worksheets_list()get_app_info()get_record_list()get_app_worksheets_list()get_app_info()get_app_worksheets_list()account_persona账号人设get_record_list()platform_typecontent_stylecontent_principlesAGENTS.mdcontent_stylecontent_principlesimage_generation_prompt