AIMessage in output of Qianfan with streaming enabled may lose info about 'additional_kwargs', which causes 'function_call', 'token_usage' info lost.
Labels: name: auto:bug, name: area: models

### System Info

LangChain: 0.0.336
Python: 3.11.6
OS: Microsoft Windows [Version 10.0.19045.3693]

### Who can help?

_No response_

### Information

- [ ] The official example notebooks/scripts
- [X] My own modified scripts

### Related Components

- [X] LLMs/Chat Models
- [ ] Embedding Models
- [ ] Prompts / Prompt Templates / Prompt Selectors
- [ ] Output Parsers
- [ ] Document Loaders
- [ ] Vector Stores / Retrievers
- [ ] Memory
- [ ] Agents / Agent Executors
- [ ] Tools / Toolkits
- [ ] Chains
- [ ] Callbacks/Tracing
- [ ] Async

### Reproduction

Should be very easy to reproduce. Just enable streaming and use function call in chat. Info about `function_call` supposed to be in `additional_kwargs` has lost. I found this issue because I wanted to use 'function call' feature.

These is a debug output from my console. As you see, output becomes an `AIMessage` with empty `content`,  and `additional_kwargs` is empty.

```
[llm/end] [1:chain:AgentExecutor > 2:llm:QianfanChatEndpoint] [2.39s] Exiting LLM run with output:
{
  "generations": [
    [
      {
        "text": "",
        "generation_info": {
          "finish_reason": "stop"
        },
        "type": "ChatGeneration",
        "message": {
          "lc": 1,
          "type": "constructor",
          "id": [
            "langchain",
            "schema",
            "messages",
            "AIMessage"
          ],
          "kwargs": {
            "content": "",
            "additional_kwargs": {}
          }
        }
      }
    ]
  ],
  "llm_output": {
    "token_usage": {},
    "model_name": "ERNIE-Bot"
  },
  "run": null
}
[chain/end] [1:chain:AgentExecutor] [2.40s] Exiting Chain run with output:
{
  "output": ""
}
```

A quick-and-dirty hack in `QianfanChatEndpoint` can fix the issue. Please read the following code related to `first_additional_kwargs` (which is added by me).

```python
    async def _agenerate(
        self,
        messages: List[BaseMessage],
        stop: Optional[List[str]] = None,
        run_manager: Optional[AsyncCallbackManagerForLLMRun] = None,
        **kwargs: Any,
    ) -> ChatResult:

        if self.streaming:
            completion = ""
            token_usage = {}
            first_additional_kwargs = None
            async for chunk in self._astream(messages, stop, run_manager, **kwargs):
                if first_additional_kwargs is None:
                    first_additional_kwargs = chunk.message.additional_kwargs
                completion += chunk.text

            lc_msg = AIMessage(content=completion, additional_kwargs=first_additional_kwargs or {})
            gen = ChatGeneration(
                message=lc_msg,
                generation_info=dict(finish_reason="stop"),
            )
            return ChatResult(
                generations=[gen],
                llm_output={"token_usage": {}, "model_name": self.model},
            )
        params = self._convert_prompt_msg_params(messages, **kwargs)
        response_payload = await self.client.ado(**params)
        lc_msg = _convert_dict_to_message(response_payload)
        generations = []
        gen = ChatGeneration(
            message=lc_msg,
            generation_info={
                "finish_reason": "stop",
                **response_payload.get("body", {}),
            },
        )
        generations.append(gen)
        token_usage = response_payload.get("usage", {})
        llm_output = {"token_usage": token_usage, "model_name": self.model}
        return ChatResult(generations=generations, llm_output=llm_output)

```

Similarly  `_generate` probably contains the same bug.

The following is the new debug output in console. As you can see, 'function call' now works. `additional_kwargs` also contains non-empty `usage`. But `token_usage` in `llm_output` is still empty.

```
[llm/end] [1:chain:AgentExecutor > 2:llm:QianfanChatEndpointHacked] [2.21s] Exiting LLM run with output:
{
  "generations": [
    [
      {
        "text": "",
        "generation_info": {
          "finish_reason": "stop"
        },
        "type": "ChatGeneration",
        "message": {
          "lc": 1,
          "type": "constructor",
          "id": [
            "langchain",
            "schema",
            "messages",
            "AIMessage"
          ],
          "kwargs": {
            "content": "",
            "additional_kwargs": {
              "id": "as-zh6tasbjyb",
              "object": "chat.completion",
              "created": 1700274407,
              "sentence_id": 0,
              "is_end": true,
              "is_truncated": false,
              "result": "",
              "need_clear_history": false,
              "function_call": {
                "name": "GetCurrentTime",
                "arguments": "{}"
              },
              "search_info": {
                "is_beset": 0,
                "rewrite_query": "",
                "search_results": null
              },
              "finish_reason": "function_call",
              "usage": {
                "prompt_tokens": 121,
                "completion_tokens": 0,
                "total_tokens": 121
              }
            }
          }
        }
      }
    ]
  ],
  "llm_output": {
    "token_usage": {},
    "model_name": "ERNIE-Bot"
  },
  "run": null
}
```


### Expected behavior

`additional_kwargs` should not be empty.