social-media-automation
自媒体运营自动化技能
触发条件
当用户提到以下内容时自动触发:
- "生成小红书笔记"
- "发布到小红书"
- "生成自媒体内容"
- "发布到抖音/公众号/视频号"
- "自媒体运营"
- "社交媒体内容生成"
- "批量生成内容"
- "每日热点推荐"
- "热点内容推荐"
- "根据热点生成内容"
MCP 配置说明
重要原则
本 Skill 是通用的,不包含任何硬编码的 MCP 配置或密钥信息。
MCP 使用流程
-
用户提供 MCP 配置
- 用户会提供 HAP 应用的 MCP 配置信息
- MCP 配置格式:
{"hap-mcp-{应用名称}": {"url": "https://api.mingdao.com/mcp?HAP-Appkey=...&HAP-Sign=..."}} - 或用户明确指定使用哪个 MCP
-
确认当前连接的 MCP
- 执行操作前,必须先调用
mcp_hap-mcp-_get_app_info()确认当前连接的 HAP 应用 - 如果用户提供了 MCP 配置,需要确认是否匹配
- 执行操作前,必须先调用
-
从 HAP 动态读取配置
- 所有 API 密钥和配置都存储在 HAP "API服务配置" 表中
- 使用时动态从表中读取,不在代码中硬编码
- 通过
get_app_worksheets_list()动态获取工作表列表 - 优先通过别名(alias)匹配工作表,如果别名不存在则使用名称(name)匹配
- 绝对不要使用硬编码的工作表 ID
-
工作表动态识别(重要)
- 不假设工作表 ID 是固定的,必须通过别名或名称匹配
- 通过
get_app_worksheets_list()获取工作表列表 - 优先通过
alias字段匹配,如果不存在则使用name字段匹配 - 通过
get_worksheet_structure()获取工作表结构 - 通过字段名称或别名匹配所需字段
MCP 确认流程
用户请求
↓
1. 识别用户提供的 MCP 配置或指定的 MCP
↓
2. 调用 get_app_info() 确认当前连接的 MCP 应用
↓
3. 对比:当前连接 vs 用户指定的 MCP
↓
4. 如果不匹配 → 与用户确认
↓
5. 确认后执行操作
核心能力
1. 内容生成流程
完整工作流
用户输入主题
↓
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` 字段留空
- 发布到目标平台(用户确认后)
热点新闻 API 使用说明:
API 地址: https://orz.ai/api/v1/dailynews
请求方式: GET
参数:
platform: 平台代码(必需),支持的平台代码见"热点平台关注表"说明
请求示例:
GET 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"
}
配置说明:
- 在 HAP "API服务配置" 表中添加一条记录:
- 功能名称:热点新闻API(标题字段)
- 服务提供商:orz.ai
- 服务类型:热点新闻(从下拉列表选择)
- Endpoint URL:https://orz.ai/api/v1/dailynews(**必需填写**)
- 用途说明:用于获取各平台的热点新闻数据,支持每日热点内容推荐
- 配置状态:启用
热点平台关注表配置:
- 用户需要在 HAP "热点平台关注表" 中添加关注的平台
- 设置
is_followed = 1(勾选)表示关注此平台 - 设置
priority(优先级,1-10)控制获取顺序 platform_code必须与热点新闻 API 支持的平台代码一致
选题建议展示格式(重要):
- 必须使用 Markdown 表格格式展示选题建议,更加直观
- 表格结构示例:
## ⭐ 最推荐选题(AI 相关,强烈推荐) | 序号 | 选题标题 | 来源平台 | 选题角度 | 推荐理由 | |------|---------|---------|---------|---------| | 1 | 选题标题1 | 平台1 | AI 技术科普 | 符合账号定位... | ## 📌 其他推荐选题 | 序号 | 选题标题 | 来源平台 | 选题角度 | 推荐理由 | 相关度 | |------|---------|---------|---------|---------|--------| | 1 | 选题标题2 | 平台2 | 技术趋势解读 | 符合内容方向... | 8/10 | - 必须明确标注最推荐的选题(如:⭐ 最推荐选题、相关度评分 10/10)
- 按相关度评分排序,最推荐的选题放在最前面
- 每个选题包含:标题、来源平台、选题角度、推荐理由、相关度评分
- 不要在对话中生成文件,直接在对话中以 Markdown 表格形式展示
2. 平台支持
小红书
内容格式:
- 标题:10字以内,疑问式/数字式/痛点式/反差式
- 正文:300-400字,故事化开头,结构清晰
- 话题标签:5-8个,从 HAP 话题库选取
- 图片:封面图 + 2-3张配图
发布流程:
- 导航到
https://creator.xiaohongshu.com/publish/publish?type=image_text - 上传图片(使用
setInputFiles) - 填写标题
- 填写正文(包含话题标签)
- 点击发布
HAP 工作表:
- 工作表名:
内容管理(通用表,支持多平台) - 字段:
platform_type: 平台类型(SingleSelect: 小红书/抖音/微信公众号/视频号/其他)content_title: 内容标题(标题字段)cover_title: 封面标题content: 正文内容tags: 话题标签(空格分隔)cover_image: 封面图(附件)other_images: 其他配图(附件)markdown_doc: Markdown 文档(附件)publish_status: 发布状态(草稿/待发布/已发布/已取消)publish_time: 发布时间note_url: 内容链接(发布后更新,不同平台可能叫法不同)views: 浏览量likes: 点赞数collections: 收藏数comments: 评论数
抖音
内容格式:
- 视频时长:15-60秒
- 文案:不超过50字
- 话题标签:3-5个
发布流程:
- 导航到
https://creator.douyin.com/ - 上传视频
- 填写文案
- 添加话题
- 点击发布
微信公众号
内容格式:
- 标题:不超过64字
- 正文:2000-5000字(HTML格式)
- 摘要:文章摘要
- 封面:封面图片
发布流程:
- 导航到
https://mp.weixin.qq.com/ - 点击"写新文章"
- 填写标题、正文、摘要
- 设置封面图
- 点击发布
视频号
内容格式:
- 视频时长:30秒-30分钟
- 文案:不超过1000字
- 话题:3-5个
发布流程:
- 登录视频号管理后台
- 点击"发布视频"
- 上传视频
- 填写文案和话题
- 点击发布
3. 搜索资料(Tavily API)
使用 Tavily API 搜索相关资料
API 服务配置管理:
搜索 API 配置统一存储在 HAP "API服务配置" 表中,按功能分类,每个功能一条记录包含所有配置字段。
重要:配置是动态获取的,不硬编码
配置读取流程:
- 确认 MCP 连接:先确认当前连接的 HAP 应用 MCP(通过
get_app_info()) - 查询配置:从 HAP "API服务配置" 表查询搜索 API 配置
- 匹配配置:根据
function_name(功能名称,如"Tavily 搜索API")或service_type(服务类型:搜索API)匹配配置 - 验证状态:验证
config_status(配置状态)为"启用" - 读取配置:读取该功能的所有配置字段(API Key、Base URL 等)
Tavily API 配置示例:
# 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', [])
# 使用搜索结果生成内容
Tavily API 配置字段说明(必需字段):
function_name: 功能名称(Text,标题字段,如:"Tavily 搜索API")provider: 服务提供商(Text,如:"Tavily")service_type: 服务类型(SingleSelect: 搜索API/图片生成/内容生成/数据分析/其他)api_key: API Key(Text,必需) - Tavily API Key,如:tvly-dev-xxx...- 何时填写:搜索 API(Tavily、Serper 等)必须填写此字段
endpoint_url: Endpoint URL(Text,必需) - API 基础地址,如:https://api.tavily.com- 何时填写:所有 API 服务都需要填写此字段,用于指定 API 的访问地址
config_status: 配置状态(SingleSelect: 启用/禁用)purpose: 用途说明(Text,如:"用于搜索主题相关资料")
搜索流程:
- 读取配置:从 HAP "API服务配置" 表读取 Tavily 搜索 API 配置
- 调用 API:使用配置中的 API Key 调用 Tavily API 搜索主题相关资料
- 处理结果:提取搜索结果中的关键信息(标题、内容、URL 等)
- 读取账号人设(重要:必须在生成内容之前):从 HAP "账号人设" 表读取账号定位、内容风格、内容原则等
- 生成内容:将搜索结果与账号人设结合,严格遵循账号人设中的内容风格和内容原则,生成高质量内容
搜索参数说明:
query: 搜索主题(用户输入)search_depth: 搜索深度(basic/advanced,推荐 basic)max_results: 最大结果数(推荐 5)topic: 主题类型(general/tech/business 等)include_answer: 是否包含答案摘要(False)include_raw_content: 是否包含原始内容(False)include_images: 是否包含图片(False)
功能配置示例(HAP 表中):
- 功能名称:Tavily 搜索API(标题字段)
- 服务提供商:Tavily
- 服务类型:搜索API(从下拉列表选择)
- 用途说明:用于搜索主题相关资料,获取最新信息
- API Key:tvly-dev-xxx...(必需填写,Tavily API Key)
- Endpoint URL:https://api.tavily.com(**必需填写**,API 基础地址)
- 配置状态:启用(从下拉列表选择)
热点新闻 API 配置示例(HAP 表中):
- 功能名称:热点新闻API(标题字段)
- 服务提供商:orz.ai
- 服务类型:热点新闻(从下拉列表选择)
- 用途说明:用于获取各平台的热点新闻数据,支持每日热点内容推荐
- Endpoint URL:https://orz.ai/api/v1/dailynews(**必需填写**,API 基础地址)
- 配置状态:启用(从下拉列表选择)
重要提示:
api_key和endpoint_url是搜索 API 的必需字段,必须填写api_key用于 API 认证endpoint_url用于指定 API 的访问地址,格式如:https://api.tavily.com- 热点新闻 API 不需要
api_key,只需要填写endpoint_url
4. 内容生成规范
账号人设配置(重要:必须先读取)
必须从 HAP "账号人设" 表读取账号人设配置:
重要原则:生成内容之前,必须先从 HAP "账号人设" 表读取账号人设配置,严格遵循账号定位和内容规则。
强制要求:
- 禁止使用本地文件:绝对不允许使用
AGENTS.md或其他本地文件作为账号人设来源 - 必须从 HAP 读取:必须通过 HAP MCP 调用
get_record_list()从 HAP "账号人设" 表读取 - 必须在生成内容之前执行:如果未读取到账号人设配置,必须抛出异常,不允许继续生成内容
- 必须严格遵循:生成内容时必须严格按照从 HAP 读取的
content_style和content_principles执行
读取流程:
- 确认当前连接的 MCP 应用
- 动态获取"账号人设"表的 ID(通过别名匹配)
- 根据
platform_name或platform_type查询对应平台的账号人设 - 读取所有必需字段:
- 账号定位(positioning):了解账号的核心定位
- 目标受众(target_audience):了解内容面向的受众群体
- 内容方向(content_direction):了解内容的主要方向
- 内容风格(content_style):了解内容应该采用的风格(必须严格遵循)
- 内容原则(content_principles):了解内容创作的原则和注意事项(必须严格遵守)
- 图片生成提示词(image_generation_prompt):了解图片风格要求
- 应用到内容生成:在生成内容时,严格遵循账号人设中的内容风格和内容原则
账号人设表字段:
platform_name: 平台名称(Text,标题字段)platform_type: 平台类型(SingleSelect: 小红书/抖音/微信公众号/视频号)positioning: 账号定位(Text,必需) - 账号的核心定位,用于指导内容方向target_audience: 目标受众(Text,必需) - 内容面向的受众群体,用于调整内容风格和深度content_direction: 内容方向(Text,必需) - 内容的主要方向,用于确定内容主题和范围content_style: 内容风格(Text,必需) - 内容应该采用的风格,必须严格遵循- 示例:专业但不高冷,用通俗易懂的语言解释复杂概念。简单直白,避免专业术语堆砌,必要时用类比和例子说明。
content_principles: 内容原则(Text,必需) - 内容创作的原则和注意事项,必须严格遵守- 示例:✅ 用简单语言解释复杂技术,让非技术人员也能理解;❌ 避免过度使用专业术语
image_generation_prompt: 图片生成提示词(Text) - 用于生成图片的风格提示词- 用途:用于生成图片的风格提示词,可以设置图片的整体风格、色彩、构图等
- 使用方式:生成图片时,将此提示词与具体图片内容描述结合
- 示例:中文手写信息海报风格插画,纵向构图,奶油系浅色底,可爱治愈、轻松幽默的科普视觉语言
使用示例(必须严格按照此流程执行):
# 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 与具体内容结合
内容撰写要求(重要:必须遵循账号人设)
内容生成流程:
- 先读取账号人设:从 HAP "账号人设" 表读取账号定位、内容风格、内容原则等(必须在生成内容之前)
- 结合搜索资料:将搜索到的资料与账号人设结合
- 严格遵循账号人设:
- 必须按照
content_style(内容风格)来撰写 - 必须遵守
content_principles(内容原则) - 确保内容符合
positioning(账号定位) - 确保内容适合
target_audience(目标受众) - 确保内容符合
content_direction(内容方向)
- 必须按照
小红书笔记(300-400字)通用要求:
- 开场吸引:故事化开头,带情感色彩(兴奋/好奇/思考),用产品经理的视角
- 技术科普:用简单语言解释复杂概念,避免专业术语堆砌
- 产品视角:分析技术对行业和用户的影响
- 总结升华:行动建议/思考启发
内容生成流程(参考 wechat-article-writer skill):
- Step 1: 搜索资料(Tavily API)
- Step 2: 撰写文章(必须先读取账号人设)
- Step 3: 生成标题(5-10个备选,参考小红书爆款标题风格)
- Step 4: 排版优化 + 配图建议
微信公众号文章(2000-5000字)通用要求:
- 标题:吸引眼球,不超过64字
- 摘要:文章核心观点
- 正文:HTML格式,结构清晰
- 引言
- 主体内容(分章节)
- 总结
- 配图:封面图 + 正文配图
注意:以上是通用要求,实际撰写时必须严格遵循账号人设中的 content_style 和 content_principles。
封面标题生成(必须遵循账号人设,参考小红书爆款标题风格)
生成 5-10 个备选标题,参考小红书爆款标题特点:
标题类型:
- 疑问式:引发好奇("agentic 是什么?AI 终于能自己干活了")
- 数字式:具体数字更有说服力("3分钟搞懂 agentic AI!")
- 痛点式:直击读者痛处("还在手动操作?agentic AI 让你一次指令全搞定")
- 反差式:制造冲突("AI 不再'等指令'!agentic 让 AI 主动工作")
- 揭秘式:制造悬念("揭秘 agentic:AI 从'问答机'到'智能助手'的进化")
- 结果式:先展示价值("AI 也能自主决策了!agentic 到底是什么?")
- 对比式:清晰展示差异("传统 AI vs agentic AI:从被动响应到主动执行")
- 趋势式:强调时代感("agentic 是什么?AI 的'数字员工'时代来了")
- 身份标签式:符合账号人设("产品经理视角:agentic AI 如何改变我们的工作方式")
重要:
- 标题风格必须符合账号人设中的
content_style(内容风格) - 标题要符合账号人设中的
positioning(账号定位)和target_audience(目标受众) - 参考小红书爆款标题的特点:吸引眼球、引发好奇、强调价值、降低学习门槛
- 推荐首选标题,并说明理由
话题标签选择(必须符合账号人设)
从 HAP 话题库表中选取:
选择策略:
- 优先使用高热度标签(提升曝光)
- 根据主题匹配话题类型
- 搭配精准标签吸引目标用户
- 确保标签符合账号人设中的
content_direction(内容方向)和target_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": ["小红书"]
}
]
}
)
4. 图片生成
支持多个图片生成 API 配置
API 服务配置管理:
所有 API 服务配置统一存储在 HAP "API服务配置" 表中,按功能分类,每个功能一条记录包含所有配置字段。
重要:配置是动态获取的,不硬编码
多配置选择机制:
- 支持多个图片生成 API 配置:可以在 HAP "API服务配置" 表中配置多个图片生成 API(如 TUZI API、火山引擎即梦 API 等)
- "是否默认"字段控制:通过
is_default(是否默认)字段控制使用哪个配置- 如果存在标记为"默认"的配置,优先使用该配置
- 如果没有默认配置,使用第一个启用的配置
- 配置状态控制:只有
config_status(配置状态)为"启用"的配置才会被使用
配置读取流程:
- 确认 MCP 连接:先确认当前连接的 HAP 应用 MCP(通过
get_app_info()) - 查询配置:从 HAP "API服务配置" 表查询所有图片生成类型的配置(
service_type = 图片生成且config_status = 启用) - 选择配置:
- 优先选择
is_default = 1(是默认)的配置 - 如果没有默认配置,使用第一个启用的配置
- 优先选择
- 读取配置:读取该配置的所有配置字段(API Key、Endpoint URL、Access Key ID 等)
配置选择示例:
# 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 调用
生成流程:
- 确认 MCP:确认当前连接的 HAP 应用 MCP(通过用户提供或指定)
- 读取账号人设:从 HAP "账号人设" 表读取对应平台的账号人设配置
- 获取图片风格:从账号人设中提取
image_generation_prompt(图片生成提示词) - 动态读取配置:从 HAP "API服务配置" 表查询所有图片生成类型的配置
- 选择配置:
- 优先选择
is_default = 1(是默认)的配置 - 如果没有默认配置,使用第一个启用的配置
- 优先选择
- 提取密钥:根据服务提供商提取对应的密钥字段
- TUZI API:
api_key、endpoint_url - 火山引擎即梦:
access_key_id、secret_access_key、region、service等
- TUZI API:
- 生成提示词:将账号人设中的图片风格提示词与具体配图建议结合,生成完整的图片生成提示词
- 格式:
{image_generation_prompt},{具体配图内容描述} - 示例:
手绘风格插画,清新活泼的卡通插画风格,{具体图片内容}
- 格式:
- 调用 API 生成图片:
- TUZI API:使用 OpenAI SDK,支持多个模型(gemini-3-pro-image-preview、dall-e-3、dall-e-2)
- 必须使用
response_format="url"参数:确保 API 返回 URL 格式而非 base64 - 请求参数:
model、prompt、n=1、response_format="url"、size="{width}x{height}"
- 必须使用
- 火山引擎即梦:使用火山引擎 SDK
- 并行生成:使用线程池并行生成多张图片(最多3个并发),大幅提升生成速度
- 自动跳过已存在:检查本地文件是否存在,如果已存在则跳过生成,节省时间和成本
- TUZI API:使用 OpenAI SDK,支持多个模型(gemini-3-pro-image-preview、dall-e-3、dall-e-2)
- 处理 API 响应:
- 优先处理 URL:如果 API 返回 HTTP/HTTPS URL,直接使用
- 处理 base64 数据:如果 API 返回 base64 数据(data URI 或 base64 字符串),自动解码并保存为图片文件
- 错误处理:如果 API 返回无效数据,记录错误并继续生成其他图片
- 保存图片:
- 保存图片 URL:保存图片 URL 到
配图/image_urls.json(只保存 URL,不保存 base64) - 自动下载图片:从 URL 自动下载图片文件到
配图/{图片名称}.png,方便本地查看和展示 - 图片文件命名:封面图.png、对比图.png、流程图.png、应用场景图.png 等
- 下载失败处理:如果下载失败,保留 URL 并记录警告,不影响后续流程
- 保存图片 URL:保存图片 URL 到
- 上传到 HAP:
- 小红书笔记:只上传图片 URL(封面图和其他配图)到 HAP 附件字段,不上传 Markdown 文档
- 其他平台:根据平台需求上传图片和文档
- 上传时使用 URL:上传到 HAP 时使用图片 URL,不需要 base64 数据
图片格式要求(小红书):
- 尺寸:768x1024(小红书 3:4 格式,竖屏)
- 风格:手绘风格插画(清新活泼的卡通插画风格)
- 内容要求:图片内容必须与正文内容强相关,表达核心含义(流程、介绍、对比等)
图片类型(必须遵循账号人设):
- 封面图:结合账号人设的图片风格提示词 + 具体内容描述 + 封面标题文字
- 封面图必须包含封面标题文字,使用粗体装饰性字体,带笔画和渐变效果
- 标题文字要醒目,占据封面重要位置,符合小红书封面图设计规范
- 对比图:结合账号人设的图片风格提示词 + 对比内容描述(与内容强相关)
- 流程图:结合账号人设的图片风格提示词 + 流程内容描述(与内容强相关)
- 应用场景图:结合账号人设的图片风格提示词 + 场景内容描述(与内容强相关)
手绘风格插画特点(参考):
- 整体风格:清新活泼的卡通插画风格,充满正能量和活力
- 线条:粗黑描边,手绘质感,流畅自然
- 色彩:明亮饱和的色彩 - 橙色、黄色、蓝色、绿色、红色等温暖色调,和谐配色
- 渲染:平面风格为主,搭配简单的渐变和高光,增加立体感
- 字体:粗体装饰性字体,带笔画和渐变效果
- 氛围:积极向上、充满活力、科技感、温馨可爱
- 设计哲学:简洁明快、视觉冲击力强、适合数字媒体传播
重要:
- 配图建议必须结合账号人设中的
image_generation_prompt(图片生成提示词)来生成 - 图片内容必须与正文内容强相关,表达核心含义(流程、介绍、对比等)
- 封面图必须包含封面标题文字
- 图片格式必须符合平台要求(小红书:768x1024,3:4格式)
图片提示词生成规则:
- 从 HAP "账号人设" 表读取
image_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},{具体图片内容描述}
- 账号人设中的风格:
5. HAP 数据管理
工作表结构
内容管理表(通用表,支持多平台):
platform_type: 平台类型(SingleSelect: 小红书/抖音/微信公众号/视频号/其他)content_title: 内容标题(Text,标题字段)cover_title: 封面标题(Text)content: 正文内容(Text)tags: 话题标签(Text)cover_image: 封面图(Attachment)other_images: 其他配图(Attachment)markdown_doc: Markdown 文档(Attachment,小红书笔记不使用此字段)related_topic: 关联选题(Relation,关联选题库表,单选,双向关联)publish_status: 发布状态(SingleSelect: 草稿/待发布/已发布/已取消)publish_time: 发布时间(DateTime)note_url: 内容链接(Text,不同平台可能叫法不同)views: 浏览量(Number)likes: 点赞数(Number)collections: 收藏数(Number)comments: 评论数(Number)
重要说明:
- 小红书笔记不同步 Markdown 文档:同步小红书笔记到 HAP 时,只上传图片(封面图和其他配图),不上传 Markdown 文档
markdown_doc字段仅用于其他平台(如微信公众号),小红书笔记不使用此字段- 双向关联选题库:
- 如果内容是基于选题库中的选题创作的,需要在内容记录中关联对应的选题
- 如果内容不是基于选题创作的,可以不关联
- 选题库中的
related_content字段会自动关联已创作的内容
设计说明:
- 使用统一的"内容管理"表管理所有平台的内容
- 通过
platform_type字段区分不同平台 - 不同平台共享通用字段,特殊需求可通过备注或扩展字段处理
话题标签库表:
topic_name: 话题名称(Text)topic_type: 话题类型(SingleSelect)heat_level: 热度等级(SingleSelect: 高热度/中热度/低热度)description: 说明(Text)last_updated: 最后更新(DateTime)
选题库表:
topic_title: 选题标题(Text,标题字段)source_platform: 来源平台(Relation,关联热点平台关注表,单选)topic_angle: 选题角度(Text,如何结合账号人设)recommendation_reason: 推荐理由(Text)relevance_score: 相关度评分(Number,1-10分)source_url: 原文链接(Text)content_preview: 内容预览(Text,多行文本)topic_status: 选题状态(SingleSelect: 待创作/创作中/已创作/已取消)related_content: 关联内容(Relation,关联内容管理表,多选,双向关联)notes: 备注(Text,多行文本)
设计说明:
- 选题库用于存储推荐的选题,方便后续管理和创作
- 关联热点平台关注表,可以追溯选题来源
- 双向关联内容管理表:
- 选题库中的
related_content字段可以关联多个已创作的内容 - 内容管理表中的
related_topic字段可以关联对应的选题 - 如果内容是基于选题创作的,需要在创建内容时关联选题
- 如果内容不是基于选题创作的,可以不关联
- 选题库中的
- 选题状态用于跟踪选题的创作进度
账号人设表:
platform_name: 平台名称(Text,标题字段)platform_type: 平台类型(SingleSelect: 小红书/抖音/微信公众号/视频号)positioning: 账号定位(Text)target_audience: 目标受众(Text)content_direction: 内容方向(Text)content_style: 内容风格(Text)content_principles: 内容原则(Text)image_generation_prompt: 图片生成提示词(Text)- 用途:用于生成图片的风格提示词,可以设置图片的整体风格、色彩、构图等
- 使用方式:生成图片时,将此提示词与具体图片内容描述结合
- 示例:简洁科技风格,蓝紫色渐变背景,现代扁平设计,高质量,专业感
热点平台关注表:
platform_name: 平台名称(Text,标题字段,如:"百度热搜"、"微博热搜")platform_code: 平台代码(Text,如:"baidu"、"weibo",对应热点新闻 API 的平台代码)platform_type: 平台类型(SingleSelect: 综合新闻/科技/社交媒体/财经/技术社区/其他)is_followed: 是否关注(Checkbox)- 用户是否关注此平台的热点priority: 优先级(Number,1-10,数字越大优先级越高)description: 平台说明(Text,描述平台特点和内容类型)last_fetch_time: 最后获取时间(DateTime,记录最后一次获取该平台热点的时间)
支持的平台代码(对应热点新闻 API):
baidu: 百度热搜(社会热点、娱乐、事件)sspai: 少数派(科技、数码、生活方式)weibo: 微博热搜(社交媒体热点、娱乐、事件)zhihu: 知乎热榜(问答、深度内容、社会热点)tskr: 36氪(科技创业、商业资讯)ftpojie: 吾爱破解(技术、软件、安全)bilibili: 哔哩哔哩(视频、动漫、游戏、生活)douban: 豆瓣(书影音、文化、讨论)hupu: 虎扑(体育、游戏、数码)tieba: 百度贴吧(兴趣社区、话题讨论)juejin: 掘金(编程、技术文章)douyin: 抖音(短视频热点、娱乐)vtex: V2EX(技术、编程、创意)jinritoutiao: 今日头条(新闻、热点事件)stackoverflow: Stack Overflow(编程问答、技术讨论)github: GitHub Trending(开源项目、编程语言)hackernews: Hacker News(科技新闻、创业、编程)sina_finance: 新浪财经(财经新闻、股市资讯)eastmoney: 东方财富(财经资讯、投资理财)xueqiu: 雪球(股票投资、财经社区)cls: 财联社(财经快讯、市场动态)tenxunwang: 腾讯网(综合新闻、娱乐、科技)
API服务配置表:
function_name: 功能名称(Text,标题字段,如:"Tavily 搜索API"、"TUZI 图片生成"、"即梦图片生成"、"热点新闻API")provider: 服务提供商(Text,如:"Tavily"、"TUZI"、"火山引擎"、"orz.ai")service_type: 服务类型(SingleSelect: 搜索API/图片生成/内容生成/数据分析/热点新闻/其他)purpose: 用途说明(Text,如:"用于搜索主题相关资料"、"用于生成图片"、"用于获取热点新闻")is_default: 是否默认(Checkbox) - 用于控制使用哪个图片生成 API 配置- 用途:当存在多个图片生成 API 配置时,优先使用标记为"默认"的配置
- 使用方式:勾选表示默认使用此配置,不勾选表示非默认配置
- 选择逻辑:优先选择
is_default = 1(是默认)的配置,如果没有默认配置则使用第一个启用的配置
endpoint_url: Endpoint URL(Text,必需) - API 基础地址- 热点新闻 API:
https://orz.ai/api/v1/dailynews
- 热点新闻 API:
密钥字段(用户可填写):
api_key: API Key(Text,必需) - 用于 API 认证- 何时填写:
- 搜索 API(Tavily、Serper 等):必须填写
- OpenAI、Anthropic、Midjourney 等使用 API Key 认证的服务:必须填写
- 何时填写:
endpoint_url: Endpoint URL(Text,必需) - API 基础地址- 何时填写:所有 API 服务都必须填写,用于指定 API 的访问地址
- 格式示例:
- Tavily:
https://api.tavily.com - OpenAI:
https://api.openai.com/v1 - 自定义代理:
https://proxy.example.com
- Tavily:
access_key_id: Access Key ID(Text)- 何时填写:火山引擎、阿里云、腾讯云等使用 Access Key 认证的服务需要填写
secret_access_key: Secret Access Key(Text)- 何时填写:与 Access Key ID 配对使用,火山引擎、阿里云、腾讯云等需要填写
api_secret: API Secret(Text)- 何时填写:与 API Key 配对使用,部分服务需要填写
token: Token(Text)- 何时填写:GitHub、GitLab、JWT Token 认证的服务需要填写
app_id: App ID(Text)- 何时填写:微信、企业微信、钉钉等使用 App ID 认证的服务需要填写
app_secret: App Secret(Text)- 何时填写:与 App ID 配对使用,微信、企业微信、钉钉等需要填写
配置字段:
endpoint_url: Endpoint URL(Text,必需) - API 基础地址- 何时填写:所有 API 服务都必须填写
- 格式示例:
- Tavily 搜索 API:
https://api.tavily.com - OpenAI API:
https://api.openai.com/v1 - 火山引擎即梦:
https://ark.cn-beijing.volces.com/api/v3 - 自定义代理:
https://proxy.example.com
- Tavily 搜索 API:
region: Region(Text)- 何时填写:AWS、阿里云、腾讯云、火山引擎等需要指定区域的服务需要填写(如:cn-beijing、us-east-1)
service: Service(Text)- 何时填写:火山引擎等需要指定服务名称的需要填写(如:cv、ocr)
api_version: API版本(Text)- 何时填写:需要指定 API 版本的服务需要填写(如:jimeng_t2i_v31、v1、v2)
sdk_name: SDK名称(Text)- 何时填写:使用 Python SDK 时需要填写 SDK 包名(如:volcenginesdkcv20240606、openai)
extra_config: 其他配置(Text)- 何时填写:需要额外配置参数时填写,JSON 格式(如:{"timeout": 30, "max_retries": 3})
config_status: 配置状态(SingleSelect: 启用/禁用)notes: 备注(Text)
使用说明:
- 所有 API 服务都必须填写
endpoint_url(API 基础地址) - 根据不同的 API 服务类型,填写对应的密钥字段:
- Tavily 搜索API:必须填写
api_key和endpoint_url - 火山引擎即梦:使用
access_key_id、secret_access_key和endpoint_url - OpenAI/Anthropic:必须填写
api_key和endpoint_url - 微信/企业微信:使用
app_id、app_secret和endpoint_url
- Tavily 搜索API:必须填写
- 所有密钥字段均为可见,用户可以直接在 HAP 中填写和编辑
endpoint_url格式:完整的 API 基础地址,如https://api.tavily.com或https://api.openai.com/v1
功能配置示例:
-
Tavily 搜索API:用于搜索主题相关资料
- 服务提供商:Tavily
- 服务类型:搜索API(从下拉列表选择)
- API Key:tvly-dev-xxx...(必需填写,Tavily API Key)
- Endpoint URL:https://api.tavily.com(**必需填写**,API 基础地址)
- 用途说明:在生成内容前搜索最新资料,提升内容质量
- 配置状态:启用(从下拉列表选择)
-
TUZI 图片生成:用于生成图片(OpenAI 兼容接口)
- 服务提供商:TUZI
- 服务类型:图片生成(从下拉列表选择)
- API Key:sk-xxx...(必需填写,TUZI API Key)
- Endpoint URL:https://api.tu-zi.com/v1(**必需填写**,API 基础地址)
- 是否默认:是(复选框,勾选表示默认使用此配置)
- 配置状态:启用(从下拉列表选择)
- 备注:使用 OpenAI 兼容接口,支持多个模型(gemini-3-pro-image-preview、dall-e-3、dall-e-2)
-
即梦图片生成:用于生成图片(文生图3.1)
- 服务提供商:火山引擎
- 服务类型:图片生成(从下拉列表选择)
- Endpoint URL:https://ark.cn-beijing.volces.com/api/v3(可选,API 基础地址)
- Access Key ID:用于 API 认证(用户填写)
- Secret Access Key:用于 API 签名(用户填写)
- Region:cn-beijing(用户填写)
- Service:cv(用户填写)
- API版本:jimeng_t2i_v31(用户填写)
- SDK名称:volcenginesdkcv20240606(用户填写)
- 是否默认:否(复选框,不勾选表示非默认配置)
- 配置状态:启用(从下拉列表选择)
重要:
- 所有配置信息都由用户在 HAP "API服务配置" 表中填写
- Skill 只负责从表中读取,不包含任何默认值或硬编码配置
- 用户需要根据实际使用的 API 服务填写对应的配置字段
数据同步流程
1. 搜索资料(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)
6. 自动化发布
使用 Playwright MCP
发布前准备:
- 确认用户已登录目标平台
- 检查内容完整性(标题、正文、图片、标签)
- 验证 HAP 数据已同步
发布流程(小红书示例):
// 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 记录:发布状态、发布时间、笔记链接
发布后处理:
- 获取发布成功的内容链接
- 更新 HAP "内容管理" 表记录:
platform_type: 目标平台(小红书/抖音/微信公众号/视频号)publish_status: 已发布publish_time: 当前时间note_url: 内容链接
使用示例
示例 1: 生成并发布小红书笔记
用户:帮我生成一篇关于 "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 发布状态和内容链接
示例 2: 批量生成内容
用户:帮我生成一周的小红书笔记(7篇),主题如下:
1. Claude Code 新功能
2. AI 工具推荐
3. 大模型应用场景
...
执行流程:
1. **确认 MCP**:确认当前连接的 HAP 应用 MCP
2. **批量生成**:对每个主题重复上述流程
3. **动态读取配置**:每次生成图片时从 HAP "API服务配置" 表动态读取配置
4. **批量保存**:批量生成并保存到 HAP "内容管理" 表(platform_type = 小红书)
示例 3: 多平台发布
用户:将这篇笔记发布到小红书和微信公众号
执行流程:
1. **确认 MCP**:确认当前连接的 HAP 应用 MCP
2. **读取内容**:从 HAP "内容管理" 表读取内容(platform_type = 小红书)
3. **动态获取工作表**:动态获取"内容管理"表的 ID 和字段结构
4. **适配格式**:适配不同平台的格式要求:
- 小红书:300-400字,5-8个话题标签
- 微信公众号:2000-5000字,HTML格式
5. **发布内容**:分别发布到两个平台
6. **更新 HAP**:在 HAP "内容管理" 表中创建新记录(platform_type = 微信公众号),或更新现有记录的发布状态
技术实现
依赖工具
- Tavily API(配置存储在 HAP): 搜索相关资料,获取最新信息
- wechat-article-writer skill: 内容生成
- HAP MCP(用户提供): 数据管理,用于存储内容、配置、话题库等
- Playwright MCP: 自动化发布到各平台
- 第三方 API(配置存储在 HAP): 图片生成、内容生成等 API 服务
MCP 配置要求
用户需要提供:
- HAP 应用的 MCP 配置(包含 Appkey 和 Sign)
- 或明确指定使用哪个已配置的 MCP
Skill 会自动:
- 识别当前连接的 MCP 应用
- 动态获取工作表列表和结构
- 从"API服务配置"表读取密钥和配置
- 根据平台类型筛选内容记录
文件结构
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 文档和配图
- 目录名使用笔记标题,更清晰直观
HAP 应用配置
重要:应用名称和 MCP 配置由用户提供,不硬编码
通用工作表结构(用户需要在 HAP 中创建):
- 内容管理(通用表,通过 platform_type 字段区分平台:小红书/抖音/微信公众号/视频号等)
- 话题标签库(存储各平台的话题标签)
- 账号人设(存储不同平台的账号人设配置)
- API服务配置(按功能分类,每个功能一条记录包含所有配置字段,包括密钥)
- 热点平台关注表(存储用户关注的热点平台,用于每日热点内容推荐)
- 选题库(存储推荐的选题,关联热点平台关注表和内容管理表)
- 社交媒体数据(可选,存储运营数据)
工作表创建:
- 用户需要在 HAP 应用中创建上述工作表
- 创建工作表时,建议设置别名(alias),便于后续查询
- 或用户提供已存在的应用 MCP,Skill 会自动识别工作表结构
- Skill 会通过
get_app_worksheets_list()动态获取工作表列表 - 查询时优先通过别名(alias)匹配,如果别名不存在则使用名称(name)匹配
- 绝对不使用硬编码的工作表 ID
注意事项
MCP 和配置管理
-
MCP 配置由用户提供:
- Skill 不包含任何硬编码的 MCP 配置
- 用户需要提供 HAP 应用的 MCP 配置信息
- 或明确指定使用哪个已配置的 MCP
-
MCP 应用确认:
- 执行 HAP 操作前,必须先调用
get_app_info()确认当前连接的 MCP 应用 - 如果用户提供了 MCP 配置,需要对比确认是否匹配
- 不匹配时需要与用户确认
- 执行 HAP 操作前,必须先调用
-
动态读取配置:
- 所有 API 密钥和配置都存储在 HAP "API服务配置" 表中
- 使用时必须从表中动态读取,绝对不要在代码中硬编码
- 通过
get_record_list()查询配置,根据功能名称或服务类型匹配
-
工作表动态识别(重要):
- 通过
get_app_worksheets_list()动态获取工作表列表 - 优先通过别名(alias)匹配工作表,如果别名不存在则使用名称(name)匹配
- 绝对不要使用硬编码的工作表 ID
- 所有查询操作都必须先通过别名或名称匹配获取工作表 ID,然后再使用该 ID 进行查询
- 通过
内容生成
账号人设读取检查清单(必须严格执行):
- ✅ 确认 MCP 连接:执行任何操作前,必须先调用
get_app_info()确认当前连接的 HAP MCP 应用 - ✅ 动态获取工作表:通过
get_app_worksheets_list()动态获取工作表列表,通过别名account_persona或名称账号人设匹配 - ✅ 查询账号人设:使用
get_record_list()根据platform_type查询对应平台的账号人设记录 - ✅ 验证必需字段:检查是否读取到
content_style和content_principles字段,如果缺失则抛出异常 - ✅ 禁止使用本地文件:绝对不允许使用
AGENTS.md或其他本地文件作为账号人设来源 - ✅ 严格遵循人设:生成内容时必须严格按照从 HAP 读取的
content_style和content_principles执行
其他注意事项:
5. 内容预览:生成内容后先保存到本地文件,用户确认后再同步到 HAP
6. 图片生成:图片生成可能失败(SSL 错误),需要重试或手动制作
7. 发布登录:发布前需要用户先登录目标平台
8. 字数控制:不同平台的字数要求不同,需要适配
9. 话题标签:必须从 HAP 话题库中选取,不要自己编造
10. 账号人设:必须从 HAP "账号人设" 表中读取,禁止使用本地文件,包括图片生成提示词
11. 图片风格:生成图片时,将从 HAP 读取的账号人设中的 image_generation_prompt 与具体配图建议结合
最佳实践
通用性设计
-
MCP 配置:
- 永远不硬编码 MCP 配置
- 始终从用户提供的 MCP 或指定的 MCP 读取配置
- 执行操作前先确认当前连接的 MCP 应用
-
配置管理:
- 所有密钥和配置存储在 HAP "API服务配置" 表中
- 使用时动态读取,不假设任何默认值
- 用户需要在 HAP 中填写所有必要的配置信息
-
工作表识别(重要):
- 动态获取工作表列表
- 优先通过别名(alias)匹配工作表,如果别名不存在则使用名称(name)匹配
- 绝对不要使用硬编码的工作表 ID
- 所有查询操作都必须先通过别名或名称匹配获取工作表 ID,然后再使用该 ID 进行查询
- 动态获取字段结构,通过名称或别名匹配字段 ID
内容运营
- 内容质量:确保内容有价值,符合账号定位
- 更新频率:保持稳定的更新频率(建议每周3-5篇)
- 数据追踪:定期查看 HAP 中的数据,分析爆款规律
- 互动管理:及时回复评论,积极与用户互动
- 多平台适配:根据不同平台特点调整内容格式和风格