基于RAG与AI编程的星座情绪记账Skill开发实战 1. 项目概述当星座遇上AI一个“情绪价值”记账工具的诞生最近在折腾各种AI应用时我一直在想能不能让冷冰冰的工具变得更有“人味儿”记账这件事对很多人来说都挺枯燥的坚持下来不容易。正好在体验Doubao-Seed-Evolving豆包种子进化这个平台时我发现它提供的Skill开发框架和Claude Code的代码生成能力结合Obsidian这类知识库工具能做出一些很有意思的东西。于是一个想法冒了出来做一个“星座记账Skill”。这不仅仅是一个记录收支的工具。它的核心是“情绪价值”。想象一下当你记下一笔“请同事喝奶茶”的支出后系统不是只告诉你余额减少了而是根据你所属的星座比如双子座给你一句“今日份社交投资已到账双子座的巧舌如簧今天有没有派上用场”的俏皮解读。或者当你记录一笔“自我提升课程”的收入时间或知识价值时天秤座可能会收到“平衡的艺术在于投资自己这波不亏”的鼓励。我的目标就是利用Doubao-Seed-Evolving的快速原型能力、Claude Code的辅助编码以及Obsidian作为“星座性格知识库”打造一个能聊天、能共情、能结合用户星座特性提供个性化反馈的记账伴侣。这个Skill适合谁呢首先是对AI应用开发感兴趣的开发者或爱好者想了解如何将大模型能力与垂直场景结合其次是那些觉得传统记账App枯燥、希望培养记账习惯又对星座文化有点兴趣的普通用户最后它也是一个很好的案例展示了如何用“知识库RAG”给AI注入特定领域的知识这里是星座学从而产生更精准、有趣的交互。接下来我就把从构思、开发到实测的完整过程以及背后的技术选型思考详细拆解一遍。2. 核心设计思路为什么是“Doubao-Seed-Evolving Claude Code Obsidian”这个组合做一个带情绪的记账工具技术路径有很多。为什么我最终选定了Doubao-Seed-Evolving作为Skill承载平台用Claude Code来写核心逻辑并且用Obsidian来管理星座知识库呢这背后是一套关于效率、能力和成本的综合考量。2.1 平台与框架选型Doubao-Seed-Evolving为何胜出首先看Skill承载平台。市面上能开发AI智能体Agent或技能Skill的平台不少比如Dify、Coze、还有各大模型厂商自带的Bot创建平台。我选择Doubao-Seed-Evolving为行文方便后文简称“豆包SE”主要基于以下几点实战考量生态集成度与发布便捷性豆包SE背靠国内主流AI应用生态开发出的Skill能比较方便地接入豆包App或其他相关场景对于希望技能能被真实用户使用的开发者来说这是一个巨大的便利。相比于从零开始搭建一个独立的聊天机器人应用在这里开发更像是“入驻一个大型商场”自带流量潜在用户和基础设施对话框架、用户管理。对长上下文和复杂逻辑的支持记账不是一个单轮问答它涉及多轮对话、状态记忆用户正在记什么账、什么星座、条件判断根据金额、类型、星座给出反馈。豆包SE的Skill框架提供了清晰的会话状态session管理、工具tool调用和流程控制能力让处理这类交互逻辑变得结构清晰。快速原型与迭代它的开发界面和调试工具相对友好配合Claude Code这样的AI编程助手可以实现“心想大致即所得”的开发速度。我需要快速验证“星座记账情绪反馈”这个核心创意是否成立而不是在环境配置上耗费大量时间。注意平台选择永远没有唯一解。如果你更看重跨平台、私有化部署Dify可能是更好的选择如果追求与特定模型如Claude系列深度结合可能需考虑其他方案。我的选择是基于“快速验证创意并触及用户”这个首要目标。2.2 核心开发利器Claude Code如何提升“心流”体验写代码尤其是写这种需要调用API、处理数据结构、写自然语言模板的代码很容易被细节打断思路。Claude Code这里指类似Cursor、Claude for Code的AI编程助手并非特指某个产品在这里扮演了“超级外脑”的角色。我的开发流程通常是先用中文描述清楚我想要的功能——“我需要一个函数输入是星座名称、消费金额、消费类别输出是一句带有该星座特点的幽默点评”。然后Claude Code能快速生成结构清晰的Python或JavaScript函数骨架甚至直接写出利用字典映射或简单规则进行判断的代码。更重要的是它能在我卡壳的时候提供建议比如“要生成更自然的句子可以考虑使用f-string模板并准备一个形容词库根据金额正负随机抽取。” 这极大地减少了从“想法”到“可运行代码”的路径摩擦。具体到本项目Claude Code帮助最大的地方在于数据结构设计快速设计了用户会话状态的存储格式包括user_id,zodiac_sign,current_record临时记账项等。对话流程编排将多轮对话询问星座、记录项目、确认信息用if-elif-else或状态机的方式清晰勾勒出来。文本模板生成协助编写了数十条针对不同星座、不同消费场景的“情绪化”反馈语料库避免了手动编写的枯燥。2.3 知识库的基石为何用Obsidian管理星座知识“情绪价值”不是凭空产生的它需要内容支撑。星座性格解读就是我们的“领域知识”。这部分知识需要被组织、存储并能被Skill灵活调用。我放弃了直接在网上爬取杂乱无章的星座解析文章也放弃了用一个大文本文件硬编码而是选择了Obsidian。Obsidian的核心优势在于“双向链接”和“本地优先”。我为12个星座分别创建了笔记文件例如双子座.md。里面不是简单的几句描述而是用结构化的方式记录核心特质如“多变、好奇、善沟通”。消费倾向如“乐于为新鲜体验和社交花钱容易冲动消费小物件”。正向激励关键词如“机智”、“社交达人”、“信息汲取”。需要提醒的点如“注意分散投资”、“三思而后买”。然后我可以在其他笔记比如消费场景-餐饮.md中用[[双子座]]的方式链接到双子座笔记并备注“在团队聚餐中双子座往往是活跃气氛的担当这笔消费可视为‘社交氛围投资’”。这样一个由笔记和链接构成的、立体化的“星座消费心理学”知识网络就建成了。那么Skill如何利用这个知识库呢这里就引入了RAG检索增强生成的思想。我不会让AI死记硬背所有笔记内容。而是知识提取使用脚本同样可以用Claude Code帮忙写将Obsidian的笔记内容Markdown格式批量导出并转换成纯文本段落。向量化利用豆包SE平台可能提供的嵌入Embedding模型能力或接入一个开源的嵌入模型API将这些文本段落转换成向量一组数字存入向量数据库如Chroma、Milvus或一些平台内置的存储。检索当用户例如双子座记录一笔“购买新上市电子游戏”的消费时Skill会将“双子座 消费 电子游戏 新奇”作为查询关键词转换成向量去向量数据库中搜索最相关的知识段落可能是双子座.md中关于“追求新鲜感”的部分以及消费场景-娱乐.md中的相关描述。增强生成将检索到的相关星座知识片段作为上下文背景连同用户的记账信息一起提交给豆包SE的大语言模型LLM并指令它“请根据以下关于双子座性格和消费特点的描述为用户这笔购买游戏的消费生成一句轻松幽默、带有理解和鼓励性质的点评。” 这样生成的点评既有个性化又保证了内容在一定程度上的专业性和丰富性避免了LLM胡编乱造。3. 实操构建全流程从零搭建你的星座记账Skill理论说了这么多我们直接上手看看如何一步步把这个Skill做出来。整个过程我把它分为四个阶段环境与知识准备、Skill骨架搭建、核心逻辑注入、调试与优化。3.1 第一阶段构筑“灵魂”——用Obsidian搭建星座知识库在写第一行代码之前我们先要把“情绪价值”的素材准备好。打开Obsidian创建一个新的仓库Vault命名为Zodiac_Finance_KB。创建核心笔记在根目录下创建12个以星座命名的Markdown文件白羊座.md、金牛座.md、……、双鱼座.md。每个文件采用一致的模板结构这能方便后续的信息提取。模板如下# 白羊座 (Aries) ## 核心性格特质 - 关键词冲动、热情、勇敢、直接、竞争心强 - 优势行动力满分敢于尝试新事物。 - 盲点缺乏耐心消费决策可能过于迅速。 ## 财务性格与消费倾向 - **消费观**为激情和体验买单。乐于投资在能带来即时快乐或竞争优势的事物上如运动装备、竞赛门票、新奇电子产品。 - **储蓄观**往往不是天生的储蓄家但如果有明确的目标如一场说走就走的旅行攒钱动力会非常强。 - **风险偏好**较高对投资理财可能倾向于高收益高风险类型。 ## 情绪价值反馈方向供AI参考 - **正向激励**称赞其果断、有魄力。“不愧是行动派白羊”“这笔投资充满了白羊座的冲劲” - **温和提醒**引导其稍作思考。“行动力爆表下次付款前可以默数三秒看看是否仍是心头最爱” - **场景关联**将消费与其“竞争”、“领先”特质结合。“这笔钱花出去是为了在[某个领域]保持领先地位吗很白羊” ## 关联消费场景 - [[运动健身]] - [[餐饮-快餐简餐]] - [[自我挑战课程]]创建消费场景笔记创建目录Scenes在里面创建笔记如餐饮-朋友聚餐.md、购物-服饰.md、学习-线上课程.md等。在这些笔记里描述场景特点并链接到相关的星座。例如在餐饮-朋友聚餐.md中# 朋友聚餐 ## 场景特点 社交属性强注重氛围和情感交流可能涉及请客或AA制。 ## 星座关联解读 - [[狮子座]]可能是组织者享受被关注的感觉买单时颇有王者风范。 - [[天秤座]]在乎聚餐的平衡与和谐是优秀的调停者和氛围营造者。 - [[巨蟹座]]关注大家吃得是否舒服、温馨可能默默照顾所有人。建立链接网络利用Obsidian的图谱Graph View功能查看星座与消费场景之间的连接是否丰富。这步不是必须但能帮你直观感受知识的结构化程度。至此一个立体的、可扩展的知识库就有了雏形。你可以随时往里面添加新的洞察或场景而无需改动核心代码。3.2 第二阶段搭建“躯干”——在豆包SE中创建Skill框架登录Doubao-Seed-Evolving开发者平台开始创建我们的Skill。新建Skill点击创建命名为“星座情绪记账助手”。在描述中清晰说明功能“一个根据您的星座为每一笔收支提供个性化、情绪化解读的记账小助手。”配置基础设置触发词可以设置“开始记账”、“星座记账”等方便用户快速唤醒。对话开场白设计一段亲切的开场例如“嗨我是你的星座记账伙伴在开始记录你的财富流动之前可以先告诉我你的星座吗这样我才能为你提供专属的解读哦~”选择模型根据平台提供的选项选择一个在中文理解和生成上表现较好的模型。通常平台会有推荐选择默认或性价比较高的即可。定义对话流程与状态关键 这是Skill的大脑。我们需要规划好几个关键状态和跳转逻辑。我通常会用注释的形式先在代码编辑区规划出框架# 伪代码会话状态设计 session_states { “waiting_for_zodiac”等待用户输入星座 “waiting_for_amount”等待用户输入金额 “waiting_for_category”等待用户选择分类 “confirming_record”确认记账信息 “generating_comment”生成并播报情绪点评 } # 伪代码用户数据临时存储设计 user_data { “zodiac” “” # 用户星座 “current_record” { # 当前正在记录的账单 “type” “expense” # income/expense “amount” 0.0, “category” “” “description” “” } }在豆包SE的Skill开发界面通常可以通过“变量”或“状态”模块来声明和管理这些数据。务必把user_data设置为会话持久化变量确保在同一次对话中用户不需要重复告知星座。3.3 第三阶段注入“血液”——用Claude Code编写核心交互逻辑现在进入最核心的编码部分。我们借助Claude Code将设计转化为实际可运行的代码。豆包SE的Skill通常支持Python或JavaScript。处理用户星座输入 我们需要一个函数来解析用户输入的星座文本。用户可能说“我是双子座”、“双子”、“gemini”甚至“我双子座的”。写一个健壮的解析函数。# 在Claude Code辅助下编写的函数示例 def parse_zodiac(user_input: str) - str: “”“将用户输入解析为标准化的星座中文名称。”“” zodiac_map { “白羊” “白羊座” “白羊座” “白羊座” “aries” “白羊座” “金牛” “金牛座” “金牛座” “金牛座” “taurus” “金牛座” “双子” “双子座” “双子座” “双子座” “gemini” “双子座” # ... 补充其他星座 “双鱼” “双鱼座” “双鱼座” “双鱼座” “pisces” “双鱼座” } user_input_lower user_input.strip().lower() for key, standard_name in zodiac_map.items(): if key.lower() in user_input_lower: return standard_name return None # 无法识别在对话流程中当状态处于waiting_for_zodiac时调用此函数。如果解析成功将结果存入session.user_data[‘zodiac’]并进入下一步如果失败则友好提示用户重新输入。实现记账信息收集的多轮对话 这是一个典型的“槽位填充”Slot Filling过程。我们需要引导用户依次提供金额、类型收入/支出、分类餐饮、交通等、备注可选。# 示例处理金额输入 if session.state “waiting_for_amount”: user_msg session.current_message try: # 尝试从文本中提取数字这里简化处理实际可能需要更复杂的正则表达式 import re amount_str re.search(r‘\d(?:\.\d)?’ user_msg).group() amount float(amount_str) session.user_data[‘current_record’][‘amount’] amount # 判断是否为收入用户可能说“收到一笔款5000” if any(word in user_msg for word in [‘收到’ ‘收入’ ‘进账’ ‘’]): session.user_data[‘current_record’][‘type’] ‘income’ else: session.user_data[‘current_record’][‘type’] ‘expense’ session.state “waiting_for_category” return “好的记下了 {amount} 元。这笔钱属于哪个类别呢比如餐饮、购物、交通、学习还是其他” except: return “抱歉我没识别出明确的金额呢。可以再说一遍吗例如‘花了50元’或者‘收入3000’。”对于分类可以提供一个简单的按钮或选项列表让用户选择体验更好。集成知识库与生成情绪点评RAG流程 这是项目的精华。假设我们已经将Obsidian知识库处理成了向量并存储在平台可访问的向量库中这一步可能需要在平台外完成通过API接入或者利用豆包SE平台提供的知识库功能上传处理好的文本。# 伪代码生成情绪点评的核心函数 async def generate_emotional_comment(session): zodiac session.user_data[‘zodiac’] record session.user_data[‘current_record’] # 1. 构建检索查询词 query f“{zodiac} {record[‘category’]} 消费 {record[‘amount’]}元” if record[‘description’]: query f“ {record[‘description’]}” # 2. 调用平台知识库检索接口或自有向量库检索 # 假设平台提供了 search_knowledge_base 函数 relevant_knowledge await search_knowledge_base(query, top_k3) # 3. 构建给LLM的提示词Prompt system_prompt “““你是一个幽默贴心、精通星座心理的记账助手。请根据用户提供的记账信息和相关的星座知识生成一句简短不超过50字的个性化点评。点评要贴合该星座的性格语气轻松活泼可以带点调侃或鼓励目的是提供情绪价值。直接输出点评句子不要解释。””” user_prompt f“““ 用户星座{zodiac} 记账信息{record[‘type’]} {record[‘amount’]}元类别{record[‘category’]}备注{record[‘description’] or ‘无’} 相关星座知识 {‘\n’.join(relevant_knowledge)} 请生成情绪点评 ””” # 4. 调用豆包SE的LLM生成回复 llm_response await call_llm(system_prompt, user_prompt) return llm_response这个函数会在generating_comment状态被调用并将生成的点评返回给用户。数据持久化可选但重要 记账数据需要保存。豆包SE平台可能提供简单的数据存储能力或者你可以引导用户授权将数据同步到外部系统如Google Sheets、腾讯文档或自建服务器。最简单的开始可以先用平台的临时存储或者每次会话结束时以文本总结的形式发给用户。3.4 第四阶段调试与“打磨情商”功能跑通后真正的挑战在于让Skill的交互变得自然、稳定、真正有“情绪价值”。对话流调试在平台的模拟器里扮演各种“刁钻”用户进行测试。比如不按顺序提供信息、中途切换话题、输入无效星座等。确保你的状态机能够优雅地处理这些异常并引导用户回到正轨。点评质量优化这是最费功夫但也最有成就感的部分。知识库优化回顾Obsidian笔记看哪些星座的描述不够具体哪些消费场景缺乏关联。不断补充和细化。比如发现给“处女座”的点评总是围绕“整洁”就可以补充其“分析规划”、“注重细节价值”的财务特质。Prompt工程调整给LLM的提示词。比如在system_prompt里加入“避免使用‘哦’、‘呢’等过于频繁的语气词”、“可以适当使用网络流行语但不要太生硬”、“如果金额特别小或特别大可以特别提及”。多生成一些样例挑选出效果最好的提示词模板。建立反馈-修正循环自己或找朋友真实使用收集那些“差点意思”或“特别出彩”的点评案例。分析原因是知识检索不准还是Prompt描述不清或是LLM本身的问题然后针对性调整。性能与成本考量每次生成点评都调用LLM和检索可能会有延迟和成本。可以考虑对常见“星座类别”组合预生成一些高质量的点评模板库在匹配时直接使用仅在不匹配或需要更复杂生成时才走RAGLLM流程。注意平台对调用频率和Token数量的限制做好错误处理和降级方案例如当生成失败时回退到预置的通用鼓励语。4. 避坑指南与心得那些只有动手才知道的事做完这个项目我踩了不少坑也积累了一些在豆包SE平台上开发这类“情感化AI技能”的实战经验。4.1 知识库构建的“坑”坑1知识过于笼统。最初我的星座笔记里只有“双子座聪明、善变”。结果生成的点评千篇一律都是“聪明的双子座又花钱啦”。解决方案必须下沉到具体场景。不是“善变”而是“在信息消费买书、课程上乐于投入在实物消费买衣服上容易喜新厌旧”。给AI更细颗粒度的知识它才能给出更精准的反馈。坑2向量检索的“语义鸿沟”。用户说“买了杯奶茶”你的知识库里写的是“餐饮-茶饮消费”。如果直接检索“奶茶”可能匹配不上。解决方案在构建向量库时对知识文本进行“数据增强”。比如除了原始段落可以自动生成一些同义词、近义词扩展段落一起入库。或者在查询时先用LLM对用户输入“买了杯奶茶”进行一个简单的意图解析转换成更规范的查询词“餐饮 茶饮 消费”。坑3知识更新不及时。星座解读虽然相对稳定但消费热点和网络用语在变。解决方案在Obsidian里建立一个最新网络梗与消费趋势.md的笔记定期更新并将其链接到相关的星座笔记。在检索时可以给这类“时效性知识”稍高的权重。4.2 对话设计中的“小心思”状态管理要健壮用户随时可能说“等等我是什么星座来着”或者“我刚才记到哪了”。你的Skill必须能处理这种查询状态的中断并能友好地回复当前状态“您刚才正在记录一笔餐饮消费金额是88元需要确认吗”而不是一脸懵地重启对话。错误处理要“有情商”当用户输入无法识别的星座时不要说“输入错误”。可以换成“哈哈你提到的这个星座守护星可能今天请假了我没认出来呢~可以再说一次吗比如‘白羊座’、‘金牛座’这样的。” 让错误回复也符合“情绪价值”的设定。提供“跳过”选项不是每次记账用户都想听点评。可以在确认记账信息后加一句“需要我结合你的星座特质给这笔消费一个有趣的解读吗回复‘要’或‘不用啦’”。把选择权交给用户体验更好。4.3 性能与成本的平衡术冷启动优化用户第一次使用需要输入星座。这个信息应该被持久化保存如果平台支持。下次用户再来可以直接问候“双子座的朋友今天有什么财富故事要和我分享吗”这种个性化的记忆点非常提升体验。缓存策略对于“白羊座餐饮100-200元”这种常见组合其生成的精彩点评可以缓存起来。下次遇到类似情况直接使用缓存结果速度快、成本低、质量稳定。可以设置一个缓存过期时间比如一周以保证内容的新鲜感。降级方案当LLM服务或检索服务不稳定时要有备选方案。可以准备一个本地的小型规则引擎或模板库确保最基本的记账功能和一句通用的鼓励语“记账本身就是迈向财务自由的第一步你真棒”永远可用。5. 效果实测与未来可能的延伸经过几周的开发和调优我把这个Skill分享给了几个不同星座的朋友试玩。反馈比我想象的有趣一位金牛座朋友记录“买了一套精装书”后收到点评“为知识付费是金牛座最踏实的投资这份精神食粮的‘性价比’你心里已经算清楚了吧”。她表示“被戳中了”确实犹豫了好久比价才下单。一位射手座朋友记录“周末短途旅行开销”后收到“灵魂和钱包总有一个在路上。这笔钱买到了射手座最爱的自由视野值” 他觉得比干巴巴的记账App多了份共鸣。当然也有翻车的时候。比如一位用户输入了非常规的金额“-100”可能是表示退款我的逻辑当时没处理好导致点评生成了奇怪的内容。这提醒我边界测试的重要性。这个项目的价值不在于它多复杂而在于它展示了一种思路AI应用可以不只是提升效率的工具还可以是提供情绪价值的伙伴。通过“Doubao-Seed-Evolving Claude Code Obsidian”这个组合我们快速地将一个有趣的想法变成了可交互的产品。未来这个Skill还有很多可以延伸的方向多模态结合文生图能力在生成点评的同时配上一张符合星座和消费场景的趣味小图。数据分析与洞察在用户积累一定数据后可以定期如每周、每月生成星座财务报告“过去一周双子座的你在‘信息获取’类目支出最多果然是个好奇宝宝”社交轻互动在用户同意的前提下将一些有趣的、脱敏后的消费点评如“巨蟹座本周为家人下厨三次荣获家庭温暖投资金奖”做成分享卡片。扩展知识库不止星座可以接入更多“人格标签”体系如MBTI、血型甚至用户自定义的标签“铲屎官”、“咖啡控”让点评更加千人千面。开发过程中Claude Code就像一位不知疲倦的结对编程伙伴Obsidian构成了项目坚实的数据后脑而豆包SE提供了让想法快速落地和触达用户的舞台。最大的体会是在AI时代创意的门槛在降低但将创意打磨成真正有温度、好用产品的过程依然需要开发者深入场景、关注细节、持续迭代。这个“星座记账Skill”只是一个开始期待看到更多有爱、有趣的AI应用被创造出来。