前言
2026年,打工人的工作效率差距,本质上是"会不会用AI工具"的差距。
今天船长分享一套自用的 Python + AI 工作流,从数据采集到报告生成,全部自动化。实测节省 70% 的重复工作时间。
这套工作流不需要你懂高深的技术,只需要会写 Python 基础代码 + 会用 AI 辅助。
一、环境准备:3个工具搞定一切
1.1 Python 环境
推荐使用 Anaconda 管理 Python 环境,一键安装所有依赖:
# 下载 Anaconda
wget https://repo.anaconda.com/archive/Anaconda3-2024.02-1-Linux-x86_64.sh
bash Anaconda3-2024.02-1-Linux-x86_64.sh
# 创建虚拟环境
conda create -n ai_workflow python=3.10
conda activate ai_workflow
# 安装核心依赖
pip install pandas openai requests schedule jupyter
1.2 API 配置
本教程使用 OpenAI API(DeepSeek API 逻辑相同,只需改 base_url):
import os
from openai import OpenAI
# 设置 API Key(建议使用环境变量,不要硬编码)
os.environ["OPENAI_API_KEY"] = "your-api-key-here"
# DeepSeek API 配置(国产替代,速度快且便宜)
client = OpenAI(
api_key=os.getenv("OPENAI_API_KEY"),
base_url="https://api.deepseek.com" # 换成这个就是 DeepSeek
)
# OpenAI API 配置
# client = OpenAI(api_key=os.getenv("OPENAI_API_KEY"))
二、场景1:自动生成数据报告
2.1 数据采集
import pandas as pd
import requests
from datetime import datetime, timedelta
def fetch_stock_data(stock_code: str, days: int = 30) -> pd.DataFrame:
"""
获取股票历史数据
使用 AKShare 免费数据源
"""
try:
import akshare as ak
# 获取日线数据
df = ak.stock_zh_a_hist(symbol=stock_code, period="daily",
start_date=(datetime.now() - timedelta(days=days)).strftime('%Y%m%d'),
end_date=datetime.now().strftime('%Y%m%d'),
adjust="qfq")
return df
except ImportError:
print("请安装 akshare: pip install akshare")
return pd.DataFrame()
# 示例:获取茅台数据
df = fetch_stock_data("600519")
print(f"获取到 {len(df)} 条数据")
print(df.tail())
2.2 AI 数据分析
def analyze_with_ai(client, df: pd.DataFrame, stock_name: str) -> str:
"""
使用 AI 自动分析数据并生成报告
"""
# 生成数据摘要
summary = df.describe().to_string()
prompt = f"""
你是一个专业的股票分析师。请分析以下 {stock_name} 的历史数据:
数据摘要:
{summary}
请输出:
1. 整体趋势判断(上涨/下跌/震荡)
2. 关键指标分析(涨跌幅、成交量变化)
3. 风险提示
4. 简单总结
要求:用非专业投资者也能听懂的话输出。
"""
response = client.chat.completions.create(
model="deepseek-chat",
messages=[{"role": "user", "content": prompt}],
temperature=0.7
)
return response.choices[0].message.content
# 调用分析
analysis = analyze_with_ai(client, df, "贵州茅台")
print("=== AI 分析结果 ===")
print(analysis)
三、场景2:自动化周报生成
3.1 读取工作记录
import json
from datetime import datetime
def read_work_log(log_file: str = "work_log.json") -> dict:
"""
读取工作日志(假设每天的工作记录保存在 JSON 文件中)
"""
try:
with open(log_file, 'r', encoding='utf-8') as f:
return json.load(f)
except FileNotFoundError:
# 模拟数据(实际使用时替换为真实数据源)
return {
"date": datetime.now().strftime('%Y-%m-%d'),
"tasks": [
{"name": "用户增长分析", "hours": 3, "output": "完成季度报告初稿"},
{"name": "A/B测试设计", "hours": 2, "output": "方案已发给产品确认"},
{"name": "数据看板维护", "hours": 1, "output": "修复了3个指标计算错误"}
],
"blockers": ["等待数据团队提供外部数据"],
"next_week_plan": ["完成季度报告终稿", "跟进A/B测试上线"]
}
work_log = read_work_log()
print("工作日志:", work_log)
3.2 AI 生成周报
def generate_weekly_report(client, work_log: dict) -> str:
"""
使用 AI 将工作流水账翻译成专业周报
"""
prompt = f"""
请将以下工作日志整理成一份专业的周报:
日期:{work_log['date']}
任务列表:
{chr(10).join([f"- {t['name']}({t['hours']}小时):{t['output']}" for t in work_log['tasks']])}
阻碍:{work_log['blockers']}
下周计划:
{chr(10).join([f"- {plan}" for plan in work_log['next_week_plan']])}
周报要求:
1. 用专业语言重写,不只是罗列
2. 每项任务要体现价值(用什么方法、解决了什么问题、产生了什么效果)
3. 格式规范,适合发给领导
"""
response = client.chat.completions.create(
model="deepseek-chat",
messages=[{"role": "user", "content": prompt}],
temperature=0.3 # 低温度,输出更稳定
)
return response.choices[0].message.content
# 生成周报
report = generate_weekly_report(client, work_log)
print("=== 周报 ===")
print(report)
四、场景3:定时任务自动化
4.1 设置定时任务
import schedule
import time
from datetime import datetime
def daily_report_job():
"""每日自动生成报告任务"""
print(f"[{datetime.now()}] 开始执行每日报告任务...")
# 1. 获取数据
df = fetch_stock_data("000001") # 平安银行示例
# 2. AI 分析
if not df.empty:
analysis = analyze_with_ai(client, df, "平安银行")
# 3. 保存报告
with open(f"reports/{datetime.now().strftime('%Y%m%d')}_analysis.txt",
'w', encoding='utf-8') as f:
f.write(analysis)
print(f"报告已保存")
else:
print("无数据,跳过")
def weekly_report_job():
"""每周一自动生成周报"""
print(f"[{datetime.now()}] 开始执行周报任务...")
work_log = read_work_log()
report = generate_weekly_report(client, work_log)
with open(f"reports/{datetime.now().strftime('%Y%m%d')}_weekly_report.txt",
'w', encoding='utf-8') as f:
f.write(report)
print("周报已保存")
# 设置定时任务
schedule.every().day.at("09:00").do(daily_report_job) # 每天9点
# schedule.every().monday.at("09:30").do(weekly_report_job) # 每周一9:30
# 运行调度器
print("定时任务已启动,按 Ctrl+C 退出")
while True:
schedule.run_pending()
time.sleep(60)
五、完整工作流示例
#!/usr/bin/env python3
"""
AI 工作流自动化脚本
功能:自动采集数据 → AI 分析 → 生成报告 → 定时执行
作者:船长
"""
import os
import json
import pandas as pd
from datetime import datetime
from openai import OpenAI
# ==================== 配置 ====================
# API 配置
os.environ["OPENAI_API_KEY"] = os.getenv("DEEPSEEK_API_KEY", "your-key-here")
client = OpenAI(api_key=os.getenv("OPENAI_API_KEY"), base_url="https://api.deepseek.com")
# ==================== 核心函数 ====================
def fetch_data(stock_code: str) -> pd.DataFrame:
"""获取数据"""
try:
import akshare as ak
df = ak.stock_zh_a_hist(symbol=stock_code, period="daily",
start_date="20260101", end_date=datetime.now().strftime('%Y%m%d'))
return df
except:
return pd.DataFrame()
def analyze_data(client, df: pd.DataFrame, stock_name: str) -> str:
"""AI 分析数据"""
if df.empty:
return "无数据"
summary = df.tail(10).to_string() # 最近10条数据
prompt = f"分析 {stock_name} 近10个交易日的数据,输出简明分析报告:\n{summary}"
response = client.chat.completions.create(
model="deepseek-chat",
messages=[{"role": "user", "content": prompt}]
)
return response.choices[0].message.content
def save_report(content: str, filename: str):
"""保存报告"""
os.makedirs("reports", exist_ok=True)
filepath = f"reports/{filename}"
with open(filepath, 'w', encoding='utf-8') as f:
f.write(content)
return filepath
# ==================== 主流程 ====================
def main():
stocks = ["600519", "000001", "600036"] # 茅台、平安、招商
print(f"=== 开始执行 AI 工作流 [{datetime.now().strftime('%Y-%m-%d %H:%M')}] ===\n")
all_reports = []
for code in stocks:
df = fetch_data(code)
if not df.empty:
analysis = analyze_data(client, df, code)
all_reports.append(f"## {code}\n{analysis}\n")
print(f"✅ {code} 分析完成")
# 生成汇总报告
summary = f"# 数据分析日报\n\n生成时间:{datetime.now()}\n\n" + "\n".join(all_reports)
filepath = save_report(summary, f"daily_report_{datetime.now().strftime('%Y%m%d')}.md")
print(f"\n✅ 报告已保存至: {filepath}")
if __name__ == "__main__":
main()
六、避坑指南
6.1 API 费用控制
# ❌ 错误示范:每次调用都新建 client
client = OpenAI(api_key="key")
for i in range(100):
response = client.chat.completions.create(...) # 100次请求
# ✅ 正确做法:批量处理 + 缓存结果
client = OpenAI(api_key="key")
results = []
batch_size = 10
for i in range(0, len(data), batch_size):
batch = data[i:i+batch_size]
prompt = f"分析以下数据:{batch}"
response = client.chat.completions.create(messages=[...])
results.append(response)
time.sleep(1) # 控制请求频率
6.2 数据安全
# ❌ 错误做法:API Key 硬编码在代码里
client = OpenAI(api_key="sk-xxxxx...")
# ✅ 正确做法:使用环境变量
# macOS/Linux: export DEEPSEEK_API_KEY="sk-xxxxx..."
# Windows: set DEEPSEEK_API_KEY="sk-xxxxx..."
client = OpenAI(api_key=os.getenv("DEEPSEEK_API_KEY"))
# 或使用 .env 文件 + python-dotenv
# .env 文件内容:DEEPSEEK_API_KEY=sk-xxxxx...
from dotenv import load_dotenv
load_dotenv()
client = OpenAI(api_key=os.getenv("DEEPSEEK_API_KEY"))
七、总结
这套 Python + AI 工作流 的核心价值:
-
自动化重复工作:数据采集、报告生成全部定时执行
-
降低技术门槛:用 AI 弥补 Python 技能不足
-
提升工作效率:实测节省 70% 的重复工作时间
建议从最小可用版本开始:先跑通"读取数据 + AI 分析 + 保存结果"这个闭环,再逐步扩展功能。
完整代码已上传至 GitHub:github.com/example/ai-…
关注公众号「船长Talk」,回复「工作流」获取完整源码。