当前位置: 首页 > news >正文

langGraph从入门到精通(七)——基于 LangGraph 的结构化数据AI 代理自动入库实战

基于 LangGraph 的结构化数据AI 代理自动入库实战

1 导语

在企业级 AI 应用中,仅能“聊天”的 Agent 远远不够,如何将对话中的关键信息自动识别并精准持久化到业务数据库,是实现业务闭环的关键。本文将带你通过一个亲测有效的实战案例,掌握利用LangGraph的条件边(Conditional Edges)与SQLAlchemyORM 框架,构建一个能够自动识别用户信息并将其存储至 MySQL 数据库的智能代理系统。

2 技术栈清单

  • Python== 3.11.14
  • langgraph== 1.0.5
  • langchain-core== 1.2.7
  • SQLAlchemy== 2.0.x
  • PyMySQL== 1.1.x
  • MySQL== 8.0/5.7

3 项目核心原理

本项目核心在于利用 LangGraph 的StateGraph进行工作流编排。系统通过 LLM 的Structured Output(结构化输出)能力将非结构化对话转化为 Pydantic 模型对象。随后,通过Conditional Edges(条件边)进行逻辑分流:若提取到有效用户信息,则流转至数据库操作节点;否则执行普通对话回复。

4 实战步骤

4.1 环境准备

首先需要配置数据库连接信息,并安装必要的数据库驱动与 ORM 框架。

# 安装数据库连接相关依赖pipinstallsqlalchemy==2.0.31pymysql==1.1.1langgraph==1.0.5

4.2 代码实现

4.2.1 数据库模型与会话配置

使用 SQLAlchemy 定义User模型,映射至数据库中的users表。

fromsqlalchemyimportcreate_engine,Column,Integer,Stringfromsqlalchemy.ormimportdeclarative_base,sessionmaker Base=declarative_base()classUser(Base):# 定义 ORM 模型__tablename__='users'id=Column(Integer,primary_key=True)name=Column(String(50))age=Column(Integer)email=Column(String(100))phone=Column(String(15))# 数据库连接 URI (需替换为实际配置)DATABASE_URI='mysql+pymysql://user:pass@localhost:3306/db'engine=create_engine(DATABASE_URI)Session=sessionmaker(bind=engine)

4.2.2 核心节点逻辑

编写数据库插入节点,利用Session将 AI 提取的数据写入。

definsert_db(state):# 数据库存储节点session=Session()try:output=state['messages'][-1].final_output# 获取上一个节点的结构化输出user=User(name=output.name,age=output.age,email=output.email,phone=output.phone)session.add(user)# 添加记录session.commit()# 提交事务return{"messages":["数据已成功存储至数据库。"]}exceptExceptionase:session.rollback()# 异常回滚return{"messages":[f"存储失败:{e}"]}finally:session.close()# 关闭会 fancy 话
4.2.3 图编排与条件路由

通过add_conditional_edges实现根据 AI 输出类型自动选择路径。

# 构建状态图graph=StateGraph(AgentState)graph.add_node("chat_with_model",chat_with_model)graph.add_node("insert_db",insert_db)graph.add_conditional_edges("chat_with_model",generate_branch,# 路由决策函数{True:"insert_db",False:"final_answer"}# 路径映射)

4.3 功能测试

输入包含个人信息的语句,验证系统是否能够自动识别并完成入库。

query="我叫奥特曼,今年38岁,邮箱地址是aoteman@qq.com"result=graph.invoke({"messages":[HumanMessage(content=query)]})

5 核心代码解析

5.1 条件边路由逻辑解析

划重点:这是实现复杂业务逻辑的核心。

defgenerate_branch(state):output=state['messages'][-1].final_outputreturnisinstance(output,UserInfo)
  • 核心作用:作为图的“指挥官”,判断 LLM 的输出是属于用户信息还是普通聊天。
  • 为何这样实现:通过isinstance检查对象类型,实现了业务逻辑的硬编码控制与 AI 生成能力的完美解耦。

5.2 SQLAlchemy 会话管理设计

session=Session()# 确保为每次操作创建新的会话
  • 核心作用:保证数据库连接的线程安全性。
  • 关键参数Session配合try...except...finally结构,确保了即使在分布式环境下,数据库事务也能正确提交或回滚,避免连接泄露。

6 效果验证

执行后,控制台会输出echo=True的 SQL 语句,同时数据库users表中会新增对应记录。

7 踩坑记录

7.1 DATABASE_URI 格式错误

  • 错误现象NoSuchModuleError: Can't load plugin: sqlalchemy.dialects.mysql.pymysql
  • 根因分析:未安装pymysql驱动或连接串拼写错误。
  • 解决方案亲测有效的连接串格式为mysql+pymysql://user:pass@host:port/db?charset=utf8mb4

7.2 Session 提交后未关闭

  • 错误现象:数据库连接池溢出,后续检测任务挂起。
  • 根因分析:在节点函数中打开了 Session 但未在finally中关闭。
  • 解决方案:严格执行“打开-使用-关闭”的生命周期管理。

7.3 Structured Output 类型判断失效

  • 错误现象:总是跳转到final_answer节点。
  • 根因分析:模型输出的 Pydantic 对象与generate_branch中判断的类型不一致。
  • 解决方案:检查with_structured_output绑定的类定义,确保路由函数识别准确。

8 总结与扩展

本文通过LangGraph + SQLAlchemy实现了从语义理解到持久化存储的全自动化。核心收获在于理解了如何通过条件边来管理 Agent 的执行路径。未来我们可以进一步扩展,在insert_db节点之前加入人工确认节点(Human-in-the-loop),确保入库数据的 100% 准确。

欢迎评论区留言讨论核心主题相关的问题~

http://www.jsqmd.com/news/269910/

相关文章:

  • AI性能测试工具的认知盲区与误判机制解析
  • 使用C#代码从工作簿中删除工作表
  • ‌古文明密码测试:用AI破译玛雅历法的漏洞‌
  • esp32,使用esp-idf链接mqtt服务器,消息接收
  • 从理论到代码:Agentic AI实时响应优化的提示工程实现与调试技巧
  • 腾讯云的IP是原生IP吗?
  • DeploySharp 全面支持 YOLO26 系列,助力开发者快速部署落地应用
  • 设备维修班的惊喜发现,CAXA三维球比扳手还好用
  • 02.01.05.菲力尔FLIR GigE相机 环境搭建篇(CentOS9系统下 areaDetector的aravis安装配置)
  • CAXA用一年省下六万外包费
  • 工程机械制造国产 CAD技工经验数字化传承应用
  • 02.01.04.菲力尔FLIR GigE相机 环境搭建篇(CentOS9系统下 areaDetector安装配置)
  • CAXA让大三学生爱上机械设计
  • 禅道8.2.1升级到12.5.3,浏览器提示“重定向次数过多”
  • 高通CEO安蒙播客访谈:移动DNA也能做好数据中心
  • 部署qwen14B 实战
  • 商旅平台有哪些?2026年主流商旅平台盘点及新趋势报告
  • 俄罗斯SALUTEDEV团队VIBE:超轻量AI实现高效图片编辑
  • mdadm 故障处理二
  • 当智能体爆发在即,数据库如何成为“发动机”?
  • [HAL库分析—GPIO] - 指南
  • Snap联手多所高校突破:静态模型实现动态化动画生成
  • django计算机毕设之基于大数据+django+网络爬虫的安客居二手房屋信息采集系统的设计与实现(完整前后端代码+说明文档+LW,调试定制等)
  • Vue2 vs Vue3:核心差异全面解析
  • 小波变换特征融合优化实战
  • 最强卸载工具Geek Uninstaller下载安装全流程图解(附免安装中文版资源包) - xiema
  • 03.01.01.菲力尔FLIR GigE相机 快速开始篇(ADSpinnaker案例 使用Eclise开发工具:创建Makefile项目方式 获取Spinnaker版本)
  • Vue+Laravel全栈开发实战指南
  • 【场景:识别C2通信】评估出站IP是否为已知恶意地址,方法:IP离线库+威胁情报融合
  • PHP8.2 vs 8.4:关键差异与升级指南