类别:

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

COMPLETE (SNOWFLAKE.CORTEX)

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

语法

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

实参

必填:

model

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

  • snowflake-arctic

  • mistral-large

  • reka-flash

  • reka-core

  • mixtral-8x7b

  • llama2-70b-chat

  • llama3-8b

  • llama3-70b

  • mistral-7b

  • gemma-7b

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

prompt_or_history

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

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

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

role

content

system

向语言模型提供的初始纯英文提示,为其提供响应风格的背景信息和说明。例如,“以海盗风格响应”。模型不会生成对系统提示的响应。只能提供一个系统提示,如果存在,则必须是数组中的第一个。

'user'

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

'assistant'

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

可选:

options

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

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

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

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

指定 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,
        "total_tokens": 32
    }
}
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
语言: 中文