LangGraph Agent with Maxim Observability wihout using Decorators
Creating a LangGraph agent with Tavily Search API and observing it using Maxim Single Line Integration
This doc demonstrates how to use the Tavily search API with LangChain and LangGraph to create an
agent that can search for information on the web. The agent uses either OpenAI or Anthropic models
to process the search results and generate responses.
Define the function that determines whether to continue or not
Copy
Ask AI
def should_continue(state): messages = state["messages"] last_message = messages[-1] # If there are no tool calls, then we finish if not last_message.tool_calls: return "end" # Otherwise if there is, we continue else: return "continue"system_prompt = """Be a helpful assistant"""
def call_model(state, config): messages = state["messages"] messages = [{"role": "system", "content": system_prompt}] + messages model_name = config.get("configurable", {}).get("model_name", "anthropic") model = _get_model(model_name) response = model.invoke(messages) # We return a list, because this will get added to the existing list return {"messages": [response]}
workflow = StateGraph(AgentState, config_schema=GraphConfig)# Define the two nodes we will cycle betweenworkflow.add_node("agent", call_model)workflow.add_node("action", tool_node)# Set the entrypoint as `agent`# This means that this node is the first one calledworkflow.set_entry_point("agent")# We now add a conditional edgeworkflow.add_conditional_edges( # First, we define the start node. We use `agent`. # This means these are the edges taken after the `agent` node is called. "agent", # Next, we pass in the function that will determine which node is called next. should_continue, # Finally we pass in a mapping. # The keys are strings, and the values are other nodes. # END is a special node marking that the graph should finish. # What will happen is we will call `should_continue`, and then the output of that # will be matched against the keys in this mapping. # Based on which one it matches, that node will then be called. { # If `tools`, then we call the tool node. "continue": "action", # Otherwise we finish. "end": END, },)# We now add a normal edge from `tools` to `agent`.# This means that after `tools` is called, `agent` node is called next.workflow.add_edge("action", "agent")