06. Human-in-the-loop (human intervention)
# Configuration file for managing API keys as environment variables
from dotenv import load_dotenv
# Load API key information
load_dotenv()True# LangSmith set up tracking. https://smith.langchain.com
# !pip install -qU langchain-teddynote
from langchain_teddynote import logging
# Enter a project name.
logging.langsmith("CH17-LangGraph-Modules")Start tracking LangSmith.
[project name]
CH17-LangGraph-Modulesfrom typing import Annotated, List, Dict
from typing_extensions import TypedDict
from langchain_core.tools import tool
from langchain_openai import ChatOpenAI
from langgraph.checkpoint.memory import MemorySaver
from langgraph.graph import StateGraph, START, END
from langgraph.graph.message import add_messages
from langgraph.prebuilt import ToolNode, tools_condition
from langchain_teddynote.graphs import visualize_graph
from langchain_teddynote.tools import GoogleNews
########## 1. state definition ##########
# state definition
class State(TypedDict):
# add a message list comment
messages: Annotated[list, add_messages]
########## 2. Tool definition and binding ##########
# Initialize tool
# Create a tool to search news by keyword
news_tool = GoogleNews()
@tool
def search_keyword(query: str) -> List[Dict[str, str]]:
"""Look up news by keyword"""
news_tool = GoogleNews()
return news_tool.search_by_keyword(query, k=5)
tools = [search_keyword]
# LLM Initialization
llm = ChatOpenAI(model="gpt-4o-mini")
# Combining tools and LLM
llm_with_tools = llm.bind_tools(tools)
########## 3. add note ##########
# Defining a chatbot function
def chatbot(state: State):
# Calling and returning messages
return {"messages": [llm_with_tools.invoke(state["messages"])]}
# create a state graph
graph_builder = StateGraph(State)
# Add a chatbot node
graph_builder.add_node("chatbot", chatbot)
# Creating and adding tool nodes
tool_node = ToolNode(tools=tools)
# Add tool node
graph_builder.add_node("tools", tool_node)
# Conditional Edge
graph_builder.add_conditional_edges(
"chatbot",
tools_condition,
)
########## 4. add edge ##########
# tools > chatbot
graph_builder.add_edge("tools", "chatbot")
# START > chatbot
graph_builder.add_edge(START, "chatbot")
# chatbot > END
graph_builder.add_edge("chatbot", END)
########## 5. Add MemorySaver ##########
# Initialize memory storage
memory = MemorySaver()
Last updated