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

LangGraph实战:手把手教你用GPT-4o-mini和Google Serper API搭一个能查新闻、能画图的智能助手

LangGraph实战构建智能决策助手的全流程指南想象一下你正在开发一个能理解自然语言指令的AI助手——当用户询问2024年欧洲杯冠军是谁时它能自动搜索最新赛事结果当用户要求画一只戴着墨镜的柴犬冲浪时又能无缝切换到图像生成模式。这种动态路由能力正是现代AI应用的核心竞争力。本文将带你用LangGraph框架结合GPT-4o-mini、Google搜索API和DALL-E图像生成构建这样一个能自主决策的智能系统。1. 环境准备与工具配置在开始构建前我们需要配置三个关键组件语言模型、搜索工具和图像生成工具。这个组合将赋予我们的助手思考、查询和创作的能力。首先安装必要的Python包pip install langgraph langchain-openai langchain-community python-dotenv接着准备.env文件存储API密钥OPENAI_API_KEY你的OpenAI密钥 SERPER_API_KEY你的Google搜索API密钥工具初始化代码from dotenv import load_dotenv from langchain_community.tools import GoogleSerperRun from langchain_community.tools.openai_dalle_image_generation import OpenAIDALLEImageGenerationTool from langchain_openai import ChatOpenAI load_dotenv() # 初始化语言模型 llm ChatOpenAI(modelgpt-4o-mini) # 配置搜索工具 search_tool GoogleSerperRun( nameweb_search, description查询最新网络信息适用于时事、赛事结果等需要实时数据的请求 ) # 配置图像生成工具 dalle_tool OpenAIDALLEImageGenerationTool( nameimage_generator, description根据文本描述生成创意图像 ) tools [search_tool, dalle_tool] llm_with_tools llm.bind_tools(tools)提示Google Serper API提供比传统搜索引擎API更经济的搜索方案适合中小规模应用。若需要更高查询额度可以考虑其他商业API服务。2. 构建智能路由核心逻辑LangGraph的核心优势在于其灵活的状态管理和条件路由系统。我们需要设计一个决策大脑来动态判断应该使用搜索还是画图功能。状态类型定义from typing import TypedDict, Annotated, Literal from langgraph.graph.message import add_messages class AgentState(TypedDict): messages: Annotated[list, add_messages] # 消息历史记录路由决策函数def route_action(state: AgentState) - Literal[search, draw, end]: last_msg state[messages][-1] if not hasattr(last_msg, tool_calls): return end # 无工具调用则结束 tool_name last_msg.tool_calls[0][name] return search if tool_name web_search else draw这个路由函数会检查最近一条消息中的工具调用指令根据工具名称决定下一步动作。这种设计模式在以下场景特别有用需要处理多种类型用户请求的客服系统根据输入内容自动选择分析工具的数据处理平台混合文本和多媒体生成的内容创作助手3. 实现工具执行节点每个工具都需要专门的执行节点来处理具体操作。我们采用模块化设计使系统易于扩展新功能。搜索执行节点def search_node(state: AgentState): tool_call state[messages][-1].tool_calls[0] search_result search_tool.invoke(tool_call[args]) return {messages: [ToolMessage( contentstr(search_result), tool_call_idtool_call[id] )]}图像生成节点def draw_node(state: AgentState): tool_call state[messages][-1].tool_calls[0] image_url dalle_tool.invoke(tool_call[args]) return {messages: [ToolMessage( contentf![生成图像]({image_url}), tool_call_idtool_call[id] )]}注意DALL-E 3生成的图像链接通常有效期为2小时如需永久保存需要额外实现下载存储功能。4. 组装完整工作流现在我们将所有组件整合到一个有向图中定义完整的工作流程from langgraph.graph import StateGraph, END # 初始化图构建器 workflow StateGraph(AgentState) # 添加节点 workflow.add_node(llm, llm_with_tools) workflow.add_node(search, search_node) workflow.add_node(draw, draw_node) # 设置边关系 workflow.add_edge(search, llm) workflow.add_edge(draw, llm) workflow.add_conditional_edges( llm, route_action, { search: search, draw: draw, end: END } ) # 设置入口点 workflow.set_entry_point(llm) # 编译可执行图 agent workflow.compile()这个架构的精妙之处在于它的循环设计LLM生成决策 → 工具执行 → 结果返回LLM → 生成最终响应。这种模式被称为思考-行动-观察循环是构建复杂Agent的基础范式。5. 实战测试与效果优化让我们用几个典型场景测试我们的智能助手场景1事实查询result agent.invoke({ messages: [(user, 2024年温网男单冠军是谁)] }) print(result[messages][-1][content])预期输出会包含最新冠军信息如2024年温布尔登网球锦标赛男单冠军是...场景2图像生成result agent.invoke({ messages: [(user, 画一幅未来主义风格的城市景观有飞行汽车和玻璃幕墙大厦)] })系统会返回DALL-E生成的图像链接展示符合描述的科幻场景。性能优化技巧为搜索工具添加缓存机制减少重复查询对图像生成设置分辨率参数如1024x1024添加用户指令分类器提前过滤不合法请求实现对话历史摘要功能处理长对话场景# 缓存优化示例 from langchain.cache import SQLiteCache import langchain langchain.llm_cache SQLiteCache(database_path.langchain.db)6. 高级功能扩展基础版本运行稳定后可以考虑添加这些增强功能多工具并行执行# 在route_action函数中添加并行逻辑 if 和 in last_msg.content and 搜索 in last_msg.content and 画 in last_msg.content: return [search, draw] # 返回列表实现并行自定义工具验证def validate_request(state: AgentState): last_msg state[messages][-1].content if 暴力 in last_msg or 仇恨 in last_msg: raise ValueError(内容不符合使用政策) return state对话状态可视化使用Graphvizfrom pygraphviz import AGraph g AGraph() g.add_nodes_from([llm, search, draw, end]) g.add_edges_from([ (llm, search), (llm, draw), (search, llm), (draw, llm) ]) g.draw(workflow.png, progdot)这个项目最令人兴奋的部分是你可以基于这个框架快速开发各种专业领域的智能助手。比如电商客服自动查询订单/生成产品示意图学术研究文献检索/数据可视化生成内容创作事实核查/插图生成一体化我在实际项目中发现最影响用户体验的不是单个工具的精度而是系统能否准确理解用户意图并选择正确的工具。这需要精心设计工具的描述文本和大量边界案例测试。

相关文章:

LangGraph实战:手把手教你用GPT-4o-mini和Google Serper API搭一个能查新闻、能画图的智能助手

LangGraph实战:构建智能决策助手的全流程指南 想象一下,你正在开发一个能理解自然语言指令的AI助手——当用户询问"2024年欧洲杯冠军是谁"时,它能自动搜索最新赛事结果;当用户要求"画一只戴着墨镜的柴犬冲浪"…...

三星手机互传照片的 8 种最佳方法

照片对手机用户至关重要,它保存着珍贵回忆,也存储名片、截图、下载文件等重要信息。安卓用户(尤其是三星用户)经常需要在三星手机之间传输照片。手机数据传输看似复杂,尤其是大批量数据时,但通过以下方法可…...

英飞凌TC3xx Bootloader内存规划实战:从芯片手册到PFLASH/DFLASH分区(以TC377为例)

英飞凌TC3xx Bootloader内存规划实战:从芯片手册到PFLASH/DFLASH分区(以TC377为例) 在嵌入式系统开发中,Bootloader的内存规划往往是项目成败的关键第一步。对于使用英飞凌TC3xx系列芯片的工程师来说,如何合理利用有限…...

Rufus制作u盘启动盘:解决系统安装与维护中的usb启动盘制作难题

当你需要重装Windows系统,或者尝试安装Linux发行版时,最头疼的往往不是系统本身,而是如何制作一个可靠的启动U盘。用某些工具制作后,电脑无法从U盘启动;或者制作过程缓慢,还经常报错。这时候,你需要一款专业、高效的usb启动盘制作工具——Rufus。Rufus是一款免费开源的U…...

除了Word2Vec,试试HowNet的义原来做中文词相似度计算?一个实战对比

超越词向量:用HowNet义原解锁中文语义理解的实战指南 在自然语言处理领域,词向量技术如Word2Vec、GloVe和BERT已经成为了标配工具。但当面对中文特有的语义复杂性时——比如多义词"包袱"(既指包裹布也指心理负担)、同形…...

群晖NAS影视库美化:借助tinyMediaManager在Windows端实现精准元数据刮削

1. 为什么需要专业的元数据刮削工具 作为一个影音爱好者,我最头疼的就是整理影视库。从各种渠道下载的电影和剧集,文件名乱七八糟不说,还经常缺少关键信息。记得有一次想在朋友面前炫耀自己精心搭建的家庭影院,结果打开Plex一看&a…...

AI 域名投资价值高吗

我觉得 AI 域名本身它不是顶级域名,是一个国家域名。 这就有点和我们国家的 CN 域名以及一段时间炒的比较火的 IO 域名是一个意思。 一个国家域名在管理中一个最大的问题,就是很多域名的注册修改以及使用都跟国家政策相关。 .ai域名自1995年就已存在&…...

SonarQube中文插件离线安装全攻略:从下载到配置详解

1. 为什么需要离线安装SonarQube中文插件 很多开发团队在使用SonarQube进行代码质量分析时,都会遇到一个共同的需求:如何让这个强大的工具更好地支持中文。虽然SonarQube本身提供了多语言支持,但默认情况下并不包含完整的中文翻译。这时候&am…...

为什么你的Playnite便携版越来越慢?3步焕新指南

为什么你的Playnite便携版越来越慢?3步焕新指南 【免费下载链接】Playnite Video game library manager with support for wide range of 3rd party libraries and game emulation support, providing one unified interface for your games. 项目地址: https://g…...

别等2027!SITS2026刚公布的AI设计模式生成三阶演进路径,第2阶段已进入GA,仅剩最后47天适配窗口期

第一章:SITS2026演讲:AI设计模式生成 2026奇点智能技术大会(https://ml-summit.org) 在SITS2026主会场,来自MIT CSAIL与DeepMind联合团队的Keynote演讲首次系统性地展示了AI原生设计模式(AI-Native Design Patterns)…...

OV5640摄像头模组研究

OV5640是一款由OmniVision(豪威科技)公司生产的高性能500万像素CMOS图像传感器,凭借其卓越的成像质量、灵活的接口配置和丰富的功能特性,已成为嵌入式视觉系统、智能监控设备和机器人技术等领域的热门选择。作为一款1/4英寸光学格式的传感器,OV5640支持多种分辨率(最高25…...

告别杂音:实测Facebook Denoiser(PyTorch版)在视频会议、录音笔场景下的降噪效果

告别杂音:实测Facebook Denoiser(PyTorch版)在视频会议、录音笔场景下的降噪效果 远程会议中突如其来的键盘敲击声,录音笔里混入的空调嗡鸣,或是播客背景中挥之不去的交通噪音——这些声音污染正在摧毁我们的听觉体验。…...

3步掌握Excalidraw:轻松创建手绘风格图表

3步掌握Excalidraw:轻松创建手绘风格图表 【免费下载链接】excalidraw Virtual whiteboard for sketching hand-drawn like diagrams 项目地址: https://gitcode.com/GitHub_Trending/ex/excalidraw Excalidraw是一款开源的虚拟白板工具,专为创建…...

告别报表拼接!用Oracle的LISTAGG和PIVOT,5分钟搞定多行数据合并展示

5分钟极速报表革命:Oracle高级聚合技巧实战手册 每次月底赶报表时,最让你抓狂的是什么?是反复复制粘贴的Excel操作,还是不断调整的单元格格式?我曾见过一位财务同事为了合并20个审批人的名单,花了半小时手动…...

2026届最火的六大AI科研方案实际效果

Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 借助人工智能辅助撰写开题报告,得严格依照结构化流程来进行。开始,要…...

用PyTorch复现SRCNN:三行代码理解深度学习超分的起点(附完整训练脚本)

用PyTorch复现SRCNN:三行代码理解深度学习超分的起点(附完整训练脚本) 当你第一次看到低分辨率的老照片时,是否想过用技术手段让它重获新生?这就是图像超分辨率技术的魅力所在。SRCNN作为深度学习在该领域的开山之作&a…...

Ultrascale SelectIO 仿真实战:ISERDESE3与OSERDESE3的时钟域与数据流协同设计

1. Ultrascale SelectIO接口设计基础 在Xilinx Ultrascale架构中,SelectIO接口是实现高速串行通信的关键模块。我第一次接触ISERDESE3和OSERDESE3时,就被它们强大的时钟域处理能力所震撼。简单来说,ISERDESE3负责将高速串行数据转换为并行数据…...

为什么92%的DevOps团队尚未启用生成代码安全门禁?——一份被头部金融客户验证的SAST+IAST融合检查清单

第一章:智能代码生成代码安全性检查 2026奇点智能技术大会(https://ml-summit.org) 随着大语言模型在开发流程中深度集成,智能代码生成工具(如Copilot、CodeWhisperer、Tabnine)已广泛用于函数补全、单元测试编写与API集成。但自…...

DolphinScheduler 集群模式部署实战:从零搭建高可用调度系统

1. 为什么选择DolphinScheduler集群模式 第一次接触任务调度系统时,我像大多数开发者一样选择了单机版。但当工作流数量突破50个后,频繁出现任务堆积和服务器卡顿。这时候才真正理解官方文档里那句"生产环境必须使用集群部署"的含义——这不是…...

别再手动抄数据了!用Python+SCPI协议5分钟搞定功率计数据自动采集(以PA300为例)

用PythonSCPI协议实现功率计数据自动采集的高效方案 每次测试都要守在仪器前手动记录数据?还在为数据录入错误而反复核对?工程师的时间不该浪费在这些重复劳动上。今天我们就以PA300功率计为例,手把手教你用PythonSCPI协议搭建自动化数据采集…...

从Copilot到CodeRover,智能生成与语义搜索深度耦合的7层技术栈全拆解,一线大厂内部文档首次公开

第一章:智能代码生成与代码搜索融合的范式革命 2026奇点智能技术大会(https://ml-summit.org) 传统开发流程中,代码生成与代码搜索长期处于割裂状态:前者依赖上下文提示生成新逻辑,后者则在已有代码库中检索相似片段。如今&…...

面试官最爱问的Redis缓存三兄弟:雪崩、穿透、击穿,我用外卖订单场景给你讲明白

外卖系统高并发实战:Redis缓存三兄弟的解决方案 中午12点,某外卖平台的订单量突然激增,系统开始出现响应延迟。用户反复刷新页面却看到"网络开小差"的提示,而商家后台则不断弹出"订单查询失败"的报警。这熟悉…...

Proteus仿真+C51汇编:从零搭建单片机最小系统(新手实践)

1. 准备工作:软件安装与环境配置 第一次接触单片机开发的朋友可能会被各种专业软件吓到,但其实只要跟着步骤一步步来,很快就能上手。我刚开始学51单片机的时候,光是装软件就折腾了半天,现在把这些经验都总结给你。 首先…...

Artifactory OSS实战:不止于搭建,教你用Gradle插件一键发布Android AAR到私有仓库

Artifactory OSS实战:Gradle插件自动化发布Android AAR全流程指南 当团队开始采用组件化架构时,如何高效管理内部模块的二进制依赖成为关键痛点。想象这样一个场景:你刚完成公司支付SDK 1.0版本的开发,现在需要让其他五个业务团队…...

树莓派5B到手后,别急着点亮LED,先搞定这三件小事(VSCode远程+换源+SSH密钥)

树莓派5B开箱必做三件事:高效开发环境搭建指南 刚拿到树莓派5B的兴奋感,就像孩子拿到新玩具一样迫不及待想点亮第一个LED。但别急,工欲善其事必先利其器——这三个看似简单的配置步骤,能让你的开发效率提升300%。我曾在凌晨三点调…...

MAA自动化助手:明日方舟玩家的终极解放方案

MAA自动化助手:明日方舟玩家的终极解放方案 【免费下载链接】MaaAssistantArknights 《明日方舟》小助手,全日常一键长草!| A one-click tool for the daily tasks of Arknights, supporting all clients. 项目地址: https://gitcode.com/G…...

CentOS 7.6离线安装Perl全攻略:27个核心依赖包清单与一键安装命令

CentOS 7.6离线安装Perl全流程实战指南 在金融、军工等对网络安全要求极高的行业场景中,服务器通常运行在完全隔离的内网环境。上周为某银行数据中心部署日志分析系统时,就遇到了必须在无外网连接的CentOS 7.6服务器上安装Perl运行环境的挑战。与在线安…...

Linux 误删文件自救指南:从绝望到恢复的全过程

1. 当误删发生时:从恐慌到冷静的技术自救 "手滑误删"可能是每个Linux用户最不愿面对的噩梦。上周我就亲身经历了这样的惊魂时刻——在VSCode里批量删除临时文件时,不小心把写了三天的Nginx配置也送进了黑洞。那一瞬间,后背发凉、心…...

【凌晨2点被攻破的AI生成接口】:一个未校验的正则表达式如何引发RCE——生成代码安全检查黄金48小时响应协议

第一章:智能代码生成代码安全性检查 2026奇点智能技术大会(https://ml-summit.org) 智能代码生成工具(如Copilot、CodeWhisperer、Tabnine)在提升开发效率的同时,可能引入未经验证的安全隐患——包括硬编码密钥、不安全的反序列化…...

Qt桌面应用实战:集成YOLOv8 ONNX模型,实现摄像头/视频文件的实时目标检测与界面显示

Qt桌面应用实战:集成YOLOv8 ONNX模型实现高效目标检测 在智能视觉应用开发领域,如何将前沿的深度学习模型无缝集成到成熟的桌面框架中,是许多开发者面临的现实挑战。本文将深入探讨基于Qt框架构建一个支持实时目标检测的桌面应用,…...