提示工程L1:关键原则

news2024/11/24 21:08:01

提示工程指南:关键原则

一、 环境配置

chatgpt使用有诸多限制,所以采用国产模型来代替,加载开源的chatGLM模型,使用ChatGLM-6b的INT8版本。

chatGLM6b在LLM匿名竞技场中的排名:
在这里插入图片描述

import os
import torch
import warnings
from transformers import AutoTokenizer, AutoModel

warnings.filterwarnings('ignore')
tokenizer = AutoTokenizer.from_pretrained("./chatglm-6b", trust_remote_code=True)
model = AutoModel.from_pretrained("./chatglm-6b", trust_remote_code=True).half().quantize(8).to('cuda')
Loading checkpoint shards:   0%|          | 0/8 [00:00<?, ?it/s]

辅助函数
输入提示,返回生成结果和历史

def get_completion(prompt, history, temperature=0.9):
    
    response, history = model.chat(tokenizer=tokenizer, query=prompt, history=history,
                                   temperature=temperature)
    return response, history

二、两个基本原则

原则一:编写清晰、具体的指令

  你应该通过提供尽可能清晰和具体的指令来表达您希望模型执行的操作。这将引导模型给出正确的输出,并减少你得到无关或不正确响应的可能。编写清晰的指令不意味着简短的指令,因为在许多情况下,更长的提示实际上更清晰且提供了更多上下文,这实际上可能导致更详细更相关的输出。

策略一:使用分隔符表示输入的不同部分

分隔符可以是任一种: ```,"",<>,\<tag>,<\tag>,能够使模型明确知道这是一个独立部分。使用定界符也是一种有用的技术,可以避免提示注入。提示注入,是指如果允许用户向提示中添加一些输入,它们可能会向模型提供一些冲突的指令,从而使模型遵循错误的指令而不是执行你所期望的操作。

# 需要总结的文本内容部分
text = f"""
您应该通过提供尽可能清晰和具体的说明来表达您希望模型执行的操作。\
这将引导模型达到所需的输出,并减少收到不相关或不正确响应的机会。\
不要将编写清晰的提示与编写简短的提示混淆。在许多情况下,\
较长的提示为模型提供了更清晰的上下文,这可以导致更详细和相关输出。
"""
# 指令部分
prompt = f"""
Summarize the text delimited by triple backticks \ 
into a single sentence.
​```{text}```
"""
response, history = get_completion(prompt, [])
print(response)
 By providing clear and detailed instructions for the actions you want the model to perform, you can guide the model towards the desired output and reduce the chance of receiving relevant or incorrect responses. It's important to avoid混淆 between clear and简短的 instructions. In many cases, longer instructions provide a更清晰 context for the model, leading to more detailed and relevant output.

下面简单修改一下prompt,加上use chinese

text = f"""
您应该通过提供尽可能清晰和具体的说明来表达您希望模型执行的操作。\
这将引导模型达到所需的输出,并减少收到不相关或不正确响应的机会。\
不要将编写清晰的提示与编写简短的提示混淆。在许多情况下,\
较长的提示为模型提供了更清晰的上下文,这可以导致更详细和相关输出。
"""
prompt = f"""
Summarize the text delimited by triple backticks \ 
into a single sentence use chinese.
​```{text}```
"""
response, history = get_completion(prompt, [])
print(response)
表述清晰和具体,以引导模型执行所需的操作,并减少收到不相关或不正确响应的机会。提供尽可能清晰的提示,但不要将简短的提示混淆为清晰的提示。较长的提示可以为模型提供更清晰的上下文,导致更详细和相关的输出。
text = f"""
您应该通过提供尽可能清晰和具体的说明来表达您希望模型执行的操作。\
这将引导模型达到所需的输出,并减少收到不相关或不正确响应的机会。\
不要将编写清晰的提示与编写简短的提示混淆。在许多情况下,\
较长的提示为模型提供了更清晰的上下文,这可以导致更详细和相关输出。
"""
prompt = f"""
用一句话总结由三反引号分隔的文本。
​```{text}```
"""
response, history = get_completion(prompt, [])
print(response)
使用清晰和具体的说明来引导模型执行操作,避免收到不相关或不正确响应,同时不要将编写清晰的提示与编写简短的提示混淆,较长的提示可以为模型提供更清晰的上下文,导致更详细和相关的输出。
text = f"""
You should express what you want a model to do by \ 
providing instructions that are as clear and \ 
specific as you can possibly make them. \ 
This will guide the model towards the desired output, \ 
and reduce the chances of receiving irrelevant \ 
or incorrect responses. Don't confuse writing a \ 
clear prompt with writing a short prompt. \ 
In many cases, longer prompts provide more clarity \ 
and context for the model, which can lead to \ 
more detailed and relevant outputs.
"""
prompt = f"""
Summarize the text delimited by triple backticks \ 
into a single sentence.
​```{text}```
"""

response, history = get_completion(prompt, [])
print(response)
Providing clear and specific instructions for a model can help reduce the chances of its receiving relevant or incorrect responses. It's important to avoid confusion about the desired output and to lengthen prompts to provide more context for the model.

策略2:结构化模型的输出

prompt = f"""
Generate a list of three made-up book titles along \ 
with their authors and genres. 
Provide them in JSON format with the following keys: 
book_id, title, author, genre, use chinese.
"""
response, hisotry = get_completion(prompt, history)
print(response)
Here's a list of three made-up book titles in JSON format with their authors and genres:

```json
{
  "book_id": 1,
  "title": "我的奇妙冒险",
  "author": "小明",
  " genre": "奇幻"
}

{
  "book_id": 2,
  "title": "神秘岛",
  "author": "小红",
  " genre": "科幻"
}

{
  "book_id": 3,
  "title": "哈利波特与魔法石",
  "author": "哈利波特",
  " genre": "魔法奇幻"
}
```

策略 3: 要求模型检查条件是否满足

如果任务有假设条件并且这些条件不一定被满足,那么我们可以要求模型首先检查这些假设条件,如果不满足则指出来,并停止任务。如果满足执行任务。现在我将复制一段描述如何泡茶的段落到提示中。提示是,如果文本包含一系列指示,请将这些指示重写为以下格式,然后写出步骤说明。如果文本不包含一系列指示,则只需写下“未提供步骤”。

text_1 = f"""
Making a cup of tea is easy! First, you need to get some \ 
water boiling. While that's happening, \ 
grab a cup and put a tea bag in it. Once the water is \ 
hot enough, just pour it over the tea bag. \ 
Let it sit for a bit so the tea can steep. After a \ 
few minutes, take out the tea bag. If you \ 
like, you can add some sugar or milk to taste. \ 
And that's it! You've got yourself a delicious \ 
cup of tea to enjoy.
"""
prompt = f"""
You will be provided with text delimited by triple quotes. 
If it contains a sequence of instructions, \ 
re-write those instructions in the following format:

Step 1 - ...
Step 2 - …
…
Step N - …

If the text does not contain a sequence of instructions, \ 
then simply write \"No steps provided.\"

\"\"\"{text_1}\"\"\"
"""
response, hisotry = get_completion(prompt, history)
print("Completion for Text 1:")
print(response)
Completion for Text 1:
No steps provided.
text_1 = f"""
泡一杯茶很容易。首先,需要把水烧开。\
在等待期间,拿一个杯子并把茶包放进去。\
一旦水足够热,就把它倒在茶包上。\
等待一会儿,让茶叶浸泡。几分钟后,取出茶包。\
如果你愿意,可以加一些糖或牛奶调味。\
就这样,你可以享受一杯美味的茶了。
"""
prompt = f"""
您将获得由三个引号括起来的文本。\
如果它包含一系列的指令,则需要按照以下格式重新编写这些指令:

第一步 - ...
第二步 - …
…
第N步 - …

如果不包含一系列的指令,则直接写“未提供步骤”。"
\"\"\"{text_1}\"\"\"
"""
response, hisotry = get_completion(prompt, [])
print("Completion for Text 1:")
print(response)
Completion for Text 1:
第一步: 把水烧开
第二步: 拿一个杯子并把茶包放进去
第三步: 一旦水足够热,就把它倒在茶包上
第四步: 等待一会儿,让茶叶浸泡
第五步: 几分钟后,取出茶包
第六步: 如果你愿意,可以加一些糖或牛奶调味
text_2 = f"""
The sun is shining brightly today, and the birds are \
singing. It's a beautiful day to go for a \ 
walk in the park. The flowers are blooming, and the \ 
trees are swaying gently in the breeze. People \ 
are out and about, enjoying the lovely weather. \ 
Some are having picnics, while others are playing \ 
games or simply relaxing on the grass. It's a \ 
perfect day to spend time outdoors and appreciate the \ 
beauty of nature.
"""
prompt = f"""
You will be provided with text delimited by triple quotes. 
If it contains a sequence of instructions, \ 
re-write those instructions in the following format:

Step 1 - ...
Step 2 - …
…
Step N - …

If the text does not contain a sequence of instructions, \ 
then simply write \"No steps provided.\"

\"\"\"{text_2}\"\"\"
"""
response, hisotry = get_completion(prompt, history)
print("Completion for Text 2:")
print(response)
Completion for Text 2:
No steps provided.
text_2 = f"""
今天阳光明媚,鸟儿在歌唱。\
这是一个去公园散步的美好日子。\
鲜花盛开,树枝在微风中轻轻摇曳。\
人们外出享受着这美好的天气,有些人在野餐,有些人在玩游戏或者在草地上放松。\
这是一个完美的日子,可以在户外度过并欣赏大自然的美景。
"""
prompt = f"""
您将获得由三个引号括起来的文本。\
如果它包含一系列的指令,则需要按照以下格式重新编写这些指令:

第一步 - ...
第二步 - …
…
第N步 - …

如果文本中不包含一系列的指令,则直接写“未提供步骤”。"
\"\"\"{text_2}\"\"\"
"""
response, hisotry = get_completion(prompt, history, temperature=0.99)
print(response)
第一步: 阳光明媚,鸟儿在歌唱。
第二步: 去公园散步,欣赏鲜花和树枝。
第三步: 感受微风,放松身心。
第四步: 享受野餐或玩游戏的时光。
第五步: 在草地上享受阳光和清新的空气。
第六步: 欣赏大自然的美景,感受大自然的奇妙。

未提供步骤。

策略 4: 少量提示

  告诉模型它的任务是以一致的风格回答问题,我们提供了一个孩子和祖父之间的对话示例。孩子说:“教我耐心”,祖父用类比的方式回答。既然我们要求模型用一致的语气回答。

prompt = f"""
Your task is to answer in a consistent style.

<child>: Teach me about patience.

<grandparent>: The river that carves the deepest valley flows from a modest spring; the \ 
grandest symphony originates from a single note; the most intricate tapestry begins with a solitary thread.

<child>: Teach me about resilience.
"""
response, hisotry = get_completion(prompt, [])
print(response)
<Grandparent>: Resilience is the ability to withstand and overcome挫折 and adversity. It is the key to building up a strong character and standing up to the challenges that life throws at us. It is the ability to come back from a difficult situation and carry on with your life in a positive way.
prompt = f"""
你的任务是以一致的风格回答问题。

<孩子>: 教我耐心。

<祖父母>: 挖出最深峡谷的河流源于一处不起眼的泉眼;最宏伟的交响乐从单一的音符开始;最复杂的挂毯以一根孤独的线开始编织。

<孩子>: 教我韧性。
"""
response, hisotry = get_completion(prompt, [])
print(response)
韧性是一种品质,指物体在受到外力作用时不易断裂或变形的能力。在生活中,韧性可以帮助我们更好地应对挑战和压力。以下是一些提高韧性的方法:

1. 坚持锻炼:锻炼可以增强身体的韧性,使我们更加坚韧和灵活。

2. 学会放松:过度紧张和焦虑会影响韧性,因此学会放松身心可以帮助我们更好地控制自己的情绪和思维。

3. 学会规划:有目的地安排时间和任务可以提高我们的韧性,因为我们可以更好地控制自己的行为和情绪。

4. 培养耐心:耐心是一种重要的品质,可以帮助我们更好地处理困难和挑战。

5. 学会包容:包容他人的不同观点和想法可以帮助我们更好地控制自己的情绪和态度,从而提高我们的韧性。

原则2-给模型充足的思考时间

给模型充足的思考时间,如果模型由于急于得出错误的结论而出现了推理错误,您可以尝试重新构造查询,要求模型在提供最终答案之前进行一系列相关推理。另一种思考方式是,如果您给模型一个时间太短或用太少的字数来完成的任务,它可能会猜测答案,这个答案很可能是错误的。你知道,这对一个人来说也一样。

策略1:指定完成任务所需的具体步骤

下面的文本是描述杰克和吉尔(Jack and Jill)故事的段落。在提示中,指令是执行一系列的动作:

  • 第一,用一句话总结由三个反引号包围的文本。
  • 第二,将摘要翻译成法语。
  • 第三,列出法语摘要中的每个名字。
  • 第四,输出一个JSON对象,包含以下键:chinese_summary和num_names。
  • 最后,我们希望用换行符分隔答案。
text = f"""
在一个迷人的村庄里,兄妹杰克和吉尔出发去一个山顶井里打水。\
他们一边唱着欢乐的歌,一边往上爬,\
然而不幸降临——杰克绊了一块石头,从山上滚了下来,吉尔紧随其后。\
虽然略有些摔伤,但他们还是回到了温馨的家中。\
尽管出了这样的意外,他们的冒险精神依然没有减弱,继续充满愉悦地探索。
"""
# example 1
prompt = f"""
执行以下操作:
1-用一句话概括下面用三个反引号括起来的文本。
2-将摘要翻译成英语。
3-在英语语摘要中列出每个人名。
4-输出一个 JSON 对象,其中包含以下键:English_summary,num_names。

请用换行符分隔您的答案。

Text:
​```{text}```
"""

response, hisotry = get_completion(prompt, [])
print("Completion for prompt:")
print(response)
Completion for prompt:
1. 概括:描述兄妹去山顶井里打水的故事,其中杰克意外滚下山,吉尔紧随其后摔伤,但他们依然充满冒险精神继续探索。
2. 翻译:

   在一个迷人的村庄里,兄妹杰克和吉尔出发去一个山顶井里打水。他们一边唱着欢乐的歌,一边往上爬,然而不幸降临——杰克绊了一块石头,从山上滚了下来,吉尔紧随其后。虽然略有些摔伤,但他们还是回到了温馨的家中。尽管出了这样的意外,他们的冒险精神依然没有减弱,继续充满愉悦地探索。
3. 列出每个人名:

   杰克,吉尔,小村庄里的其他人。
4. 输出 JSON 对象:

   ```
   {
     "English_summary": "兄妹去山顶井里打水的故事,其中杰克意外滚下山,吉尔紧随其后摔伤,但他们依然充满冒险精神继续探索。",
     "num_names": 3
   }
   ```
  • 概括:✔
  • 翻译:✘
  • 人名:✘
  • 格式化:✔

中英文提示效果对比

prompt = f"""
Your task is to perform the following actions: 
1 - Summarize the following text delimited by 
  <> with 1 sentence.
2 - Translate the summary into Chinese.
3 - List each name in the Chinese summary.
4 - Output a json object that contains the 
  following keys: Chinese_summary, num_names.

Use the following format:
Text: <text to summarize>
Summary: <summary>
Translation: <summary translation>
Names: <list of names in Italian summary>
Output JSON: <json with summary and num_names>

Text: <{text}>
"""
response, hisotry = get_completion(prompt, history)
print("\nCompletion for prompt 2:")
print(response)
Completion for prompt 2:
Summary: 

In an迷人的村庄,杰克和吉尔出发去山顶井里打水,但他们在攀爬过程中遭遇不幸,杰克绊了一块石头并从山上滚了下来,吉尔紧随其后。虽然他们略有些摔伤,但他们还是回到了家中。尽管出了这样的意外,他们的冒险精神依然没有减弱,继续充满愉悦地探索。

Translation:

In a beautiful village, Jack and吉尔 went to the top of a mountain well to fetch water, but they got into an accident while climbing. Jack fell from the mountain and got injured, but吉尔 followed suit. Although they were slightly injured, they returned home feeling brave and excited to explore more.

Names: 

In the summary, there are two names mentioned,杰克和吉尔. The list of names in the Italian summary does not include these two names.

Output JSON: 

```
{
  "Chinese_summary": "杰克和吉尔去山顶井里打水,但他们在攀爬过程中遭遇不幸,杰克绊了一块石头并从山上滚了下来,吉尔紧随其后。虽然他们略有些摔伤,但他们还是回到了家中。尽管出了这样的意外,他们的冒险精神依然没有减弱,继续充满愉悦地探索。",
  "num_names": 2
}
```

prompt = f"""
1-用一句话概括下面用<>括起来的文本。
2-将摘要翻译成英语。
3-在英语摘要中列出每个名称。
4-输出一个 JSON 对象,其中包含以下键:English_summary,num_names。

请使用以下格式:
文本:<要总结的文本>
摘要:<摘要>
翻译:<摘要的翻译>
名称:<英语摘要中的名称列表>
输出 JSON:<带有 English_summary 和 num_names 的 JSON>

Text: <{text}>
"""
response, hisotry = get_completion(prompt, [])
print("\nCompletion for prompt :")
print(response)
Completion for prompt :
摘要:

在迷人的村庄里,兄妹杰克和吉尔出发去山顶井里打水,但杰克绊了一块石头并从山上滚了下来,吉尔紧随其后。虽然略有些摔伤,但他们还是回到了家中。尽管出了这样的意外,他们的冒险精神依然没有减弱,继续充满愉悦地探索。

翻译:

On a charming village,兄妹杰克 and吉尔 set out to draw water from a mountain well. They sing happy songs as they climb, but unfortunately, something goes wrong -杰克 falls from the mountain and摔了下来, while吉尔 follows him. Although they are slightly injured, they return home safely. Although they faced such an unexpected accident, their adventure spirit did not减弱, and they continued to explore with joy.

名称:

The names in the English summary are: 杰克, 吉尔, and the mountain.

对于chatGLM-6B来说,英文指令效果更好一些。

策略 2: 指导模型(在急于得出结论之前)制定自己的解决方案

有时候,我们明确指导模型在做出结论之前自行推理出解决方案,会得到更好的结果,这和之前提到的给模型时间思考问题,不要急于下结论的概念相同。因此,在这个问题中,我们要求模型确定学生的解决方案是否正确。

prompt = f"""
判断学生的解决方案是否正确。

问题:
我正在建造一个太阳能发电站,需要帮助计算建设费用。

    土地价格为100美元/平方英尺。
    太阳能电池板的价格为250美元/平方英尺。
    维护费用为每年支付固定的100000美元,另外支付10美元/平方英尺。
    现假设发电站的面积为x平方英尺,首年运营的总费用是多少。

学生的解决方案:
设x为发电站的大小,单位为平方英尺。
费用:

    土地费用:100x
    太阳能电池板费用:250x
    维护费用:100000+100x
    总费用:100x+250x+100000+100x=450x+100000
"""
response, hisotry = get_completion(prompt, [], temperature=0.9)
print(response)
学生的解决方案是正确的。根据题目中提供的信息,我们可以列出所有相关的费用,然后将它们相加来计算总费用。土地价格为100美元/平方英尺,因此x乘以100等于土地费用;太阳能电池板价格为250美元/平方英尺,因此250x等于太阳能电池板费用;维护费用为每年支付固定的100000美元,另外支付10美元/平方英尺,因此100000+10x等于维护费用。将这些费用相加,得到:

100x + 250x + 100000 + 10x = 450x + 100000

将等式两边都除以450,得到:

x = 92.3

因此,发电站的最大面积为92.3平方英尺。

  学生的答案是错的,维护费用应该是:100000+10x,总费用:360x+100000。为了解决这个问题,我们需要让模型自己解决问题,然后将自己的解决方案与学生的解决方案进行比较,评估学生的解决方案是否正确。在此之前,不要判断学生的解决方案是否正确,一定要确保自己已经清晰地理解了这个问题。

prompt = f"""
请判断学生的解决方案是否正确,请通过如下步骤解决这个问题:

步骤:

    首先,自己计算一下首年的费用,仔细计算维护的费用。
    然后将你的解决方案与学生的解决方案进行比较,然后判断学生的解决方案是否正确。
    在自己完成问题之前,请勿决定学生的解决方案是否正确。

使用以下格式:

    问题:
    学生的解决方案:学生的解决方案文本
    实际解决方案和步骤:实际解决方案和步骤文本
    学生的解决方案和实际解决方案是否相同:是或否
    学生的成绩:正确或不正确

问题:
我正在建造一个太阳能发电站,需要帮助计算财务。

    土地价格为100美元/平方英尺。
    太阳能电池板的价格为250美元/平方英尺。
    维护费用为每年支付固定的100000美元,
    另外维护单价为10美元/平方英尺。
    现假设发电站的面积为x平方英尺,首年运营的总费用是多少。

学生的解决方案:
太阳能发电站的大小为x平方英尺。
费用:

    土地费用:100x
    太阳能电池板费用:250x
    维护费用:100000+100x
    总费用:100x+250x+100000+100x=450x+100,000

实际解决方案和步骤:
"""
response, hisotry = get_completion(prompt, [], temperature=0.95)
print(response)
实际解决方案和步骤:

由于学生的解决方案中没有考虑太阳能电池板的使用寿命和维护费用,因此他的解决方案是错误的。

实际解决方案和步骤:

1. 计算土地费用和太阳能电池板费用。根据题目中提供的信息,土地价格为100美元/平方英尺,太阳能电池板的价格为250美元/平方英尺。因此,土地费用为100x,太阳能电池板费用为250x。

2. 计算每年的维护费用。维护费用为每年支付固定的100000美元,并且维护单价为10美元/平方英尺。因此,每年的维护费用为100000+10x。

3. 计算首年运营的总费用。由于发电站的面积为x平方英尺,因此首年运营总费用为100x+250x+100000+10x=450x+100,000美元。

4. 比较实际解决方案和步骤,并判断学生的解决方案是否正确。由于学生的解决方案中没有考虑太阳能电池板的使用寿命和维护费用,因此他的解决方案是错误的。实际解决方案和步骤计算出了正确的首年运营总费用,即450x+100,000美元。因此,学生的解决方案和实际解决方案是否相同:是。学生的成绩:正确。

提示词写的比问题还复杂:

  • 土地费用 100x : ✔
  • 太阳能板 250x : ✔
  • 维护费用 100000+10x : ✔
  • 总费用:450x+100000 : ✘

模型的局限性

  模型并不会完美地记忆所见到的全部信息,因此它并不十分清楚它的知识边界。 这意味着它回答可能会虚构听起来很有道理但实际上不正确的东西。我们将这些捏造的想法称为幻觉。因此,我将向您展示一个例子,在这个例子中模型会产生幻觉。编造一个来自真实牙刷公司的虚构产品名称的描述。

prompt = f"""
Tell me about AeroGlide UltraSlim Smart Toothbrush by Boie
"""
response, history = get_completion(prompt, [], temperature=0.95)
print(response)
TheAeroGlide UltraSlim Smart Toothbrush by Boie is a professional-quality Toothbrush designed to help improve your smile's hygiene and appearance. It features a sleek and slim design, with a深入-clean philosophy that allows for thorough cleaning of your teeth. The brush is made of high-quality materials and is equipped with advanced technology, including a four-pronged brush head that can effectively clean your teeth in a single pass, and a powerful cleaning system that minimizes the risk of developing gum disease and other health problems. The brush also has a built-in LED light system that illuminates areas of your teeth that need extra attention, allowing you to see where you're making mistakes. Overall, theAeroGlide UltraSlim Smart Toothbrush is a stylish and effective tool for improving your hygiene and smile.
prompt = f"""
告诉我 Boie 公司生产的 AeroGlide UltraSlim Smart Toothbrush 的相关信息
"""
response, history = get_completion(prompt, [], temperature=0.95)
print(response)
Boie 公司生产的AeroGlide UltraSlim Smart Toothbrush是一款由Boie公司推出的高端智能toothbrush。以下是一些相关的信息:

1. 设计:AeroGlide UltraSlim Smart Toothbrush采用先进的设计,具有出色的性能和耐用性。它的长度只有3.6厘米,直径是1.5厘米,可以轻松地穿过牙缝和脸颊,同时不会刮伤皮肤。

2. 功能:AeroGlide UltraSlim Smart Toothbrush还配备了多种智能功能,例如自动清洁模式和智能旋转控制。它可以根据不同的场景和需求自动调整清洁模式,确保每次使用都能够彻底清洁牙齿。

3. 材料:AeroGlide UltraSlim Smart Toothbrush采用高品质材料制作,包括不锈钢材料和柔软的硅胶材料。这种材料能够提供卓越的性能和耐用性,同时不会损坏牙齿和牙龈。

4. 价格:AeroGlide UltraSlim Smart Toothbrush的价格相对较高,是一款高端智能toothbrush,适合那些追求高品质和高性能的口腔护理用户。

5. 品牌保障:Boie公司是一家拥有悠久历史和高品质产品的品牌,其产品在全球范围内都备受好评。因此,如果正在寻找一款高品质的智能toothbrush,Boie公司的AeroGlide UltraSlim Smart Toothbrush是一个不错的选择。

总结:

  1. chatglm-6b 对应中英文混合的提示,回复也会夹杂着中文,但意思还算流畅。
  2. 条件检查能力不足,可能是精度不够,毕竟INT8。
  3. 有时候模型对英文指令的理解比中文好。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/514139.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

大学生找工作防坑指南,收藏10000+

2023年就业季即将抵达&#xff0c;你害怕了吗&#xff1f; 据数据统计&#xff0c;今年的应届生人数再创新高&#xff0c;将达到1158万人&#xff0c;相信同学们看到这串数字已经感到毛骨悚然。然而大学生要面临的挑战不仅这些&#xff0c;最残酷的考验还在最后。 作为初出茅庐…

某些科技外企结束在中国市场直接运营,你如何看?

在新的竞争态势下&#xff0c; 向左走&#xff0c;还是向右走…… 【全球存储观察 &#xff5c; 热点关注】前些天&#xff0c;我发了一篇文章《你如何看LinkedIn“领英职场”将于8月9日起停止中国服务&#xff1f;》引发了业内朋友的热议&#xff0c;大家一致认为&#xff0c…

const和int const 理解笔记(图、代码、讲解)

本文参考了 》C 中的 const & &#xff08;常引用&#xff09;参数 - 知乎 因为博文写的很详细&#xff0c;所以博主按着自己的理解写了demo&#xff0c; 和一些方便自己理解的备注。 自学的时候看到了下面这个代码&#xff0c;所以 const&是啥 首先&#xff0c;一句…

C++中继承的语法和使用

C入门必看 继承的定义及概念概念定义 基类和派生类对象赋值转换继承后的作用域派生类默认的6个成员函数该何去何从&#xff1f; 多继承 面向对象语言3大特性&#xff1a;封装、继承、多态。 继承的定义及概念 概念 继承(inheritance)机制是面向对象程序设计使代码可以复用的最…

Dubbo接口测试没你想的那么高大上

主题&#xff1a;Dubbo接口测试没你想的那么高大上 一、Dubbo是什么&#xff1f; Dubbo是阿里巴巴公司开源的一个高性能优秀的服务框架一款分布式服务框架、高性能和透明化的RPC远程服务调用方案、SOA服务治理方案下图是阿里巴巴技术解决方案演变图&#xff0c;从单应用->…

卡特兰数三个通项公式的推导

前提条件&#xff1a; 有两种操作&#xff0c;一种操作的次数不能超过另外一个&#xff0c;或者是不能有交集这些操作的合法方案数&#xff0c;通常是卡特兰数 情景&#xff1a; 1&#xff09;n个0和n个1构成的字串&#xff0c;所有的前缀子串1的个数不超过0的个数&#xff…

月薪低于5千元必看,省钱购物攻略,本人亲测有效

作为资深的网购用户&#xff0c;我不允许我的姐妹们还不知道&#xff0c;网上购物如何省钱&#xff1f;如果你是学生党&#xff0c;或者月薪低于5千元&#xff0c;一定要看一看&#xff01;学会了不但能提升生活品质&#xff0c;还能帮你省下好多钱~ 同样的东西&#xff0c;我…

云渲染动画价格一般多少?

云渲染是什么&#xff1f; 云渲染就是通过互联网将用户本地需要渲染的文件上传到云端服务器中&#xff0c;再通过云端庞大的计算机集群资源进行运算操作&#xff0c;帮助用户在云端完成渲染工作后&#xff0c;用户再下载到本地的过程&#xff0c;整个过程操作十分简便。 云渲染…

解释一下泛型擦除?为什么java必须强制?

一、概述&#xff1a; 在解释什么是泛型擦除之前我们得先了解什么是Java泛型。所谓的泛型就是参数化的类型。这就意思着我们可以具体的类型作为一个参数传递给方法、类、接口。 为什么我们需要泛型呢&#xff1f;首先我们都知道在java里&#xff0c;Object就是对象的父类。Ob…

2023 年10款「会议管理」软件对比

在这篇文章中&#xff0c;我们将介绍2023年你可以尝试的10个会议管理软件。我们还将介绍会议管理的基础知识&#xff0c;涉及的步骤&#xff0c;以及如何创建会议议程。 2023 年 10 款会议管理软件对比 会议管理软件解决方案是一种数字工具&#xff0c;可以让个人和团队计划、…

一、【Pytorch笔记】pytorch简介,开发环境安装,搭建

一、下载Anaconda Anaconda包括Conda、Python以及一大堆安装好的工具包&#xff08;其他深度学习里用到的东西&#xff09;&#xff0c;比如&#xff1a;numpy、pandas等。所以下了Anaconda就不用下载Python进入Anaconda官网&#xff1a;https://www.anaconda.com/download/下…

【数字 IC】从底层重新认识 D 触发器、建立时间和保持时间

目录 1. NMOS 和 PMOS 2. MOS 管搭建逻辑门 3. 锁存器和触发器 3.1 交叉耦合反相器 3.2 SR 锁存器 3.3 D 锁存器 3.4 D 触发器 4. D 触发器的建立、保持时间 1. NMOS 和 PMOS MOSFET&#xff08;金属氧化物半导体场效应晶体管&#xff09;或 IGFET&#xff08;绝缘栅场…

Web3中文|又一巨头入局?亚马逊或将正式进军NFT领域

行业的风向总随着巨头公司而动。 自从亚马逊公司推出 NFT 市场的消息传出后&#xff0c;大众的目光就锁定在了亚马逊的身上&#xff0c;作为科技巨头的亚马逊入局 NFT 对整个行业都有着举足轻重的意义。 受 FTX 的崩溃的影响&#xff0c;亚马逊 NFT 市场的推出几经波折&#xf…

InnoDB和MySAM有什么区别?

首先&#xff0c;MySAM和InnoDB都是mysql里面的两个存储引擎&#xff0c;mysql5.5版本之前的存储引擎默认是MySAM&#xff0c;mysql5.5版本以后的存储引擎默认是InnoDB,它们底层数据结构都是基于B树的。 Mylsam存储引擎&#xff1a; Mylsam索引是非聚簇索引&#xff0c;Mylsa…

旅游景点剧本杀小程序

旅游景点剧本杀小程序是一种基于微信、支付宝等平台的应用程序&#xff0c;其主要功能包括以下几个方面&#xff1a; 游戏规则和背景介绍&#xff1a;小程序可以提供游戏规则和背景介绍&#xff0c;让玩家更好地了解游戏内容和任务。 队伍组建和角色选择&#xff1a;在…

API网关简介|TaobaoAPI接入

API网关是什么 在日常工作中&#xff0c;不同的场合下&#xff0c;我们可能听说过很多次网关这个名称&#xff0c;这里说的网关特指API网关&#xff08;API Gataway&#xff09;。字面意思是指将所有API的调用统一接入API网关层&#xff0c;由网关层负责接入和输出。 那么在什…

智慧安监方案:AI及视频技术在企业安全生产中的风险预警作用

安全生产是企业生产管理中十分重要部分&#xff0c;在实际场景中&#xff0c;很多作业人员普遍存在安全意识薄弱的问题&#xff0c;大大增加了作业风险。如何建立健全的安全风险研判与监测预警机制&#xff0c;引入大数据、视频识别等技术手段&#xff0c;对安全生产领域潜在风…

EasyCVR视频融合平台设备接入的步骤及端口配置的相关注意事项

EasyCVR视频融合平台基于云边端架构&#xff0c;能实现视频汇聚与集中管理、视频多端分发、多屏展示。平台可支持多协议与多类型设备接入&#xff0c;具体包括国标GB28181、RTMP、RTSP/Onvif、海康Ehome、海康SDK、大华SDK、宇视SDK等&#xff0c;能对外分发RTMP、RTSP、HTTP-F…

SYSU程设c++(第十二周)派生的类型兼容性、对象的类型转换、多重继承、虚基类

派生的类型兼容性 1.可以将派生类的对象赋值给基类对象&#xff0c;反之不可 2.可以将公有派生类对象赋值给基类指针&#xff0c;反之不可 &#xff08;该点必须是公有派生类才兼容&#xff09; 即基类可以被派生类赋值&#xff0c;基类兼容派生类&#xff0c;派生类不兼容基…

采购系统平台在选型中需要考虑那几点?

对于一家企业来说&#xff0c;上线一套系统&#xff0c;不仅仅意味着将业务实现了线上化&#xff0c;还有流程&#xff0c;规则&#xff0c;甚至是人的行为习惯都要随之改变&#xff0c;今天小编和大家一起聊聊采购系统平台选型&#xff0c;需要关注的几点。 1.系统和自身需求的…