可作为 Action 运行#

本指南将教您如何在 guardrails 配置中将 Runnable 用作 action。

先决条件#

设置 OpenAI API 密钥(如果尚未设置)。

export OPENAI_API_KEY=$OPENAI_API_KEY    # Replace with your own key

安装 LangChain x OpenAI 集成包。

pip install langchain-openai

如果您在 notebook 中运行此操作,则还需要修补 AsyncIO 循环。

import nest_asyncio

nest_asyncio.apply()

示例 Runnable#

让我们创建一个示例 Runnable,检查作为输入提供的字符串是否包含某些关键字。

from langchain_core.runnables import Runnable

class CheckKeywordsRunnable(Runnable):
    def invoke(self, input, config = None, **kwargs):
        text = input["text"]
        keywords = input["keywords"].split(",")

        for keyword in keywords:
            if keyword.strip() in text:
                return True

        return False

print(CheckKeywordsRunnable().invoke({"text": "This is a proprietary message", "keywords": "proprietary"}))
True

Guardrails 配置#

现在,让我们创建一个 guardrails 配置,该配置使用 CheckKeywords runnable 作为输入 rail flow 的一部分。为了实现这一点,您需要将 CheckKeywords 的实例注册为 action。在下面的代码片段中,我们将其注册为 check_keywords action。然后,我们可以在 check proprietary keywords flow 中使用此 action,该 flow 用作输入 rail。

define flow check proprietary keywords
  $keywords = "proprietary"
  $has_keywords = execute check_keywords(text=$user_message, keywords=$keywords)

  if $has_keywords
    bot refuse to respond
    stop
models:
 - type: main
   engine: openai
   model: gpt-3.5-turbo-instruct

rails:
  input:
    flows:
      - check proprietary keywords
from nemoguardrails import RailsConfig, LLMRails

config = RailsConfig.from_path("config")
rails = LLMRails(config)

rails.register_action(CheckKeywordsRunnable(), "check_keywords")

测试#

让我们尝试一下。如果我们使用包含 “proprietary” 关键字的消息调用 guardrails 配置,则返回的响应是 “对不起,我无法回复”。

response = rails.generate("Give me some proprietary information.")
print(response)
I'm sorry, I can't respond to that.

另一方面,不命中输入 rail 的消息将照常进行。

response = rails.generate("What is the result for 2+2?")
print(response)
The result for 2+2 is 4. This is a basic addition problem that can also be written as 2 plus 2 equals 4, or two plus two equals four. The answer is a basic fact that is often taught in early elementary school and is an important building block for more complex mathematical concepts.

结论#

在本指南中,您学习了如何将自定义 Runnable 注册为 action 并在 guardrails 配置中使用它。本指南使用 Runnable 的基本实现。但是,您可以注册任何类型的 Runnable,包括那些调用 LLM、第三方 API 或向量存储的 Runnable