LangChain Agent bug when parsing tool inputs that use alias field names
Labels: name: area: agent, name: auto:bug

### System Info

Langchain: 0.0.349
Langchain-community: v0.0.1
Langchain-core: 0.0.13
Python: 3.12
Platform: Mac OS

### Who can help?

_No response_

### Information

- [ ] The official example notebooks/scripts
- [ ] My own modified scripts

### Related Components

- [ ] LLMs/Chat Models
- [ ] Embedding Models
- [ ] Prompts / Prompt Templates / Prompt Selectors
- [ ] Output Parsers
- [ ] Document Loaders
- [ ] Vector Stores / Retrievers
- [ ] Memory
- [ ] Agents / Agent Executors
- [X] Tools / Toolkits
- [ ] Chains
- [ ] Callbacks/Tracing
- [ ] Async

### Reproduction

I have the following BaseModel and BaseTool classes created.

```python
class TaskPost(BaseModel):
    """
    TaskPost
    """ # noqa: E501
    due_date: Optional[datetime] = Field(default=None, description="ISO 8601 Due date on the task. REQUIRED for scheduled tasks", alias="dueDate")
    duration: Optional[TaskDuration] = None
    status: Optional[StrictStr] = Field(default=None, description="Defaults to workspace default status.")
    auto_scheduled: Optional[AutoScheduledInfo] = Field(default=None, alias="autoScheduled")
    name: Annotated[str, Field(min_length=1, strict=True)] = Field(description="Name / title of the task")
    project_id: Optional[StrictStr] = Field(default=None, alias="projectId")
    workspace_id: StrictStr = Field(alias="workspaceId")
    description: Optional[StrictStr] = Field(default=None, description="Input as GitHub Flavored Markdown")
    priority: Optional[StrictStr] = 'MEDIUM'
    labels: Optional[List[StrictStr]] = None
    assignee_id: Optional[StrictStr] = Field(default=None, description="The user id the task should be assigned to", alias="assigneeId")
    __properties: ClassVar[List[str]] = ["dueDate", "duration", "status", "autoScheduled", "name", "projectId", "workspaceId", "description", "priority", "labels", "assigneeId"]

    model_config = {
        "populate_by_name": True,
        "validate_assignment": True
    }


class CreateTaskTool(BaseTool):
    name = "create_task"
    description = (
        """Use this to create a new task from all available args that you have. Always make sure date and time inputs are in ISO format""")
    args_schema: Type[BaseModel] = openapi_client.TaskPost
    verbose = True


```

The agent will use the alias names instead of the field name. i.e (workspaceId, dueDate) instead of (workspace_id, due_date)

```linux
[tool/start] [1:chain:AgentExecutor > 7:tool:create_task] Entering Tool run with input:
"{'name': 'Update code', 'workspaceId': 'xxxxxyyyyyzzzzz', 'dueDate': '2023-12-14T00:00:00'}"

```

When the agent calls  `_parse_input` function from [langchian_core/tools.py and reaches line 247](https://github.com/langchain-ai/langchain/blob/14bfc5f9f477fcffff3f9aa564a864c5d5cd5300/libs/core/langchain_core/tools.py#L247) the results are filtered out because the results have the field names and the tool_input has the alias names which do not match.

```
CreateTaskTool -> _parse_input -> parse_obj -> result: due_date=datetime.datetime(2023, 12, 14, 0, 0) duration=None status=None auto_scheduled=None name='Update code' project_id=None workspace_id='xxxxxyyyyyzzzzz' description=None priority='MEDIUM' labels=None assignee_id=None
CreateTaskTool -> _parse_input -> parse_obj -> result keys: dict_keys(['due_date', 'duration', 'status', 'auto_scheduled', 'name', 'project_id', 'workspace_id', 'description', 'priority', 'labels', 'assignee_id'])
CreateTaskTool -> _parse_input -> parse_obj -> tool_input keys: dict_keys(['name', 'workspaceId', 'dueDate'])
CreateTaskTool -> _parse_input -> parse_obj -> finalResults: {'name': 'Update code'}

```



### Expected behavior

```
CreateTaskTool -> _parse_input -> parse_obj -> result keys: dict_keys(['due_date', 'duration', 'status', 'auto_scheduled', 'name', 'project_id', 'workspace_id', 'description', 'priority', 'labels', 'assignee_id'])
CreateTaskTool -> _parse_input -> parse_obj -> tool_input keys: dict_keys(['name', 'workspaceId', 'dueDate'])
CreateTaskTool -> _parse_input -> finalResults: {'name': 'Update code','workspaceId': 'xxxxxyyyyyzzzzz', 'dueDate': '2023-12-14T00:00:00'}
or
CreateTaskTool -> _parse_input -> finalResults: {'name': 'Update code','workspace_Id': 'xxxxxyyyyyzzzzz', 'due_date': '2023-12-14T00:00:00'}

```