上一篇 下一篇 分享链接 返回 返回顶部

从会议纪要到自动发邮件:手把手搭建 ChatGPT 工作流系统

发布人:慈云数据-客服中心 发布时间:16小时前 阅读量:7

ChatGPT 工作流自动化教程|附源码

在日常工作中,很多任务并不复杂,但会反复出现:整理会议纪要、生成周报、回复邮件、提取文档重点、归类客户反馈、把表格数据转成报告、根据模板生成营销文案等。过去我们通常依赖人工完成这些流程,效率低、重复性高,还容易出错。

随着 ChatGPT 和大语言模型 API 的普及,越来越多的工作可以被“自动化”:你只需要定义好输入、处理逻辑和输出格式,就可以让 AI 自动完成大量文本理解、生成、分类和总结工作。

本文将从零开始,带你搭建一个 ChatGPT 工作流自动化系统。文章会讲清楚核心思路、适用场景、架构设计,并提供一套可运行的 Python 示例源码,帮助你快速落地到自己的业务中。


一、什么是 ChatGPT 工作流自动化?

所谓 ChatGPT 工作流自动化,就是把原本需要人工操作的一系列步骤,拆解成多个可执行节点,然后通过程序调用 ChatGPT 或其他大语言模型完成其中的文本处理任务。

一个典型的自动化流程可能是这样的:

  1. 用户上传一份文档;
  2. 程序自动读取文档内容;
  3. 调用 ChatGPT 总结文档要点;
  4. 根据总结内容生成待办事项;
  5. 将结果写入数据库或发送到邮箱;
  6. 自动生成一份 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.10.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 偶尔帮你写一段文字,而是把它嵌入日常流程,让重复性工作自动流转,让人把时间投入到判断、沟通和创造上。

目录结构
全文