Skip to main content
在大多数LLM应用中,您会希望将输出流式传输,以最小化用户看到第一个令牌的时间。 LangSmith的追踪功能通过generator函数原生支持流式输出。以下是一个示例。
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())

聚合结果

默认情况下,被追踪函数的outputs会在LangSmith中聚合为一个单一数组。如果您想自定义其存储方式(例如,将输出连接成一个字符串),可以使用aggregate选项(Python中为reduce_fn)。这对于聚合流式LLM输出特别有用。
聚合输出影响输出的追踪表示。它不会改变您函数返回的值。
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())