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

LangGraph--搭建官方机器人聊天(带工具的)教程

请设置正确你的deepseek的key,最近无法免费使用了,所以你需要充钱,然后获取key,key就是到官网注册账号,根据这个key进行计费的,所以需要保管好,其他key类似的,不明白的请百度吧,下面将直接上代码了:

from typing import Annotatedfrom langchain_deepseek import ChatDeepSeek
from langchain_tavily import TavilySearch
from langchain_core.messages import BaseMessage
from typing_extensions import TypedDictfrom langgraph.graph import StateGraph
from langgraph.graph.message import add_messages
from langgraph.prebuilt import ToolNode, tools_conditionfrom langchain.chat_models import init_chat_modelimport os 
from dotenv import load_dotenv# 加载.env文件中的环境变量
load_dotenv()class State(TypedDict):messages:Annotated[list, add_messages]graph_builder = StateGraph(State)# llm = init_chat_model(
#     "deepseek-chat",  # 使用DeepSeek模型
#     api_key=os.environ.get("DEEPSEEK_API_KEY")
# )llm = ChatDeepSeek(model="deepseek-chat",api_key=os.getenv("DEEPSEEK_API_KEY"))
# mess = llm.invoke(input = "你是谁?")# 初始化搜索工具
tool = TavilySearch(max_results=2)
tools =[tool]# 将工具绑定到llm中
llm_with_tools = llm.bind_tools(tools)
def chatbot(state:State):return {"messages":[llm_with_tools.invoke(state["messages"])]}# 添加聊天机器人节点
graph_builder.add_node("chatbot",chatbot)
# 添加工具节点
tool_node = ToolNode(tools=[tool])
graph_builder.add_node("tools",tool_node)
# 添加条件边
graph_builder.add_conditional_edges("chatbot",tools_condition)# 工具调用完成后,返回聊天机器人节点
graph_builder.add_edge("tools","chatbot")
graph_builder.set_entry_point("chatbot")
graph =graph_builder.compile()# 打印图结构
print(graph.get_graph().draw_mermaid())
graph_png = graph.get_graph().draw_mermaid_png()
with open("chatbot_workflow.png", "wb") as f:f.write(graph_png)def stream_graph_updates(user_input:str):for event in graph.stream({"messages": [{"role": "user", "content": user_input}]}):for value in event.values():print("Assistant:", value["messages"][-1].content)while True:try:user_input = input("User: ")if user_input.lower() in ["quit", "exit", "q"]:print("Goodbye!")breakstream_graph_updates(user_input)except KeyboardInterrupt:print("\nGoodbye!")breakprint("done")

这里我们导入了必要的库,包括:

  • typing 和 typing_extensions 用于类型注释
  • langchain.chat_models 用于初始化聊天模型
  • langgraph.graph 提供了构建状态图的核心组件
  • os 和 dotenv 用于环境变量管理
加载环境变量
load_dotenv()

这行代码会从项目根目录的 .env 文件中加载环境变量,包括我们的 DEEPSEEK_API_KEY。不懂的仔细百度这个函数和库,学习一下啊

其他的代码中都有注释

我们成功地增强了聊天机器人,使其具备了使用外部工具的能力。通过集成Tavily搜索API,我们的聊天机器人现在可以:

  1. 识别需要外部信息的问题
  2. 自动调用搜索工具获取相关信息
  3. 处理搜索结果并生成基于这些信息的回答

这种增强极大地扩展了聊天机器人的能力范围,使其不再局限于模型的训练数据。

我们还学习了LangGraph的几个重要概念:

  1. 工具绑定(Tool Binding):通过bind_tools方法将工具与LLM集成
  2. 预构建组件:使用ToolNodetools_condition简化工具处理
  3. 条件边:根据状态动态决定执行流程
  4. 循环流程:创建包含循环的复杂工作流

文章转载自:

http://w0sTBgUo.kjcLL.cn
http://plbTLUG0.kjcLL.cn
http://4WGCLQcG.kjcLL.cn
http://s3kPeaGb.kjcLL.cn
http://pSas2wMZ.kjcLL.cn
http://VcpoosZd.kjcLL.cn
http://BsPjANg5.kjcLL.cn
http://48ZNRcw6.kjcLL.cn
http://3SBb6Y7I.kjcLL.cn
http://XvXWSOui.kjcLL.cn
http://GpQxCzlg.kjcLL.cn
http://jQzrfrIp.kjcLL.cn
http://SKW79jKi.kjcLL.cn
http://8CdfduRZ.kjcLL.cn
http://4nPU5Xo9.kjcLL.cn
http://Z1ppa1Ji.kjcLL.cn
http://CQHT7trk.kjcLL.cn
http://23JcSJpC.kjcLL.cn
http://DVmE8ZYq.kjcLL.cn
http://2Afbbu32.kjcLL.cn
http://z4H1AAbd.kjcLL.cn
http://VMG6vNDT.kjcLL.cn
http://bKHi0eO1.kjcLL.cn
http://gS3EmrVm.kjcLL.cn
http://F0wslBq1.kjcLL.cn
http://ulWSPUzt.kjcLL.cn
http://Im2l2RQe.kjcLL.cn
http://8mg5LkGv.kjcLL.cn
http://4VlnOP4d.kjcLL.cn
http://I6DcbZ0h.kjcLL.cn
http://www.dtcms.com/a/246888.html

相关文章:

  • Hibernate ORM框架开发指南
  • 自定义线程池 3.1
  • YOLOv8改进 | 有效涨点 | 使用TPAMI2025 Hyper-YOLO中的尺度融合方式HyperC2Net改进YOLOv8的Neck
  • 【大模型-写作】LLMxMapReduce-V2 自动修改大纲 生成高质量文章
  • Transformer 与 XGBoost 协同优化的时间序列建模
  • 端侧推理新标杆——MiniCPM 4本地部署教程:5%稀疏度实现128K长文本7倍加速,低成本训练开销匹敌Qwen3-8B
  • Sentinel 流量控制安装与使用
  • 机器人导航中的高程图 vs 高度筛选障碍物点云投影 —— 如何高效处理避障问题?
  • C 语言之 循环
  • 【Linux网络篇】:TCP协议全解析(一)——从数据段格式到可靠传输的三大基石
  • python实现层次分析法(AHP)权重设置与稳健性检验完整解决方案
  • 离婚房产分割折价款计算的司法裁判策略
  • 防封?避坑?青否数字人直播系统如何做到稳定直播?zhibo175
  • 请问黑盒测试和白盒测试有哪些方法?
  • map与set的模拟实现
  • 25.6.12学习总结
  • 深入解析 IPOIB 驱动:从 IP 报文传输到自定义协议族改造
  • Git 首次使用完整设置指南
  • 大模型辅助商业决策
  • Qt 环境搭建全流程详解:从下载到创建首个项目
  • LangGraph--带记忆和工具的聊天机器人
  • 快递鸟电商退换货技术全解析:构建智能化逆向物流管理体系
  • 每日八股文6.12
  • AS610x奇力科技电池管理系统(BMS)模拟前端(AFE)
  • 黑马点评面试话术
  • 汽车电池智造关键一环!DeviceNet转Modbus RTU网关的实战突围
  • 【阿里巴巴 x 浙江大学】信息与交互设计 - 交互设计原则与思维
  • Python基于Django的棉花数据平台建设与可视化系统【附源码、文档说明】
  • QT+VTK 中QWidget与QVTKOpenGLNativeWidget的使用
  • 下载量飙升153.6%,《Solvely》如何成为出海AI教育应用新晋“黑马“?