Python API#
在项目中主要使用 guardrails 的方法是
创建一个
RailsConfig
对象。创建一个
LLMRails
实例,它提供了一个与 LLM 交互的接口,并自动应用配置的 guardrails。使用
LLMRails.generate(...)
或LLMRails.generate_async(...)
方法生成 LLM 响应。
基本用法#
from nemoguardrails import LLMRails, RailsConfig
config = RailsConfig.from_path("path/to/config")
app = LLMRails(config)
new_message = app.generate(messages=[{
"role": "user",
"content": "Hello! What can you do for me?"
}])
RailsConfig#
RailsConfig
类包含了配置 guardrails 的关键信息:
models
: rails 配置使用的模型列表。user_messages
: 应用于 rails 的用户消息列表。bot_messages
: 应用于 rails 的 bot 消息列表。flows
: 应用于 rails 的流程列表。instructions
: 自然语言指令列表(目前仅支持通用指令)。docs
: 包含在知识库中的文档列表。sample_conversation
: 在提示词中使用的示例对话。actions_server_url
: 要使用的动作服务器。如果指定,动作将通过该动作服务器执行。
消息生成#
要使用 guardrails 配置,可以调用 LLMRails.generate
或 LLMRails.generate_async
方法。
LLMRails.generate
方法接收 prompt
或 messages
数组作为输入。如果提供了 prompt,则 guardrails 在单轮对话中应用。消息的结构如下:
properties:
role:
type: "string"
enum: ["user", "assistant", "context"]
content:
oneOf:
- type: "string"
- type: "object"
对话历史记录示例如下:
[
{
"role": "user",
"content": "Hello!"
},
{
"role": "assistant",
"content": "Hello! How can I help you?"
},
{
"role": "user",
"content": "I want to know if my insurance covers certain expenses."
}
]
同时设置初始上下文的示例如下:
[
{
"role": "context",
"content": {
"user_name": "John",
"access_level": "admin"
}
},
{
"role": "user",
"content": "Hello!"
},
{
"role": "assistant",
"content": "Hello! How can I help you?"
},
{
"role": "user",
"content": "I want to know if my insurance covers certain expenses."
}
]
动作#
动作是 Guardrails 工具包的关键组成部分。动作使得在 guardrails 中执行 Python 代码成为可能。
默认动作#
工具包中包含的默认动作如下:
核心动作
generate_user_intent
: 生成用户所说内容的规范形式。generate_next_step
: 生成当前对话流程中的下一步。generate_bot_message
: 基于预期的 bot 意图生成 bot 消息。retrieve_relevant_chunks
: 从知识库中检索相关的文本块并添加到上下文中。
Guardrail 特定动作
self_check_facts
: 根据从知识库中提取的相关文本块,检查最后一条 bot 响应的事实性。self_check_input
: 检查是否应允许用户输入。self_check_output
: 检查是否应允许 bot 响应。self_check_hallucination
: 检查最后一条 bot 响应是否是幻觉。
为了方便起见,此工具包还包含了一些 LangChain 工具,它们被封装为动作:
apify
: Apify 是一个网络爬取和自动化平台,使您能够构建自己的网络爬虫和抓取器。bing_search
: Bing Web Search API 的封装。google_search
: Langchain 提供的 Google Search API 的封装。searx_search
: Searx API 的封装。Google/Bing Search 的替代方案。google_serper
: SerpApi Google Search API 的封装。可用于添加来自 Google Search 的回答框和知识图。openweather_query
: OpenWeatherMap API 的封装,用于检索天气信息。serp_api_query
: SerpAPI API 的封装。它提供对搜索引擎的访问,并帮助回答有关当前事件的问题。wikipedia_query
: Wikipedia API 的封装。它使用 MediaWiki API 从 Wikipedia 检索信息。wolfram_alpha_query
: Wolfram Alpha API 的封装。可用于回答数学和科学问题。zapier_nla_query
: Zapier NLA API 的封装。它提供了对超过 5k 个应用程序和 20k 个动作的访问,以自动化您的工作流程。
将 Chain 作为动作#
您可以使用 LLMRails.register_action 方法将 LangChain chain 注册为动作:
app.register_action(some_chain, name="some_chain")
当一个 chain 作为动作被调用时,动作的参数对应于 chain 的输入键。对于返回值,如果 chain 的输出只有一个键,则返回该值。如果 chain 有多个输出键,则返回包含输出键及其值的字典。更多详细信息请参阅LangChain 集成指南。
自定义动作#
您可以使用 action
装饰器或 LLMRails(RailsConfig).register_action(action: callable, name: Optional[str])
方法将任何 Python 函数注册为自定义动作。
from nemoguardrails.actions import action
@action()
async def some_action():
# Do some work
return "some_result"
默认情况下,动作的名称被设置为函数的名称。但是,您可以通过指定不同的名称来更改它。
from nemoguardrails.actions import action
@action(name="some_action_name")
async def some_action():
# Do some work
return "some_result"
动作可以接受任意数量的参数。由于动作是从 Colang 流程中调用的,参数类型仅限于 string (字符串)、integer (整数)、float (浮点数)、boolean (布尔值)、list (列表) 和 dictionary (字典)。
特殊参数#
如果动作的签名中包含以下参数,它们将由 NeMo Guardrails 工具包自动提供,它们是特殊参数:
events
: 迄今为止的事件历史记录;最后一个事件是触发动作本身的事件;context
: 可供动作使用的上下文数据;llm
: 访问 LLM 实例(来自 LangChain 的 BaseLLM);config
: 完整的RailsConfig
实例。
这些参数仅用于高级用例。
动作参数#
以下是可以在动作中使用的参数:
参数 |
描述 |
类型 |
示例 |
---|---|---|---|
|
迄今为止的事件历史记录;最后一个事件是触发动作本身的事件。 |
List[dict] |
|
|
可供动作使用的上下文数据。 |
dict |
|
|
访问 LLM 实例(来自 LangChain 的 BaseLLM)。 |
BaseLLM |
|