LangGraph1.0实战:构建自动邮件处理智能体,大模型应用开发指南

本文详细介绍了如何使用LangGraph1.0构建自动邮件处理智能体,展示了状态管理、节点、边、条件路由和中断机制等核心技术的实战应用。通过定义智能体状态、编写节点函数、构建智能体图和测试验证,实现了一个能够自动分类邮件、处理Bug报告、搜索知识库生成回复,并在必要时引入人工审核的完整工作流。这一实战项目帮助开发者深入理解LangGraph框架,掌握大模型智能体开发的核心技能。


前言

上期内容 [LangGraph1.0速通指南(二)—— LangGraph1.0 条件边、记忆、人在回路]分享了条件边、智能体记忆和人在回路等核心机制。通过点、边、条件边的组合,大家已经能够搭建起具备记忆能力并支持人工介入的智能体工作流。为了帮助大家更熟练地掌握这些概念,并体会其在真实场景中的应用,本期笔者将把前两期所学的知识——包括状态、节点、边、条件路由、记忆与中断机制——融会贯通,动手构建一个自动邮件处理智能体项目。

一、电子邮件智能体场景分析

1.1 需求分析

作为一名开发者笔者每天都需要处理大量的工作邮件——包括问题咨询、Bug 报告、账单通知、功能请求等。邮件不仅类型多样,紧急程度也各不相同,手动分类、回复耗时耗力,尤其在忙碌时更容易遗漏或延迟处理。为此笔者希望构建一个自动邮件处理智能体,它能够:

  • 自动分类:识别邮件的类型(如问题、Bug、账单、功能请求等)与紧急程度。
  • 智能处理:根据邮件类型执行相应操作(如为 Bug 创建跟踪工单,为其他问题搜索内部文档获取解答)。
  • 自动生成回复:基于分类与处理结果,生成有针对性的回复内容。
  • 审核机制:在必要时(如涉及重要决策或复杂问题)暂停流程,引入人工审核,确保回复准确性与安全性。

该智能体将帮助笔者提升邮件处理效率,同时通过“人在回路”保证对自动回复的可控制。

1.2 根据需求分析设计图

基于以上需求笔者设计的智能体将具备以下核心功能流程:

  1. 邮件提取与解析:从收件箱获取原始邮件,提取关键内容(发件人、主题、正文等)。
  2. 自动分类与路由:对邮件内容进行分类,并依据类别决定后续处理路径。
  3. 内容处理与生成
  • 若为Bug 报告,在错误跟踪系统中说明已经收到并跟踪错误;
  • 若为其他类别(如问题咨询),则在内部知识库中检索相关答案。
  1. 回复生成与审核
  • 根据处理结果生成回复草稿;
  • 依据邮件类别与紧急程度,决定是否发送至人工审核节点;
  • 审核通过后自动发送邮件,或由人工修订后发出。

整体流程可通过以下示意图概括:

二、项目代码编写

2.1 定义智能体状态

1. 环境配置与模型初始化:首先配置项目环境并初始化大语言模型,本次同样使用deepseek模型,需要提前执行pip install langchain-deepseek安装相关的依赖包,并在项目文件夹下新建.env文件,将注册的DeepSeek API填入该文件中。

import uuid import os from typing import Literal, TypedDict from dotenv import load_dotenv from langchain_deepseek import ChatDeepSeek from langgraph.types import Command, interrupt from langgraph.graph import END, START, StateGraph from langgraph.checkpoint.memory import InMemorySaver load_dotenv() llm = ChatDeepSeek( model="deepseek-chat", )

2. 定义状态数据结构:智能体的状态设计需要与工作流节点相匹配,确保每个节点的输入输出都有明确的数据结构。EmailAgentState的设计从上到下分别是读取邮件节点、分类节点、bug追踪节点、文档查询节点、自动撰写节点的相关内容。本项目处理的是单封邮件的独立流程,因此未使用笔者在《LangGraph1.0速通指南(一)—— 核心概念、点、边》中介绍的reducer进行状态聚合。但在需要处理连续对话或多轮交互的场景中,reducer机制将是管理状态演进的关键工具。

# 1. 定义图状态State class EmailClassification(TypedDict): # 分类包括问题、错误、账单、功能, 不属于这些功能就分类为复杂 intent: Literal['question', 'bug', 'billing', 'feature', 'complex'] # 紧急程度: 低、中、高、关键 urgency: Literal['low', 'medium', 'high', 'critical'] # 邮件主题 topic: str # 邮件摘要 summary: str class EmailAgentState(TypedDict): # 储存读取邮件内容, 发件人邮件地址,邮件ID email_content: str sender_email: str email_id: str # 分类意图节点的结果, classification: EmailClassification # Bug tracking 错误处理系统只需要查询一些API, 这里就存储一个工单ID即可 ticket_id: str | None # 搜索文档结果 search_results: list[str] | None # 客户历史:客户历史是一个字典,键是客户的电子邮件,值是与该客户相关的任何搜索结果 customer_history: dict | None # 生成内容: draft_response: str | None

2.2 定义智能体节点

**1. 邮件读取与分类节点:首先明确读取节点与分类节点的功能。在实际生产环境下,读取节点通常通过调用特定邮箱的 API 实现,但为简化流程,笔者在此略过该节点,直接将邮件内容输入至后续分类节点。分类节点通过预设提示词,调用 DeepSeek 大模型对邮件进行分类。LangChain1.0 支持便捷的大模型结构化输出,具体方法笔者不再展开,

def read_email(state: EmailAgentState) -> EmailAgentState: ''' 实际生产中这一步要从邮箱提供的api中提取电子邮件,这里仅仅是演示, 会将电子邮件直接传给分类节点,该函数简写 ''' pass def classify_intent(state: EmailAgentState) -> EmailAgentState: "用大模型进行节点分类和紧急程度识别,然后依据结果路由" structured_llm = llm.with_structured_output(EmailClassification) classification_pormpt = f""" 分析用户输入的邮件并进行分类 邮件: {state['email_content']} 来自: {state['sender_email']} 提供分类、紧急程度、主题和内容摘要 """ classication = structured_llm.invoke(classification_pormpt) return { 'classification': classication }

2. 知识库搜索节点:目前搜索节点仅为功能模拟,在实际部署时,可替换为对接真实知识库的检索接口。该节点接收并依据上一节点(即分类节点)输出的状态信息,从中提取邮件意图与主题,进而模拟在内部知识库中执行检索的过程。

def search_documentation(state: EmailAgentState) -> EmailAgentState: ''' 查询知识库节点,这里模拟操作 ''' classification = state.get('classification', {}) query = f"{classification.get('intent', '')} {classification.get('topic', '')}" try: # 模拟查询的逻辑 search_results = [ 'search_result_1', 'search_result_2', 'search_result_3' ] except Exception as e: search_results = [f'搜索接口不可用'] return {'search_results': search_results}

3. Bug跟踪节点:模拟跟踪的内容,创建跟踪工单

def bug_tracking(state: EmailAgentState) -> EmailAgentState: ''' 模拟bug修复的相关内容 ''' ticket_id = f"Bug-{uuid.uuid4()} fixed" return {'ticket_id': ticket_id}

4. 回复生成节点:节点接收来自搜索节点的信息(如原始检索结果、以换行符连接的客户历史记录等),并将其作为上下文参考,指导大模型的回复生成。大模型基于邮件分类、紧急程度及所附的参考信息,生成拟回复的邮件内容。除了生成回复内容,该节点还会输出一个****处理命令。该命令将根据邮件的类别与紧急程度,自动判断下一步应执行的操作——例如“直接发送回复”或“转交人工审核”。

def write_response(state: EmailAgentState) -> Command[Literal['human_review', 'send_reply']]: ''' 根据分类结果、搜索结果等中间结果生产报告 ''' classification = state.get('classification', {}) context_sections = [] if state.get('search_results'): formatted_docs = "\n".join([f"- {doc}" for doc in state['search_results']]) context_sections.append(f"相关内容:\n{formatted_docs}") if state.get('customer_history'): context_sections.append(f"Customer tier: {state['customer_history'].get('tier', 'standard')}") # 构建提示词 draft_prompt = f""" 撰写50字邮件回复: 邮件内容: {state.get('email_content')} 邮件分类: {classification.get('intent', 'unkown')} 紧急程度: {classification.get('urgency', 'medium')} {chr(10).join(context_sections)} """ response = llm.invoke(draft_prompt) # 根据紧急程度决定是否需要人类审核 needs_review = ( classification.get('urgency') in ['high', 'critical'] or classification.get('intent') == 'complex' ) if needs_review: goto = 'human_review' print('需要人工审核') else: goto = 'send_reply' return Command( update={'draft_response': response.content}, goto=goto )

5. 人工审核节点和回复节点:流程执行至该节点时,系统将自动暂停并等待人工输入。只有在邮件紧急程度为紧急或分类结果为复杂情况下,才会进入工作节点来人工确认。该节点采用中断机制,根据人工反馈的指令,节点将返回相应的路由命令,引导流程走向“结束”或“发送回复”分支。回复节点笔者这里只模拟自动发送邮件。

def human_review(state: EmailAgentState) -> Command[Literal['send_reply', END]]: ''' 人类审查节点,审查结束后决定是否要回复该邮件 ''' classification = state.get('classification', {}) human_decision = interrupt({ "邮件ID": state['email_id'], "原始邮件内容": state['email_content'], "自动回复内容": state['draft_response'], '紧急程度': classification['urgency'], '分类': classification['intent'], '下一步': '请审核是否同意发送该邮件' }) if human_decision=='approved': return Command( update={}, goto='send_reply' ) else: return Command( update={}, goto=END ) def send_reply(state: EmailAgentState): print('---成功发送---')

2.3 构建智能体图

具备以上节点函数后,通过边将节点函数相连接构造智能体。智能体定义遵循 LangGraph1.0速通指南(一)—— LangGraph1.0 核心概念、点、边讲解的三步骤:定义状态、添加节点、添加边。同时由于需要使用中断机制,还需要添加内存检查点。

builder = StateGraph(EmailAgentState) builder.add_node("read_email", read_email) builder.add_node("classify_intent", classify_intent) builder.add_node("search_documentation",search_documentation) builder.add_node("bug_tracking", bug_tracking) builder.add_node("write_response", write_response) builder.add_node("human_review",human_review) builder.add_node("send_reply", send_reply) builder.add_edge(START, "read_email") builder.add_edge("read_email","classify_intent") builder.add_edge("classify_intent","search_documentation") builder.add_edge("classify_intent","bug_tracking") builder.add_edge("search_documentation","write_response") builder.add_edge("bug_tracking","write_response") builder.add_edge("send_reply",END) memory=InMemorySaver() app = builder.compile(checkpointer=memory)

三、 智能体测试与验证

为了验证笔者构建的邮件处理智能体是否按预期工作,下面通过两个典型场景进行测试:高紧急度Bug报告和常规问候邮件。

3.1 Bug报告处理测试

测试一个需要人工审核的高优先级Bug报告,预期的处理流程如下:

  • 由于邮件内容包含"紧急Bug",分类节点会将其识别为intent: bugurgency: critical
  • 工作流会创建Bug工单,然后进入human_review节点等待审核
  • 系统会打印中断信息并等待人工输入
  • 根据人工决策,邮件将被发送或终止
initial_state = { "email_content": "我遇到了一个紧急bug, 有客户重复订阅了一个产品", "sender_email": "test@163.com", "email_id": "email_123" } config = {"configurable": {"thread_id": "customer_123"}} result = app.invoke(initial_state, config=config) print(f'准备审核的回复内容:{result['draft_response']}...\n') if '__interrupt__' in result: print(f'Interrupt:{result}') msg = result['__interrupt__'][-1].value print(msg) human = input(f"请输入: ") human_response = Command( resume=human ) final_result = app.invoke(human_response, config)

从运行结果来看,工作流成功识别出紧急Bug,创建了工单并生成了回复草稿。由于紧急程度为"critical",系统正确触发了人工审核中断:

3.2:常规问候处理流程

测试一个无需审核的普通问候邮件,预期结果如下:

  • 问候邮件会被分类为intent: questionurgency: low
  • 工作流将跳过人工审核节点,直接生成并发送回复
  • 整个过程完全自动化,无需人工干预
initial_state = { "email_content": "你好呀,我是新同事苍井空", "sender_email": "test@163.com", "email_id": "email_123" } config = {"configurable": {"thread_id": "customer_123"}} result = app.invoke(initial_state, config=config) print(f'准备审核的回复内容:{result['draft_response']}...\n') if '__interrupt__' in result: print(f'Interrupt:{result}') msg = result['__interrupt__'][-1].value print(msg) human = input(f"请输入: ") human_response = Command( resume=human ) final_result = app.invoke(human_response, config)

从运行结果可以看出系统正确识别出低优先级问候邮件,自动生成友好回复并直接发送,无需人工介入:

完整代码大家可以关注笔者的微信公众号大模型真好玩,并私信:LangChain智能体开发免费获取。

四、总结

本文通过构建自动邮件处理智能体,系统演示了LangGraph1.0的状态管理、条件路由、人在回路等核心机制在实战中的应用。相信大家经过实战,能更加掌握LangGraph1.0编写智能体的核心技巧。

如何系统的学习大模型 AI ?

由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。

但是具体到个人,只能说是:

“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。

这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。

我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。

我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

一直在更新,更多的大模型学习和面试资料已经上传带到CSDN的官方了,有需要的朋友可以扫描下方二维码免费领取【保证100%免费】👇👇

01.大模型风口已至:月薪30K+的AI岗正在批量诞生

2025年大模型应用呈现爆发式增长,根据工信部最新数据:

国内大模型相关岗位缺口达47万

初级工程师平均薪资28K(数据来源:BOSS直聘报告)

70%企业存在"能用模型不会调优"的痛点

真实案例:某二本机械专业学员,通过4个月系统学习,成功拿到某AI医疗公司大模型优化岗offer,薪资直接翻3倍!

02.大模型 AI 学习和面试资料

1️⃣ 提示词工程:把ChatGPT从玩具变成生产工具
2️⃣ RAG系统:让大模型精准输出行业知识
3️⃣ 智能体开发:用AutoGPT打造24小时数字员工

📦熬了三个大夜整理的《AI进化工具包》送你:
✔️ 大厂内部LLM落地手册(含58个真实案例)
✔️ 提示词设计模板库(覆盖12大应用场景)
✔️ 私藏学习路径图(0基础到项目实战仅需90天)





第一阶段(10天):初阶应用

该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。

第二阶段(30天):高阶应用

该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。

第三阶段(30天):模型训练

恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。

到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?

第四阶段(20天):商业闭环

对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。

学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。

如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1131570.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

DeepSeek+Ollama+AnythingLLM搭建本地知识库,打造你的私人AI管家(建议收藏)

本文详细介绍了使用DeepSeek、Ollama和AnythingLLM搭建本地知识库的全过程,包括软件安装、模型配置、文档上传和智能问答功能。教程特别强调了本地部署对隐私保护的优势,并提供了文档类型准备和嵌入模型配置等实用建议,帮助用户打造专属AI助理…

从代码到上线 3 分钟:我如何用平台工程思路,彻底告别繁琐的 K8s 运维

“在我电脑上明明是好的啊?”这句话我不知道说过多少次,也听过多少次。作为一名开发者,我大部分的精力本该在创造业务价值,但现实却常常是,大量时间被浪费在了写代码之外的所有事情上。我开始反思,为什么在…

深度学习毕设项目:通过python_CNN卷积神经网络对鸡蛋是否破损识别

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

AI大模型岗位薪资真相:多少年包能拿到?普通人如何破局?_AI持续爆火,相关岗位薪资到底达到了多少

文章分析AI相关岗位薪资情况,指出高薪岗位(最高100万年包)主要面向博士海归或博士985人才,能拿到此等薪资的人凤毛麟角。同时提醒职场风险,建议提前做好准备。后半部分介绍了JMeter常用插件的安装及使用方法。 “AI相关岗位薪资” 随着AI持续…

深度学习计算机毕设之基于python-CNN卷积神经网络的水果识别基于python-CNN卷积神经网络的水果识别

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

【金仓数据库】ksql 指南(六)—— 创建与管理用户和权限(KingbaseES 安全控制核心)

引言 完成数据库,表,索引这些核心对象的运作之后,“用户与权限控制”就成了保障 KingbaseES 数据安全的重点所在,经由细致的用户运作和权限分配,可以规避未授权访问以及误操作之类的风险,比如普通用户就无…

【毕业设计】基于深度学习python卷积网络对甘蔗叶子病识别

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

高效收集并分享活动精彩瞬间!!组织者必看

周末逃离城市的喧嚣,和朋友们一起参加了一场超治愈的寺院茶会 🍵 心情真的像被洗过一样,平静又温柔。 在古色古香的寺院里,听着檐角的风铃,看着袅袅的茶烟,闻着清雅的茶香,感受着那份难得的闲适…

RAG技术揭秘:让AI大模型学会查资料,回答更专业

本文详解RAG(检索增强生成)技术,通过结合外部知识库与文本生成,有效提升大模型回答准确性并减少幻觉。文章系统介绍了RAG原理、发展历程、核心组件(文档解析、知识构建、检索、增强、生成)及企业级应用方案,包括知识库搭建流程、优化策略和典…

mysql之日期时间函数

以下是 MySQL 中一些常用的日期和时间函数,包括它们的用法、参数类型和期望的结果。 NOW() 返回当前日期和时间。参数:无结果类型:DATETIME示例: SELECT NOW(); -- 结果: 2023-04-01 12:45:31 (取决于查询时的实际日期…

【毕业设计】基于深度学习python-CNN卷积神经网络对土豆疾病识别基于python-CNN卷积神经网络对土豆疾病识别

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

都说网络安全前景好,到底好在哪?3 个数据给你答案

都说网络安全前景好,到底好在哪?3 个数据给你答案 数字化时代里,网络安全早已不是“可选项”而是“必选项”。从政府机关到互联网公司,从金融能源到日常消费,各行各业的安全防护需求持续爆发,让这个行业成…

深度测评专科生必用的9款AI论文平台

深度测评专科生必用的9款AI论文平台 为什么需要一份权威的AI论文平台测评 随着人工智能技术在学术领域的广泛应用,越来越多的专科生开始依赖AI工具辅助论文写作。然而,面对市场上琳琅满目的AI论文平台,如何选择一款真正适合自己需求的工具成为…

程序员必看!2个月变身AIGC产品经理,薪资翻倍学习指南(附收藏级资源)

文章分享了一个2个月成为AIGC产品经理的完整学习路径,包括多看行业资讯研报、明确细分领域、系统掌握AI基础知识、完成实战项目、优化简历和准备面试。作者提供了详细的学习资源和面试题库,帮助读者快速转行AIGC领域,实现薪资大幅提升&#x…

我如何将“配环境1天,上线半天”的流程,压缩到3分钟?

作为开发者,我最常听到也最怕听到的一句话就是:“在我电脑上明明是好的”。这句话背后,是无数个因为环境不一致而浪费掉的深夜,是开发和运维之间无休止的拉扯。我一直在思考,为什么在云原生如此普及的今天,…

【课程设计/毕业设计】基于深度学习卷积神经网络的水果识别基于python-CNN卷积神经网络的水果识别

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

同样转行网络安全,有人月薪 8k 有人 3 万?方向选对才是关键

收藏学习:网络安全全岗位解析:从小白到专家的职业发展指南 本文基于《网络安全人才产业报告》,详细介绍了网络安全领域的四大方向及其细分岗位:安全建设与实施、安全运行与维护、安全应急与防御、安全合规和管理。每个方向下包含…

电脑没有realtek音频管理器怎么办 4种详细解决方法

电脑使用过程中,有时会发现系统中没有Realtek音频管理器,这会导致无法方便地调整音效和扬声器设置。出现这种情况可能是驱动丢失、未安装、被禁用或软件异常。下面整理了几种常用解决方法,帮助你快速恢复Realtek音频管理器。 一、通过Windows…

博睿数据领航可观测性选型:国际竞品对比与2026企业决策指南

随着全球数据可观测性软件市场持续增长,预计到2031年市场规模将接近84亿元,企业正站在技术决策的关键节点,选择一个适合自己业务特点的可观测性平台,比盲目跟随技术潮流更为重要。随着2026年的到来,混合云环境的普及、…

【课程设计/毕业设计】深度学习基于python-CNN卷积神经网络对土豆疾病识别基于python-CNN卷积神经网络对土豆疾病识别

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…