|
|
from langchain.agents import create_xml_agent |
|
|
from langchain_core.prompts import ChatPromptTemplate, HumanMessagePromptTemplate, PromptTemplate |
|
|
|
|
|
from langflow.base.agents.agent import LCToolsAgentComponent |
|
|
from langflow.inputs import MultilineInput |
|
|
from langflow.inputs.inputs import DataInput, HandleInput |
|
|
from langflow.schema import Data |
|
|
|
|
|
|
|
|
class XMLAgentComponent(LCToolsAgentComponent): |
|
|
display_name: str = "XML Agent" |
|
|
description: str = "Agent that uses tools formatting instructions as xml to the Language Model." |
|
|
icon = "LangChain" |
|
|
beta = True |
|
|
name = "XMLAgent" |
|
|
inputs = [ |
|
|
*LCToolsAgentComponent._base_inputs, |
|
|
HandleInput(name="llm", display_name="Language Model", input_types=["LanguageModel"], required=True), |
|
|
DataInput(name="chat_history", display_name="Chat History", is_list=True, advanced=True), |
|
|
MultilineInput( |
|
|
name="system_prompt", |
|
|
display_name="System Prompt", |
|
|
info="System prompt for the agent.", |
|
|
value="""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! |
|
|
|
|
|
Question: {input} |
|
|
|
|
|
{agent_scratchpad} |
|
|
""", |
|
|
), |
|
|
MultilineInput( |
|
|
name="user_prompt", display_name="Prompt", info="This prompt must contain 'input' key.", value="{input}" |
|
|
), |
|
|
] |
|
|
|
|
|
def get_chat_history_data(self) -> list[Data] | None: |
|
|
return self.chat_history |
|
|
|
|
|
def create_agent_runnable(self): |
|
|
if "input" not in self.user_prompt: |
|
|
msg = "Prompt must contain 'input' key." |
|
|
raise ValueError(msg) |
|
|
messages = [ |
|
|
("system", self.system_prompt), |
|
|
("placeholder", "{chat_history}"), |
|
|
HumanMessagePromptTemplate(prompt=PromptTemplate(input_variables=["input"], template=self.user_prompt)), |
|
|
("ai", "{agent_scratchpad}"), |
|
|
] |
|
|
prompt = ChatPromptTemplate.from_messages(messages) |
|
|
return create_xml_agent(self.llm, self.tools, prompt) |
|
|
|