服务器指南#
NeMo Guardrails 工具包使您能够创建护栏配置,并使用护栏服务器和 actions 服务器以可扩展且安全的方式部署它们。
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
文件夹加载配置。如果未找到任何配置,它将加载所有示例护栏配置。
如果指定了 --prefix
选项,则护栏服务器的根路径将位于指定的 prefix。
注意
由于服务器旨在为多个护栏配置提供服务,因此 path/to/configs
必须是一个文件夹,其中包含每个单独配置的子文件夹。例如
.
├── config
│ ├── config_1
│ │ ├── file_1.co
│ │ └── config.yml
│ ├── config_2
│ ├── ...
│ ...
注意
如果服务器指向包含单个配置的文件夹,则只有该配置可用。
如果指定了 --auto-reload
选项,服务器将监视包含配置的文件夹内文件的任何更改,并在更改时自动重新加载它们。这使您可以更快地迭代配置,甚至在更改后在对话中途重新生成消息。 重要提示:此选项应仅在开发环境中使用。
CORS#
如果您想启用护栏服务器以直接从另一个基于浏览器的 UI 接收请求,则需要启用 CORS 配置。您可以通过设置以下环境变量来完成此操作
NEMO_GUARDRAILS_SERVER_ENABLE_CORS
:True
或False
(默认False
)。NEMO_GUARDRAILS_SERVER_ALLOWED_ORIGINS
: 允许的来源列表(默认*
)。您可以使用逗号分隔多个来源。
端点#
服务器的 OpenAPI 规范可在 http://127.0.0.1:8000/redoc
或 http://127.0.0.1:8000/docs
中找到。
/v1/rails/configs
#
要列出服务器可用的护栏配置,请使用 /v1/rails/configs
端点。
GET /v1/rails/configs
示例响应
[
{"id":"abc"},
{"id":"xyz"},
...
]
/v1/chat/completions
#
要获取聊天会话的 completion,请使用 /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?"
}]
completion 端点还支持在单个请求中组合多个配置。为此,您可以使用 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 服务器支持拥有默认的护栏配置,可以使用 --default-config-id
标志进行设置。当请求中未提供 config_id
时,将使用此配置。
POST /v1/chat/completions
{
"messages": [{
"role":"user",
"content":"Hello! What can you do for me?"
}]
}
线程#
Guardrails 服务器基本支持存储对话线程。当您只能发送对话的最新用户消息,而不是整个历史记录时(例如,来自第三方集成 hook),这非常有用。
配置#
要使用服务器端线程,您必须注册一个数据存储。为此,您必须在配置文件夹的根目录(即,包含服务器必须加载的所有护栏配置的文件夹)中创建一个 config.py
文件。在 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 快速测试护栏配置。
重要提示
您应该仅将聊天 UI 用于内部测试。对于 NeMo Guardrails 服务器的生产部署,应使用 --disable-chat-ui
标志禁用聊天 UI。
Actions 服务器#
Actions 服务器使您能够更安全地运行从护栏调用的 actions(有关更多详细信息,请参阅安全指南)。Action 服务器应部署在单独的环境中。
注意
即使强烈建议用于生产部署,但使用 actions 服务器是可选的,并且每个护栏配置都可以配置。如果在护栏配置中未指定 actions 服务器,则 actions 将在与护栏服务器相同的进程中运行。启动服务器
nemoguardrails actions-server [--port PORT]
启动时,actions 服务器将自动注册所有预定义的 actions 和当前文件夹(包括子文件夹)中的所有 actions。
端点#
Actions 服务器的 OpenAPI 规范可在 http://127.0.0.1:8001/redoc
或 http://127.0.0.1:8001/docs
中找到。
/v1/actions/list
#
要列出服务器可用的 available actions,请使用 /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
#
要使用一组参数执行 action,请使用 /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"
}