LangChain Reference home pageLangChain ReferenceLangChain Reference
  • GitHub
  • Main Docs
Deep Agents
LangChain
LangGraph
Integrations
LangSmith
  • Overview
  • MCP Adapters
    • Overview
    • Agents
    • Callbacks
    • Chains
    • Chat models
    • Embeddings
    • Evaluation
    • Globals
    • Hub
    • Memory
    • Output parsers
    • Retrievers
    • Runnables
    • LangSmith
    • Storage
    Standard Tests
    Text Splitters
    ⌘I

    LangChain Assistant

    Ask a question to get started

    Enter to send•Shift+Enter new line

    Menu

    MCP Adapters
    OverviewAgentsCallbacksChainsChat modelsEmbeddingsEvaluationGlobalsHubMemoryOutput parsersRetrieversRunnablesLangSmithStorage
    Standard Tests
    Text Splitters
    Language
    Theme
    Pythonlangchain-classicagentsxmlbasecreate_xml_agent
    Function●Since v1.0

    create_xml_agent

    Create an agent that uses XML to format its logic.

    Copy
    create_xml_agent(
      llm: BaseLanguageModel,
      tools: Sequence[BaseTool],
      prompt: BasePromptTemplate,
      tools_renderer: ToolsRenderer = render_text_description,
      *,
      stop_sequence: bool | list[str] = True
    ) -> Runnable

    Example:

    from langchain_classic import hub
    from langchain_anthropic import ChatAnthropic
    from langchain_classic.agents import AgentExecutor, create_xml_agent
    
    prompt = hub.pull("hwchase17/xml-agent-convo")
    model = ChatAnthropic(model="claude-3-haiku-20240307")
    tools = ...
    
    agent = create_xml_agent(model, tools, prompt)
    agent_executor = AgentExecutor(agent=agent, tools=tools)
    
    agent_executor.invoke({"input": "hi"})
    
    # Use with chat history
    from langchain_core.messages import AIMessage, HumanMessage
    
    agent_executor.invoke(
        {
            "input": "what's my name?",
            # Notice that chat_history is a string
            # since this prompt is aimed at LLMs, not chat models
            "chat_history": "Human: My name is Bob\nAI: Hello Bob!",
        }
    )

    Prompt:

    The prompt must have input keys: * tools: contains descriptions for each tool. * agent_scratchpad: contains previous agent actions and tool outputs as an XML string.

    Here's an example:

    from langchain_core.prompts import PromptTemplate
    
    template = '''You are a helpful assistant. Help the user answer any questions.
    
    You have access to the following tools:
    
    {tools}
    
    In order to use a tool, you can use <tool></tool> and <tool_input></tool_input> tags. You will then get back a response in the form <observation></observation>
    For example, if you have a tool called 'search' that could run a google search, in order to search for the weather in SF you would respond:
    
    <tool>search</tool><tool_input>weather in SF</tool_input>
    <observation>64 degrees</observation>
    
    When you are done, respond with a final answer between <final_answer></final_answer>. For example:
    
    <final_answer>The weather in SF is 64 degrees</final_answer>
    
    Begin!
    
    Previous Conversation:
    {chat_history}
    
    Question: {input}
    {agent_scratchpad}'''
    prompt = PromptTemplate.from_template(template)

    Parameters

    NameTypeDescription
    llm*BaseLanguageModel

    LLM to use as the agent.

    tools*Sequence[BaseTool]

    Tools this agent has access to.

    prompt*BasePromptTemplate

    The prompt to use, must have input keys tools: contains descriptions for each tool. agent_scratchpad: contains previous agent actions and tool outputs.

    tools_rendererToolsRenderer
    Default:render_text_description

    This controls how the tools are converted into a string and then passed into the LLM.

    stop_sequencebool | list[str]
    Default:True

    bool or list of str. If True, adds a stop token of "</tool_input>" to avoid hallucinates. If False, does not add a stop token. If a list of str, uses the provided list as the stop tokens.

    You may to set this to False if the LLM you are using does not support stop sequences.

    View source on GitHub