基于AI平台与知识库构建情感化记账技能:从意图识别到提示词工程
1. 项目概述当星座玄学遇上AI记账一次有趣的技能开发实验最近在捣鼓Doubao-Seed-Evolving这个AI开发平台总想用它做点有意思、有温度的东西。正好身边有朋友抱怨记账太枯燥坚持不下来而星座运势又是大家茶余饭后常聊的话题。我就琢磨能不能把这两件看似不搭边的事结合起来于是“情绪价值拉满的星座记账 Skill”这个想法就诞生了。本质上它是一个运行在Doubao-Seed-Evolving平台上的智能对话技能核心功能是帮用户记录日常收支但它的“灵魂”在于每次记账后都会结合用户当天的星座运势生成一段专属的、充满趣味和鼓励的财务点评。比如你今天为知识付费买了一门“Claude Code使用”的课程它可能会说“水瓶座的你今天在‘学习’宫位有吉星照耀这笔投资智慧的支出就像为未来的‘代码森林’种下了一棵参天大树稳赚不赔哦” 这个项目不是为了追求极致的财务分析精度而是希望通过注入“情绪价值”让记账这件事从一项枯燥的任务变成一个有点期待、甚至能带来些许慰藉的日常小仪式。它适合所有对AI应用开发、趣味工具创造感兴趣的朋友无论你是想学习Skill开发流程还是想探索如何让AI应用更人性化、更有趣这个案例都能给你带来一些启发。2. 核心设计思路如何为工具注入“灵魂”2.1 从功能到体验的思维转变传统的记账工具核心设计思路是“记录-分类-统计-报表”。它关注的是数据的准确性和分析的深度用户是冷冰冰的数据录入员。而在这个项目中我的首要设计原则是“体验优先功能服务于体验”。记账是功能但星座运势带来的趣味解读和情感共鸣才是用户体验的核心。这就要求整个Skill的逻辑架构发生根本转变数据录入不再是终点而是触发一次个性化情感交互的起点。为了实现这一点我拆解了三个核心模块意图理解模块识别用户想记账还是查账、数据持久化模块可靠地存储每笔账单、以及最关键的情感化内容生成模块根据账单和星座生成文案。其中情感化内容生成是整个项目的“灵魂”所在也是技术实现上最具挑战和趣味的部分。2.2 技术栈选型与架构设计基于Doubao-Seed-Evolving平台我们需要选择合适的技术组件来搭建这个Skill。后端逻辑与AI能力层毫无疑问Doubao-Seed-Evolving平台本身提供了最基础的AI对话和逻辑编排能力。我们可以利用其内置的意图识别、槽位填充功能来处理“记一笔账”这样的结构化请求。例如用户说“今天午餐花了30元”Skill需要自动提取出“餐饮”、“30元”这些关键信息。数据存储层这是确保Skill可用的基石。平台通常提供临时的会话存储但对于记账这种需要长期保存的数据必须使用外部存储。我选择了轻量级的云数据库服务例如Supabase或腾讯云开发提供的JSON数据库因为它配置简单有免费的额度并且可以通过HTTP API直接调用完美契合Serverless形态的Skill开发。注意绝对不要在代码中硬编码任何数据库连接密钥务必使用平台提供的环境变量功能来管理。知识库与内容生成层这是项目的精髓。我们需要两部分“知识”一是星座运势库二是将消费行为与运势解读关联起来的“翻译”规则。我最初尝试用Claude Code来编写一个复杂的规则引擎但发现维护成本很高。后来我借鉴了构建个人知识库的思路用Obsidian管理我的“创意弹药库”。Obsidian作为创意知识库我创建了一个笔记里面不是代码而是大量的“场景-文案”对。例如在“水瓶座-学习支出”的标题下我积累了五六条不同风格的鼓励文案。在“巨蟹座-家居消费”下又有关于“营造温暖港湾”的多种表述。Obsidian的双向链接和标签功能让我能快速关联星座、消费类别和情感关键词如“鼓励”、“调侃”、“警醒”。从知识库到动态生成我不需要AI从零创造而是让它基于当前上下文星座、消费类别、金额大小从我构建的Obsidian知识库中“汲取灵感”进行组合、微调和个性化输出。这比完全依赖AI自由发挥更可控也更能保证文案的风格和质量。整个架构可以简化为用户输入 - Doubao平台意图识别 - 调用外部API保存数据 - 结合星座信息从“文案知识库”中选取或生成提示词 - 调用平台AI生成最终回复 - 返回给用户。3. 实操构建从零搭建星座记账Skill3.1 环境准备与基础Skill创建首先你需要在Doubao-Seed-Evolving平台上注册并创建一个新的Skill项目。平台界面通常比较直观关键一步在于选择正确的模板。这里不要选“通用对话”而是选择“自定义技能”或“空白项目”以便获得最大的控制权。创建成功后你会得到一个Webhook URL这是你的Skill与外界通信的入口。本地开发环境我强烈推荐使用VSCode并安装相关的扩展插件方便进行代码调试和API测试。项目初始化后的目录结构通常包含几个核心文件skill.json技能配置文件定义名称、描述、触发词等、主逻辑文件如index.js或app.py以及可能用到的依赖管理文件。注意在skill.json中定义触发词时要兼顾自然和明确。比如除了“记账”还可以加上“记一笔”、“今天花钱了”等更口语化的表达提升唤醒成功率。3.2 构建数据存储API由于Doubao平台不直接提供长期数据存储我们需要自己搭建一个简单的后端服务来处理数据的增删改查。这里以Node.js Express Supabase为例。初始化项目在本地新建一个目录运行npm init -y然后安装依赖npm install express dotenv supabase。配置Supabase去Supabase官网创建一个新项目在表编辑器里新建一张transactions表字段可以包括id自增主键、user_id用户标识可以用平台提供的用户ID、amount金额、category类别、description描述、date日期、constellation星座。编写API核心代码// app.js const express require(express); const { createClient } require(supabase/supabase-js); require(dotenv).config(); const app express(); app.use(express.json()); // 从环境变量读取Supabase配置 const supabaseUrl process.env.SUPABASE_URL; const supabaseKey process.env.SUPABASE_ANON_KEY; const supabase createClient(supabaseUrl, supabaseKey); // 新增账单 app.post(/api/transaction, async (req, res) { const { user_id, amount, category, description, constellation } req.body; const { data, error } await supabase .from(transactions) .insert([{ user_id, amount, category, description, date: new Date(), constellation }]); if (error) return res.status(500).json({ error: error.message }); res.json({ success: true, data }); }); // 查询用户账单例如最近5条 app.get(/api/transactions/:user_id, async (req, res) { const { user_id } req.params; const { data, error } await supabase .from(transactions) .select(*) .eq(user_id, user_id) .order(date, { ascending: false }) .limit(5); if (error) return res.status(500).json({ error: error.message }); res.json(data); }); const PORT process.env.PORT || 3000; app.listen(PORT, () console.log(Server running on port ${PORT}));部署与获取接口地址将这个服务部署到任意的云服务器或Serverless平台如Vercel, Railway。部署成功后你会得到一个类似https://your-api.vercel.app的公共访问地址。记下新增账单/api/transaction和查询账单/api/transactions/:user_id这两个接口的完整URL。3.3 在Doubao平台中编排核心逻辑这是最关键的一步我们需要在Doubao-Seed-Evolving的图形化编排器或代码编辑器中将AI对话、数据存储和星座文案生成串联起来。配置用户输入识别在流程开始时设置一个“用户意图识别”节点。我们可以训练平台理解诸如“我花了[金额]元吃[餐饮]”这样的句式并自动提取出“金额”和“消费类别”这两个槽位。获取用户星座星座是相对固定的信息。我们可以在用户首次使用时通过一个单独的问题来获取并存储可以存在平台提供的用户属性中。在记账流程中直接读取这个属性即可。调用数据存储API在流程中添加一个“HTTP请求”节点。将上一步识别出的金额、类别、描述以及用户ID、星座信息组合成一个JSON请求体POST到我们之前部署的/api/transaction接口。请求头务必设置Content-Type: application/json。错误处理一定要配置这个节点的失败分支。如果API调用失败网络问题或服务器错误应该给用户一个友好的提示比如“记账小助手暂时打瞌睡了请稍后再试哦~”而不是暴露一串错误代码。构建情感化回复这是最体现“情绪价值”的环节。在数据保存成功后我们需要生成回复。方案A规则模板在Skill内部维护一个简单的映射表。例如if (星座‘白羊座’ 类别‘运动’) { 文案模板 ‘火星守护的你这笔运动投资充满能量’ }。这种方式简单直接但文案扩展性差。方案B动态提示词生成我采用的是更灵活的方案。首先根据“星座”和“消费类别”这两个关键信息动态生成一个给AI的详细提示词Prompt。这个提示词会“引用”我事先在Obsidian中沉淀的文案风格和元素。例如提示词“现在你需要扮演一个风趣的星座财务顾问。用户是{星座}座刚刚记录了一笔{金额}元的{消费类别}支出。请结合{星座}座今日的运势特点偏向积极、鼓励的方向生成一段不超过80字的、幽默且温暖的财务点评。参考风格避免说教多用比喻和鼓励例如将学习消费比作‘投资未来森林’将美食消费比作‘犒劳辛勤的味蕾旅行家’。”然后将这个精心构造的提示词输入到Doubao平台提供的“AI大模型回复”节点让平台的大模型通常是其内置的某个模型来生成最终的那段话。整合与回复将AI生成的星座财务点评和一条确认信息如“已为您记录午餐 30元”合并最终回复给用户。一个完整的交互闭环就形成了。3.4 星座运势与消费行为的“情感翻译”库搭建这部分工作主要在Skill之外利用Obsidian完成但它决定了Skill的“情商”上限。建立笔记结构在Obsidian中创建一个名为“星座记账文案库”的文件夹。按星座和消费类别创建笔记为每个星座12个创建一个主笔记如“♈白羊座文案灵感”。在每个星座笔记下用列表或子标题划分消费类别如“#餐饮”、“#学习”、“#交通”、“#娱乐”、“#居家”等。积累文案素材这是最需要创意和积累的步骤。不要指望一次写完。平时看星座运势、读散文、甚至刷社交媒体时随时把有感觉的、能表达某种情绪或态度的句子收集起来放进对应的分类里。例如在“♋巨蟹座-居家”下记录“每一笔为小家添置物件的花费都是在为内心的安全感城堡添砖加瓦值得。”在“♐射手座-旅行”下记录“向往远方的射手机票和门票不是开销是通往自由体验的门票这笔投资回报率是100%的快乐。”建立关联网络使用Obsidian的双向链接和标签。给一些通用的优秀文案打上标签比如#鼓励型、#调侃型、#哲理型。这样当我想为某个星座寻找“鼓励型”的餐饮文案时可以通过标签快速筛选。定期更新与优化根据Skill实际运行中用户的反馈如果平台有分析功能或者自己定期回顾不断优化和丰富这个文案库。你会发现这个过程本身就像在培育一个数字生命体的“性格”。4. 核心环节实现细节与调试心得4.1 意图识别与槽位填充的精准度调优Doubao平台的意图识别能力虽然强大但面对用户千奇百怪的表达仍需精心调教。我的经验是提供尽可能多的、多样化的训练例句并覆盖口语化、简略化的表达。正面例句“记一下早上咖啡28块”、“刚交了电费200”、“买书花了50元”。反面例句需要规避的“我今天花了多少钱”这是查询意图不是记账意图、“我的财务状况怎么样”这是分析意图。槽位定义要明确“金额”槽位要能识别数字和中文数字如“三十”“类别”槽位可以预设一个列表餐饮、购物、交通等让AI进行归类而不是完全依赖用户原话。例如用户说“买了杯奶茶”即使没说“餐饮”也应该能归类到“餐饮”。实操心得测试时不要只用完整的句子多用碎片化输入比如“咖啡 28”、“打车30”来检验系统的鲁棒性。往往是在这些边角案例中才能发现识别逻辑的漏洞。4.2 外部API调用的稳定性保障Skill与自建后端服务的通信是整个流程中最脆弱的环节。必须做好全方位的错误处理。超时设置在Doubao平台的HTTP请求节点中务必设置一个合理的超时时间如5秒。超过这个时间视为失败走失败流程避免用户长时间等待。重试机制对于偶发的网络波动可以考虑在服务端或平台侧实现简单的重试逻辑例如失败后间隔1秒重试1次。但重试次数不宜过多且对于POST请求记账要谨慎防止重复记账。友好的降级策略当星座文案生成API或你的自建服务完全不可用时Skill不能崩溃。应该有一个“降级回复”比如跳过星座点评只回复“记账成功啦”。虽然情绪价值打了折扣但核心功能依然可用。日志记录在你的自建API服务中一定要加入详细的日志记录记录每一次请求和错误信息。这是后期排查问题的唯一依据。可以使用console.log但更推荐使用winston、pino这样的日志库方便按级别查看。4.3 提示词工程让AI说出“人话”如何让AI生成的文案既不机械又不至于天马行空偏离主题关键在于提示词Prompt的编写。角色设定要具体不要只说“生成一段话”。要给它一个明确的角色和口吻比如“风趣的星座财务顾问”、“贴心的财务闺蜜”。提供风格范例这就是Obsidian知识库发挥作用的地方。在提示词中直接给出1-2个你积累的优秀范例告诉AI“请参考以下风格和修辞手法”。限制输出格式明确要求“不超过80字”、“用一句简短的话结尾”、“避免使用感叹号过多”。这能有效控制输出质量。迭代优化将AI生成的不满意的文案作为反面例子放入提示词中并说明为什么不妥。例如“避免使用‘您的消费非常理性’这种过于官方和空洞的评价”。一个优化后的Prompt示例 “你是一个懂星座、爱生活的财务小助手。用户是双子座刚记录了一笔120元的‘购买线上课程’支出。请用轻松、鼓励的口吻结合双子座好奇心强、热爱学习的特点生成一段60字左右的点评。参考句式‘对于双子座来说为新知付费就像为大脑的游乐园添置新玩具每一分钱都花在了探索的快乐上。’要求请使用比喻语气亲切直接对‘你’用户说不要出现‘用户’、‘双子座朋友’等第三方指代。”5. 常见问题与排查实录在开发和测试过程中我遇到了不少典型问题这里汇总一下方便大家避坑。5.1 技能无响应或回复“我不理解”问题现象用户发送记账信息后Skill没有任何回复或回复一句通用的“我没听懂”。排查思路检查意图触发首先去Doubao平台技能配置页查看“意图识别”部分的训练数据是否充足是否包含了用户发送的那类句式。这是最常见的原因。检查流程开关确认Skill的整个对话流程是否已发布并启用。有时在编辑状态下流程是未激活的。查看平台日志Doubao平台一般会提供技能运行日志。查看用户请求是否进入了你的Skill以及在哪一个节点出错了。日志是定位问题的第一线索。解决方案补充更多样化的训练例句特别是覆盖那些口语化、不完整的表达。确保流程中每个节点都配置正确特别是分支条件。5.2 账单数据保存失败问题现象Skill回复了星座点评但事后查询发现账单并没有存入数据库。排查思路检查API网络在Doubao平台的HTTP请求节点配置中检查URL、请求方法POST、请求头Content-Type: application/json是否正确。检查请求体确认发送给API的数据格式是否符合后端要求。特别是金额是否为数字类型日期格式是否正确。可以在HTTP请求节点后添加一个“调试”节点打印出即将发送的请求体。检查后端服务日志登录到你的服务器或Serverless平台控制台查看应用日志。看是否收到了请求请求体是什么以及数据库操作是否报错如字段类型不匹配、连接失败等。解决方案在Skill端确保数据格式正确在后端API增加更详细的错误日志和验证逻辑对于错误请求返回明确的错误信息给Skill端便于前端提示用户。5.3 星座点评内容生硬或重复问题现象AI生成的文案听起来很机械或者不同用户、不同消费得到的点评大同小异。排查思路提示词过于简单检查生成文案的Prompt是否只给出了指令而没有提供足够的上下文、范例和风格限制。知识库素材不足Obsidian中的文案素材库是否不够丰富是否缺乏针对某些特定星座或消费类别的素材AI模型波动有时大模型本身会有不稳定的情况生成质量偶有下降。解决方案丰富Prompt按照前面“提示词工程”部分的方法迭代优化你的Prompt加入角色、范例、负面例子和格式要求。扩充知识库持续维护你的Obsidian文案库有意识地收集和创作更多元、更细腻的文案片段。引入随机性可以在Prompt中加入“请从以下三个角度任选一个来点评…”或者提供几个不同的风格范例让AI随机参考增加输出的多样性。5.4 用户星座信息获取与更新问题现象用户想修改星座或者新用户没有星座信息。解决方案在Skill中设计一个独立的意图比如“修改我的星座”或“我是XX座”。当识别到这个意图时流程跳转到一个设置节点更新存储在平台用户属性中的星座字段。同时在用户首次使用记账功能时如果检测到星座信息为空可以先引导用户进行设置。一个小技巧可以在设置星座时让AI根据星座说一句欢迎语比如“欢迎你追求完美的处女座朋友我们的记账之旅要开始咯~”瞬间提升体验。开发这个“情绪价值拉满的星座记账Skill”的过程更像是一次产品思维和AI工程化的小型实践。它让我深刻体会到一个好的AI应用技术实现只是骨架真正打动人的是那些基于对用户场景深刻理解后所设计出的细腻的交互和情感触点。用Obsidian来管理非结构化的创意知识再通过Prompt工程将其“注入”AI这个工作流不仅适用于这个项目对于任何需要内容生成、风格控制的AI应用开发都是一种非常有效的模式。最后别忘了持续收集真实用户的反馈才是让这个小小Skill不断“进化”保持生命力的关键。

相关新闻

最新新闻

日新闻

周新闻

月新闻