服务器指南#
NeMo Guardrails 工具包使您能够创建 guardrails 配置,并使用**guardrails 服务器**和**动作服务器**以可扩展且安全的方式部署它们。
Guardrails 服务器#
Guardrails 服务器在启动时加载一组预定义的 guardrails 配置,并公开 HTTP API 来使用它们。该服务器使用 FastAPI,并且该界面基于 chatbot-ui 项目。此服务器最适合提供可视化界面/playground,以便与机器人交互并尝试 rails。
要启动服务器
nemoguardrails server [--config PATH/TO/CONFIGS] [--port PORT] [--prefix PREFIX] [--disable-chat-ui] [--auto-reload] [--default-config-id DEFAULT_CONFIG_ID]
如果未指定 --config
选项,则服务器将尝试从当前目录中的 config
文件夹加载配置。如果未找到任何配置,它将加载所有示例 guardrails 配置。
如果指定了 --prefix
选项,则 guardrails 服务器的根路径将位于指定的 prefix。
注意
由于服务器旨在为多个 guardrails 配置提供服务,因此 path/to/configs
必须是一个文件夹,其中包含每个单独配置的子文件夹。例如
.
├── config
│ ├── config_1
│ │ ├── file_1.co
│ │ └── config.yml
│ ├── config_2
│ ├── ...
│ ...
注意
如果服务器指向包含单个配置的文件夹,则只有该配置可用。
如果指定了 --auto-reload
选项,则服务器将监视保存配置的文件夹内的任何文件更改,并在更改时自动重新加载它们。这使您可以更快地迭代您的配置,甚至可以在进行更改后在对话中途重新生成消息。**重要提示**:此选项只能在开发环境中使用。
CORS#
如果您希望启用您的 guardrails 服务器以直接从另一个基于浏览器的 UI 接收请求,您需要启用 CORS 配置。您可以通过设置以下环境变量来执行此操作
NEMO_GUARDRAILS_SERVER_ENABLE_CORS
:True
或False
(默认False
)。NEMO_GUARDRAILS_SERVER_ALLOWED_ORIGINS
:允许的来源列表 (默认*
)。您可以使用逗号分隔多个来源。
端点#
服务器的 OpenAPI 规范可在 https://:8000/redoc
或 https://:8000/docs
上获得。
/v1/rails/configs
#
要列出服务器的可用 guardrails 配置,请使用 /v1/rails/configs
端点。
GET /v1/rails/configs
示例响应
[
{"id":"abc"},
{"id":"xyz"},
...
]
/v1/chat/completions
#
要获取聊天会话的完成,请使用 /v1/chat/completions
端点
POST /v1/chat/completions
{
"config_id": "benefits_co",
"messages": [{
"role":"user",
"content":"Hello! What can you do for me?"
}]
}
示例响应
[{
"role": "assistant",
"content": "I can help you with your benefits questions. What can I help you with?"
}]
完成端点还支持在单个请求中组合多个配置。为此,您可以使用 config_ids
字段代替 config_id
POST /v1/chat/completions
{
"config_ids": ["config_1", "config_2"],
"messages": [{
"role":"user",
"content":"Hello! What can you do for me?"
}]
}
这些配置将按照它们在 config_ids
列表中指定的顺序组合。如果配置之间存在任何冲突,则列表中的最后一个配置将优先。rails 将按照它们在 config_ids
列表中指定的顺序组合。配置的模型类型和引擎必须相同。
默认配置#
NeMo Guardrails 服务器支持具有默认 guardrail 配置,可以使用 --default-config-id
标志进行设置。当请求中未提供 config_id
时,将使用此配置。
POST /v1/chat/completions
{
"messages": [{
"role":"user",
"content":"Hello! What can you do for me?"
}]
}
线程#
Guardrails 服务器对存储对话线程提供基本支持。当您只能发送对话的最新用户消息而不是整个历史记录时,这非常有用(例如,来自第三方集成钩子)。
配置#
要使用服务器端线程,您必须注册一个数据存储。为此,您必须在配置文件夹的根目录中创建一个 config.py
文件(即包含服务器必须加载的所有 guardrails 配置的文件夹)。在 config.py
内部,使用 register_datastore
函数来注册您要使用的数据存储。
开箱即用,NeMo Guardrails 支持 MemoryStore
(对于快速测试很有用)和 RedisStore
。如果您想使用不同的后端,您可以实现 DataStore
接口并在 config.py
中注册一个不同的实例。
注意
要使用 RedisStore
,您必须安装 aioredis >= 2.0.1
。
接下来,在调用 /v1/chat/completions
端点时,您还必须包含一个 thread_id
字段
POST /v1/chat/completions
{
"config_id": "config_1",
"thread_id": "1234567890123456",
"messages": [{
"role":"user",
"content":"Hello! What can you do for me?"
}]
}
注意
出于安全原因,thread_id
的最小长度必须为 16 个字符。
作为示例,请查看此配置。
限制#
目前,在使用流模式时不支持线程(将在未来的版本中添加)。
线程无限期存储;没有清理机制。
聊天 UI#
您可以使用聊天 UI 快速测试 guardrails 配置。
重要提示
您应该仅将聊天 UI 用于内部测试。对于 NeMo Guardrails 服务器的生产部署,应使用 --disable-chat-ui
标志禁用聊天 UI。
动作服务器#
动作服务器使您能够更安全地运行从护栏调用的操作(有关更多详细信息,请参阅安全指南)。 动作服务器应部署在单独的环境中。
注意
尽管强烈建议用于生产部署,但使用动作服务器是可选的,并且是针对每个护栏配置进行配置的。 如果在护栏配置中未指定任何动作服务器,则这些操作将与护栏服务器在同一进程中运行。 启动服务器
nemoguardrails actions-server [--port PORT]
启动时,动作服务器将自动注册所有预定义操作以及当前文件夹(包括子文件夹)中的所有操作。
端点#
动作服务器的 OpenAPI 规范可在 https://:8001/redoc
或 https://:8001/docs
中找到。
/v1/actions/list
#
要列出服务器的可用操作,请使用 /v1/actions/list
端点。
GET /v1/actions/list
示例响应
["apify","bing_search","google_search","google_serper","openweather_query","searx_search","serp_api_query","wikipedia_query","wolframalpha_query","zapier_nla_query"]
/v1/actions/run
#
要使用一组参数执行操作,请使用 /v1/actions/run
端点
POST /v1/actions/run
{
"action_name": "wolfram_alpha_request",
"action_parameters": {
"query": "What is the largest prime factor for 1024?"
}
}
示例响应
{
"status": "success",
"result": "2"
}