类别:

:doc:`/sql-reference/functions-string`(大型语言模型)

COMPLETE (SNOWFLAKE.CORTEX)

在给出提示时,使用您选择的受支持语言模型生成响应(补全)。

语法

SNOWFLAKE.CORTEX.COMPLETE(
    <model>, <prompt_or_history> [ , <options> ] )
Copy

实参

必填:

model

指定要使用模型的字符串。指定以下值之一。

  • claude-3-5-sonnet

  • gemma-7b

  • jamba-1.5-mini

  • jamba-1.5-large

  • jamba-instruct

  • llama2-70b-chat

  • llama3-8b

  • llama3-70b

  • llama3.1-8b

  • llama3.1-70b

  • llama3.1-405b

  • llama3.2-1b

  • llama3.2-3b

  • llama3.3-70b

  • mistral-large

  • mistral-large2

  • mistral-7b

  • mixtral-8x7b

  • reka-core

  • reka-flash

  • snowflake-arctic

  • snowflake-llama-3.1-405b

  • snowflake-llama-3.3-70b

受支持的模型可能会产生不同的 费用

prompt_or_history

用于生成补全的提示或对话历史记录。

如果 options 不存在,给出的提示必须是字符串。

如果 options 存在,则实参必须是按时间顺序表示对话的对象的 数组。每个 对象 必须包含一个 role 键和一个 content 键。content 值是提示或响应,具体取决于角色。角色必须是以下项之一。

role

content

'system'

向语言模型提供的初始纯英文提示,为其提供响应风格的背景信息和说明。例如,“Respond in the style of a pirate.”。该模型不会根据系统提示生成回复。只能提供一个系统提示,如果存在,则必须是数组中的第一个。

'user'

用户提供的提示。必须遵循系统提示(如果有)或助手响应。

'assistant'

之前由语言模型提供的响应。必须遵循用户提示。过去的响应可用于提供有状态的对话体验;请参阅 使用说明

可选:

options

一个 对象,包含下列影响模型超参数的零个或多个选项。请参阅 LLM 设置 (https://www.promptingguide.ai/introduction/settings)。

  • temperature:一个从 0 到 1(含)的值,用于控制语言模型输出的随机性。温度越高(例如 0.7),输出就越多样和随机,而温度越低(例如 0.2),输出就越确定和集中。

    默认值:0

  • top_p:一个从 0 到 1(含)的值,用于控制语言模型的随机性和多样性,t通常用作 temperature 的替代项。不同的是,top_p 限制模型输出的可能令牌集,而 temperature 影响每个步骤选择哪些令牌。

    默认值:0

  • max_tokens:设置响应中输出令牌的最大数量。数值小会导致响应截断。

    默认值:4096

  • guardrails:使用 Cortex Guard 筛选来自语言模型的潜在不安全和有害的响应。TRUE 或 FALSE。

    默认:FALSE

指定 options 实参(即使它是空对象 ({})),它会影响解释 prompt 实参的方式和以及响应的格式。

返回

未指定 options 实参时,会返回字符串。

给出 options 实参时,会返回包含下列键的 JSON 对象的字符串表示形式。

  • "choices":模型响应的数组。(目前只提供一个响应。)每个响应都是一个包含 "messages" 键的对象,其值为模型对最新提示的响应。

  • "created":生成响应时的 UNIX 时间戳(自 1970 年 1 月 1 日午夜以来的秒数)。

  • "model":创建响应的模型的名称。

  • "usage":记录此补全所消耗和生成的令牌数的对象。包括以下子键:

    • "completion_tokens":生成的响应中的令牌数。

    • "prompt_tokens":提示中的令牌数。

    • "total_tokens":消耗的令牌总数,这是其他两个值的总和。

访问控制要求

用户必须使用已被授予 SNOWFLAKE.CORTEX_USER 数据库角色 的角色。有关此权限的更多信息,请参阅 所需权限

使用说明

COMPLETE 不会保留从一个调用到下一个调用的任何状态。要使用 COMPLETE 函数提供有状态的对话式体验,请将对话中的所有先前用户提示和模型响应作为 prompt_or_history 数组的一部分进行传递(请参阅 聊天模型模板 (link removed))。请记住,每“轮”处理的令牌数量都会增加,费用也会按比例增加。

示例

单个响应

生成单个响应:

SELECT SNOWFLAKE.CORTEX.COMPLETE('snowflake-arctic', 'What are large language models?');
Copy

来自表列的响应

以下示例从表的每一行生成响应(在本例中,contentreviews 表中的一列)。reviews 表包含名为 review_content 的列,其中包含用户提交的评论文本。查询返回对每个评论的评论。

SELECT SNOWFLAKE.CORTEX.COMPLETE(
    'mistral-large',
        CONCAT('Critique this review in bullet points: <review>', content, '</review>')
) FROM reviews LIMIT 10;
Copy

小技巧

如本例所示,您可以使用提示符中的标记来控制生成的响应类型。有关技巧,请参阅 提示 LLaMA 2 指南 (https://replicate.com/blog/how-to-prompt-llama)。

控制温度和令牌

此示例说明在单个响应中使用函数的 options 实参来控制推理超参数。请注意,在函数的这种形式中,提示必须以数组的形式提供,因为这种形式支持多个提示和响应。

SELECT SNOWFLAKE.CORTEX.COMPLETE(
    'llama2-70b-chat',
    [
        {
            'role': 'user',
            'content': 'how does a snowflake get its unique pattern?'
        }
    ],
    {
        'temperature': 0.7,
        'max_tokens': 10
    }
);
Copy

响应是包含来自语言模型的消息和其他信息的 JSON 对象。请注意,响应按照 options 实参的指示截断。

{
    "choices": [
        {
            "messages": " The unique pattern on a snowflake is"
        }
    ],
    "created": 1708536426,
    "model": "llama2-70b-chat",
    "usage": {
        "completion_tokens": 10,
        "prompt_tokens": 22,
        "guardrail_tokens": 0,
        "total_tokens": 32
    }
}
Copy

控制安全

本示例说明了如何使用 Cortex Guard guardrails 实参来筛选语言模型中不安全和有害的响应。

SELECT SNOWFLAKE.CORTEX.COMPLETE(
    'mistral-7b',
    [
        {
            'role': 'user',
            'content': <'Prompt that generates an unsafe response'>
        }
    ],
    {
        'guardrails': true
    }
);
Copy

响应是一个 JSON 对象,例如:

{
    "choices": [
        {
            "messages": "Response filtered by Cortex Guard"
        }
    ],
    "created": 1718882934,
    "model": "mistral-7b",
    "usage": {
        "completion_tokens": 402,
        "prompt_tokens": 93,
        "guardrails _tokens": 677,
        "total_tokens": 1172
    }
}
Copy

示例:提供系统提示

此示例说明使用系统提示对电影评论进行情绪分析。这里的 prompt 实参是一个对象数组,每个对象都有一个适当的 role 值。

SELECT SNOWFLAKE.CORTEX.COMPLETE(
    'llama2-70b-chat',
    [
        {'role': 'system', 'content': 'You are a helpful AI assistant. Analyze the movie review text and determine the overall sentiment. Answer with just \"Positive\", \"Negative\", or \"Neutral\"' },
        {'role': 'user', 'content': 'this was really good'}
    ], {}
    ) as response;
Copy

响应是包含来自语言模型的响应和其他信息的 JSON 对象。

{
    "choices": [
        {
        "messages": " Positive"
        }
    ],
    "created": 1708479449,
    "model": "llama2-70b-chat",
    "usage": {
        "completion_tokens": 3,
        "prompt_tokens": 64,
        "total_tokens": 67
    }
}
Copy
语言: 中文