简介:这份PDF资料围绕清华大学团队提出的DeepSeek+Research科研助手展开,面向研究生、科研人员及数据科学学习者,旨在用多agent与聊天式交互降低从数据采集到可视化的操作门槛。压缩包仅含1个PDF文件,大小约5.43MB,便于在电脑或平板上直接查阅。资料系统梳理数据采集、清洗、集成、变换与特征工程,以及诊断、预测、关联、聚类分析和分类、社交网络分析、时序模式挖掘等环节,并说明统计图、热力图、网络关系图、词云等可视化输出。文中还对比DeepSeek R1、OpenAI o3mini、Claude 3.5 Sonnet与Kimi k1.5在爬虫采集、文件数据读取和文本集成任务中的表现,附有提示词、测试结论与适用边界,可供工具选型、实验复现和科研流程设计参考。已有211人学习下载,适合希望快速理解DeepSeek+Research工作流与多模型差异的读者,也可作为课程汇报、课题开题与技术选型的参考资料。
1. 从一份 exe 说起:多 agent 科研流水线到底替你干了哪几步
凌晨一点半,把最后一段提示词点下去,右侧面板开始滚执行日志:采集、清洗、集成、分析、出图,五个角色接力跑完,六分钟吐出一张带同比环比的表。这就是 DeepSeek + DeepResearch 在科研场景里干的事——把原本要写爬虫、对格式、跑 pandas、调绘图库的整条链路,收进一个近似聊天的窗口。它不是模型,是套在多 agent 调度上的一层壳,底层默认接 DeepSeek R1,也允许你换别的模型进来。
适合谁?手上有一堆来源不一的数据、又不想把半天耗在格式对齐上的人:做社会科学问卷与舆情统计的研究生、需要快速出行业洞察的分析岗、要给学生演示完整数据链路的实验课带教。不适合谁?指望点一下就出终稿的人。它产出的是"八十分草稿",剩下的二十分仍然要你自己核对。
2. 拆开多 agent 流水线:五个环节各自吃什么、吐什么
先给结论:这套东西的价值不在"聊天",在"文件在 agent 之间流转"。编排层把一句自然语言需求拆成任务图,每个 agent 带独立的系统提示词和工具集——抓取工具、文件读取、本地 Python 沙箱、绘图调用——前一个 agent 落盘的产物,就是后一个 agent 的输入。理解了这条数据流,你才知道该在哪一步手动插手。
常见做法是让编排层维护一个工作目录,每个环节输出文件命名带序号,失败重跑时从最近一个成功产物续上,而不是整条链路重来。我一般会把工作目录设在非系统盘、路径里不带中文和空格,后面排错时省掉很多事。
2.1 采集 agent:先出网址列表,再出抓取脚本
采集环节最容易翻车的地方,是让它"一边找链接一边抓内容"。模型在同一次生成里既做筛选又写脚本,往往链接凑不全、脚本也跑不通。可靠的做法是拆成两段:第一段只输出去重后的网址清单,第二段拿着清单写抓取脚本。
任务一(只输出清单,不写代码): 阅读我提供的种子页与页面源码,筛出所有正文含"跨区域人员流动量"的详情页链接, 要求:1) 按日期去重;2) 剔除列表页、栏目页、纯图片页;3) 每条输出"日期 + URL"两列,Markdown 表格。 不要输出任何解释性文字。 任务二(基于上一轮清单): 基于上面的 URL 清单,写一个 Python 脚本,用 requests + BeautifulSoup 抓取每个页面的正文, 抽取字段:日期、铁路客运量、公路人员流动量、水路客运量、民航客运量。 输出 UTF-8 编码的 data/raw.csv,列名固定,抓取失败的 URL 写入 data/failed.txt。拆两段的收益是可审计:清单你能肉眼扫一遍,发现有漏的直接补;脚本跑挂了也只需重跑第二段。参数上注意两点——timeout给到 15 秒以上,抓取间隔加time.sleep(1.5),别把对方站点打疼,也避免自己被限流。
2.2 清洗与集成 agent:先定表结构,再往里填数
清洗环节的输入往往是多份格式各异的文件:一份 txt 日报、一份 Excel 台账、一段粘贴进来的长文本。新手爱说"帮我整理成表格",结果模型自由发挥,列名每次都不一样,后续分析全乱。
我的习惯是把表结构写死再让它填:明确列名、明确单位、明确缺失值填什么符号、明确日期格式。这样即使某个字段抽歪了,也是"单元格错了",不是"整张表结构变了"。日期排序要求"直接按 YYYY-MM-DD 升序输出,不额外生成索引列",能省掉一轮返工。
这一环节还要盯一个隐形问题:口径。铁路、公路、水路、民航四类客运量的统计口径不同,有的含营业性客运、有的只算城际。让 agent 在输出表格下方附一段"字段口径说明",比事后你自己去翻原始页面快得多。
2.3 分析与挖掘 agent:指标、关联、异常,分三轮问
一次性丢"分析这份数据找出规律",得到的多半是漂亮的废话。有效的问法是三轮:
第一轮定指标,比如"计算每日总客运量、环比、同比,输出为新增三列";第二轮问关联,"按星期几分组看铁路与民航的占比差异,给出三条可验证的观察";第三轮问异常,"找出环比波动超过 20% 的日期,逐条列出可能原因并标注哪些是数据问题、哪些是真实波动"。
代码层面,agent 生成的 pandas 片段建议你手动存一份,别只留在会话里:
import pandas as pd df = pd.read_csv("data/raw.csv", parse_dates=["date"]).sort_values("date") # 总量与环比:环比用 pct_change,第一行必然是 NaN,保留不填充 df["total"] = df[["rail", "road", "water", "air"]].sum(axis=1) df["total_mom"] = df["total"].pct_change() # 分组占比:避免除零,先过滤总量为 0 的行 valid = df[df["total"] > 0].copy() valid["rail_share"] = valid["rail"] / valid["total"] print(valid.groupby(valid["date"].dt.dayofweek)["rail_share"].mean())逻辑说明:pct_change()默认按行序算,所以排序必须在它之前;分组占比先做除零过滤,否则单日数据缺失会直接产生 inf 污染整列。参数上,parse_dates指定列名比事后to_datetime更省一次类型转换。
2.4 可视化 agent:图表类型是有选择规则的
别让它"随便画几张图"。图表类型和数据结构强绑定:时间序列用折线、类别对比用柱状、分布用直方或箱线、占比用堆叠柱、多维关联用热力图、文本共现用词云或网络图。把这条规则写进提示词,出图命中率会明显上升。
另一个细节是让 agent 输出"可复现的绘图脚本"而不是只给图片。图片没法改,脚本能改。多数情况下它返回的是 matplotlib 代码,你复制到本地跑一遍,把字体、刻度、配色按期刊要求调完再出图,这才是能进论文的版本。
3. 装好就能跑:一次节假日客流统计任务的完整复现
资源分发的是一个 Windows 可执行安装包,走网盘分享,提取码在分享说明里。下面按"装—配—跑—落盘"四步走一遍,中间穿插我实际用下来最省时间的几个开关。
3.1 客户端落地与密钥配置
第一步,解压到全英文路径,比如D:\tools\academic-agent,然后双击运行。首次启动会要求填模型服务的 API Key,DeepSeek 的 Key 在其开放平台申请,充值时按 token 计费,跑一轮完整流水线的花费通常在几毛到几块之间,取决于你塞进去的文本长度。
# 目录结构建议(Windows 下在 PowerShell 里建) mkdir D:\work\flow2025\data mkdir D:\work\flow2025\out mkdir D:\work\flow2025\log三个目录各管一件事:data放原始与中间结果,out放最终表格与图,log放会话导出的执行记录。别把所有东西堆在桌面,出问题时你根本分不清哪个文件是哪一轮的产物。
配置里有两项值得改:一是并发数,公测版默认并发偏高,抓取任务建议调到 2,避免目标站点限流;二是单次对话的上下文长度,长文本集成任务要调大,否则后半段会被截断,表现为"表格末尾缺几行"。
3.2 任务编排:五段提示词按顺序喂
把整条链路拆成五段,一段一段喂,每段只交代一件事,中间停下来看一眼产物:
第 1 段(采集准备):读我上传的种子页源码,输出含目标关键词的详情页 URL 清单,去重,输出 Markdown 表格。 第 2 段(脚本生成):基于上表写 Python 抓取脚本,字段固定为 date/rail/road/water/air,失败 URL 写 failed.txt,不要用异步。 第 3 段(清洗集成):读 data/raw.csv,日期统一 YYYY-MM-DD,缺失填 NA 不要填 0,输出 data/clean.csv 并附字段口径说明。 第 4 段(分析):算总量、环比、同比,按星期几分组看结构差异,标出环比波动超 20% 的日期。 第 5 段(可视化):输出可本地运行的 matplotlib 脚本,折线画总量趋势,堆叠柱画四类占比,不要直接出图。关键在"不要用异步"和"不要填 0"这两句。异步代码在沙箱里报错后修复成本高;缺失填 0 会直接把统计口径搞错,环比算出来全是异常值。这类约束写在提示词里,比事后返工便宜得多。
3.3 结果落地:把 agent 输出转成可复查的 CSV
agent 输出的是 Markdown 表格,人看着舒服,程序读着难受。写个小脚本统一转换,顺便做基础校验:
import re, pandas as pd from pathlib import Path def md_table_to_df(path): lines = [l for l in Path(path).read_text(encoding="utf-8").splitlines() if l.strip().startswith("|")] rows = [[c.strip() for c in l.strip("|").split("|")] for l in lines] header, body = rows[0], [r for r in rows[2:]] # 第 2 行是分隔线,丢掉 return pd.DataFrame(body, columns=header) df = md_table_to_df("out/result.md") df.to_csv("out/result.csv", index=False, encoding="utf-8-sig") # 基础校验:行数、空值率、日期连续性 print("行数:", len(df), "空值率:", df.isna().mean().round(3).to_dict()) dates = pd.to_datetime(df["日期"]) print("缺失日期数:", len(pd.date_range(dates.min(), dates.max()).difference(dates)))逻辑说明:rows[2:]跳过表头下的|---|---|分隔行,这是 Markdown 表格的固定结构;utf-8-sig是为了让 Excel 打开不乱码。最后那行日期差集是最有用的校验——它直接告诉你 agent 漏了哪几天,比肉眼扫表快一个量级。
4. 模型怎么配:六类任务上的实测差异与组合策略
同一个提示词,换模型结果差得挺远,这是玄学吗?不全是。差异主要来自三个能力面:是否支持联网检索、是否支持附件上传、生成代码后在沙箱里的首次执行成功率。按这三条线看,各家的表现就有了可解释的逻辑。
4.1 六类任务的横向对照
| 任务类型 | 推理型模型(R1 一类) | 快速型模型(海外小参数推理款) | 代码向多模态模型 | 长上下文对话模型 |
|---|---|---|---|---|
| 网页链接筛选去重 | 完整,少量遗漏 | 完整,速度快 | 完整,但脚本常跑不出数据 | 完整,结果多为空表 |
| 文件数据读取 | 完整,表格逻辑清晰 | 不支持附件,靠粘贴 | 完整,支持导出 | 明显缺行 |
| 中长文本集成 | 短文本维度最全,长文本易中断 | 短文本准,长文本维度不全 | 长文本反而更全 | 长文本表现优于短文本 |
| 数据分析 | 指标抓得准,逻辑链完整 | 相同结论,速度更快 | 有思路无结论 | 分析较浅 |
| 数据挖掘 | 分类准,关联挖掘浅 | 大数据集传不上去 | 给方向不给结论 | 多维挖掘表现最好 |
| 数据可视化 | 只给绘图代码 | 可直接出图,复杂图会错 | 只给代码 | 只给代码 |
表格里最能说明问题的一行是"文件数据读取":不支持附件上传的模型,在长表场景下天然吃亏,这不是能力差距,是接口差距。所以选型第一步不是比分数,是先看你手上任务是不是必须传文件。
4.2 四种互补组合,按任务链选
单模型跑全链,会在某一环掉链子。实践里比较顺的四种搭配:
采集环节用"推理型 + 快速型"双跑,前者负责筛选和写脚本,后者做一次补充检索,两边清单取并集再去重;预处理环节用"长上下文模型 + 推理型",前者啃长文本抽取,后者保证字段完整;分析环节用"推理型 + 长上下文模型",一个出严谨结论,一个出多个挖掘方向;呈现环节用"快速型 + 代码向模型",前者直接出图看趋势,后者出脚本做精修。
这套组合的本质是让每个环节用最擅长的那个,而不是迷信某个模型全能。代价是切换成本,所以工作目录的命名规范要严格执行,否则你会分不清哪个 csv 是哪个模型吐的。
4.3 提示词里真正影响结果的四个变量
同一模型不同结果,多数不是"抽卡",是这四个变量没控住:一是输出格式,明确要 Markdown 表还是 CSV,差别很大;二是约束条件,像"不要填 0""不要用异步"这类负向指令必须写;三是输入切分,长文本一次塞 15000 token 和分三次各 5000 token,结果完全不同;四是重试策略,失败后是原样重问,还是把报错贴回去让它改,后者成功率高得多。
我一般的做法是:把提示词存成模板文件,变量部分留{input_path}、{fields}这样的占位符,每次跑用脚本渲染。这样同一批数据换个字段名,不用重写整段话。
5. 避坑清单:五类翻车现场与排查顺序
5.1 安装与配置阶段的坑
现象:双击 exe 无反应,或闪退。原因多半是路径里有中文或空格,也可能是杀毒软件把解压出来的 dll 拦了。解决办法:换到纯英文短路径重解压,把目录加进白名单,再运行。
现象:填了 Key 仍提示鉴权失败。常见原因是复制时带了首尾空格,或者账户余额为零。先去后台确认余额与 Key 状态,再重新粘贴,注意别把 Key 写进任何会提交到仓库的配置文件。
现象:跑长文本任务时程序假死。这是上下文塞满后在等模型返回,不是真死。看日志有没有新行输出,没有就调小单次输入,把长文本切段。
5.2 运行与结果阶段的坑
现象:脚本生成成功,运行后产出空文件。原因通常是目标页面是动态渲染,requests 拿到的 HTML 里根本没有数据,或者选择器写错了层级。解决:先手动curl一个页面看返回内容里有没有目标字段,没有就改用浏览器渲染方案,或者干脆让 agent 从已保存的页面源码里抽。
现象:表格行数对得上,但数值和原文不符。典型的单位或口径错位,比如把"万人次"当成"人"。解决:在提示词里写死单位,输出后抽三行回原文核对,这一步别省。
现象:同一提示词两次结果差很多。三个可能:模型侧采样随机、输入被截断、上一轮产物没清干净。解决:固定工作目录、每轮开始前清空out、把温度类参数调到低值,然后重跑对比。
现象:可视化代码在本机报字体错误。中文字体缺失,matplotlib 默认字体不含中文。解决:在脚本开头显式指定系统里已有的中文字体,或统一改成英文标签。
6. 进阶:把 agent 产物接进自己的验收脚本
跑通只是开始,能不能批量复用,取决于你有没有一套自动验收。我的习惯是每次任务结束跑一遍三段校验:行数对不对、总量对不对、日期连不连续。
import pandas as pd def audit(csv_path, expect_days): df = pd.read_csv(csv_path, parse_dates=["date"]) problems = [] if len(df) != expect_days: problems.append(f"行数 {len(df)} != 期望 {expect_days}") if df[["rail", "road", "water", "air"]].isna().any().any(): problems.append("存在缺失字段") gap = pd.date_range(df["date"].min(), df["date"].max()).difference(df["date"]) if len(gap): problems.append(f"缺失日期: {list(gap[:5])}") return problems or ["通过"]这段的意义在于把"看起来没问题"变成"断言过没问题"。expect_days从任务定义里来,比如统计区间是 26 天就传 26,对不上立刻报警,别等到画完图才发现少三天。
再往上一层,是把提示词模板和验收脚本一起放进版本管理:prompts/放模板,scripts/放校验,out/只放产物。这样换个人接手,看一眼目录就知道流程长什么样,不用去翻聊天记录。
有个血泪教训:早期我图省事,直接让 agent 把结果写进桌面上的同名文件,跑第三轮时把第一轮的原始数据覆盖了,回头想核对口径已经找不回来。从那以后我每次跑任务都强制走一遍"新建带时间戳的工作目录 + 产物只写 out + 原始数据只读"这三步,再没丢过东西。希望帮到你。
本文还有配套的精品资源,点击获取