Python 基于 LangGraph 搭建带记忆与人工干预的搜索机器人
Python 结合 LangGraph 框架构建智能聊天机器人,实现对话记忆、联网搜索及人工干预功能。集成 Tavily 工具进行实时信息检索,利用 LangSmith 追踪链路。通过 StateGraph 定义节点与边,配置环境变量加载 API Key。演示了用户查询商品价格触发搜索,以及特定场景下请求人工协助的完整流程,适合 Agent 开发入门参考。

Python 结合 LangGraph 框架构建智能聊天机器人,实现对话记忆、联网搜索及人工干预功能。集成 Tavily 工具进行实时信息检索,利用 LangSmith 追踪链路。通过 StateGraph 定义节点与边,配置环境变量加载 API Key。演示了用户查询商品价格触发搜索,以及特定场景下请求人工协助的完整流程,适合 Agent 开发入门参考。

本文介绍如何使用 Python 和 LangGraph 框架构建具备记忆功能、支持联网搜索及人工干预机制的智能聊天机器人。通过集成 Tavily 搜索工具和自定义中断逻辑,实现复杂任务处理与专业领域的人工接管。
pip install langgraph langchain-community langchain-openai tavily-python python-dotenv langsmith
base_url 和 model。在根目录创建 .env 文件:
ZHIPUAI_API_KEY=你的 apikey
TAVILY_API_KEY=Tavily APIKEY
LANGSMITH_TRACING=true
LANGSMITH_ENDPOINT=https://api.smith.langchain.com
LANGCHAIN_API_KEY=LangSmith 的 APIKEY
LANGSMITH_PROJECT="langgraph-agent"
from typing import Annotated
from typing_extensions import TypedDict
from langgraph.graph import StateGraph, START, END
from langgraph.graph.message import add_messages
import os
from dotenv import load_dotenv
from pathlib import Path
from langgraph.types import Command, interrupt
from langchain_core.tools import tool
from langchain_tavily import TavilySearch
from langchain.chat_models import init_chat_model
from langchain_core.messages import SystemMessage
# 加载环境变量
env_path = Path(__file__).parent.parent / ".env"
load_dotenv(dotenv_path=env_path)
class State(TypedDict):
messages: Annotated[list, add_messages]
# 定义人工干预工具
@tool
def human_assistance(query: str) -> str:
"""Request assistance from a human."""
human_response = interrupt({"query": query})
return human_response["data"]
# 定义搜索工具
tool = TavilySearch(max_results=2)
tools = [tool, human_assistance]
graph_builder = StateGraph(State)
# 初始化模型
llm = init_chat_model(
model="glm-5",
model_provider="openai",
model_kwargs={"base_url": "https://open.bigmodel.cn/api/paas/v4/"}
)
llm_with_tools = llm.bind_tools(tools)
SYSTEM_PROMPT = """你是一个智能助手,能够记住之前的对话内容。
## 工具使用规则
你可以使用以下工具:
1. tavily_search: 搜索互联网获取实时信息
2. human_assistance: 请求人工专家协助
## 何时必须调用 human_assistance 工具
以下情况你必须调用 human_assistance 工具请求人工专家协助,不要自己回答:
1. 医疗健康:症状诊断、用药建议、治疗方案
2. 法律咨询:合同审核、法律纠纷、法规解释
3. 金融理财:投资建议、税务规划、保险推荐
4. 用户明确要求:用户提到'专家'、'人工'、'专业人士'、'客服'等
5. 高风险决策:可能对用户造成重大影响的决定
6. 不明确答案:任何你不知道的答案,或者设计私有的回答
调用时,将用户的问题整理后作为 query 参数传递。"""
def chatbot(state: State):
messages = [SystemMessage(content=SYSTEM_PROMPT)] + state["messages"]
message = llm_with_tools.invoke(messages)
assert len(message.tool_calls) <= 1
return {"messages": [message]}
graph_builder.add_node("chatbot", chatbot)
from langgraph.prebuilt import ToolNode, tools_condition
tool_node = ToolNode(tools=tools)
graph_builder.add_node("tools", tool_node)
graph_builder.add_conditional_edges("chatbot", tools_condition)
graph_builder.add_edge("tools", "chatbot")
graph_builder.add_edge(START, "chatbot")
memory = InMemorySaver()
graph = graph_builder.compile(checkpointer=memory)
config = {"configurable": {"thread_id": "1"}}
def stream_graph_updates(user_input: str):
events = graph.stream({"messages": [{"role": "user", "content": user_input}]}, config, stream_mode="values")
for event in events:
if "messages" in event:
event["messages"][-1].pretty_print()
def check_and_resume_interrupt():
snapshot = graph.get_state(config)
if snapshot.next:
print("\n" + "="*50)
print("[人工干预请求] AI 需要您的专业协助!")
print("="*50)
if snapshot.values.get("messages"):
last_message = snapshot.values["messages"][-1]
print(f"AI 的问题:{last_message.content}")
human_response = input("请输入您的专业回复:")
human_command = Command(resume={"data": human_response})
events = graph.stream(human_command, config, stream_mode="values")
for event in events:
if "messages" in event:
event[][-].pretty_print()
(*)
()
()
(*)
:
:
check_and_resume_interrupt():
user_input = ()
user_input.lower() [, , ]:
()
stream_graph_updates(user_input)
check_and_resume_interrupt()
KeyboardInterrupt:
()
Exception e:
()
系统成功调用 Tavily 搜索工具,返回相关商品信息摘要。当用户提出涉及医疗、法律或明确要求转人工的问题时,流程会暂停并等待人工输入,随后恢复执行。
例如查询商品价格时,Agent 自动调用 Tavily 搜索京东实时数据;当用户询问手机故障维修政策并要求转人工时,触发 human_assistance 工具,控制台显示干预提示,输入回复后继续对话。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online