本篇文章讲述的内容是我给自己的开源软件添加AI功能的历程,不感兴趣的同学可以直接关掉哈

前言

去年10月的时候,我曾经在少数派上发布过一个我自己的记账软件的开发过程,链接在下方,感兴趣想了解是一个什么项目的,可以点击看一下,下面我要讲的内容,是基于这个项目进行开发的

 

彼时的我在开发项目的过程中就在github上面写到过,想着添加AI相关的功能

并非想当时代的弄潮儿,实则我因为工作的缘故,从2020年开始开发NLP相关的应用,再到22年年底的ChatGPT平地惊雷,因为工作的缘故也第一时间跟进

后来基于LangChain做的RAG相关的应用,再到后来使用知识图谱、Dify,等等等等,在LLM生成式AI方向上,感觉自己走过了很漫长的道路

So,基于工作上面的经验+自己的开源项目,就产生了奇妙的反应,引申出下面的内容


添加LLM的方式

当我的记账软件开发版本从1.0再到1.5、2.0、2.4、2.5,版本号的递增导致了我功能完善的同时,也开始逐渐厌倦,功能点是逐渐减少的,到了增无可增的时候了

然后人类一思考,上帝就发笑

一个记账软件+大语言模型,应该是一个怎么样的产品形态?

这是一个从开发者跨入产品经理的思考

最终我对自己的记账软件解构化之后,就剩下两个大功能,一个是‘记’,一个是‘查’

其余的,均为花架子

所以我给自己提出了一个较为发散的问题列表:

  1. 对比一下上个月和去年同期的支出,什么占大头?
  2. 我今年哪天买的枕头?
  3. 整理一下我去年各个月份的支出
  4. 我儿子去年生病花了多少钱?今年呢?
  5. 今年第一季度和去年第一季度比,收入少到哪里了?
  6. 统计一下近三年我车的保险钱
  7. .......

如果上述问题都能回答,我觉得AI功能算是添加成功了

带着目标我做了如下的尝试:

方案1:LLM+数据库

这是一个早期方案,如果我没记错的话,在23年7月份尝试的

思路:既然要查,我一步到位,让LLM生成SQL语句,查询数据库,得到数据,再进行总结

操作:使用 文心4.0模型生成SQL后,直接使用该SQL进行查询

结果:失败,我无奈的发现,这个弱鸡模型在当年干点别的还行,但是他根本对付不了几个简单的表,还有每个表的结构

方案2: RAG检索增强生成

在尝试了数据库的路行不通的时候

我想到了另一条路,RAG

思路:每个月的账单数据,使用Embdding模型,加入到向量库,使用用户问题进行召回并回答+LLM模型回答

操作:为了简化操作,我部署了一套Dify,手动导入了我的全部账单,Embdding+Rerank模型均使用硅基流动的API,大模型选用Qwen2-72B

这是我工作用的dify知识库

结果:失败,这次是卡在了知识库召回这里,知识库召回存在天然的短视问题,无法处理更大更全局视野的问题,举例子就是:“查一下这半年大头花销”,结果就是他只能召回3个月的数据,并且时间错误


其实到这里我就已经搁置了我的想法,既然无法用技术手段实现,那就交给时间吧

柳暗花明又一村,时间来到了去年年底,MCP被Anthropic提出,并且迅速发展

这时的LLM模型,百花齐放

DeepSeek-R1、Claude、Qwen3家族等等等等

他们都有一个特殊加强功能,instruct指令,时机也许到了...


方案3:MCP Server+API接口

今年5月初,又是工作中的调研,我开始探索MCP,这个新兴的工具

MCP的组成部分有两个:

  1. MCP Server
  2. MCP Client

MCP Server:

职责:提供一系列的工具,然后通过工具调用记账软件的接口,提供数据

开发:基本需要自己开发,根据实际业务来进行开发

MCP Client:

职责:链接大模型,与用户提供交流的窗口,并与解析模型给的JSON后与MCP Server通信

开发:可以自己开发,也可以直接选择带有MCP Client功能的软件来直接使用

至此,选型结束,我开始了项目的开发改造


MCP Server开发与结果

千看万看不如手试一遍

基于Github上的mcp官方仓库,我开始了开发

 

MCP Client选用的是Cursor,客户端开发不在本次内容中

主要的开发内容是MCP Server

开发的过程很无聊而且coding过程大部分人不关心,这里我不多赘述

得益于我自己的开源记账软件预先设计好了接口与swagger文档

所以工具开发工作量并不是很大

这里贴一下我的工具列表,鉴于是实验性质的内容,我也没有创建太多的工具

字有点小

断断续续搞了几天,最终成功部署


下面Callback一下我之前的几个问题,来看一下他的回答吧,请开始你的表演

  1. 对比一下上个月和去年同期的支出,什么占大头?

2.  我今年哪天买的枕头?

3. 整理一下我去年各个月份的支出

4. 我儿子去年生病花了多少钱?今年呢?

小孩生病太贵了

5. 今年第一季度和去年第一季度比,收入少到哪里了?

6. 统计一下近三年我车的保险钱

如你所见,上述的几个问题算是均得到了我比较满意的答复


关于给传统软件插上AI的翅膀

在接入MCP Server前,我的记账软件EasyAccounts只是一个普通的前后端分离的项目(现在77个star了呦)

 

在我外挂了一个MCP Server的端后,真的碰撞出来了奇妙的化学反应,无需繁琐的手动查询,打开界面,直接问问题,就可以总结回答

这次实践,让我思考了一个问题,如果是公司级的传统项目,是否可以在某一些开放式的业务场景,例如查询等业务开创新的用户体验?

把传统的API接口,化作工具,组合使用,交于LLM大模型,这是否是未来呢?

还是那句话,技术手段没办法解决,把一切交给时间吧


最后说一下MCP Client

关于客户端的开发,其实我觉得很多人都是忽略的一点

与我个人来看,MCP Client的重要性,要强与MCP Server

我并不觉得所有人都有Cursor,也不觉得普通的用户会煞费苦心的配置自己的api key到一个第三方的大模型应用上

虽然我觉得Cursor以及我现在用的CherryStudio用户体验已经不错了

Cherry Studio 另一款支持MCP的LLM客户端

但是依旧是增加了用户的使用成本、学习成本

LLM相关产品,应该是简化用户的操作的

所以,想要打造一个普罗大众都能开心用起来的的AI应用,MCP Client是要融入自己的产品的,第三方的MCP Client终究不是一个终极的产品形态


写在最后

我的记账软件虽然开源了,但是本次开发配套的MCP Server我还没有开源,这里等我开发好MCP Client在考虑后续的开源事项吧

如果你有什么更好的MCP相关的idea或者经验,欢迎交流

 

1
0