流式传输#
要在流式传输模式下使用 guardrails 配置,必须满足以下条件
主 LLM 必须支持流式传输。
没有输出 rails。
配置#
要在 guardrails 配置上激活流式传输,请将以下内容添加到您的 config.yml
streaming: True
用法#
聊天 CLI#
您可以在启动 NeMo Guardrails 聊天 CLI 时使用 --streaming
选项启用流式传输
nemoguardrails chat --config=examples/configs/streaming --streaming
Python API#
您可以通过两种方式直接从 python API 使用流式传输
简单:仅接收块(tokens)。
完整:接收生成的块以及结尾的完整响应。
对于简单用法,您需要在 LLMRails
实例上调用 stream_async
方法
from nemoguardrails import LLMRails
app = LLMRails(config)
history = [{"role": "user", "content": "What is the capital of France?"}]
async for chunk in app.stream_async(messages=history):
print(f"CHUNK: {chunk}")
# Or do something else with the token
对于完整用法,您需要为 LLMRails
实例上的 generate_async
方法提供一个 StreamingHandler
实例
from nemoguardrails import LLMRails
from nemoguardrails.streaming import StreamingHandler
app = LLMRails(config)
history = [{"role": "user", "content": "What is the capital of France?"}]
streaming_handler = StreamingHandler()
async def process_tokens():
async for chunk in streaming_handler:
print(f"CHUNK: {chunk}")
# Or do something else with the token
asyncio.create_task(process_tokens())
result = await app.generate_async(
messages=history, streaming_handler=streaming_handler
)
print(result)
有关完整的有效示例,请查看此演示脚本。
服务器 API#
要在流式传输模式下调用 NeMo Guardrails 服务器,您必须将 stream
参数设置为 JSON 主体内的 True
。例如,要使用 /v1/chat/completions
端点获取聊天会话的完成
POST /v1/chat/completions
{
"config_id": "some_config_id",
"messages": [{
"role":"user",
"content":"Hello! What can you do for me?"
}],
"stream": true
}
为使用 HuggingFacePipeline 部署的 LLM 进行流式传输#
我们也支持为使用 HuggingFacePipeline
部署的 LLM 进行流式传输。HF Pipeline Dolly 配置中提供了一个示例。
要为 HF Pipeline LLM 使用流式传输,您首先需要在 config.yml
中设置 streaming 标志。
streaming: True
然后,您需要创建一个 nemoguardrails.llm.providers.huggingface.AsyncTextIteratorStreamer
streamer 对象,将其添加到管道的 kwargs
和 HuggingFacePipelineCompatible
对象的 model_kwargs
中。
from nemoguardrails.llm.providers.huggingface import AsyncTextIteratorStreamer
# instantiate tokenizer object required by LLM
streamer = AsyncTextIteratorStreamer(tokenizer, skip_prompt=True)
params = {"temperature": 0.01, "max_new_tokens": 100, "streamer": streamer}
pipe = pipeline(
# all other parameters
**params,
)
llm = HuggingFacePipelineCompatible(pipeline=pipe, model_kwargs=params)