服务器指南#

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: TrueFalse(默认 False)。

  • NEMO_GUARDRAILS_SERVER_ALLOWED_ORIGINS: 允许的来源列表(默认 *)。您可以使用逗号分隔多个来源。

端点#

服务器的 OpenAPI 规范可在 http://127.0.0.1:8000/redochttp://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/redochttp://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"
}