公众号选题生成:基于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层设计
exportclassMPTopicData{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'exportclassMPTopicService{privatemodel:MPTopicDataconstructor(){this.model=newMPTopicData()}generateData(input:Record<string,Object>):MPTopicData{letresult:MPTopicData=newMPTopicData()// Mock data generation logic based on inputreturnresult}}Service层核心职责:
- 选题多样性控制:确保生成的选题覆盖不同的角度和维度,避免重复
- 大纲结构生成:为每个选题生成合理的文章结构(引言、主体、结论)
- 关键词提取:基于领域和选题,提取相关性高、搜索量适中的关键词
- 格式适配:根据用户指定的文章格式(干货、故事、盘点等),调整选题风格
2.4 Page层设计
@Entry@Componentstruct MPTopicPage{@StateinputData:Record<string,Object>={}@StateresultData:MPTopicData|null=null@StateshowResult:boolean=falseprivateservice:MPTopicService=newMPTopicService()}交互流程:
- 用户输入公众号的领域定位(如"职场成长")
- 输入文章的角度(如"实用技巧")
- 点击"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 响应解析
privateparseTopicResponse(response:string):MPTopicData{letresult:MPTopicData=newMPTopicData()try{letparsed:Record<string,Object>=JSON.parse(response)asRecord<string,Object>result.topics=parsed['topics']asRecord<string,string>[]}catch(e){// 兜底处理}returnresult}四、审批(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. 类型安全
// 正确:显式声明类型@StateinputData:Record<string,Object>={}@StateresultData:MPTopicData|null=null2. 循环渲染
// 正确:使用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在内容规划领域的强大能力。通过智能化的选题生成和大纲规划,帮助内容创作者从"选题困难"中解放出来,将更多精力投入到内容创作本身。
