从爬虫脚本到 AI 智能体:一次数据挖掘实践的完整进化


项目源起

这学期选修了数据挖掘实践,第一次作业是爬取某点方圆 10-15km 的二手房信息并做数据分析。题目本身不复杂:写爬虫、洗数据、建模型、出报告。后来经过自己的拓展,这个项目从一个普通的 Jupyter Notebook,逐渐长成了一个三层架构的工具集。最终交付了三个几乎独立但层层递进的子项目:

复制代码
res-value-miner/
├── homework/     # 原始作业:爬虫 + Notebook 分析
├── ai_agent/     # DeepSeek 对话式智能体
└── skills/       # Claude Code 通用数据挖掘 Skill

第一层:基础流水线

最初的实现很直接------用 DrissionPage 控制浏览器爬安居客,得到 1141 条房源数据,存为 CSV。然后用 pandas 清洗,接入高德地图 API 计算各小区到目标点的距离,统计周边 POI,最后在 Jupyter Notebook 里跑随机森林和 K-Means。

这部分的关键在于数据质量把控。原始 CSV 里经纬度是字符串,数值列混了中文字符,"房屋户型"是一个字段("2室1厅1卫")需要拆成三列。每一步不仔细都会影响后续建模。

经验 1 :爬虫脚本从第一天起就应该做到参数化 。我的 spider_dynamic.py 最开始就设计成 crawl(city, district, max_pages) 的形式,而不是把城市和区域写死在代码里。这为后来交给 Agent 自动调用埋下了伏笔。

经验 2:Notebook 和 .py 模块各司其职。Notebook 负责展示分析流程和可视化,py 模块负责可复用的核心逻辑。不要把 500 行代码全塞在一个 ipynb 里。

第二层:对话式智能体

做完基础分析后,我开始思考"包装成智能体"这件事。

最初的想法是做一个 Gradio 多 Tab 界面------Tab 1 手动采集、Tab 2 手动训练、Tab 3 手动估值、Tab 4 是 AI 对话。看起来很完整,实际上很割裂。用户在 Tab 1 填了表单,跑到 Tab 2 还要重新选城市、输经纬度。而且用户根本不知道安居客的区域命名规则------"曹路"是填 caolu 还是 曹路

折腾了好几轮之后我意识到:Agent 的意义就是用户一句话搞定一切。四个 Tab 本身就是反模式。

于是我把前三个 Tab 全删了,整个应用缩减为一个聊天窗口。用户说"上海曹路附近 10km 的二手房行情分析",Agent 自己调 geocode → crawl → enrich → train → query,全程零手动。

技术选型上,我最终选择了原生 OpenAI SDK 做 function calling,而不是 LangChain 或 MCP。理由很简单:依赖越少,出问题时排查越快。整个 Agent 核心(agent.py)只有 200 行,ReAct 循环的每一步发生了什么一目了然。

另一个值得说的点是 DeepSeek-R1 的思考过程展示 。它的 reasoning_content 字段暴露了模型在调用每个工具之前的推理链。我把它单独流式输出到 UI 的折叠面板里------这不仅是个技术彩蛋,也方便了调试。

经验 3:不要过早优化。我最初设计了 8 个工具(geocode/crawl/enrich/train/predict/query/report/chart),每个都有完整的 JSON Schema。后来发现真正高频使用的只有 4-5 个,其余可以在需要时动态添加。

经验 4:爬虫的验证码不是 bug,是正常流程。Agent 遇到验证码应该循环等待用户手动通过,而不是自己换网站重写一个爬虫。

第三层:单文件 Skill

做完 Gradio Agent 之后,我又想:能不能再精简一层?

Gradio + DeepSeek 的方案还是需要启动一个 Web 服务、配 API Key、管理依赖。但如果把分析逻辑抽象成一段指令,让 Claude Code 直接运行呢?

这就是 skills/data-mining-agent/SKILL.md 的由来------一个 200 行的 Markdown 文件。它告诉 Claude:

  1. 进目录先 ls,看有没有 CSV 和 py 模块
  2. python -c 跑短代码,长逻辑写 .py 文件
  3. 爬虫优先复用现有 CSV,遇到验证码等用户
  4. 分析完主动问要不要导出报告

没有 API Key、没有 function calling、没有工具注册表。Claude 自己写代码、自己执行、自己看结果、自己迭代。

经验 5:Skill 和 MCP 是两种完全不同的范式。Skill 是"教 Claude 怎么思考",MCP 是"给 Claude 现成工具"。前者更通用但每次都要写代码,后者更快但绑定特定场景。对于数据挖掘这种开放任务,Skill 更合适。

架构演进回顾

阶段 形态 用户操作 核心依赖
第一层 Jupyter Notebook 手动改参数跑 cell pandas/sklearn
第二层 Gradio + DeepSeek 自然语言一句话 8 个工具 + ReAct
第三层 Claude Code Skill 自然语言一句话 零------只靠 Claude 自身

每一层都比上一层更轻、更通用、更像"智能体"。

代码开源在 https://gitee.com/aiden61/res-value-miner


发表于 www.aiden.org.cn,同步至 CSDN

相关推荐
五月君_3 分钟前
继 React、Vue 之后,Three.js 也有 Skills 了!AI 写 3D 终于不“晕”了
javascript·vue.js·人工智能·react.js·3d
小崽崽13 分钟前
如何实现React 19+Vite+TypeScript技术栈告别高薪主播!从零打造 24 小时“AI 销冠”:星云数字人直播间全链路实战
人工智能·react.js·typescript
土星云SaturnCloud6 分钟前
基于铁塔基站的反无人机系统应用场景分析:边缘计算重构低空防御体系
服务器·人工智能·ai·边缘计算
zhang_adrian7 分钟前
【使用Github Copilot自动按规范文档生成全部代码】
人工智能·github·copilot
薛定猫AI7 分钟前
【深度解析】Claude Opus 编码模型的工程化使用:长上下文、Agent 工作流与代码审查实战
人工智能
MRDONG115 分钟前
从机器学习到大语言模型:一文讲清 AI、Transformer、Embedding 和向量数据库
人工智能·机器学习·语言模型
MemoriKu17 分钟前
【端侧 AI 部署】MobileCLIP 导出 ONNX/TFLite 并发布到 Hugging Face 的完整实践
大数据·人工智能·elasticsearch·搜索引擎·重构·开源
VALENIAN瓦伦尼安教学设备18 分钟前
激光对中仪应用行业及全球市场份额解析
大数据·人工智能·嵌入式硬件
赴山海bi18 分钟前
亚马逊主图优化:提升点击率与转化率的实战策略
人工智能