一人公司如何用AI技能蒸馏法构建自动化Excel处理助手

1. 项目缘起:当“一人公司”的精力被琐事榨干

最近半年,我一直在运营一个“一人公司”,听起来很酷,时间自由,自己说了算。但实际情况是,我每天80%的时间,都花在了处理那些重复、琐碎但又不得不做的“答疑”和“文档处理”上。客户问产品参数、合作伙伴要合同模板、自己需要从一堆混乱的Excel里提取数据做报表……这些事技术含量不高,但极其消耗心力和时间。我发现自己像个救火队员,在各个聊天窗口和文档之间疲于奔命,真正关乎业务增长的核心产品开发和市场策略,反而被无限期搁置。

这种状态持续了两个月后,我意识到必须做出改变。我需要一个“数字分身”,一个能7x24小时待命、精通我所有业务细节、能处理这些标准化问答和文档操作的“全能助理”。这个想法,就是“小肥肠.skill”的起点。它不是要创造一个拥有通用人工智能的机器人,而是针对我特定业务场景的、高度定制化的自动化技能包。

“Skill”这个概念,在AI智能体(Agent)领域正变得越来越流行。你可以把它理解为一个封装好的、能完成特定任务的“技能插件”。比如,一个“天气查询.skill”、一个“邮件总结.skill”。而我要做的,是把“我”在处理日常琐事时的知识、话术、判断逻辑和操作流程,蒸馏、萃取出来,固化成一个“.skill”文件。这样,无论是通过聊天机器人接口,还是通过自动化脚本触发,这个“.skill”都能代替我,去应对那些海量的、重复的咨询和文档工作。

2. “技能蒸馏”的核心逻辑:从人类经验到可执行代码

把一个人的经验变成可执行的代码,这个过程我称之为“技能蒸馏”。它听起来有点玄乎,但拆解开来,核心是三步:场景定义、逻辑拆解和工具封装

2.1 第一步:精准定义技能边界——什么能做,什么坚决不做

这是最重要的一步,决定了你的技能是否实用。你不能指望一个技能解决所有问题。我的方法是,拿出过去一个月的聊天记录和待办事项,进行归类:

  1. 高频重复问答:例如,“产品A的技术参数是什么?”、“服务B的交付周期是多久?”、“最新的报价单在哪里?”。这些问题有固定答案,且被问及的频率极高。
  2. 标准化文档操作:例如,根据客户提供的Excel名单,批量生成定制化的合同草案;从销售数据Excel中,自动提取本周TOP5客户并生成简要报告;整理会议纪要,固定格式的邮件草拟。
  3. 简单决策路由:例如,用户问“我想投诉”,技能能识别这是投诉类问题,并自动回复标准安抚话术,同时提示我(或转交给工单系统)。用户问“如何购买”,技能能给出标准购买流程链接。

对于“小肥肠.skill”,我明确它的边界:只处理已有明确知识库(我提供的)内的问答,以及我预设好流程的、基于模板的Excel/文档操作。所有模糊的、需要深度创意或复杂谈判的问题,它会礼貌地表示“这个问题已超出我的当前能力,将为您转接给负责人”,并通知我。划定清晰的边界,是技能稳定运行、不给用户错误期待的前提。

2.2 第二步:拆解我的处理逻辑——把“下意识”变成“流程图”

对于每一个纳入技能范围的任务,我需要把自己大脑的处理过程写下来。比如,处理“发我一份报价单”这个请求:

  • 我的本能反应:1. 确认对方需要哪个产品/服务套餐的报价。2. 在云盘固定文件夹找到对应的最新版报价单模板。3. 如果是老客户,我会在文件名中加入客户名和日期。4. 通过聊天工具发送文件。
  • 技能的逻辑流程图
    1. 意图识别:通过关键词(“报价单”、“报价”、“价格表”)触发。
    2. 参数提取:询问或识别用户消息中是否包含产品名称(如“产品A套餐”)。如果没有,则列出所有可选产品清单让用户选择。
    3. 文件定位:根据选择的产品,映射到本地或云存储的固定文件路径./templates/quote_[产品名].docx
    4. 个性化处理:查询对话上下文或简单询问,获取客户名称。在复制模板后,将文件名重命名为[客户名称]_报价_[日期].docx
    5. 交付:将最终文件发送给用户。

这个过程就是把模糊的经验,变成清晰的if...else...查询 -> 判断 -> 执行的代码逻辑。这里推荐使用draw.ioMiro这样的工具先画流程图,再着手写代码,思路会清晰很多。

2.3 第三步:选择合适的实现工具——Hermes-Agent与Python的黄金组合

定义了场景和逻辑,就需要技术来实现。我选择了Hermes-Agent作为技能的“大脑”和“交互外壳”,用Python作为技能的“手和脚”来处理具体任务。

  • 为什么是 Hermes-Agent?Hermes-Agent 是一个开源的AI智能体框架,它的一大优势是对Skill有很好的原生支持。你可以把Skill写成独立的Python脚本或插件,Hermes-Agent能方便地加载、管理这些技能,并提供统一的对话接口。它处理了对话状态管理、意图识别(可以结合大语言模型)等复杂问题,让我能专注于技能本身的业务逻辑。部署上,无论是在Windows、macOS还是WSL(Windows Subsystem for Linux)环境下,都有相对清晰的指引。

  • 为什么是 Python?因为我要处理的核心是Excel和文档自动化,而Python在这方面有无比强大的库支持(pandas,openpyxl,python-docx),同时也是连接各种API(如云存储、邮件)最方便的语言。对于“一人公司”的场景,Python的学习曲线和开发效率是最优解。

一个简单的技能文件结构示例:

my_skills/ ├── quote_skill.py # 报价单处理技能 ├── excel_report_skill.py # Excel报表技能 ├── knowledge_base.json # 问答知识库 └── requirements.txt # Python依赖库

quote_skill.py中,我会定义一个主要的处理函数,例如handle_quote_request(product_name, client_name),里面包含上述流程图的所有步骤。

3. 实战构建“Excel处理”核心技能

在我的业务中,Excel数据处理是重灾区。下面我以“从销售数据中提取本周TOP5客户并生成报告”这个技能为例,拆解具体实现。

3.1 技能触发与参数设计

这个技能不会被动等待问答,而是可以主动触发或定时触发。在Hermes-Agent中,我可以配置一个定时任务,或者设置一个简单的命令如“生成周报”来触发它。

技能需要几个参数:

  1. 数据源路径:销售Excel表格的固定位置。
  2. 日期范围:默认为“本周”(计算上周一至上周日)。
  3. 排序字段:默认为“销售额”,也可以是“订单数”。
  4. 输出格式:是直接在聊天窗口输出文字摘要,还是生成一个简化的Excel文件或Markdown报告。

3.2 使用Pandas进行高效数据处理

这是技能的核心。假设我们的销售数据表sales_data.xlsx日期客户名称产品销售额订单数等列。

import pandas as pd from datetime import datetime, timedelta def generate_weekly_top5(data_path='./data/sales_data.xlsx'): # 1. 读取数据 # 注意:如果Excel文件很大或有特殊格式,可能需要openpyxl引擎 try: df = pd.read_excel(data_path, engine='openpyxl') except FileNotFoundError: return "错误:未找到销售数据文件。" # 2. 处理日期,筛选本周数据 df['日期'] = pd.to_datetime(df['日期']) today = datetime.now() start_of_week = today - timedelta(days=today.weekday() + 7) # 上周一 end_of_week = start_of_week + timedelta(days=6) # 上周日 mask = (df['日期'] >= start_of_week) & (df['日期'] <= end_of_week) weekly_df = df.loc[mask] if weekly_df.empty: return f"本周({start_of_week.date()}至{end_of_week.date()})暂无销售数据。" # 3. 按客户聚合数据 grouped = weekly_df.groupby('客户名称').agg({ '销售额': 'sum', '订单数': 'count' }).reset_index() # 4. 按销售额排序,取TOP5 top5_clients = grouped.nlargest(5, '销售额') # 5. 格式化输出 report_lines = [f"【本周销售TOP5客户报告({start_of_week.date()} - {end_of_week.date()})】"] for i, (_, row) in enumerate(top5_clients.iterrows(), 1): report_lines.append(f"{i}. {row['客户名称']} - 销售额:¥{row['销售额']:,.2f} (订单数:{row['订单数']})") # 计算总计 total_sales = top5_clients['销售额'].sum() total_orders = top5_clients['订单数'].sum() report_lines.append(f"\nTOP5客户总销售额:¥{total_sales:,.2f},占总周期销售额的 {(total_sales/weekly_df['销售额'].sum()*100):.1f}%。") return "\n".join(report_lines) # 这个函数的返回结果,可以直接被Hermes-Agent发送给用户。

注意:这里有个关键细节:Excel中数字经常带有千分符(如1,234.56),直接用pandas读取可能会被识别为字符串。需要在读取前确保单元格格式为“数字”,或使用pd.read_excel(..., thousands=',')参数来处理。这正是热词中提到的“去除千分符”问题在实际中的解决方案。

3.3 让技能更智能:处理异常与模糊输入

一个健壮的技能必须能处理各种意外情况。

  • 文件不存在或格式错误:代码中已经有了基本的try...except
  • 日期列名不匹配:可以尝试常见的列名变体,如date,Date,销售日期,或者让技能在初始化时“学习”一次数据表的列结构。
  • 用户模糊输入:比如用户说“看看上周卖得最好的几个客户”。这里就需要结合Hermes-Agent的语义理解能力,将“上周”映射到具体的日期范围,将“卖得最好”映射到“按销售额排序”,将“几个”默认为5个。这需要在技能配置里定义清晰的**意图(Intent)实体(Entity)**映射关系。

4. 集成与部署:让“小肥肠”真正跑起来

技能开发完后,需要集成到Hermes-Agent中,并部署到一个能持续运行的环境。

4.1 将Python技能封装为Hermes-Agent插件

Hermes-Agent通常通过一个配置文件(如config.yaml)来加载技能。你需要为你的技能创建一个适配器。

# config.yaml 片段 skills: - name: "weekly_report" type: "python" path: "./my_skills/excel_report_skill.py" handler: "generate_weekly_top5" # 指定调用的函数名 triggers: - keyword: "生成周报" - schedule: "0 18 * * 5" # 每周五下午6点自动触发 (Cron表达式) - name: "quote_sender" type: "python" path: "./my_skills/quote_skill.py" handler: "handle_quote_request"

在Hermes-Agent的主程序中,它会加载这个配置,当检测到关键词“生成周报”或定时任务触发时,便调用对应的Python函数,并将结果返回给对话流。

4.2 选择部署环境:Windows、WSL还是云服务器?

  • 本地Windows:最适合快速原型验证。直接安装Python、Hermes-Agent,在本地命令行运行。缺点是电脑关机技能就停了。
  • WSL(Windows Subsystem for Linux):很多开发工具在Linux环境下更稳定。如果你习惯Linux命令行,这是一个折中方案。部署方式和在纯Linux下类似。
  • 云服务器(推荐):对于“一人公司”,购买一个最低配的云服务器(如腾讯云/阿里云的轻量应用服务器),一年成本并不高。将技能部署在云上,可以保证7x24小时在线。你需要:
    1. 在服务器上配置Python环境。
    2. 使用git拉取你的技能代码库。
    3. 使用systemdsupervisor这样的进程管理工具,将Hermes-Agent作为后台服务运行,并设置开机自启。
    4. 将技能需要访问的数据文件(如Excel模板)也放在服务器上,或配置好对云存储(如OSS、COS)的访问权限。

4.3 持续维护与技能迭代

技能不是一劳永逸的。业务变化,技能也需要更新。

  1. 知识库更新:将knowledge_base.json文件放在版本控制(如Git)中,任何业务信息的变更(如价格调整、产品更新),都先更新这个文件,然后重启或热重载技能。
  2. 日志与监控:在技能代码中加入日志记录,记录每次被触发、处理的输入和输出。这能帮你发现技能理解错误的地方,用于迭代优化。
  3. 技能商店思维:当你构建了多个技能(excel_report.skill,quote_sender.skill,faq_bot.skill),你可以像管理一个应用商店一样管理它们。哪个技能使用频率最高?哪个技能常出错?根据数据驱动进行优化。

5. 避坑指南与效能评估

在开发“小肥肠.skill”的过程中,我踩过不少坑,也总结出一些让技能真正产生效能的关键点。

5.1 开发过程中的三个“大坑”

坑一:过度追求通用性,导致技能臃肿且脆弱最初,我想做一个“什么Excel问题都能解决”的技能。结果代码变得极其复杂,处理简单任务也慢,而且一旦遇到一个未预料到的表格格式,整个技能就可能崩溃。教训:一个技能只做好一件事,深度优先于广度。“数据提取.skill”和“格式调整.skill”就应该分开。

坑二:忽视错误处理和用户引导早期版本中,如果Excel文件被其他程序打开锁定,技能只会抛出一个Python异常然后沉默。用户完全不知道发生了什么。必须为每一个可能出错的地方设计友好的提示语。例如:“看起来您的销售数据表格正在被其他程序(可能是Excel)使用,请关闭它后再试一次。”

坑三:安全风险技能如果可以直接读写服务器上的重要文件,就需要考虑权限问题。特别是当技能可以通过网络接口被触发时。解决方案

  • 为技能运行设置一个权限受限的系统用户。
  • 对技能能访问的文件目录进行严格限制。
  • 如果处理用户上传的文件,一定要在沙箱环境或临时目录中进行,并进行病毒扫描和格式校验。

5.2 如何量化技能带来的效率提升?

“一人公司”的每一分时间投入都要看回报。我用了两个简单的方法来评估:

  1. 时间日志对比法:在技能上线前一周,记录我花在“重复答疑”和“手工处理Excel”上的时间。上线后一周,再次记录。我的数据显示,这两类事务的耗时减少了约70%。这释放出的时间,我投入到了产品新功能的开发上。
  2. 客户满意度间接反馈:以前客户问问题,我可能半小时甚至几小时后才回复。现在,对于标准问题,几乎是秒回。我注意到客户在催问和抱怨上的消息明显减少,这间接提升了客户体验。

5.3 技能不是替代,是增强

最重要的一点认知是:“小肥肠.skill”不是要替代我,而是把我的时间从低价值的重复劳动中解放出来。它处理的是“已知的未知”(我知道会被问什么问题,只是回答太频繁)和“确定的流程”。而那些需要创意、战略决策和复杂沟通的“未知的未知”,仍然需要我亲自处理。它的存在,让我能更聚焦于这些真正决定业务上限的核心工作。

通过这次“自我蒸馏”,我不仅构建了一个实用的自动化工具,更完成了一次对自身工作流的深度梳理和标准化。这个过程本身,就带来了效率的极大提升。对于所有在琐事中挣扎的独立开发者、自由职业者和一人公司经营者,我都建议你尝试一下,把你最头疼的那部分工作,“蒸馏”成一个专属的.skill。