零基础学 Agent:整合——把所有模块装进一个桌面应用 第 7 期

20 阅读9分钟

图片

大家好,我是AI淇橦学。

前六期,我们逐步做出了五个模块:

  • 第3期agent.py:三个工具函数——读文件、填内容、保存
  • 第4期llm.py + memory.py:接入智谱 API;客户知识库,智谱做语义搜索
  • 第5期planner.py:智谱分析批量任务,自主制定执行计划
  • 第6期validator.py:两层自检——规则检查完整性,智谱审查内容合理性

这五个模块现在都能在终端里独立跑通,智谱也真正参与到了每个关键决策里。但「能在终端跑通」和「真正能用」之间,还差最后一步——你需要记住命令、手动输入参数,不懂技术的人根本没法用。

这期我们做最后的整合:把所有模块装进一个 tkinter 桌面窗口应用,有界面、有按钮、有进度条、有结果展示。做完之后,你把这个程序发给完全不懂技术的同事,他打开就能用。

这期结束时,你会得到:

  • 一个可以双击打开的桌面窗口应用
  • 界面分三个区域:操作区(选文件、输入客户)、进度区(实时进度和智谱分析日志)、结果区(汇总报告)
  • 支持单个模式和批量模式,全程不需要打命令行
  • 通过 MVP 验收清单,确认这个 Agent 真正做完了

一、整合前的关键一步:确认模块间数据格式对齐

很多人整合时的第一反应是「把代码全复制到一起跑一下看看」——结果跑出一堆报错,不知道从哪里改起。

正确的做法是:先列出每个模块的输入和输出格式,逐一对比,找出不一致的地方,再动手整合。

我们的五个模块,核心数据交换点是这样的:

图片

坦白说,这个数据格式对齐的工作我在设计模块时就想好了,所以整合时比较顺利。如果你在实际操作中发现对不上的,用 Codex 描述具体问题,它都能帮你修复。


二、界面设计:三个区域,够用就好

图片

桌面界面不需要做得漂亮,第一版只需要三个区域,每个区域职责清晰:

区域一:操作区(顶部)

  • 模板文件路径 + 「选择文件」按钮
  • 运行模式切换:单个客户 / 批量模式
  • 单个模式:客户描述输入框(支持自然语言)+ 产品名称、型号、金额输入框
  • 批量模式:批量任务文件路径 + 「选择文件」按钮
  • 「开始执行」按钮 + 「停止」按钮

区域二:进度区(中部)

  • 进度条:显示当前处理进度
  • 日志窗口:实时滚动显示每一步,包括智谱的分析过程和自检结果
  • 「停止」按钮:批量执行中途可以随时叫停

区域三:结果区(底部)

  • 执行结果摘要:成功 X 份 / 自检失败 X 份 / 执行失败 X 份
  • 「打开输出文件夹」按钮
  • 「查看汇总报告」按钮

我觉得这个设计够用了——不追求花哨,只追求实用。


三、实操开始:用 Codex 做桌面窗口应用

这期的实操分 4 步:

  1. 用 Codex 生成 tkinter 界面主文件
  2. 安装依赖并运行
  3. 逐项功能测试
  4. 真实用户测试

第一步:生成 tkinter 界面主文件

打开 Codex,新建文件 app.py,打开 AI 对话框(Ctrl+L / Cmd+L),发送提示词(提示词内容后台回复“Agent‘,获取)。

Codex 会生成一个完整的 app.py,这个文件比之前几期的都要长——tkinter 界面代码本身就比较多,不用担心,跟着后面的步骤验证就好。

💡 如果 Codex 一次生成的代码不完整(提示「继续?」),在对话框里说「继续生成剩余部分」,它会接着补完。


第二步:安装依赖并运行

tkinter 是 Python 内置的,不需要额外安装。确认之前所有依赖都装好了:

1pip install python-docx requests

然后运行:

1python app.py

如果一切正常,会看到桌面窗口弹出,日志区域显示:

12✅ 配置加载完成
✅ 已加载 3 个客户,智谱语义搜索就绪

第三步:逐项功能测试

图片

测试一:选择模板文件

点击「选择模板」按钮,找到 templates/报价单模板.docx,选择后路径显示在输入框里。

测试二:单个客户模式——用自然语言描述客户

  1. 模式选「单个客户」
  2. 客户描述输入「南山区那家做传感器的」(故意用模糊描述,测试智谱语义理解)
  3. 产品名称「工业传感器套件」、型号「XS-2000B」、金额「¥58,000元」
  4. 点击「开始执行」
  5. 观察日志窗口

期望看到智谱的完整处理过程:

图片

结果区显示「✅ 完成:成功 1 份」,「打开输出文件夹」和「查看汇总报告」按钮变为可点击。

测试三:批量模式

  1. 切换到「批量模式」,确认界面输入行正确切换
  2. 选择 批量任务.json
  3. 点击「开始执行」
  4. 日志窗口显示智谱分析计划的过程
  5. 弹出确认对话框,点「是」
  6. 观察进度条从 0 推进到 100%,日志实时滚动

期望结果:3 份报价单全部完成,结果区显示汇总,output 文件夹里有 3 个新文件。

测试四:智谱自检拦截测试

把 批量任务.json 里某个任务的 unit_price 改成日期字符串「2025年6月15日」,再跑一次批量模式。

期望:日志里显示智谱发现了报价金额字段填了日期,该任务被跳过,其他任务正常完成。

测试五:停止按钮

批量模式执行中途点「停止」,确认程序停下,已完成的文件保留在 output 文件夹。

测试六:错误处理

  • 不选模板文件直接执行 → 弹出警告
  • 客户描述留空直接执行 → 弹出警告
  • 输入「火星科技公司」 → 日志提示智谱未找到匹配客户

第四步:做一次真实用户测试

这是这期最重要的环节——很多人会跳过,但跳过了就错过了最有价值的反馈。

找一个没有参与过这套课程的人(同事、朋友都行),让他完成这个任务:

「用这个程序,给深圳科技有限公司生成一份报价单,产品是工业传感器套件,金额 58000 元,保存到 output 文件夹。」

当他卡住的时候,不要说话。  只观察和记录——他在哪里停下来了、他尝试了什么、为什么不知道该怎么做。

测试结束后,把卡点整理成一段话发给 Codex,让它修复界面问题。

根据你自己测试时发现的真实卡点调整内容,发给 Codex 修复。


四、遇到问题怎么办

情况一:运行 python app.py 窗口一闪而过或直接报错

把终端里的完整报错复制,发给 Codex:「运行 app.py 时报错,错误信息:[粘贴报错内容],请修复」

情况二:点「开始执行」后界面卡死

在 Codex 对话框里说:「点击开始执行后界面卡死无法操作,请检查 run_single 和 run_batch 是否在独立的 threading.Thread 里运行」

情况三:日志不实时更新,执行完才全部显示

在 Codex 对话框里说:「日志窗口不实时更新,请检查 check_queue 是否通过 root.after(100, self.check_queue) 循环调用」

情况四:批量模式确认弹窗有问题

在 Codex 对话框里说:「批量模式的确认弹窗点确认后程序卡住不继续执行,请检查线程同步逻辑,messagebox 必须在主线程里调用」


五、MVP 验收清单

做完之后,用这张清单逐项确认。验收标准必须是「是/否」,不接受「差不多」「基本上」这种模糊答案。

图片

6项通过5项,MVP 完成。  允许有1项「尚待优化」,但核心流程(第1项)必须通过。


六、这期做了什么——小结

这期你完成了整个系列最后的整合:

  • app.py:tkinter 桌面窗口,把五个后端模块全部接入
  • 后台线程运行所有智谱 API 调用,界面不卡死
  • 日志窗口实时显示智谱的分析过程,用户看得见 AI 在做什么
  • 通过真实用户测试,修复了界面引导问题
  • 通过 MVP 验收清单,确认核心功能完整

你的项目最终文件结构:

123456789101112131415sales-agent/
├── templates/
│   └── 报价单模板.docx         ← 报价单模板
├── output/                     ← 所有生成的报价单
├── customers/
│   ├── 客户资料.json            ← 客户知识库
│   └── 报价历史.json            ← 操作历史记录
├── config.json                 ← 长期配置(含 API Key)
├── 批量任务.json                ← 批量任务清单
├── agent.py                    ← 工具模块(第3期)
├── llm.py                      ← 智谱 API 封装(第4期)
├── memory.py                   ← 记忆 + 客户搜索(第4期)
├── planner.py                  ← 智谱规划 + 批量执行(第5期)
├── validator.py                ← 两层自检(第6期)
└── app.py                      ← 桌面界面(第7期)

6个 Python 文件,每个只做一件事,智谱贯穿其中——搜索客户、制定计划、审查结果,组合在一起是一个完整的、有真正 AI 大脑的销售报价单 Agent。

坦白说,做到这一步,我觉得挺有成就感的。从一个模糊的想法,到一个可以真实运行的、有界面的应用程序,这个过程本身就很值得。


下期预告:  第8期是这个系列的最后一期。我不讲新的技术内容——我们来做两件事:第一,把8期学到的东西整理成你自己的「Agent 知识地图」;第二,规划接下来3个月怎么继续迭代这个 Agent,以及怎么用同样的方法论做第二个 Agent。一个系列结束,不是「学完了放一边」,而是「下一段路的起点」。

思考题:  你把做好的应用给身边的人试用了吗?他在哪里卡住了,你是怎么发现这个问题的?评论告诉我,我会在第8期开头汇总大家遇到的最常见问题。


关注公众号「AI淇橦学」,和 AI 一起成长。

有问题或建议?后台留言即可。