Issue: Passing multiple arbitrary parameters to a tool.
Labels: name: area: agent, name: auto:question

### Issue you'd like to raise.

I'm building an agent to interact with neo4j with a custom chain (I'm aware of the chains already implemented for this case), my problem comes when I try to pass multiple arbitrary arguments to my tool. What i want to know is how can I propagate arguments from the creation of the agent / tool, and how to propagate arguments thorugh the execution of the AgentExecutor. Here is my code so far.

I have a chain that I use as a tool:

```
class LLMCypherGraphChain(Chain, BaseModel):
    input_key: List[str] = ["question", "content_type"]
```
Then i create my AgentExecutor and use the initialize_agent method, I instanciate the class previously defined and use the run method as a function to execute.

```
class GraphAgent(AgentExecutor):
@classmethod
    def initialize(cls,...)
        cypher_tool = LLMCypherGraphChain(
            llm=llm,
            input_key=["question", "content_type"],
            graph=graph,
            verbose=verbose,
            memory=readonlymemory
        )

        # Load the tool configs that are needed.
        tools = [
            Tool(
                name="Cypher search",
                func=cypher_tool.run,
                description="""
                Utilize this tool to search within a database, specifically designed to answer x questions.
                This specialized tool offers streamlined search capabilities to help you find the movie information you need with ease.
                Input should be full question.""",  # noqa
            )
        ]

        agent_chain = initialize_agent(
            tools,
            llm,
            agent=AgentType.STRUCTURED_CHAT_ZERO_SHOT_REACT_DESCRIPTION,
            verbose=verbose,
            memory=memory,
            return_intermediate_steps=True
        )
    def run(self, *args, **kwargs):
        return super().run(*args, **kwargs)
```

So at this point I only need to instanciate the agent and run it. 

```
self.agent_executor = GraphAgent.initialize(
           ...
        )

res = self.agent_executor({"question": "my question",
                           "input": "my question",
                           "random_param": "my other param"})
```

So the problem is that I have this agent stored in a variable to avoid recreating it, that means self.agent_executor is only initialized once but then I want to be able to propagate the question and random_param to my tool.

I have seen some posts about passing parameters to tools but none of them actualy solved this problem. I am not sure if using agent_kwargs in the initialize_agent would be a solution (I'm not quiet sure how that propagates to the tools) but that only would happen once, when the instanciation is done. 

Right now Im getting this error, so I am not understanding how arguments are propagated:

ERROR:root:A single string input was passed in, but this chain expects multiple inputs ({'question', 'content_type'}). When a chain expects multiple inputs, please call it by passing in a dictionary, eg `chain({'foo': 1, 'bar': 2})`

Any help is appreciated! thanks!



### Suggestion:

_No response_