公众号选题生成:基于HarmonyOS + ArkTS的AI智能内容规划助手开发实践
公众号选题生成:基于HarmonyOS + ArkTS的AI智能内容规划助手开发实践
一、对齐(Align):项目背景与需求分析
1.1 项目背景
内容创作是公众号运营的核心工作,而选题则是内容创作的第一步,也是最关键的一步。一个好的选题决定了内容的传播潜力和用户价值。然而,持续产出高质量的选题对运营者来说是一个巨大的挑战——创意枯竭、选题重复、缺乏新意是常见的问题。
"公众号选题生成"应用旨在利用AI技术,帮助运营者根据领域、受众和格式要求,自动生成选题列表、大纲和关键词,实现系统化的内容规划。
1.2 原始需求与边界确认
核心需求:用户输入领域、受众和文章格式,AI生成选题列表、大纲和关键词。
需求边界确认:
- 输入范围:领域(如"职场成长")、受众(如"职场新人")、文章格式(如"干货分享")
- 输出范围:选题列表(多个选题标题)、大纲(每个选题的结构框架)、关键词(核心关键词列表)
- 非功能需求:选题多样性、大纲结构清晰、关键词相关性强
- 排除范围:不包含完整文章生成、不包含配图设计、不包含排版建议
1.3 用户场景分析
场景一:月度内容规划
运营者需要提前规划下个月的内容选题,AI可以快速生成一个月的选题列表。
场景二:系列内容策划
针对某个主题,需要策划系列文章,AI可以生成系列文章的大纲和衔接方案。
场景三:热点内容快速响应
遇到热点事件,需要快速生成相关选题,AI可以基于热点关键词生成多个角度。
1.4 技术栈
| 技术层 | 选择 | 说明 |
|---|---|---|
| 操作系统 | HarmonyOS | 跨设备运行 |
| 开发语言 | ArkTS | 静态类型安全 |
| UI框架 | ArkUI | 声明式UI |
| 架构模式 | Model-Service-Page | 三层架构 |
| AI能力 | 大语言模型 | 内容生成与规划 |
二、架构(Architect):技术架构设计
2.1 整体架构
┌─────────────────────────────────────────────────┐
│ Page层 │
│ ┌─────────────────┐ ┌─────────────────────┐ │
│ │ 输入区域 │ │ 结果展示区域 │ │
│ │ - 领域/定位 │ │ - 选题列表 │ │
│ │ - 角度 │ │ - 内容大纲 │ │
│ │ │ │ - 关键词推荐 │ │
│ └────────┬────────┘ └──────────┬──────────┘ │
│ │ ▲ │
│ ▼ │ │
│ ┌────────────────────────────────────────┐ │
│ │ "AI 生成" 按钮 │ │
│ └────────────────┬───────────────────────┘ │
│ │ │
└────────────────────┼────────────────────────────┘
│
┌────────────────────┼────────────────────────────┐
│ ▼ │
│ Service层 │
│ ┌────────────────────────────────────────┐ │
│ │ MPTopicService │ │
│ │ - generateData(input) │ │
│ │ - 选题多样性算法 │ │
│ │ - 大纲结构生成 │ │
│ │ - 关键词提取 │ │
│ └────────────────┬───────────────────────┘ │
│ │ │
└────────────────────┼────────────────────────────┘
│
┌────────────────────┼────────────────────────────┐
│ ▼ │
│ Model层 │
│ ┌────────────────────────────────────────┐ │
│ │ MPTopicData │ │
│ │ - niche: string (领域/定位) │ │
│ │ - angle: string (角度) │ │
│ │ - topics: Record[] (选题列表) │ │
│ └────────────────────────────────────────┘ │
└──────────────────────────────────────────────────┘
2.2 Model层设计
export class MPTopicData {
niche: string = '' // 公众号领域/定位
angle: string = '' // 文章角度/切入点
topics: Record<string, string>[] = [] // 选题列表
constructor() {
this.niche = ''
this.angle = ''
this.topics = []
}
}
Model设计要点:
-
niche字段:标识公众号的垂直领域,如"科技资讯"、“情感生活”、"职场成长"等。领域信息是AI生成选题的核心上下文。
-
angle字段:标识文章的切入角度或风格,如"深度分析"、“实用教程”、"故事分享"等。角度信息帮助AI确定选题的调性。
-
topics数组:每个元素包含选题标题、大纲、关键词等完整信息。这种结构化的设计便于前端渲染和用户浏览。
2.3 Service层设计
import { MPTopicData } from './公众号选题生成Model'
export class MPTopicService {
private model: MPTopicData
constructor() {
this.model = new MPTopicData()
}
generateData(input: Record<string, Object>): MPTopicData {
let result: MPTopicData = new MPTopicData()
// Mock data generation logic based on input
return result
}
}
Service层核心职责:
- 选题多样性控制:确保生成的选题覆盖不同的角度和维度,避免重复
- 大纲结构生成:为每个选题生成合理的文章结构(引言、主体、结论)
- 关键词提取:基于领域和选题,提取相关性高、搜索量适中的关键词
- 格式适配:根据用户指定的文章格式(干货、故事、盘点等),调整选题风格
2.4 Page层设计
@Entry
@Component
struct MPTopicPage {
@State inputData: Record<string, Object> = {}
@State resultData: MPTopicData | null = null
@State showResult: boolean = false
private service: MPTopicService = new MPTopicService()
}
交互流程:
- 用户输入公众号的领域定位(如"职场成长")
- 输入文章的角度(如"实用技巧")
- 点击"AI生成"按钮
- 系统展示选题列表、大纲和关键词
三、原子化(Atomize):AI提示词工程原理
3.1 选题生成的提示词设计
结构化提示词模板:
你是一个专业的公众号内容策划专家。请根据以下信息,生成选题方案。
===== 公众号领域 =====
{field}
===== 目标受众 =====
{audience}
===== 文章格式 =====
{format}(可选:干货分享/情感故事/行业分析/盘点总结/教程指南/观点评论)
===== 生成要求 =====
请生成5个选题,每个选题包含:
1. 选题标题(吸引眼球,包含关键词)
2. 内容大纲(3-5个要点,结构清晰)
3. 核心关键词(3-5个)
选题要求:
- 多样性:覆盖不同角度和维度
- 实用性:对目标受众有价值
- 传播性:具有分享和讨论的潜力
- 差异化:与同领域常见选题不同
===== 输出格式(JSON)=====
{
"topics": [
{
"title": "选题标题",
"outline": ["大纲要点1", "大纲要点2", "大纲要点3"],
"keywords": ["关键词1", "关键词2", "关键词3"]
}
]
}
3.2 提示词设计关键技术
1. 多样性控制
提示词明确要求"多样性:覆盖不同角度和维度",这通过以下机制实现:
- 采样温度控制:设置较高的温度参数(如0.8),增加输出的多样性
- 角度约束:要求每个选题从不同的角度切入
- 重复检测:AI自动检测并避免生成相似的选题
2. 大纲结构生成
文章大纲是选题方案的重要组成部分。提示词要求生成3-5个要点的大纲,涵盖:
- 引言:问题提出、背景介绍
- 主体:核心内容、方法/观点
- 结论:总结、行动建议
3. 关键词提取
关键词提取策略:
- 核心关键词:与选题主题直接相关
- 长尾关键词:更具体、搜索意图明确
- 语义相关词:与领域相关的概念和术语
3.3 选题质量评估
AI生成的选题需要经过以下维度的评估:
| 评估维度 | 标准 | 权重 |
|---|---|---|
| 相关性 | 与公众号定位一致 | 30% |
| 实用性 | 对目标受众有价值 | 25% |
| 传播性 | 具有分享潜力 | 20% |
| 差异化 | 与同领域不同 | 15% |
| 时效性 | 符合当前趋势 | 10% |
3.4 响应解析
private parseTopicResponse(response: string): MPTopicData {
let result: MPTopicData = new MPTopicData()
try {
let parsed: Record<string, Object> = JSON.parse(response) as Record<string, Object>
result.topics = parsed['topics'] as Record<string, string>[]
} catch (e) {
// 兜底处理
}
return result
}
四、审批(Approve):核心功能实现详解
4.1 UI组件层次结构
MPTopicPage (根组件)
├── Header (导航栏)
│ ├── "← 返回" 按钮
│ ├── "公众号选题" 标题
│ └── 占位元素
├── Scroll (可滚动容器)
│ └── Column (主内容列)
│ ├── 输入区域
│ │ ├── "输入信息" 标题
│ │ ├── "领域/定位" 标签 + TextInput
│ │ └── "角度" 标签 + TextInput
│ ├── "AI 生成" 按钮
│ └── 结果区域 (条件渲染)
│ ├── "生成结果" 标题
│ ├── "选题生成" 副标题
│ ├── 选题列表(每个包含标题、大纲、关键词)
│ └── 操作按钮(收藏、导出、分享)
4.2 输入区域实现
// 领域/定位输入
Text('领域/定位')
.fontSize(14)
.fontWeight(FontWeight.Bold)
.fontColor($r('app.color.text_primary'))
.margin({ top: 12, bottom: 4 })
TextInput({ placeholder: '请输入领域/定位' })
.fontSize(14)
.height(44)
.backgroundColor('#FFFFFF')
.borderRadius(8)
.padding({ left: 12, right: 12 })
.onChange((val: string) => { this.inputData['niche'] = val })
// 角度输入
Text('角度')
.fontSize(14)
.fontWeight(FontWeight.Bold)
.fontColor($r('app.color.text_primary'))
.margin({ top: 12, bottom: 4 })
TextInput({ placeholder: '请输入角度' })
.fontSize(14)
.height(44)
.backgroundColor('#FFFFFF')
.borderRadius(8)
.padding({ left: 12, right: 12 })
.onChange((val: string) => { this.inputData['angle'] = val })
4.3 结果展示区域
if (this.showResult && this.resultData !== null) {
Text('生成结果')
.fontSize(18)
.fontWeight(FontWeight.Bold)
.fontColor($r('app.color.text_primary'))
.width('100%')
.margin({ top: 16, bottom: 8 })
Text('选题生成')
.fontSize(14)
.fontColor($r('app.color.text_secondary'))
.width('100%')
.margin({ bottom: 16 })
}
4.4 页面布局
Column() {
Row() {
Text('← 返回')
.onClick(() => { router.back() })
Blank()
Text('公众号选题')
.fontWeight(FontWeight.Bold)
Blank()
Text('')
}
// ... 样式设置
Scroll() {
Column() {
// 输入区域
// 生成按钮
// 结果区域
}
}
.layoutWeight(1)
}
.width('100%')
.height('100%')
.backgroundColor('#F8FAFC')
五、自动化执行(Automate):用户体验优化
5.1 选题多样性增强
1. 角度轮换
在同一领域内,从不同角度生成选题,避免重复:
- 问题解决角度:针对用户痛点提供解决方案
- 趋势分析角度:分析行业趋势和未来方向
- 案例分享角度:分享成功案例和经验教训
- 对比评测角度:对比不同方案/产品的优劣
2. 格式多样化
根据用户指定的格式,调整选题风格:
- 干货分享:实用技巧、方法总结
- 情感故事:个人经历、情感共鸣
- 行业分析:数据驱动、深度洞察
- 盘点总结:清单列举、对比分析
5.2 大纲编辑功能
1. 大纲展开/折叠
每个选题的大纲默认为折叠状态,用户点击展开查看详情。这种设计节省了页面空间,避免信息过载。
2. 大纲自定义
用户可以对AI生成的大纲进行编辑和调整,包括添加/删除要点、重新排序等。
3. 大纲导出
支持将选题方案导出为Markdown或文本格式,方便在写作工具中使用。
5.3 关键词优化
1. 关键词扩展
用户可以选择某个关键词,AI自动扩展相关的长尾关键词和语义相关词。
2. 关键词热度标注
使用标签形式展示关键词,标签大小表示搜索热度,颜色表示竞争度。
3. 关键词布局建议
提示每个关键词在文章中的最佳布局位置(标题、摘要、正文)。
5.4 选题管理
1. 选题日历
将生成的选题按日期分配到日历中,形成月度内容规划。
2. 选题状态追踪
跟踪每个选题的状态(待写作、写作中、已发布),方便运营管理。
3. 选题收藏
用户可以将满意的选题收藏到个人收藏夹,方便后续使用。
六、评估(Assess):性能优化与最佳实践
6.1 ArkTS语法约束实践
1. 类型安全
// 正确:显式声明类型
@State inputData: Record<string, Object> = {}
@State resultData: MPTopicData | null = null
2. 循环渲染
// 正确:使用ForEach渲染选题列表
ForEach(this.resultData.topics, (topic: Record<string, string>, index: number) => {
this.buildTopicCard(topic, index)
}, (topic: Record<string, string>, index: number) => index.toString())
3. 条件渲染
// 正确:使用if条件渲染
if (this.showResult && this.resultData !== null) {
// 渲染结果
}
6.2 性能优化
1. 选题缓存
选题生成结果可以缓存,避免重复请求:
- 缓存最近10次生成结果
- 相同输入参数直接返回缓存
- 缓存有效期24小时
2. 增量加载
对于大量选题,采用分页加载策略,每次加载5个选题。
3. 渲染优化
- 使用
@Builder封装选题卡片组件 - 使用
LazyForEach实现懒加载 - 避免在渲染过程中进行复杂计算
6.3 内容质量保证
1. 选题去重
AI生成多个选题时,自动检测并去除重复或高度相似的选题。
2. 大纲结构检查
确保大纲包含引论、本论、结论的完整结构,避免头重脚轻。
3. 关键词相关性检查
生成的关键词需要与选题主题高度相关,避免无关词的干扰。
6.4 测试策略
| 测试场景 | 输入 | 预期输出 |
|---|---|---|
| 职场领域选题 | 领域"职场",格式"干货" | 生成5个职场干货选题 |
| 情感领域选题 | 领域"情感",格式"故事" | 生成5个情感故事选题 |
| 大纲结构检查 | 任意选题 | 大纲包含3-5个要点,结构完整 |
| 关键词相关性 | 选题"时间管理" | 关键词包括"时间管理"相关术语 |
七、总结与展望
7.1 项目总结
公众号选题生成应用是AI辅助内容规划的重要工具。通过Model-Service-Page架构,实现了从用户输入到AI选题生成再到结果展示的完整流程。
核心价值:
- 系统化规划:帮助运营者实现系统化的内容规划,告别"临时选题"
- 多样化的创意:AI提供多样化的选题角度,激发创作灵感
- 结构化输出:每个选题都包含完整的大纲和关键词,降低了写作门槛
- 效率提升:从选题规划到大纲生成,时间从数小时缩短到数秒
7.2 未来展望
1. 智能排期
基于选题的热度、时效性和用户偏好,自动排定发布顺序和发布时间。
2. 系列选题策划
自动识别可以形成系列文章的选题,生成系列文章的衔接方案。
3. 热点关联
实时监测热点事件,自动关联到已有的选题库,生成热点相关选题。
4. 数据反馈闭环
接入文章发布后的数据(阅读量、分享量、涨粉数),反馈到选题模型,持续优化选题质量。
5. 竞品选题监测
自动监测同领域头部公众号的选题策略,提供差异化建议。
7.3 开发者建议
- 选题质量优先于数量:5个高质量选题的效果远好于50个平庸选题
- 大纲是核心:大纲的质量直接影响后续写作的效率和文章质量
- 关键词不可忽视:好的关键词策略可以显著提升文章的搜索曝光
- 持续迭代:公众号运营环境不断变化,需要持续优化选题策略
公众号选题生成应用展示了AI在内容规划领域的强大能力。通过智能化的选题生成和大纲规划,帮助内容创作者从"选题困难"中解放出来,将更多精力投入到内容创作本身。
更多推荐


所有评论(0)