将生成器、可迭代对象或类似流的序列流式传输到应用程序。
st.write_stream 遍历给定的序列并将所有块写入应用程序。字符串块将使用打字机效果写入。其他数据类型将使用 st.write 写入。
函数签名[source] | |
---|---|
st.write_stream(stream) | |
参数 | |
stream (Callable, Generator, Iterable, OpenAI Stream, 或 LangChain Stream) | 用于流式传输的生成器或可迭代对象。 如果你传递一个异步生成器,Streamlit 会在内部将其转换为同步生成器。 注意 要使用其他LLM库,你可以创建一个包装器来手动定义一个生成器函数,并包含自定义输出解析。 |
返回 | |
(str or list) | 完整的响应。如果流式输出仅包含文本,则这是一个字符串。否则,这是所有流式对象的列表。返回值完全兼容作为st.write的输入。 |
示例
你可以像我们的教程中所示的那样传递一个OpenAI流,构建一个基本的LLM聊天应用。或者,你可以传递一个通用的生成器函数作为输入:
import time import numpy as np import pandas as pd import streamlit as st _LOREM_IPSUM = """ Lorem ipsum dolor sit amet, **consectetur adipiscing** elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. """ def stream_data(): for word in _LOREM_IPSUM.split(" "): yield word + " " time.sleep(0.02) yield pd.DataFrame( np.random.randn(5, 10), columns=["a", "b", "c", "d", "e", "f", "g", "h", "i", "j"], ) for word in _LOREM_IPSUM.split(" "): yield word + " " time.sleep(0.02) if st.button("Stream data"): st.write_stream(stream_data)
提示
如果你的流对象与st.write_stream
不兼容,可以定义一个包装器来创建一个兼容的生成器函数。
for chunk in unsupported_stream:
yield preprocess(chunk)
例如,请参阅我们如何在此代码中使用Replicate与Snowflake Arctic。
还有问题吗?
我们的 论坛 充满了有用的信息和Streamlit专家。