> ## Documentation Index
> Fetch the complete documentation index at: https://cndoc-langchain.site/llms.txt
> Use this file to discover all available pages before exploring further.

# 追踪生成器函数

在大多数LLM应用中，您会希望将输出流式传输，以最小化用户看到第一个令牌的时间。

LangSmith的追踪功能通过`generator`函数原生支持流式输出。以下是一个示例。

<CodeGroup>
  ```python Python theme={"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}}
  from langsmith import traceable
  @traceable
  def my_generator():
    for chunk in ["Hello", "World", "!"]:
        yield chunk
  # 流式输出给用户
  for output in my_generator():
    print(output)
  # 这也适用于异步函数
  import asyncio
  @traceable
  async def my_async_generator():
    for chunk in ["Hello", "World", "!"]:
        yield chunk
  # 流式输出给用户
  async def main():
    async for output in my_async_generator():
        print(output)
  asyncio.run(main())
  ```

  ```typescript TypeScript theme={"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}}
  import { traceable } from "langsmith/traceable";
  const myGenerator = traceable(function* () {
    for (const chunk of ["Hello", "World", "!"]) {
        yield chunk;
    }
  });
  for (const output of myGenerator()) {
    console.log(output);
  }
  ```
</CodeGroup>

## 聚合结果[ ](#aggregate-results "直接链接到聚合结果")

默认情况下，被追踪函数的`outputs`会在LangSmith中聚合为一个单一数组。如果您想自定义其存储方式（例如，将输出连接成一个字符串），可以使用`aggregate`选项（Python中为`reduce_fn`）。这对于聚合流式LLM输出特别有用。

<Note>
  聚合输出**仅**影响输出的追踪表示。它不会改变您函数返回的值。
</Note>

<CodeGroup>
  ```python Python theme={"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}}
  from langsmith import traceable
  def concatenate_strings(outputs: list):
    return "".join(outputs)
  @traceable(reduce_fn=concatenate_strings)
  def my_generator():
    for chunk in ["Hello", "World", "!"]:
        yield chunk
  # 流式输出给用户
  for output in my_generator():
    print(output)
  # 这也适用于异步函数
  import asyncio
  @traceable(reduce_fn=concatenate_strings)
  async def my_async_generator():
    for chunk in ["Hello", "World", "!"]:
        yield chunk
  # 流式输出给用户
  async def main():
    async for output in my_async_generator():
        print(output)
  asyncio.run(main())
  ```

  ```typescript TypeScript theme={"theme":{"light":"catppuccin-latte","dark":"catppuccin-mocha"}}
  import { traceable } from "langsmith/traceable";
  const concatenateStrings = (outputs: string[]) => outputs.join("");
  const myGenerator = traceable(function* () {
    for (const chunk of ["Hello", "World", "!"]) {
        yield chunk;
    }
  }, { aggregator: concatenateStrings });
  for (const output of await myGenerator()) {
    console.log(output);
  }
  ```
</CodeGroup>

***

<div className="source-links">
  <Callout icon="terminal-2">
    [连接这些文档](/use-these-docs)到Claude、VSCode等，通过MCP获取实时答案。
  </Callout>

  <Callout icon="edit">
    [在GitHub上编辑此页面](https://github.com/langchain-ai/docs/edit/main/src/langsmith/trace-generator-functions.mdx)或[提交问题](https://github.com/langchain-ai/docs/issues/new/choose)。
  </Callout>
</div>
