从构想走向现实:一个 AI Agent 开发者的实践手记 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
chnwine
V2EX    分享创造

从构想走向现实:一个 AI Agent 开发者的实践手记

  •  1
     
  •   chnwine 75 天前 1974 次点击
    这是一个创建于 75 天前的主题,其中的信息可能已经有所发展或是发生改变。

    一、缘起:为什么世界需要另一个 AI Agent ?

    1. 从 ChatGPT 到 AutoGPT:AI 工具的进化

    最开始接触 AI 时,我只是把 ChatGPT 当作一个聊天机器人。到后来又用上了 Cline 、Windsuf 、Cursor 这类 AI 编程工具。起初不太习惯不怎么去用,但习惯了之后发现,这些工具用起来是挺爽的。比如,用 Cline 和 Cursor 直接对话就可以快速定位和修复代码问题,脑子不在线的时候直接提需求‘你要 XXXXXX’,然后等着结果就行。我可以信不过 AI ,但我可以信得过测试用例和运行结果,渐渐的AI 不再只是对话,而是逐渐成为工作流的一部分,不想动脑子的时候就不动脑子,直接提需求就行,然后 TAB 、TAB 、TAB ,done 。

    2. 传统行业的痛点:Excel 、手写单据和低效协作

    我的上一份工作是做物流行业的信息系统。这个行业里,很多人还在用 Excel 、手写单据、打印 PDF 、手动录入数据效率低得让人抓狂。曾经,我花了三个月写了个 Mac/iOS 的 OCR 工具,想帮他们自动提取表格数据。虽然效果不错,但考虑到物流从业者大多用 Windows 和 Android ,市场覆盖率太低,就放弃了。

    3. 内心的激动:是时候让 AI 来解决这些枯燥的重复劳动了

    再后来,GPT-4 刚出来的时候我测试了 GPT-4 的多模态能力,让它解析 PDF 和图片里的表格数据结果远超预期。我就想如果给 AI 一对翅膀,让 AI 不仅能“看懂”文件,还能“操作”软件,工作方式会被彻底改变。

    2025 年 2 月,公司裁员我领了大礼包。“说人话+自动化”再次点燃了我的热情,按捺不住心中的悸动“现在不做,回头就只有看别人做好的了“, ”just do it”!

    让 AI 长上翅膀和手脚吧

    二、构建:在理想与现实之间走钢丝

    1. 产品定位的迷茫

    最开始,我并没有想清楚 Swiflow 到底要服务谁。只是觉得“说人话+自动化”很酷。为了验证想法,我在朋友的数据库上跑了个用例:让 AI 根据媒体资讯自动生成研究报告。

    效果很好即使没有数据字典的辅助,AI 也能自己查询分析表结构、查询数据、输出报表构建看起来不错的分析。

    这个正向反馈让我开心了好一阵子,但问题也随即而来:我开发的是桌面端应用,大多数用户根本没有数据库可用。

    “酷炫效果”不等于“实用产品”,只能继续从桌面场景找具体用例。

    2. 功能取舍

    第一版 Swiflow 内置了几个核心工具:

    • 文件操作(文本读写)
    • 命令行工具(执行脚本)
    • 数据库工具(数据查询)
    • 浏览器自动化(网页搜索)

    浏览器工具让我纠结了很久:“到底该支持哪些操作?” 点击?输入?滚动?还是直接模拟用户行为?

    越想越复杂,最后意识到:“先解决一个具体问题,别妄想做‘全能 Agent’。”

    3. 技术踩坑

    在这个项目之前我没做过真正的 Autonomous Agent (自主智能体),只写过自动回复邮件的 Bot 。

    但完全自动化的 Agent 复杂程度远超预期原本乐观估计一两个月搞定,结果光是 MVP 就花了俩月,中间还不停从开源项目( Cline 、Sono 、Open Manus )中学习经验,有时候忍不住问自己为什么要自己造轮子,开车不香么。

    感谢开源组织,好人一生平安

    问题 1:Prompt 像豆腐渣工程

    初始 Prompt 是基于别的项目改的,只做了简单约束,结果 AI 经常“自由发挥”要么误解需求,要么生成不靠谱的代码。

    问题 2:多轮对话崩盘
    用户提问:“将这个目录下的 PDF 单据整理成表格。”
    Agent 响应:写 Python 脚本→装依赖→调整环境→修改报错→再错再改……

    出发了很久,还没走出高老庄。

    问题 3:上下文爆炸 由上可以看出 AI 是个老好人,不会拒绝你,也不会拒绝你做的事。在 Agent 里正是如此‘我错了,我要改’,‘让我再试试’,‘我还能行,扶我起来’。 但 Agent 每执行一步都会往对话里塞更多信息,而且不停试错不停改,很快就把上下文窗口撑爆了。

    Agent 勤奋且努力,我半夜醒来都觉得自己不如 Agent 努力,忍不住想说‘扶我起来我还能行’。

    问题 4: 造工具不靠谱 最初没有经验,以为 python 的轮子那么多了,让 agent 随便造呗,给你 100 块钱想吃啥买啥

    等实际测试时发现,agent: '你让我自己做饭么?','是的,你自己做饭','好的,请放心'

    最后:'MAMA ,房子被烧了'

    由于让 Agent 自己搓工具靠不住,最终决定还是先用现成的吧。 于是迅速拥抱 MCP 生态,先解决工具链的稳定性问题。

    饿肚子的时候吃外卖也挺好的,预制菜不预制菜的重要么?

    三、顿悟:Agent 开发中的反常识

    1. “全能 Agent ”是幻觉

    测试时,Swiflow 玩五子棋、写贪吃蛇、解数独表现惊艳。但一遇到真实工作场景(比如“物流单据转 Excel”),效果就大打折扣。

    后来我懂了:AI 有知识,但没经验 它知道“表格”是什么,但它不懂“物流行业的单据长啥样”,也不懂每个字段之间的业务关系。这个问题也不是一个复杂的问题,本可以调整 Prompt 来优化,但整个流程中“发现问题→修改 Prompt →重新对话”的循环太不友好。于是,我加入了“记忆功能”用户只需在对话中提醒 Agent “记住这个、记住那个”,它就能逐步学习业务规则。

    2. Agent 需要适时"踩刹车"

    传统软件开发是"输入→处理→输出",但 Agent 更像是概率性的探索。如果完全放手让它自己跑,很容易南辕北辙。在合适的地方适当的停下来咨询用户的意见也是个不错的选择,像 Cursor 的 Agent 就经常这么干不知道是为了省 token 还是为啥。

    3. "完全自主"是个美丽的陷阱

    最初我希望 Swiflow 能"完全自主"用户说一句话,AI 就能独立完成整个任务。但现实给了我当头一棒:

    • 输入输出比例失衡:用户输入 10 个字,AI 可能输出 1000 字,交互效率极低
    • 错误会累积放大:一步走错,后面全歪,越跑越偏
    • 缺乏反馈机制:用户不知道 AI 在干什么,AI 也不知道自己做得对不对

    所以现在的思路是:与其信马由缰,不如相敬如宾 让 AI 成为"会主动汇报的助手",而不是"全权代理的黑盒"。

    四、成果:从理想主义到实用主义

    经过半年的摸爬滚打,Swiflow (swiflow.cc)现在具备了一些实用的核心功能:

    • 支持自定义 Prompt:用户可以随意更改 Prompt ,定制属于自己的工作流
    • 支持记忆功能:Agent 能记住重要信息,只需说"请记住我们刚才沟通的结论"
    • MCP 协议支持:通过 MCP Server 扩展 Agent 能力,让功能更强大
    • 支持定时任务:可以设置"每半小时帮我检查一下最新邮件"这样的定时任务
    • 支持多 Agent:为不同任务设置专门的 Agent ,避免上下文混乱

    在实际应用中,它能稳定处理批量文件处理、数据格式转换、邮件管理、信息收集等桌面自动化任务。虽然离最初"AI 万能助手"的愿景还有距离,但至少在具体场景下,它确实能帮用户省下不少时间。

    更重要的是,这个过程让我对 AI Agent 有了更现实的认知:它不是魔法,而是工具。就像任何工具一样,关键在于找到合适的使用场景,而不是期待它解决所有问题。

    五、 结语

    做 Swiflow 的半年里,我的体会是:虽然 AI Agent 还不完美,但大模型的快速进化和 Agent 在某些场景下的优异表现,让未来值得期待。也许某一天,我们真的可以直接委托 AI Agent 撒手去做了,我们就吃着火锅唱着歌,事儿就办成了。

    如果你也想体验一下这种"撒手掌柜"的感觉,欢迎来试试 Swiflow说不定真能让你提前下班去吃火锅呢。

    21 条回复    2025-09-01 16:00:01 +08:00
    chnwine
        1
    chnwine  
    OP
       75 天前
    官网地址: https://swiflow.cc/ 欢迎体验
    bisnail
        2
    bisnail  
       75 天前
    2024 Swiflow. 保留所有权利。
    底部的日期可以更新到 2025
    哈哈,给你点赞
    chnwine
        3
    chnwine  
    OP
       75 天前
    @bisnail 实话说文档内容都还没改完
    frankmdong
        4
    frankmdong  
       75 天前
    感谢,对我有点启发,想知道你是如何挑选的技术栈呢,agent 使用的现成框架吗
    chnwine
        5
    chnwine  
    OP
       75 天前
    @frankmdong 挑选技术栈,最早我想选用 js\ts, 这块开源项目比较丰富(cherry-ai,5ire), 适合学习参考,如果是 web app 开发的话 python 资源也比较丰富。但我之前用 golang 多一点,但这次做的也是客户端开发,考察了一下 golang 跨平台编译开发便捷性也都还不错于是把 golang 拿来做了后端,前端选的 vue3 没上什么其他的 framework ,app 这块用的 tauri 当初忘了为啥选 tauri 好像是因为打包后比较小也可能是 在 X 上受了 ChatWise 作者的影响。


    **回到正题**:agent 没使用现成框架,完全手搓,但 coze 最近开源了一波代码可以参考学习下 coze-studio 、coze-loop
    frankmdong
        6
    frankmdong  
       75 天前
    @chnwine #5 那很厉害啊手搓 agent !佩服!所以你是用了 go 来搓 agent 是吗,你的应用是需要要连服务器使用?
    chnwine
        7
    chnwine  
    OP
       75 天前   1
    @frankmdong 等我回头写了 agent 部分的分享 @ 你一下,敬请期待
    chnwine
        8
    chnwine  
    OP
       75 天前
    @frankmdong golang 就是服务器端,直接在本地起了个 server ,前端连的是这个 server 。你可以理解还是 bs 架构,用 tauri 包了一下打包在了桌面环境。
    RotkPPP
        9
    RotkPPP  
       75 天前
    牛逼哥,能不能分享一波技术分享,我也想自己手搓 agent 应用
    chnwine
        10
    chnwne  
    OP
       75 天前
    @RotkPPP 不要急不要慌,我先把产品介绍发一波,马上就着手写了
    linKnowEasy
        11
    linKnowEasy  
       75 天前
    看了说明书
    Swiflow:为普通人设计产品,无需用户有编程相关知识 为普通人设计的话. 建议去掉用户设置 API key 的过程, 给用户一个选模型的设置或者直接去掉选择. 用户可以后面在设置里面更改

    我已经设置了工作目录. 点击打开的时候好像是报错了

    frankmdong
        12
    frankmdong  
       75 天前
    @chnwine #8 噢噢,就是 sidecar
    chnwine
        13
    chnwine  
    OP
       75 天前
    @linKnowEasy 谢谢你的建议 [建议去掉用户设置 API key 的过程] 这个建议非常中肯,非常感谢。

    我之前有想过去掉这时'API key'这个不走,如果去掉的话就需要自建一个模型代理和认证体系,目前还处于探索阶段,等产品成熟稳定了会考虑把这个加上的。

    第二个问题,我晚上修复一下~
    linKnowEasy
        14
    linKnowEasy  
       75 天前   1
    @chnwine #13 你可以前期用脚本啥的多注册几个免费模型的账号. 一般种子用户也不会那么多的。 后面成熟了再考虑其他类似 API 服务商. 花钱就行了

    按照你的说法就是 制作核心功能. 你甚至可以把其他功能隐藏掉. 对一个普通用户来说. 什么 mcp, 什么记忆, 模型都是陌生的.

    普通用户要的就是 一句话就能完成一个任务 . 默认都给直接配置上 常见文件格式的处理支持就行了.

    在我看来, 你这个工具还是通用的 AI Agent
    甚至你更加聚焦一点.
    定位到 需要批量文件处理 的普通用户. 能一句话就能完成任务
    不同任务设置专门的 Agent, 这里 Agent 直接拆分命名为 pdf 机器人. excel 机器人. 用户要处理什么格式的。 就切换到不同的机器人就行. 不要增加用户的操作成本

    电脑端用户更习惯 GUI . 处理文件的时候. 你只需要给用户提供一个选择文件夹的功能(比如拖动文件夹到指定区域啥的, 更加的小白化)
    chnwine
        15
    chnwine  
    OP
       75 天前
    @linKnowEasy 大佬你这个回复就真的很专业直指问题点了。

    > ‘普通用户要的就是 一句话就能完成一个任务’
    我先回复这个问题,实际上你说的方向和我期待的一样,前两天在准备 case 的时候也是按照这个方向录制的视频,但我反复调整提示词,中间介入 agent 的工具使用还是有 15% 的幻觉数据没有发现和修复。我这两天在反思提示词要放开约束还是加强约束,目前还没有方向。另外一个问题是 agent 自动化操作 word 、excel 等数据的时候,其实这不像编程开发开着 ide 就能实时看到 agent 对代码的更新,xlsx 文件更新不会直接体现在 Excel 上,如果不能 100% 正确,又不能对操作对象的修改实时预览就有很难介入对 agent 对指导。
    如果放手 agent 去独立完成,那么准确率就需要有一定的保证。如果让 agent 起到一个协助过程,那 ‘实时预览’ 就很有必要。这是两个我还没有思路的问题点。

    所以
    > 不同任务设置专门的 Agent, 这里 Agent 直接拆分命名为 pdf 机器人. excel 机器人. 用户要处理什么格式的。 就切换到不同的机器人就行. 不要增加用户的操作成本

    这个问题就是,这是产品方向的优化方案,参考上一个问题但在技术层面我还没搞定,以至于能看到‘这个工具还是通用的 AI Agent’。

    > 电脑端用户更习惯 GUI, 比如拖动文件夹到指定区域啥的, 更加的小白化
    这个在 WEB 上我是做了的,套了壳之后发现拖拽不了,但核心问题还在,锦上添花的事情也没那么重要了。

    再次 respect ~
    linKnowEasy
        16
    linKnowEasy  
       74 天前
    @chnwine #15

    我的一个思路 不一定对. 1.加强收束 2. 增加一个 agent ? 准确率肯定是要高的,不然产品都不可用, 那一切都没意义

    产品形态问题. 可以是纯 web . 优先满足需求
    chnwine
        17
    chnwine  
    OP
       74 天前
    @linKnowEasy 嗯谢谢,让我多 try 一 try, 这个场景不行就换一个场景,先 try 出一条路来~
    chnwine
        18
    chnwine  
    OP
       73 天前 via Android
    切换模型之后选用的工具也不一样了,但如果在使用工具的时候直接就得到了正向的结果整个流程也会通顺不少,消极的结果虽然 agent 也不会放弃但开始了试探就少了好多信心

    Agent 也像真人一样么,出了错就开始丧了?
    chnwine
        19
    chnwine  
    OP
       71 天前
    修正了工具减少错误几率,换了豆包和 bigmodel 的模型,调整上下文配置后开始好起来了
    chnwine
        20
    chnwine  
    OP
       40 天前
    @frankmdong @RotkPPP 不好意思食言了,技术内容很早就写了但接下来忙的兵荒马乱的就没分享出来

    但现在我把项目开源了,t/1156317#reply0

    至今未润色的 [我在构建 AI Agent 时遇到的问题]( https://uth.ink/posts/2507/swiflow-build.html) 别嫌弃
    RotkPPP
        21
    RotkPPP  
       40 天前
    @chnwine 哥们 牛逼!
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5524 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 22ms UTC 09:03 PVG 17:03 LAX 02:03 JFK 05:03
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86