从会议纪要到自动发邮件:手把手搭建 ChatGPT 工作流系统
ChatGPT 工作流自动化教程|附源码
在日常工作中,很多任务并不复杂,但会反复出现:整理会议纪要、生成周报、回复邮件、提取文档重点、归类客户反馈、把表格数据转成报告、根据模板生成营销文案等。过去我们通常依赖人工完成这些流程,效率低、重复性高,还容易出错。
随着 ChatGPT 和大语言模型 API 的普及,越来越多的工作可以被“自动化”:你只需要定义好输入、处理逻辑和输出格式,就可以让 AI 自动完成大量文本理解、生成、分类和总结工作。
本文将从零开始,带你搭建一个 ChatGPT 工作流自动化系统。文章会讲清楚核心思路、适用场景、架构设计,并提供一套可运行的 Python 示例源码,帮助你快速落地到自己的业务中。
一、什么是 ChatGPT 工作流自动化?
所谓 ChatGPT 工作流自动化,就是把原本需要人工操作的一系列步骤,拆解成多个可执行节点,然后通过程序调用 ChatGPT 或其他大语言模型完成其中的文本处理任务。
一个典型的自动化流程可能是这样的:
- 用户上传一份文档;
- 程序自动读取文档内容;
- 调用 ChatGPT 总结文档要点;
- 根据总结内容生成待办事项;
- 将结果写入数据库或发送到邮箱;
- 自动生成一份 Markdown 格式报告。
如果这个流程每周都要执行一次,那么自动化之后,你只需要点击一次按钮,甚至无需手动触发,系统就能定时完成全部工作。
二、ChatGPT 适合自动化哪些工作?
ChatGPT 特别适合处理和语言相关的任务。只要你的工作中存在大量阅读、写作、总结、改写、分类、翻译、提取信息等环节,就很适合用它来自动化。
常见场景包括:
1. 内容生产自动化
例如:
- 自动生成公众号文章初稿;
- 根据商品信息生成电商详情页文案;
- 根据关键词生成 SEO 标题和描述;
- 把短视频脚本扩写成完整文案;
- 将英文资料翻译并本地化为中文内容。
2. 办公文档处理
例如:
- 自动总结会议纪要;
- 根据聊天记录生成行动项;
- 把长文档整理成摘要;
- 将 Word、PDF 内容转成结构化数据;
- 根据周报模板自动生成工作报告。
3. 客户服务与销售支持
例如:
- 自动分类客户反馈;
- 根据用户问题生成回复建议;
- 提取客户需求和痛点;
- 自动生成销售邮件;
- 分析客服对话中的负面情绪。
4. 数据分析辅助
虽然 ChatGPT 不是传统意义上的数据分析工具,但它非常适合帮助解释数据、生成分析报告、根据指标变化给出业务建议。
例如:
- 把销售数据转成经营分析报告;
- 根据用户增长数据生成趋势解读;
- 自动分析问卷调查结果;
- 根据表格内容生成管理层摘要。
三、工作流自动化的基本架构
一个完整的 ChatGPT 工作流自动化系统通常包含以下几个模块:
数据输入 → 数据预处理 → Prompt 构造 → 调用大模型 → 结果解析 → 输出/保存/通知
下面分别解释。
1. 数据输入
数据输入可以来自很多地方:
- 用户手动输入;
- Excel 表格;
- CSV 文件;
- PDF 文档;
- 数据库;
- 企业微信、钉钉、飞书;
- 邮件;
- API 接口。
例如,你可以每天定时读取一个 CSV 文件,然后把其中的客户反馈逐条发送给 ChatGPT 进行分类和总结。
2. 数据预处理
原始数据往往不适合直接发送给大模型,需要做一些清洗处理:
- 去除无用字段;
- 截断过长文本;
- 合并相关信息;
- 转换编码;
- 提取关键内容;
- 统一格式。
例如,一封邮件可能包含签名、历史回复、免责声明等无关内容,在调用模型之前最好先删除。
3. Prompt 构造
Prompt 是自动化系统的核心。你需要告诉 ChatGPT:
- 它扮演什么角色;
- 它要完成什么任务;
- 输入数据是什么;
- 输出格式是什么;
- 是否有约束条件;
- 是否需要返回 JSON、Markdown 或纯文本。
一个好的 Prompt 可以显著提升结果稳定性。
例如:
你是一名资深客服质检专员。
请根据以下客户反馈判断其情绪类型,并提取核心诉求。
请严格按照 JSON 格式输出:
{
"sentiment": "正面/中性/负面",
"request": "客户核心诉求",
"priority": "高/中/低"
}
客户反馈:
{{feedback}}
4. 调用大模型
你可以通过 API 调用 ChatGPT。程序会把 Prompt 发送给模型,然后接收模型返回的内容。
5. 结果解析
如果你要求模型返回 JSON,那么程序可以进一步解析 JSON,并把结果写入数据库、表格或其他系统。
6. 输出与通知
最后一步是把结果输出给用户或同步到业务系统,例如:
- 保存为 Markdown 文件;
- 写入 Excel;
- 发送邮件;
- 推送到企业微信;
- 更新 Notion 页面;
- 保存到数据库。
四、实战案例:自动生成会议纪要和待办事项
下面我们以一个常见场景为例:输入一段会议记录,自动生成会议纪要、决策事项和待办清单。
最终效果如下:
用户输入会议原文:
今天讨论了新版官网上线计划。产品团队表示页面设计已经完成,研发团队预计下周三完成前端开发。
市场部需要在上线前准备推广文案。老板要求官网必须在本月 28 日前上线。
另外,客服团队反馈希望增加常见问题模块,产品经理同意本周内补充需求文档。
系统自动输出:
# 会议纪要
## 一、会议主题
新版官网上线计划讨论
## 二、关键结论
- 官网需在本月 28 日前完成上线。
- 页面设计已完成。
- 前端开发预计下周三完成。
- 官网将新增常见问题模块。
## 三、待办事项
| 负责人 | 任务 | 截止时间 |
|---|---|---|
| 研发团队 | 完成官网前端开发 | 下周三 |
| 市场部 | 准备官网上线推广文案 | 上线前 |
| 产品经理 | 补充常见问题模块需求文档 | 本周内 |
接下来我们开始实现。
五、准备工作
本教程使用 Python 实现。你需要提前准备:
- Python 3.9 或以上版本;
- 一个可用的大模型 API Key;
- 基础的命令行操作能力。
项目目录建议如下:
chatgpt-workflow-demo/
├── main.py
├── workflow.py
├── prompts.py
├── config.py
├── requirements.txt
└── output/
六、安装依赖
新建 requirements.txt 文件:
openai>=1.0.0
python-dotenv>=1.0.0
安装依赖:
pip install -r requirements.txt
如果你使用虚拟环境,可以先执行:
python -m venv venv
source venv/bin/activate
Windows 用户可以使用:
venv\Scripts\activate
七、配置 API Key
在项目根目录新建 .env 文件:
OPENAI_API_KEY=你的_API_KEY
OPENAI_MODEL=gpt-4o-mini
然后创建 config.py:
import os
from dotenv import load_dotenv
load_dotenv()
OPENAI_API_KEY = os.getenv("OPENAI_API_KEY")
OPENAI_MODEL = os.getenv("OPENAI_MODEL", "gpt-4o-mini")
if not OPENAI_API_KEY:
raise ValueError("请先在 .env 文件中配置 OPENAI_API_KEY")
这个文件负责读取环境变量,避免把 API Key 直接写在源码里。实际项目中,密钥管理非常重要,不要把 .env 文件提交到 Git 仓库。
八、编写 Prompt 模板
创建 prompts.py:
MEETING_SUMMARY_PROMPT = """
你是一名专业的会议纪要助手,擅长从会议记录中提取重点信息。
请根据下面的会议原文,生成一份结构清晰的中文会议纪要。
要求:
1. 使用 Markdown 格式输出;
2. 包含以下模块:
- 会议主题
- 关键结论
- 讨论要点
- 待办事项
- 风险与提醒
3. 待办事项请使用 Markdown 表格;
4. 如果无法判断负责人或截止时间,请填写“待确认”;
5. 内容要准确,不要编造会议中没有出现的信息;
6. 语言简洁、正式,适合发送给团队成员。
会议原文如下:
{meeting_text}
"""
这个 Prompt 做了几件关键的事:
- 指定了模型角色;
- 明确了输出格式;
- 规定了必须包含的模块;
- 要求不要编造信息;
- 对不确定信息给出默认处理方式。
在自动化工作流里,Prompt 越明确,输出结果越稳定。
九、封装大模型调用
创建 workflow.py:
from openai import OpenAI
from config import OPENAI_API_KEY, OPENAI_MODEL
from prompts import MEETING_SUMMARY_PROMPT
client = OpenAI(api_key=OPENAI_API_KEY)
def call_chatgpt(prompt: str) -> str:
"""
调用 ChatGPT API,返回模型生成内容。
"""
response = client.chat.completions.create(
model=OPENAI_MODEL,
messages=[
{
"role": "system",
"content": "你是一个专业、严谨、可靠的中文办公自动化助手。"
},
{
"role": "user",
"content": prompt
}
],
temperature=0.3
)
return response.choices[0].message.content
def generate_meeting_summary(meeting_text: str) -> str:
"""
根据会议原文生成会议纪要。
"""
prompt = MEETING_SUMMARY_PROMPT.format(meeting_text=meeting_text)
result = call_chatgpt(prompt)
return result
这里的 temperature=0.3 表示输出相对稳定。如果你希望内容更有创意,可以调高到 0.7 左右;如果你希望结果更可控,可以降低到 0.1。
十、编写主程序
创建 main.py:
import os
from datetime import datetime
from workflow import generate_meeting_summary
def save_markdown(content: str, output_dir: str = "output") -> str:
"""
将生成结果保存为 Markdown 文件。
"""
if not os.path.exists(output_dir):
os.makedirs(output_dir)
filename = f"meeting_summary_{datetime.now().strftime('%Y%m%d_%H%M%S')}.md"
filepath = os.path.join(output_dir, filename)
with open(filepath, "w", encoding="utf-8") as f:
f.write(content)
return filepath
def main():
meeting_text = """
今天讨论了新版官网上线计划。产品团队表示页面设计已经完成,
研发团队预计下周三完成前端开发。市场部需要在上线前准备推广文案。
老板要求官网必须在本月 28 日前上线。
另外,客服团队反馈希望增加常见问题模块,
产品经理同意本周内补充需求文档。
"""
print("正在生成会议纪要,请稍候...")
summary = generate_meeting_summary(meeting_text)
print("\n生成结果:\n")
print(summary)
filepath = save_markdown(summary)
print(f"\n会议纪要已保存到:{filepath}")
if __name__ == "__main__":
main()
运行:
python main.py
如果配置正确,你会看到终端输出生成的会议纪要,同时在 output 目录下生成一个 Markdown 文件。
十一、扩展功能:批量处理多个会议记录
真实工作中,我们通常不是只处理一条数据,而是批量处理。下面加入批量处理能力。
假设我们有一个 meetings.txt 文件,每条会议记录用分隔符隔开:
===MEETING===
会议记录一内容……
===MEETING===
会议记录二内容……
===MEETING===
会议记录三内容……
可以新增如下代码:
def load_meetings_from_file(filepath: str) -> list[str]:
"""
从文本文件中读取多条会议记录。
"""
with open(filepath, "r", encoding="utf-8") as f:
content = f.read()
meetings = [
item.strip()
for item in content.split("===MEETING===")
if item.strip()
]
return meetings
def batch_generate_summaries(filepath: str):
"""
批量生成会议纪要。
"""
meetings = load_meetings_from_file(filepath)
for index, meeting_text in enumerate(meetings, start=1):
print(f"正在处理第 {index} 条会议记录...")
summary = generate_meeting_summary(meeting_text)
output_path = save_markdown(
summary,
output_dir=f"output/meeting_{index}"
)
print(f"第 {index} 条会议纪要已保存:{output_path}")
然后在 main.py 中调用:
if __name__ == "__main__":
batch_generate_summaries("meetings.txt")
这样你就可以一次性处理多条会议记录。
十二、扩展功能:结构化输出 JSON
如果你希望把结果写入数据库或系统,Markdown 不一定是最方便的格式。更推荐让模型输出 JSON。
例如,我们可以新增一个 Prompt:
MEETING_JSON_PROMPT = """
你是一名会议纪要信息抽取助手。
请从下面的会议原文中提取结构化信息,并严格返回 JSON。
不要输出任何解释性文字,不要使用 Markdown。
JSON 字段如下:
{
"topic": "会议主题",
"conclusions": ["关键结论1", "关键结论2"],
"todos": [
{
"owner": "负责人",
"task": "任务内容",
"deadline": "截止时间"
}
],
"risks": ["风险或提醒1", "风险或提醒2"]
}
要求:
1. 如果字段没有对应内容,请使用空数组;
2. 如果负责人或截止时间未知,请填写“待确认”;
3. 不要编造原文没有的信息。
会议原文:
{meeting_text}
"""
对应的 Python 代码:
import json
from prompts import MEETING_JSON_PROMPT
def generate_meeting_json(meeting_text: str) -> dict:
prompt = MEETING_JSON_PROMPT.format(meeting_text=meeting_text)
result = call_chatgpt(prompt)
try:
data = json.loads(result)
return data
except json.JSONDecodeError:
raise ValueError(f"模型返回的不是合法 JSON:{result}")
结构化输出的好处是后续处理更方便。例如你可以将 todos 写入任务管理系统,把 risks 推送给项目经理,把 topic 存入会议数据库。
十三、扩展功能:自动发送邮件
生成会议纪要后,我们还可以自动发送邮件。以下示例使用 Python 内置的 smtplib。
import smtplib
from email.mime.text import MIMEText
from email.header import Header
def send_email(
smtp_host: str,
smtp_port: int,
username: str,
password: str,
to_email: str,
subject: str,
content: str
):
"""
发送邮件。
"""
message = MIMEText(content, "plain", "utf-8")
message["From"] = Header(username, "utf-8")
message["To"] = Header(to_email, "utf-8")
message["Subject"] = Header(subject, "utf-8")
with smtplib.SMTP_SSL(smtp_host, smtp_port) as server:
server.login(username, password)
server.sendmail(username, [to_email], message.as_string())
调用示例:
send_email(
smtp_host="smtp.example.com",
smtp_port=465,
username="your_email@example.com",
password="your_email_password",
to_email="team@example.com",
subject="新版官网项目会议纪要",
content=summary
)
需要注意的是,大多数邮箱服务商不允许直接使用登录密码发送邮件,通常需要开启 SMTP 服务并生成“授权码”。
十四、扩展功能:定时执行工作流
如果你希望每天或每周自动执行,可以使用 Linux 的 cron。
编辑定时任务:
crontab -e
例如每天晚上 8 点执行:
0 20 * * * /usr/bin/python3 /path/to/chatgpt-workflow-demo/main.py
如果你使用 Windows,可以使用“任务计划程序”配置定时执行。
对于更复杂的自动化场景,也可以使用:
- Airflow;
- Prefect;
- n8n;
- Zapier;
- Make;
- GitHub Actions;
- 企业内部自动化平台。
十五、如何提高自动化结果的稳定性?
使用 ChatGPT 做自动化时,最重要的问题不是“能不能生成内容”,而是“结果是否稳定、可靠、可控”。
下面是一些实用建议。
1. 明确输出格式
不要只写“帮我总结一下”,而应该明确要求:
- 输出 Markdown;
- 输出 JSON;
- 必须包含哪些字段;
- 每个字段的数据类型;
- 如果没有内容如何处理。
2. 降低 temperature
对于办公自动化、结构化抽取、分类任务,建议使用较低的 temperature,例如 0.1 到 0.3。
3. 增加错误处理
模型可能偶尔返回不符合预期的内容。你应该在程序里增加:
- JSON 解析失败重试;
- API 调用超时处理;
- 输出为空时报警;
- 日志记录;
- 失败任务重新执行。
4. 控制输入长度
如果输入内容太长,可能超过模型上下文限制。可以采用:
- 分段总结;
- 先摘要再汇总;
- 只提取关键段落;
- 使用向量检索选取相关内容。
5. 避免让模型编造
在 Prompt 中明确写出:
如果原文没有提到,请填写“未提及”,不要自行推测。
这对会议纪要、合同分析、客服质检等场景尤其重要。
十六、一个更完整的重试机制示例
下面给出一个带重试机制的 API 调用函数:
import time
from openai import OpenAI
from config import OPENAI_API_KEY, OPENAI_MODEL
client = OpenAI(api_key=OPENAI_API_KEY)
def call_chatgpt_with_retry(
prompt: str,
max_retries: int = 3,
sleep_seconds: int = 2
) -> str:
"""
带重试机制的 ChatGPT 调用。
"""
last_error = None
for attempt in range(1, max_retries + 1):
try:
response = client.chat.completions.create(
model=OPENAI_MODEL,
messages=[
{
"role": "system",
"content": "你是一个可靠的中文工作流自动化助手。"
},
{
"role": "user",
"content": prompt
}
],
temperature=0.2,
timeout=30
)
content = response.choices[0].message.content
if not content or not content.strip():
raise ValueError("模型返回内容为空")
return content
except Exception as e:
last_error = e
print(f"第 {attempt} 次调用失败:{e}")
if attempt < max_retries:
time.sleep(sleep_seconds)
raise RuntimeError(f"调用 ChatGPT 失败,已重试 {max_retries} 次:{last_error}")
在生产环境中,还可以加入日志系统,例如 logging,将错误写入日志文件,方便排查问题。
十七、完整源码汇总
为了方便复制,这里给出简化版完整源码。
requirements.txt
openai>=1.0.0
python-dotenv>=1.0.0
.env
OPENAI_API_KEY=你的_API_KEY
OPENAI_MODEL=gpt-4o-mini
config.py
import os
from dotenv import load_dotenv
load_dotenv()
OPENAI_API_KEY = os.getenv("OPENAI_API_KEY")
OPENAI_MODEL = os.getenv("OPENAI_MODEL", "gpt-4o-mini")
if not OPENAI_API_KEY:
raise ValueError("请先在 .env 文件中配置 OPENAI_API_KEY")
prompts.py
MEETING_SUMMARY_PROMPT = """
你是一名专业的会议纪要助手,擅长从会议记录中提取重点信息。
请根据下面的会议原文,生成一份结构清晰的中文会议纪要。
要求:
1. 使用 Markdown 格式输出;
2. 包含以下模块:
- 会议主题
- 关键结论
- 讨论要点
- 待办事项
- 风险与提醒
3. 待办事项请使用 Markdown 表格;
4. 如果无法判断负责人或截止时间,请填写“待确认”;
5. 内容要准确,不要编造会议中没有出现的信息;
6. 语言简洁、正式,适合发送给团队成员。
会议原文如下:
{meeting_text}
"""
workflow.py
import time
from openai import OpenAI
from config import OPENAI_API_KEY, OPENAI_MODEL
from prompts import MEETING_SUMMARY_PROMPT
client = OpenAI(api_key=OPENAI_API_KEY)
def call_chatgpt(prompt: str, max_retries: int = 3) -> str:
last_error = None
for attempt in range(1, max_retries + 1):
try:
response = client.chat.completions.create(
model=OPENAI_MODEL,
messages=[
{
"role": "system",
"content": "你是一个专业、严谨、可靠的中文办公自动化助手。"
},
{
"role": "user",
"content": prompt
}
],
temperature=0.3,
timeout=30
)
content = response.choices[0].message.content
if not content or not content.strip():
raise ValueError("模型返回内容为空")
return content
except Exception as e:
last_error = e
print(f"第 {attempt} 次调用失败:{e}")
time.sleep(2)
raise RuntimeError(f"调用失败:{last_error}")
def generate_meeting_summary(meeting_text: str) -> str:
prompt = MEETING_SUMMARY_PROMPT.format(meeting_text=meeting_text)
return call_chatgpt(prompt)
main.py
import os
from datetime import datetime
from workflow import generate_meeting_summary
def save_markdown(content: str, output_dir: str = "output") -> str:
if not os.path.exists(output_dir):
os.makedirs(output_dir)
filename = f"meeting_summary_{datetime.now().strftime('%Y%m%d_%H%M%S')}.md"
filepath = os.path.join(output_dir, filename)
with open(filepath, "w", encoding="utf-8") as f:
f.write(content)
return filepath
def main():
meeting_text = """
今天讨论了新版官网上线计划。产品团队表示页面设计已经完成,
研发团队预计下周三完成前端开发。市场部需要在上线前准备推广文案。
老板要求官网必须在本月 28 日前上线。
另外,客服团队反馈希望增加常见问题模块,
产品经理同意本周内补充需求文档。
"""
print("正在生成会议纪要,请稍候...")
summary = generate_meeting_summary(meeting_text)
print(summary)
filepath = save_markdown(summary)
print(f"会议纪要已保存到:{filepath}")
if __name__ == "__main__":
main()
十八、进一步升级方向
当你完成基础版本后,可以继续从以下方向升级:
1. 接入 Web 页面
使用 Flask、FastAPI 或 Streamlit 做一个简单页面,让用户上传会议记录,然后在线生成纪要。
2. 接入企业微信或飞书
把生成结果自动推送到群聊,实现团队内自动同步。
3. 接入数据库
把会议主题、结论、待办事项、负责人和截止时间保存到 MySQL、PostgreSQL 或 MongoDB。
4. 接入任务管理工具
例如把待办事项同步到:
- Trello;
- Jira;
- Notion;
- 飞书多维表格;
- 企业微信日程;
- 钉钉待办。
5. 多 Agent 工作流
复杂任务可以拆成多个 Agent:
- 摘要 Agent;
- 信息抽取 Agent;
- 风险分析 Agent;
- 文案润色 Agent;
- 审核 Agent。
每个 Agent 专注完成一个环节,最终再把结果合并。
十九、总结
ChatGPT 工作流自动化的核心,不只是“调用一次 AI 接口”,而是把业务流程拆解清楚,再让 AI 参与其中最适合的语言处理环节。
一个可落地的自动化系统通常需要包含:
- 明确的数据输入;
- 稳定的 Prompt 模板;
- 可控的大模型调用;
- 可靠的错误处理;
- 结构化的结果解析;
- 合适的输出和通知方式。
本文以“自动生成会议纪要和待办事项”为例,完整演示了从项目搭建、Prompt 编写、API 调用、结果保存、批量处理、JSON 输出、邮件发送到定时执行的全过程。
你可以基于这套代码继续扩展,把它改造成周报生成器、客服反馈分析器、销售邮件助手、合同摘要工具、内容创作流水线,甚至是完整的企业内部 AI 自动化平台。
真正有价值的 AI 应用,不是让 ChatGPT 偶尔帮你写一段文字,而是把它嵌入日常流程,让重复性工作自动流转,让人把时间投入到判断、沟通和创造上。