🚀 使用LangGraph构建智能聊天机器人技术解析

LangGraph Banner

本文将带您逐步实现一个具备多模态能力的智能聊天机器人,涵盖状态管理工具调用持久化记忆人机协作等核心功能。以下是完整技术方案解析:


📚 目录

  1. 架构概述
  2. 环境配置
  3. 基础对话实现
  4. 增强搜索能力
  5. 记忆持久化
  6. 人工审核机制
  7. 状态热更新
  8. 部署建议

🏗️ 架构概述

系统架构图

本系统实现以下核心能力:

  • ✅ 多轮次对话状态管理
  • ✅ 实时网络搜索集成
  • ✅ 对话历史持久化
  • ✅ 人工审核介入机制
  • ✅ 运行时状态热更新

⚙️ 环境配置

依赖安装

1
2
3
4
%%capture --no-stderr
%pip install -U langgraph langsmith
%pip install -U langchain_anthropic
%pip install -U tavily-python

API密钥设置

1
2
3
4
5
6
7
8
9
10
11
12
13
import getpass
import os

def _set_env(var: str):
if not os.environ.get(var):
os.environ[var] = getpass.getpass(f"{var}: ")

_set_env("ANTHROPIC_API_KEY")
_set_env("LANGSMITH_API_KEY")
_set_env("TAVILY_API_KEY")

os.environ["LANGCHAIN_TRACING_V2"] = "true"
os.environ["LANGCHAIN_PROJECT"] = "LangGraph高级教程"

🤖 基础对话实现

状态机定义

1
2
3
4
5
6
7
8
from typing import Annotated
from langgraph.graph import StateGraph
from langgraph.graph.message import add_messages

class ChatState(TypedDict):
messages: Annotated[list, add_messages]

graph_builder = StateGraph(ChatState)

对话节点配置

1
2
3
4
5
6
7
8
9
from langchain_anthropic import ChatAnthropic

llm = ChatAnthropic(model="claude-3-haiku-20240307")

def chatbot_node(state: ChatState):
return {"messages": [llm.invoke(state["messages"])]}

graph_builder.add_node("chatbot", chatbot_node)
graph_builder.add_edge("chatbot", END)

🔍 增强搜索能力

搜索工具集成

1
2
3
4
from langchain_community.tools.tavily_search import TavilySearchResults

search_tool = TavilySearchResults(max_results=3)
llm_with_tools = llm.bind_tools([search_tool])

工具路由机制

1
2
3
4
5
6
7
8
9
10
11
from langgraph.prebuilt import ToolNode, tools_condition

tool_node = ToolNode([search_tool])
graph_builder.add_node("search", tool_node)

graph_builder.add_conditional_edges(
"chatbot",
tools_condition,
{ "search": "search", "END": END }
)
graph_builder.add_edge("search", "chatbot")

🧠 记忆持久化

记忆存储方案

1
2
3
4
from langgraph.checkpoint.sqlite import SqliteSaver

memory = SqliteSaver.from_conn_string(":memory:")
graph = graph_builder.compile(checkpointer=memory)

多会话管理

1
2
3
4
5
# 创建新会话
config = {"configurable": {"thread_id": "session_01"}}

# 恢复历史会话
history = graph.get_state(config)

👥 人工审核机制

审核点配置

1
2
3
4
graph = graph_builder.compile(
checkpointer=memory,
interrupt_before=["search"],
)

人工审批流程

1
2
3
4
5
6
def human_approve(action):
print(f"待审核操作:{action}")
return input("是否批准?(y/n): ").lower() == "y"

if human_approve(pending_action):
graph.update_state(config, approved_response)

🔧 状态热更新

实时状态修改

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
from langchain_core.messages import AIMessage, ToolMessage

new_messages = [
ToolMessage(
content=updated_info,
tool_call_id=existing_call
),
AIMessage(content=approved_response)
]

graph.update_state(
config,
{"messages": new_messages},
as_node="chatbot"
)

🚀 部署建议

  1. 性能优化

    • 启用Redis缓存层
    • 实现异步处理队列
    • 添加限流熔断机制
  2. 安全增强

    1
    2
    3
    4
    5
    6
    # 敏感词过滤示例
    SAFETY_FILTER = SafetyFilter()

    def safe_response(state):
    response = llm.invoke(state)
    return SAFETY_FILTER.scan(response)
  3. 监控方案

    • 接入Prometheus指标
    • 实现LangSmith全链路追踪
    • 配置异常报警机制

📌 资源推荐

提示:所有代码示例需在实际环境中测试后使用,建议通过LangSmith进行全流程调试

通过本方案,您可以构建出具备持续学习能力和安全管控的企业级对话系统。欢迎在评论区交流实战经验! 💬