Skip to main content

追踪生成器函数

在大多数大语言模型(LLM)应用中,您通常希望流式传输输出,以尽量缩短用户看到首个 token 所需的时间。

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

from langsmith import traceable

@traceable
def my_generator():
for chunk in ["Hello", "World", "!"]:
yield chunk

# Stream to the user
for output in my_generator():
print(output)

# It also works with async functions
import asyncio

@traceable
async def my_async_generator():
hunk in ["Hello", "World", "!"]:
yield chunk

# Stream to the user
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

# Stream to the user
for output in my_generator():
print(output)

# It also works with async functions
import asyncio

@traceable(reduce_fn=concatenate_strings)
async def my_async_generator():
for chunk in ["Hello", "World", "!"]:
yield chunk

# Stream to the user
async def main():
async for output in my_async_generator():
print(output)

asyncio.run(main())

这个页面对你有帮助吗?


您可以留下详细的反馈 在 GitHub 上.