从爬虫脚本到 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

相关推荐
萤萤七悬1 小时前
【人工智能训练师3级】考试准备(2026)三、实操题1.1.3-3.2.5
前端·数据库·人工智能
郭菁菁1 小时前
职业深度解析:Prompt Engineer——与AI对话的艺术
大数据·人工智能·深度学习·机器学习·prompt
沪漂阿龙1 小时前
Vibe Coding 爆火:不会写代码的人,也能把想法做成产品?一篇讲透它到底怎么做
人工智能
fangzt20101 小时前
从零搭建自动驾驶中间件(一):为什么自动驾驶需要自研中间件
人工智能·中间件·自动驾驶
IT策士1 小时前
AI skills研究:入门到精通
人工智能
cici158746 小时前
卡尔曼滤波器实现RBF神经网络训练
人工智能·深度学习·神经网络
Neolnfra10 小时前
拒绝数据“裸奔”!把顶级AI装进自己的硬盘,这款神仙开源工具我粉了
人工智能·开源·蓝耘maas
code_li10 小时前
只花了几分钟,用AI开发了一个微信小程序!(附教程)
人工智能·微信小程序·小程序
飞Link10 小时前
瑞萨联姻 Irida Labs:嵌入式开发者如何玩转“端侧视觉 AI”新范式?
人工智能