Source code for langchain_experimental.comprehend_moderation.amazon_comprehend_moderation

from typing import Any, Dict, List, Optional

from langchain.chains.base import Chain
from langchain_core.callbacks.manager import CallbackManagerForChainRun

from langchain_experimental.comprehend_moderation.base_moderation import BaseModeration
from langchain_experimental.comprehend_moderation.base_moderation_callbacks import (
    BaseModerationCallbackHandler,
)
from langchain_experimental.comprehend_moderation.base_moderation_config import (
    BaseModerationConfig,
)
from langchain_experimental.pydantic_v1 import root_validator


[docs]class AmazonComprehendModerationChain(Chain): """基于`Amazon Comprehend`服务的内容审核链。 请访问 https://aws.amazon.com/comprehend/ 了解更多信息。""" output_key: str = "output" #: :meta private: """用于在数据容器中获取/存储输出的键。默认为`output`""" input_key: str = "input" #: :meta private: """用于在数据容器中获取/存储输入的键。默认为`input`""" moderation_config: BaseModerationConfig = BaseModerationConfig() """配置设置用于内容的审核,默认为具有默认值的BaseModerationConfig""" client: Optional[Any] = None """创建与Amazon Comprehend连接的boto3客户端对象""" region_name: Optional[str] = None """AWS区域,例如`us-west-2`。如果未在此处提供,则回退到AWS_DEFAULT_REGION环境变量或~/.aws/config中指定的区域。""" credentials_profile_name: Optional[str] = None """~/.aws/credentials 或 ~/.aws/config 文件中配置文件的名称,其中包含指定的访问密钥或角色信息。 如果未指定,则将使用默认的凭据配置文件,或者如果在EC2实例上,则将使用来自IMDS的凭据。 参见:https://boto3.amazonaws.com/v1/documentation/api/latest/guide/credentials.html""" moderation_callback: Optional[BaseModerationCallbackHandler] = None """用于审核的回调处理程序,这与常规回调不同,可以与其同时使用。""" unique_id: Optional[str] = None """一个可以用来识别或分组用户或会话的唯一标识符。""" @root_validator(pre=True) def create_client(cls, values: Dict[str, Any]) -> Dict[str, Any]: """创建一个Amazon Comprehend客户端。 参数: values (Dict[str, Any]): 包含配置数值的字典。 返回: Dict[str, Any]: 包含更新后的配置数值的字典,包括Amazon Comprehend客户端。 引发: ModuleNotFoundError: 如果未安装'boto3'包。 ValueError: 如果导入'boto3'或加载AWS凭证时出现问题。 示例: .. code-block:: python config = { "credentials_profile_name": "my-profile", "region_name": "us-west-2" } updated_config = create_client(config) comprehend_client = updated_config["client"] """ if values.get("client") is not None: return values try: import boto3 if values.get("credentials_profile_name"): session = boto3.Session(profile_name=values["credentials_profile_name"]) else: # use default credentials session = boto3.Session() client_params = {} if values.get("region_name"): client_params["region_name"] = values["region_name"] values["client"] = session.client("comprehend", **client_params) return values except ImportError: raise ModuleNotFoundError( "Could not import boto3 python package. " "Please install it with `pip install boto3`." ) except Exception as e: raise ValueError( "Could not load credentials to authenticate with AWS client. " "Please check that credentials in the specified " f"profile name are valid. {e}" ) from e @property def output_keys(self) -> List[str]: """返回一个输出键的列表。 该方法定义了用于访问由链或函数产生的输出值的输出键。它确保指定的键可用于访问输出。 返回: List[str]:一个输出键的列表。 注意: 此方法被视为私有方法,可能不适合直接外部使用。 """ return [self.output_key] @property def input_keys(self) -> List[str]: """返回预期由提示框接收的输入键列表。 该方法定义了提示框期望的输入键,以便执行其处理。它确保指定的键可用于向提示框提供输入。 返回: List[str]:输入键的列表。 注意: 此方法被视为私有方法,可能不适合直接外部使用。 """ return [self.input_key] def _call( self, inputs: Dict[str, Any], run_manager: Optional[CallbackManagerForChainRun] = None, ) -> Dict[str, str]: """执行输入文本上的审查过程,并返回处理后的输出。 这个内部方法在输入文本上执行审查过程。它将输入提示值转换为纯文本,应用指定的过滤器,然后将过滤后的输出转换回适当的提示值对象。此外,它提供了使用提供的“run_manager”记录运行信息的选项。 参数: inputs: 包含输入值的字典 run_manager: 用于处理与运行相关事件的运行管理器。默认值为None 返回: Dict[str, str]: 包含审查过程处理后的输出的字典。 Raises: ValueError: 如果在审查过程中出现错误 """ if run_manager: run_manager.on_text("Running AmazonComprehendModerationChain...\n") moderation = BaseModeration( client=self.client, config=self.moderation_config, moderation_callback=self.moderation_callback, unique_id=self.unique_id, run_manager=run_manager, ) response = moderation.moderate(prompt=inputs[self.input_keys[0]]) return {self.output_key: response}