LangGraph 智能体状态管理与决策

LangGraph 智能体状态管理与决策

LangGraph 智能体状态管理与决策


请添加图片描述

🌌你好!这里是 晓雨的笔记本在所有感兴趣的领域扩展知识,感谢你的陪伴与支持~👋 欢迎添加文末好友,不定期掉落福利资讯


写在最前面

版权声明:本文为原创,遵循 CC 4.0 BY-SA 协议。转载请注明出处。

本次演示围绕 Bright Data Web MCP 与 LangGraph 的集成实操 展开,完整展示了从获取大模型 API Key、创建大模型会话,到获取 Bright Data API Key、通过 MultiServerMCPClient 连接 Web MCP 服务器,并在 Bright Data 后台进一步启用浏览器自动化工具、扩展智能体可调用能力的全流程;同时结合 LangGraph 的 StateGraph,搭建了包含大模型节点、工具调用节点和路由规则节点的循环式 AI 研究智能体。演示过程中,通过“打开网页并持续滚动,直到提取 30 条语录的作者、内容与标签”这一实际任务,直观呈现了智能体基于实时网页数据进行搜索、抓取、交互和推理的完整效果。实测结果表明,LangGraph 提供了清晰可控的智能体状态管理与决策机制,而 Bright Data Web MCP 则补足了真实网页访问与动态页面交互能力,使 AI Agent 无需将复杂抓取逻辑硬编码进提示词或业务代码中,也能更稳定地完成生产级研究任务。

赠送25美金的注册链接

LangGraph 智能体状态管理与决策

 from __future__ import annotations import argparse import asyncio import json import os import sys from typing import Any, Literal from urllib.parse import urlencode from dotenv import load_dotenv from langchain_core.messages import HumanMessage, SystemMessage, ToolMessage from langchain_openai import ChatOpenAI from langchain_mcp_adapters.client import MultiServerMCPClient from langgraph.graph import END, START, MessagesState, StateGraph # webmcp-langgraph-demo.py file SYSTEM_PROMPT ="""You are a web research assistant. Task: - Research the user's topic using Google search results and a few sources. - Return 6–10 simple bullet points. - Add a short "Sources:" list with only the URLs you used. How to use tools: - First call the search tool to get Google results. - Select 3–5 reputable results and scrape them. - If scraping fails, try a different result. Constraints: - Use at most 5 sources. - Prefer official docs or primary sources. - Keep it quick: no deep crawling. """ def make_llm_call_node(llm_with_tools): async def llm_call(state: MessagesState): messages = [SystemMessage(content=SYSTEM_PROMPT)] + state["messages"] ai_message = await llm_with_tools.ainvoke(messages) return {"messages": [ai_message]} return llm_call def make_tool_node(tools_by_name: dict): async def tool_node(state: MessagesState): last_ai_msg = state["messages"][-1] tool_results = [] for tool_call in last_ai_msg.tool_calls: tool = tools_by_name.get(tool_call["name"]) if not tool: tool_results.append( ToolMessage( content=f"Tool not found: {tool_call['name']}", tool_call_id=tool_call["id"], ) ) continue # MCP tools are typically async observation = ( await tool.ainvoke(tool_call["args"]) if hasattr(tool, "ainvoke") else tool.invoke(tool_call["args"]) ) tool_results.append( ToolMessage( content=str(observation), tool_call_id=tool_call["id"], ) ) return {"messages": tool_results} return tool_node def should_continue(state: MessagesState) -> Literal["tool_node", END]: last_message = state["messages"][-1] if getattr(last_message, "tool_calls", None): return "tool_node" return END async def main(): # Load environment variables from .env load_dotenv() # Read Bright Data token bd_token = os.getenv("BRIGHTDATA_TOKEN") if not bd_token: raise ValueError("Missing BRIGHTDATA_TOKEN") # Connect to Bright Data Web MCP server client = MultiServerMCPClient({ "bright_data": { "url": f"https://mcp.brightdata.com/mcp?token={bd_token}", "transport": "streamable_http", } }) #&groups=advanced_scraping,browser # Fetch all available MCP tools (search, scrape, etc.) tools = await client.get_tools() tools_by_name = {tool.name: tool for tool in tools} print(f"Available tools: {list(tools_by_name.keys())}") # Debug: print available tool names # Initialize the LLM and allow it to call MCP tools openai_api_key = os.getenv("OPENAI_API_KEY") llm = ChatOpenAI(model="gpt-4o-all", temperature=0, api_key=openai_api_key, base_url="https://poloapi.top/v1",) llm_with_tools = llm.bind_tools(tools) # Build the LangGraph agent graph = StateGraph(MessagesState) graph.add_node("llm_call", make_llm_call_node(llm_with_tools)) graph.add_node("tool_node", make_tool_node(tools_by_name)) # Graph flow: # START → LLM → (tools?) → LLM → END graph.add_edge(START, "llm_call") graph.add_conditional_edges("llm_call", should_continue, ["tool_node", END]) graph.add_edge("tool_node", "llm_call") agent = graph.compile() # Example research query topic = "使用工具访问https://quotes.toscrape.com/scroll,想办法拿到30条quotes提取 quote、author、tags" # You can change this topic as needed # Run the agent result = await agent.ainvoke( { "messages": [ HumanMessage(content=f"Research this topic:\n{topic}") ] }, # Prevent infinite loops config={"recursion_limit": 50} ) # Print the final response print(result["messages"][-1].content) if __name__ == "__main__": asyncio.run(main())

hello,这里是 晓雨的笔记本 。如果你喜欢我的文章,欢迎三连给我鼓励和支持:👍点赞 📁 关注 💬评论,我会给大家带来更多有用有趣的文章。
原文链接 👉 ,⚡️更新更及时。

欢迎大家点开下面名片,添加好友交流。

Read more

【Java】2025 年 Java 学习路线:从入门到精通

【Java】2025 年 Java 学习路线:从入门到精通

文章目录 * 一、Java基础阶段(4-8周) * 1. 开发环境搭建 * 2. 核心语法基础 * 3. 面向对象编程(OOP) * 4. 核心类库 (Java SE API) * 5. 关联技术基础 * 二、Java 进阶阶段(6-10周) * 1. JVM 深度理解 * 2. 并发编程 - 应对高并发挑战 * 3. Java新特性 - 拥抱现代化 * 4. 设计模式 * 三、数据库与MySQL(2-3周) * 1. 环境搭建 * 2. SQL核心与进阶 * 3. 数据库设计与性能优化 * 四、开发框架与中间件(8-12周) * 1. Spring 生态

By Ne0inhk
Java 部署:Jenkins Pipeline 构建 Java 项目(自动化)

Java 部署:Jenkins Pipeline 构建 Java 项目(自动化)

👋 大家好,欢迎来到我的技术博客! 📚 在这里,我会分享学习笔记、实战经验与技术思考,力求用简单的方式讲清楚复杂的问题。 🎯 本文将围绕Java部署这个话题展开,希望能为你带来一些启发或实用的参考。 🌱 无论你是刚入门的新手,还是正在进阶的开发者,希望你都能有所收获! 文章目录 * Java 部署:Jenkins Pipeline 构建 Java 项目(自动化) 🚀 * 为什么选择 Jenkins Pipeline?🔧 * 环境准备:搭建 Jenkins 服务器 ⚙️ * 使用 Docker 快速启动 Jenkins * 安装必要插件 * 示例 Java 项目:一个简单的 Spring Boot 应用 🌱 * 项目结构 * `pom.xml` * `DemoApplication.java` * `HelloController.java` * 单元测试(可选但推荐) * 编写 Jenkins

By Ne0inhk
【Java 开发日记】我们来说一下 MySQL 的慢查询日志

【Java 开发日记】我们来说一下 MySQL 的慢查询日志

目录 一、什么是慢查询日志 二、核心作用 三、配置参数详解 四、开启和配置 1. 临时开启(重启失效) 2. 永久开启(修改配置文件) 五、慢查询日志格式分析 典型日志条目: 关键字段解释: 六、慢查询分析工具 1. mysqldumpslow(MySQL 自带) 2. pt-query-digest(Percona Toolkit) 3. mysqlslow(第三方工具) 七、慢查询日志表模式 启用表模式存储: 表结构: 八、最佳实践和优化建议 1. 阈值设置建议 2. 日志轮转配置 3. 定期分析计划 九、性能监控和告警 1. 监控慢查询数量 2. 慢查询告警脚本

By Ne0inhk

飞算JavaAI代码审查落地难题:90%团队忽略的4个关键细节

第一章:飞算JavaAI代码合规检查概述 飞算JavaAI代码合规检查是一款面向Java开发者的智能化代码质量管控工具,深度融合静态代码分析与人工智能技术,旨在提升代码安全性、可维护性与规范性。该工具不仅支持常见的编码规范检测(如阿里巴巴Java开发手册),还能基于AI模型识别潜在的业务逻辑缺陷和安全漏洞。 核心功能特点 * 智能规则引擎:内置数百条行业标准规则,覆盖命名规范、异常处理、并发控制等关键维度 * AI辅助诊断:通过机器学习模型分析历史缺陷数据,预测高风险代码段 * 实时反馈机制:在IDE插件中实现编码过程中的即时提示,提升修复效率 * 企业级策略管理:支持自定义规则集,满足不同组织的合规要求 典型使用场景 场景说明代码提交前检查集成至Git预提交钩子,阻止不合规代码入库CI/CD流水线集成作为构建阶段的质量门禁,确保上线代码符合标准团队代码评审辅助自动生成评审报告,聚焦关键问题点 快速接入示例 以下为Maven项目中引入飞算JavaAI检查插件的基本配置: <build> <plugins> <!-- 飞算JavaAI合规检查插件 -->

By Ne0inhk