去年在开发鸿蒙智能体时,遇到一个典型需求:如何让AI系统理解并输出复杂的年俗文化内容。传统做法是让AI生成一段笼统的介绍,但实际场景中用户往往需要结构化信息——比如春节的起源、习俗、禁忌、地区差异等要素需要清晰分列展示。
这个项目就是要解决多段内容生成与结构化字段拆分的难题。通过鸿蒙智能体的工作流引擎,我们实现了:
实测下来,这种方案比普通单段生成效率提升300%,特别适合知识科普、产品说明等需要分项展示的场景。下面分享具体实现过程。
鸿蒙智能体提供了两种方案:
经过对比测试,年俗场景更适合并行方案。因为:
关键配置示例:
json复制"workflow": {
"type": "parallel",
"tasks": [
{"name": "origin", "prompt": "春节的历史起源,限80字"},
{"name": "custom", "prompt": "列举3个核心习俗"}
]
}
采用「生成后处理」模式:
字段提取使用鸿蒙内置的TextMatcher组件,配置匹配规则如:
yaml复制rules:
- pattern: "始于.*?朝代"
target_field: "origin.time"
- pattern: "主要活动.*?包括"
target_field: "custom.items"
在ArkTS中实现的关键代码逻辑:
typescript复制async function generateSections() {
const prompts = [
"春节起源(含历史朝代)",
"核心习俗(3项,带解释)",
"饮食特色(分地区说明)"
];
return await Promise.all(
prompts.map(p => Agent.generate({prompt: p}))
);
}
注意事项:
通过正则+关键词双重校验:
typescript复制function parseOrigin(text: string) {
// 校验朝代关键词
const dynasties = ["商周", "汉代", "唐宋"];
const hasValidDynasty = dynasties.some(d => text.includes(d));
// 提取时间范围
const timeMatch = text.match(/(公元.*?年)/);
return {
valid: hasValidDynasty && timeMatch,
data: {
dynasty: hasValidDynasty,
time: timeMatch?.[1] || ""
}
};
}
处理技巧:
通过以下prompt工程技巧显著改善效果:
优化前后对比:
| 指标 | 优化前 | 优化后 |
|---|---|---|
| 字段完整率 | 62% | 89% |
| 历史准确性 | 54% | 82% |
| 地区匹配度 | 48% | 76% |
typescript复制const threadCount = Math.min(4, Math.ceil(textLength / 50));
实测在华为P50设备上:
现象:饮食特色误识别为习俗
解决方案:
json复制{
"custom": ["习俗", "传统", "活动"],
"food": ["吃", "食俗", "菜肴"]
}
常见于多段生成时出现雷同表述。我们的应对措施:
typescript复制prompt += `(表述方式请与${Math.random().toString(36).substring(2,6)}不同)`
这套方案同样适用于:
在智能家电场景的落地案例:
mermaid复制graph TD
A[用户提问] --> B(多段生成)
B --> C["1. 功能原理"]
B --> D["2. 使用步骤"]
B --> E["3. 故障排查"]
C --> F[结构化JSON]
D --> F
E --> F
关键是要根据领域特点调整:
经过三个迭代版本的优化,当前系统在文化类内容的结构化准确率达到91.7%,后续计划加入视觉化图谱生成能力。