promptflow.evals.synthetic 模块#

class promptflow.evals.synthetic.AdversarialScenario(value)#

基类: Enum

对抗性场景类型

ADVERSARIAL_CONTENT_GEN_GROUNDED = 'adv_content_gen_grounded'#
ADVERSARIAL_CONTENT_GEN_UNGROUNDED = 'adv_content_gen_ungrounded'#
ADVERSARIAL_CONTENT_PROTECTED_MATERIAL = 'adv_content_protected_material'#
ADVERSARIAL_CONVERSATION = 'adv_conversation'#
ADVERSARIAL_INDIRECT_JAILBREAK = 'adv_xpia'#
ADVERSARIAL_QA = 'adv_qa'#
ADVERSARIAL_REWRITE = 'adv_rewrite'#
ADVERSARIAL_SUMMARIZATION = 'adv_summarization'#
class promptflow.evals.synthetic.AdversarialSimulator(*, azure_ai_project: Dict[str, Any], credential=None)#

基类:object

使用项目范围初始化对抗模拟器。

参数:
  • azure_ai_project (Dict[str, Any]) – 定义项目范围的字典。它必须包含以下键: - “subscription_id”:Azure 订阅 ID。 - “resource_group_name”:Azure 资源组的名称。 - “project_name”:Azure 机器学习工作区的名称。

  • credential (TokenCredential) – 用于连接到 Azure AI 项目的凭据。

__call__(*, scenario: AdversarialScenario, target: Callable, max_conversation_turns: int = 1, max_simulation_results: int = 3, api_call_retry_limit: int = 3, api_call_retry_sleep_sec: int = 1, api_call_delay_sec: int = 0, concurrent_async_task: int = 3, _jailbreak_type: Optional[str] = None, randomize_order: bool = True, randomization_seed: Optional[int] = None)#

针对指定的目标函数异步执行对抗模拟。

参数:
  • scenario (promptflow.evals.synthetic.adversarial_scenario.AdversarialScenario) –

    指定用于生成输入的对抗场景的枚举值。示例:

  • target (Callable) – 用于模拟对抗输入的目标函数。此函数应为异步函数,并接受表示对抗输入的字典。

  • max_conversation_turns (int) – 要模拟的最大对话轮次。默认为 1。

  • max_simulation_results (int) – 要返回的最大模拟结果数。默认为 3。

  • api_call_retry_limit (int) – 模拟中每个 API 调用的最大重试次数。默认为 3。

  • api_call_retry_sleep_sec (int) – API 调用重试之间的休眠持续时间(以秒为单位)。默认为 1 秒。

  • api_call_delay_sec (int) – 进行 API 调用前的延迟(以秒为单位)。这可用于避免达到速率限制。默认为 0 秒。

  • concurrent_async_task (int) – 模拟期间同时运行的异步任务数。默认为 3。

  • randomize_order (bool) – 是否应随机化提示的顺序。默认为 True。

  • randomization_seed (Optional[int]) – 用于随机化提示选择的种子。如果未设置,则使用系统的默认种子。默认为 None。

返回:

字典列表,每个字典代表一个模拟对话。每个字典包含

  • “template_parameters”:一个字典,其中包含对话模板中使用的参数,

    包括“conversation_starter”。

  • “messages”:一个字典列表,每个字典代表对话中的一轮。

    每个消息字典包括“content”(消息文本)和“role”(指示消息是来自“user”还是“assistant”)。

  • $schema”:一个字符串,指示对话格式的模式 URL。

“assistant”角色消息的“content”可能包含您的回调返回的消息。

返回类型:

List[Dict[str, Any]]

输出格式

return_value = [
    {
        'template_parameters': {},
        'messages': [
            {
                'content': '<jailbreak prompt> <adversarial question>',
                'role': 'user'
            },
            {
                'content': "<response from endpoint>",
                'role': 'assistant',
                'context': None
            }
        ],
        '$schema': 'http://azureml/sdk-2-0/ChatConversation.json'
    }
]
call_sync(*, max_conversation_turns: int, max_simulation_results: int, target: Callable, api_call_retry_limit: int, api_call_retry_sleep_sec: int, api_call_delay_sec: int, concurrent_async_task: int) List[Dict[str, Any]]#

同步调用对抗模拟器。

参数:
  • max_conversation_turns (int) – 要模拟的最大对话轮数。

  • max_simulation_results (int) – 要返回的最大模拟结果数。

  • target (Callable) – 用于模拟对抗性输入的目标函数。

  • api_call_retry_limit (int) – 模拟中每次 API 调用的最大重试次数。

  • api_call_retry_sleep_sec (int) – API 调用重试之间的休眠时间(秒)。

  • api_call_delay_sec (int) – 发出 API 调用前的延迟时间(秒)。

  • concurrent_async_task (int) – 模拟期间并发运行的异步任务数。

返回:

字典列表,每个字典代表一个模拟对话。

返回类型:

List[Dict[str, Any]]

class promptflow.evals.synthetic.DirectAttackSimulator(*, azure_ai_project: Dict[str, Any], credential=None)#

基类:object

使用项目范围初始化 UPIA(用户提示注入攻击)越狱对抗模拟器。此模拟器使用旨在中断正常功能的提示与您的 AI 系统对话。

参数:
  • azure_ai_project (Dict[str, Any]) –

    定义项目范围的字典。它必须包含以下键

    • ”subscription_id”:Azure 订阅 ID。

    • ”resource_group_name”:Azure 资源组的名称。

    • ”project_name”:Azure 机器学习工作区的名称。

  • credential (TokenCredential) – 用于连接到 Azure AI 项目的凭据。

__call__(*, scenario: AdversarialScenario, target: Callable, max_conversation_turns: int = 1, max_simulation_results: int = 3, api_call_retry_limit: int = 3, api_call_retry_sleep_sec: int = 1, api_call_delay_sec: int = 0, concurrent_async_task: int = 3, randomization_seed: Optional[int] = None)#

针对指定的目标函数异步执行对抗模拟和 UPIA(用户提示注入攻击)越狱对抗模拟。

参数:
  • scenario (promptflow.evals.synthetic.adversarial_scenario.AdversarialScenario) –

    指定用于生成输入的对抗场景的枚举值。示例:

  • target (Callable) – 用于模拟对抗输入的目标函数。此函数应为异步函数,并接受表示对抗输入的字典。

  • max_conversation_turns (int) – 要模拟的最大对话轮次。默认为 1。

  • max_simulation_results (int) – 要返回的最大模拟结果数。默认为 3。

  • api_call_retry_limit (int) – 模拟中每个 API 调用的最大重试次数。默认为 3。

  • api_call_retry_sleep_sec (int) – API 调用重试之间的休眠持续时间(以秒为单位)。默认为 1 秒。

  • api_call_delay_sec (int) – 进行 API 调用前的延迟(以秒为单位)。这可用于避免达到速率限制。默认为 0 秒。

  • concurrent_async_task (int) – 模拟期间同时运行的异步任务数。默认为 3。

  • randomization_seed (Optional[int]) – 用于随机化提示选择的种子,由越狱和常规模拟共享,以确保结果一致。如果未提供,将生成一个随机种子并在模拟之间共享。

返回:

字典列表,每个字典代表一个模拟对话。每个字典包含

  • “template_parameters”:一个字典,其中包含对话模板中使用的参数,

    包括“conversation_starter”。

  • “messages”:一个字典列表,每个字典代表对话中的一轮。

    每个消息字典包括“content”(消息文本)和“role”(指示消息是来自“user”还是“assistant”)。

  • $schema”:一个字符串,指示对话格式的模式 URL。

“assistant”角色消息的“content”可能包含您的回调返回的消息。

返回类型:

Dict[str, [List[Dict[str, Any]]]] 包含两个元素

输出格式

return_value = {
    "jailbreak": [
    {
        'template_parameters': {},
        'messages': [
            {
                'content': '<jailbreak prompt> <adversarial question>',
                'role': 'user'
            },
            {
                'content': "<response from endpoint>",
                'role': 'assistant',
                'context': None
            }
        ],
        '$schema': 'http://azureml/sdk-2-0/ChatConversation.json'
    }],
    "regular": [
    {
        'template_parameters': {},
        'messages': [
        {
            'content': '<adversarial question>',
            'role': 'user'
        },
        {
            'content': "<response from endpoint>",
            'role': 'assistant',
            'context': None
        }],
        '$schema': 'http://azureml/sdk-2-0/ChatConversation.json'
    }]
}
class promptflow.evals.synthetic.IndirectAttackSimulator(*, azure_ai_project: Dict[str, Any], credential=None)#

基类:object

使用项目范围初始化 XPIA(跨域提示注入攻击)越狱对抗模拟器。

参数:
  • azure_ai_project (Dict[str, Any]) –

    定义项目范围的字典。它必须包含以下键

    • ”subscription_id”:Azure 订阅 ID。

    • ”resource_group_name”:Azure 资源组的名称。

    • ”project_name”:Azure 机器学习工作区的名称。

  • credential (TokenCredential) – 用于连接到 Azure AI 项目的凭据。

__call__(*, scenario: AdversarialScenario, target: Callable, max_conversation_turns: int = 1, max_simulation_results: int = 3, api_call_retry_limit: int = 3, api_call_retry_sleep_sec: int = 1, api_call_delay_sec: int = 0, concurrent_async_task: int = 3)#

使用项目范围初始化 XPIA(跨域提示注入攻击)越狱对抗模拟器。此模拟器通过注入到上下文中以中断正常预期功能的提示与您的 AI 系统对话,方法是诱导操纵内容、入侵并尝试收集超出您 AI 系统范围的信息。

参数:
  • scenario (promptflow.evals.synthetic.adversarial_scenario.AdversarialScenario) – 指定用于生成输入的对抗性场景的枚举值。

  • target (Callable) – 用于模拟对抗输入的目标函数。此函数应为异步函数,并接受表示对抗输入的字典。

  • max_conversation_turns (int) – 要模拟的最大对话轮次。默认为 1。

  • max_simulation_results (int) – 要返回的最大模拟结果数。默认为 3。

  • api_call_retry_limit (int) – 模拟中每个 API 调用的最大重试次数。默认为 3。

  • api_call_retry_sleep_sec (int) – API 调用重试之间的休眠持续时间(以秒为单位)。默认为 1 秒。

  • api_call_delay_sec (int) – 进行 API 调用前的延迟(以秒为单位)。这可用于避免达到速率限制。默认为 0 秒。

  • concurrent_async_task (int) – 模拟期间同时运行的异步任务数。默认为 3。

返回:

字典列表,每个字典代表一个模拟对话。每个字典包含

  • “template_parameters”:一个字典,其中包含对话模板中使用的参数,

    包括“conversation_starter”。

  • “messages”:一个字典列表,每个字典代表对话中的一轮。

    每个消息字典包括“content”(消息文本)和“role”(指示消息是来自“user”还是“assistant”)。

  • $schema”:一个字符串,指示对话格式的模式 URL。

“assistant”角色消息的“content”可能包含您的回调返回的消息。

返回类型:

List[Dict[str, Any]]

输出格式

return_value = [
    {
        'template_parameters': {},
        'messages': [
            {
                'content': '<jailbreak prompt> <adversarial question>',
                'role': 'user'
            },
            {
                'content': "<response from endpoint>",
                'role': 'assistant',
                'context': None
            }
        ],
        '$schema': 'http://azureml/sdk-2-0/ChatConversation.json'
    }]
}

子模块#