|
|
试用 Colab 笔记本
|
在 GitHub 上查看笔记本
|
在此笔记本中,您将学习如何开始使用 PaLM API,该 API 可让您访问 Google 的最新大语言模型。在本部分中,您将学习如何使用 PaLM API 的文本生成功能。
设置
首先,下载并安装 PaLM API Python 库。
pip install -q google-generativeaiimport pprint
import google.generativeai as palm
获取 API 密钥
首先,您需要创建 API 密钥。
palm.configure(api_key='YOUR_API_KEY')
文本生成
使用 palm.list_models 函数查找可用模型:
models = [m for m in palm.list_models() if 'generateText' in m.supported_generation_methods]
model = models[0].name
print(model)
models/text-bison-001
使用 palm.generate_text 方法生成文本:
prompt = """
You are an expert at solving word problems.
Solve the following problem:
I have three houses, each with three cats.
each cat owns 4 mittens, and a hat. Each mitten was
knit from 7m of yarn, each hat from 4m.
How much yarn was needed to make all the items?
Think about it step by step, and show your work.
"""
completion = palm.generate_text(
model=model,
prompt=prompt,
temperature=0,
# The maximum length of the response
max_output_tokens=800,
)
print(completion.result)
There are 3 houses * 3 cats / house = 9 cats. So, 9 cats * 4 mittens / cat = 36 mittens were made. Also, 9 cats * 1 hat / cat = 9 hats were made. So, 36 mittens * 7m / mitten = 252m of yarn was used for the mittens. Also, 9 hats * 4m / hat = 36m of yarn was used for the hats. In total, 252m + 36m = 288m of yarn was used. Thus, the answer is 288.
更多选项
palm.generate_text 函数还有一些其他值得一提的实参。
停止序列
使用 stop_sequences 实参可提前停止生成。
例如,LLM 经常在算术方面犯错。您可以在 <calc> 标记中放置方程式,让模型“使用计算器”。
让模型在结束标记处停止,以便您修改提示:
calc_prompt = f"""
Please solve the following problem.
{prompt}
----------------
Important: Use the calculator for each step.
Don't do the arithmetic in your head.
To use the calculator wrap an equation in <calc> tags like this:
<calc> 3 cats * 2 hats/cat </calc> = 6
----------------
"""
equation=None
while equation is None:
completion = palm.generate_text(
model=model,
prompt=calc_prompt,
stop_sequences=['</calc>'],
# The maximum length of the response
max_output_tokens=800,
)
try:
response, equation = completion.result.split('<calc>', maxsplit=1)
except Exception:
continue
print(response)
Chain-of-thought: There are three houses, and each house has three cats, so there are 3 houses * 3 cats / house = 9 cats. Each cat has 4 mittens, so the cats need 9 cats * 4 mittens / cat = 36 mittens. Each mitten takes 7m of yarn, so 36 mittens * 7m / mitten = 252m of yarn. Each cat has a hat, and each hat takes 4m of yarn, so 9 cats * 4m / cat = 36m of yarn. So, in total, 36m + 252m = 288m of yarn were needed. The answer should be
print(equation)
9 cats * 4 mittens / cat
然后,您可以计算结果,并为模型组装一个新提示,以便模型继续执行操作。 如需查看完整的有效实现,请参阅文本计算器示例。
候选项
通常,LLM 生成的文本会具有一定程度的随机性。(如需详细了解原因,请参阅 LLM 基础知识)。这意味着,如果您使用相同的输入多次调用该 API,可能会获得不同的响应。您可以利用此功能获取替代模型回答。
temperature 实参用于控制回答的方差。palm.Model 对象提供 temperature 和其他参数的默认值。
models[0]
Model(name='models/text-bison-001', base_model_id='', version='001', display_name='Text Bison', description='Model targeted for text generation.', input_token_limit=8196, output_token_limit=1024, supported_generation_methods=['generateText'], temperature=0.7, top_p=0.95, top_k=40)
参数 candidate_count 可用于控制返回的响应数量:
completion = palm.generate_text(
model=model,
prompt=prompt,
# The number of candidates to return
candidate_count=8,
# Set the temperature to 1.0 for more variety of responses.
temperature=1.0,
max_output_tokens=800,
)
print(completion.result)
In each house there are 3 cats * 4 mittens / cat = 12 mittens. In total there are 3 houses * 12 mittens / house = 36 mittens. In total there are 36 mittens * 7m / mitten = 252m of yarn for the mittens. In total there are 3 houses * 3 cats / house * 1 hat / cat = 9 hats. In total there are 9 hats * 4m / hat = 36m of yarn for the hats. In total there are 36m yarn for the hats + 252m yarn for the mittens = 288m of yarn. The answer: 288.
当您请求多个候选对象时,Completion.result 属性仍然只包含第一个候选对象。Completion.candidates 属性包含所有这些信息:
import pprint
pprint.pprint(completion.candidates)
[{'output': 'In each house there are 3 cats * 4 mittens / cat = 12 mittens. In '
'total there are 3 houses * 12 mittens / house = 36 mittens. In '
'total there are 36 mittens * 7m / mitten = 252m of yarn for the '
'mittens. In total there are 3 houses * 3 cats / house * 1 hat / '
'cat = 9 hats. In total there are 9 hats * 4m / hat = 36m of yarn '
'for the hats. In total there are 36m yarn for the hats + 252m '
'yarn for the mittens = 288m of yarn.\n'
'The answer: 288.',
'safety_ratings': [{'category': <HarmCategory.HARM_CATEGORY_DEROGATORY: 1>,
'probability': <HarmProbability.NEGLIGIBLE: 1>},
{'category': <HarmCategory.HARM_CATEGORY_TOXICITY: 2>,
'probability': <HarmProbability.NEGLIGIBLE: 1>},
{'category': <HarmCategory.HARM_CATEGORY_VIOLENCE: 3>,
'probability': <HarmProbability.NEGLIGIBLE: 1>},
{'category': <HarmCategory.HARM_CATEGORY_SEXUAL: 4>,
'probability': <HarmProbability.NEGLIGIBLE: 1>},
{'category': <HarmCategory.HARM_CATEGORY_MEDICAL: 5>,
'probability': <HarmProbability.NEGLIGIBLE: 1>},
{'category': <HarmCategory.HARM_CATEGORY_DANGEROUS: 6>,
'probability': <HarmProbability.NEGLIGIBLE: 1>}]},
{'output': 'Each house has 3 cats, so each house needs 3 * 4 = 12 mittens. '
"With three houses, that's 3 * 12 = 36 mittens. And each house "
'needs 3 * 1 = 3 hats. So in total, we need 3 hats + 36 mittens = '
'39 items. Each mitten needs 7 meters of yarn, so 39 mittens need '
'39 * 7 = 273 meters of yarn. Each hat needs 4 meters of yarn, and '
"we need 3 hats, so that's 4 * 3 = 12 meters of yarn. So in total, "
'we needed 12 + 273 = 285 meters of yarn.\n'
'Thus, the answer is 285.',
'safety_ratings': [{'category': <HarmCategory.HARM_CATEGORY_DEROGATORY: 1>,
'probability': <HarmProbability.NEGLIGIBLE: 1>},
{'category': <HarmCategory.HARM_CATEGORY_TOXICITY: 2>,
'probability': <HarmProbability.NEGLIGIBLE: 1>},
{'category': <HarmCategory.HARM_CATEGORY_VIOLENCE: 3>,
'probability': <HarmProbability.NEGLIGIBLE: 1>},
{'category': <HarmCategory.HARM_CATEGORY_SEXUAL: 4>,
'probability': <HarmProbability.NEGLIGIBLE: 1>},
{'category': <HarmCategory.HARM_CATEGORY_MEDICAL: 5>,
'probability': <HarmProbability.NEGLIGIBLE: 1>},
{'category': <HarmCategory.HARM_CATEGORY_DANGEROUS: 6>,
'probability': <HarmProbability.NEGLIGIBLE: 1>}]},
{'output': 'There are 3 houses * 3 cats / house = 9 cats. There are 9 cats * '
'4 mittens / cat = 36 mittens. There are 9 cats * 1 hat / cat = 9 '
'hats. The total amount of yarn for the mittens is 36 mittens * 7m '
'/ mitten = 252m. The total amount of yarn for the hats is 9 hats '
'* 4m / hat = 36m. The total amount of yarn is 252m + 36m = 288m.\n'
'Thus, the answer is 288.',
'safety_ratings': [{'category': <HarmCategory.HARM_CATEGORY_DEROGATORY: 1>,
'probability': <HarmProbability.NEGLIGIBLE: 1>},
{'category': <HarmCategory.HARM_CATEGORY_TOXICITY: 2>,
'probability': <HarmProbability.NEGLIGIBLE: 1>},
{'category': <HarmCategory.HARM_CATEGORY_VIOLENCE: 3>,
'probability': <HarmProbability.NEGLIGIBLE: 1>},
{'category': <HarmCategory.HARM_CATEGORY_SEXUAL: 4>,
'probability': <HarmProbability.NEGLIGIBLE: 1>},
{'category': <HarmCategory.HARM_CATEGORY_MEDICAL: 5>,
'probability': <HarmProbability.NEGLIGIBLE: 1>},
{'category': <HarmCategory.HARM_CATEGORY_DANGEROUS: 6>,
'probability': <HarmProbability.NEGLIGIBLE: 1>}]},
{'output': 'There are 3 houses * 3 cats / house = 9 cats. Each cat has 4 '
'mittens + 1 hat = 5 items. So the total number of items is 9 cats '
'* 5 items / cat = 45 items. Thus, 45 items * 7m / item = 315m of '
'yarn was needed.\n'
'Thus, the answer is 315.',
'safety_ratings': [{'category': <HarmCategory.HARM_CATEGORY_DEROGATORY: 1>,
'probability': <HarmProbability.NEGLIGIBLE: 1>},
{'category': <HarmCategory.HARM_CATEGORY_TOXICITY: 2>,
'probability': <HarmProbability.NEGLIGIBLE: 1>},
{'category': <HarmCategory.HARM_CATEGORY_VIOLENCE: 3>,
'probability': <HarmProbability.NEGLIGIBLE: 1>},
{'category': <HarmCategory.HARM_CATEGORY_SEXUAL: 4>,
'probability': <HarmProbability.NEGLIGIBLE: 1>},
{'category': <HarmCategory.HARM_CATEGORY_MEDICAL: 5>,
'probability': <HarmProbability.NEGLIGIBLE: 1>},
{'category': <HarmCategory.HARM_CATEGORY_DANGEROUS: 6>,
'probability': <HarmProbability.NEGLIGIBLE: 1>}]},
{'output': 'Chain-of-thought:\n'
'There are 3 houses * 3 cats / house = 9 cats.\n'
'The cats need 9 cats * 4 mittens / cat = 36 mittens.\n'
'The cats need 9 cats * 1 hat / cat = 9 hats.\n'
'The mittens need 36 mittens * 7m / mitten = 252m of yarn.\n'
'The hats need 9 hats * 4m / hat = 36m of yarn.\n'
'Therefore, the total amount of yarn needed is 252m + 36m = 288m.\n'
'\n'
'The answer should be 288',
'safety_ratings': [{'category': <HarmCategory.HARM_CATEGORY_DEROGATORY: 1>,
'probability': <HarmProbability.NEGLIGIBLE: 1>},
{'category': <HarmCategory.HARM_CATEGORY_TOXICITY: 2>,
'probability': <HarmProbability.NEGLIGIBLE: 1>},
{'category': <HarmCategory.HARM_CATEGORY_VIOLENCE: 3>,
'probability': <HarmProbability.NEGLIGIBLE: 1>},
{'category': <HarmCategory.HARM_CATEGORY_SEXUAL: 4>,
'probability': <HarmProbability.NEGLIGIBLE: 1>},
{'category': <HarmCategory.HARM_CATEGORY_MEDICAL: 5>,
'probability': <HarmProbability.NEGLIGIBLE: 1>},
{'category': <HarmCategory.HARM_CATEGORY_DANGEROUS: 6>,
'probability': <HarmProbability.NEGLIGIBLE: 1>}]},
{'output': 'First find the total number of cats: 3 houses * 3 cats / house = '
'9 cats. Then multiply that number by the number of mittens per '
'cat to find the total number of mittens: 9 cats * 4 mittens / cat '
'= 36 mittens. Then multiply that number by the number of meters '
'of yarn per mitten to find the total amount of yarn used for '
'mittens: 36 mittens * 7 meters / mitten = 252 meters. Then do the '
'same thing for hats: 9 cats * 1 hat / cat = 9 hats. Then multiply '
'that number by the number of meters of yarn per hat to find the '
'total amount of yarn used for hats: 9 hats * 4 meters / hat = 36 '
'meters. Then add the amount of yarn used for mittens and hats to '
'find the total amount of yarn used: 36 meters + 252 meters = 288 '
'meters.\n'
'Thus, the answer is 288.',
'safety_ratings': [{'category': <HarmCategory.HARM_CATEGORY_DEROGATORY: 1>,
'probability': <HarmProbability.NEGLIGIBLE: 1>},
{'category': <HarmCategory.HARM_CATEGORY_TOXICITY: 2>,
'probability': <HarmProbability.NEGLIGIBLE: 1>},
{'category': <HarmCategory.HARM_CATEGORY_VIOLENCE: 3>,
'probability': <HarmProbability.NEGLIGIBLE: 1>},
{'category': <HarmCategory.HARM_CATEGORY_SEXUAL: 4>,
'probability': <HarmProbability.NEGLIGIBLE: 1>},
{'category': <HarmCategory.HARM_CATEGORY_MEDICAL: 5>,
'probability': <HarmProbability.NEGLIGIBLE: 1>},
{'category': <HarmCategory.HARM_CATEGORY_DANGEROUS: 6>,
'probability': <HarmProbability.NEGLIGIBLE: 1>}]},
{'output': 'The total number of cats is 3 houses * 3 cats / house = 9 cats. '
'So, the total number of mittens is 9 cats * 4 mittens / cat = 36 '
'mittens. The total number of hats is 9 cats * 1 hat / cat = 9 '
'hats. The total length of yarn needed to make the mittens is 36 '
'mittens * 7 m / mitten = 252 m. The total length of yarn needed '
'to make the hats is 9 hats * 4 m / hat = 36 m. So, the total '
'length of yarn needed is 252 m + 36 m = 288 m.\n'
'\n'
'The answer: 288',
'safety_ratings': [{'category': <HarmCategory.HARM_CATEGORY_DEROGATORY: 1>,
'probability': <HarmProbability.NEGLIGIBLE: 1>},
{'category': <HarmCategory.HARM_CATEGORY_TOXICITY: 2>,
'probability': <HarmProbability.NEGLIGIBLE: 1>},
{'category': <HarmCategory.HARM_CATEGORY_VIOLENCE: 3>,
'probability': <HarmProbability.NEGLIGIBLE: 1>},
{'category': <HarmCategory.HARM_CATEGORY_SEXUAL: 4>,
'probability': <HarmProbability.NEGLIGIBLE: 1>},
{'category': <HarmCategory.HARM_CATEGORY_MEDICAL: 5>,
'probability': <HarmProbability.NEGLIGIBLE: 1>},
{'category': <HarmCategory.HARM_CATEGORY_DANGEROUS: 6>,
'probability': <HarmProbability.NEGLIGIBLE: 1>}]},
{'output': 'There are 3 houses with 3 cats each, so 3 * 3 = 9 cats. Each cat '
'has 4 mittens and a hat, so 9 cats * 4 mittens / cat + 9 cats * 1 '
'hat / cat = 36 mittens and 9 hats. Each mitten takes 7m of yarn '
'and each hat takes 4m of yarn, so the total yarn needed is 36 '
'mittens * 7m / mitten + 9 hats * 4m / hat = 252m + 36m = 288m.\n'
'The answer: 288.',
'safety_ratings': [{'category': <HarmCategory.HARM_CATEGORY_DEROGATORY: 1>,
'probability': <HarmProbability.NEGLIGIBLE: 1>},
{'category': <HarmCategory.HARM_CATEGORY_TOXICITY: 2>,
'probability': <HarmProbability.NEGLIGIBLE: 1>},
{'category': <HarmCategory.HARM_CATEGORY_VIOLENCE: 3>,
'probability': <HarmProbability.NEGLIGIBLE: 1>},
{'category': <HarmCategory.HARM_CATEGORY_SEXUAL: 4>,
'probability': <HarmProbability.NEGLIGIBLE: 1>},
{'category': <HarmCategory.HARM_CATEGORY_MEDICAL: 5>,
'probability': <HarmProbability.NEGLIGIBLE: 1>},
{'category': <HarmCategory.HARM_CATEGORY_DANGEROUS: 6>,
'probability': <HarmProbability.NEGLIGIBLE: 1>}]}]
因此,既然您知道此问题的答案,就可以轻松检查解题率:
import numpy as np
np.mean(['288' in c['output'] for c in completion.candidates])
0.75
试用 Colab 笔记本
在 GitHub 上查看笔记本