一、一个简单的示例
其实,调LLM并不复杂,看一个例子:
以下是一个使用 OpenAI API 的 Python 程序示例,它可以将一段文本进行修改和完善。程序会调用 GPT 模型对输入文本进行润色,使其更加流畅、清晰或符合特定风格。
代码示例
python">import openai# 设置 OpenAI API Key
openai.api_key = "your-api-key" # 替换为你的 OpenAI API Keydef improve_text(input_text, style="formal"):"""使用 OpenAI API 修改和完善文本:param input_text: 输入的原始文本:param style: 文本风格(如 "formal" 正式, "casual" 随意, "creative" 创意):return: 修改后的文本"""try:# 定义系统提示词,指导模型如何修改文本system_prompt = f"You are a helpful assistant that improves text to make it more {style} and polished."# 调用 OpenAI APIresponse = openai.ChatCompletion.create(model="gpt-3.5-turbo", # 使用 GPT-3.5 模型messages=[{"role": "system", "content": system_prompt},{"role": "user", "content": input_text}],max_tokens=500, # 限制生成的最大 token 数temperature=0.7 # 控制生成文本的随机性)# 提取修改后的文本improved_text = response['choices'][0]['message']['content']return improved_textexcept Exception as e:return f"An error occurred: {e}"# 示例输入文本
input_text = """
The quick brown fox jumps over the lazy dog. This is a test sentence to see how the text can be improved.
"""# 调用函数修改文本
improved_text = improve_text(input_text, style="formal")
print("Improved Text:\n", improved_text)
代码说明
-
API Key:
- 需要替换
your-api-key
为你的 OpenAI API Key。
- 需要替换
-
improve_text
函数:- 接受两个参数:
input_text
(原始文本)和style
(文本风格,如 “formal” 正式、“casual” 随意等)。 - 使用
system_prompt
指导模型如何修改文本。 - 调用 OpenAI 的
ChatCompletion
API 生成修改后的文本。
- 接受两个参数:
-
输出:
- 返回修改后的文本,并打印到控制台。
示例输入与输出
输入文本:
The quick brown fox jumps over the lazy dog. This is a test sentence to see how the text can be improved.
输出文本(风格:正式):
The swift brown fox leaps over the lethargic dog. This is a test sentence designed to demonstrate how the text can be enhanced and refined.
输出文本(风格:创意):
In a flash of motion, the quick brown fox soars gracefully over the lazy dog, a timeless scene brought to life. This sentence serves as a canvas to explore the art of textual improvement.
注意事项
-
API 费用:
- 使用 OpenAI API 会产生费用,具体费用取决于 token 使用量。
-
模型选择:
- 可以根据需要选择不同的模型(如
gpt-3.5-turbo
或gpt-4
)。
- 可以根据需要选择不同的模型(如
-
错误处理:
- 代码中包含了简单的错误处理,如果 API 调用失败会返回错误信息。
二、调用LLM涉及哪些参数
上述程序中用到了 max_tokens
参数,除了 max_tokens
参数外,还有一些与 token 相关的参数可以调整,以控制生成文本的行为和效果。以下是常见的与 token 相关的参数及其作用:
1. max_tokens
- 作用: 限制生成文本的最大 token 数(包括输入和输出)。
- 示例:
python">max_tokens=100 # 生成最多 100 个 token
2. temperature
- 作用: 控制生成文本的随机性。
- 值越低,生成文本越确定性和保守(倾向于选择高概率的 token)。
- 值越高,生成文本越随机和多样化。
- 范围:
0.0
到2.0
。 - 示例:
python">temperature=0.7 # 中等随机性
3. top_p
(Nucleus Sampling)
- 作用: 控制生成文本的多样性。
- 模型会从概率质量最高的 token 中采样,直到累积概率超过
top_p
。 - 与
temperature
结合使用,可以更好地控制生成文本的质量。
- 模型会从概率质量最高的 token 中采样,直到累积概率超过
- 范围:
0.0
到1.0
。 - 示例:
python">top_p=0.9 # 从概率质量最高的 90% 的 token 中采样
4. top_k
- 作用: 限制模型从概率最高的
k
个 token 中采样。- 与
top_p
类似,但直接指定 token 的数量。
- 与
- 范围: 正整数。
- 示例:
python">top_k=50 # 从概率最高的 50 个 token 中采样
5. stop
- 作用: 指定一个或多个停止符,当生成文本中出现这些符号时,停止生成。
- 示例:
python">stop=["\n", "。"] # 遇到换行符或句号时停止生成
6. presence_penalty
- 作用: 控制生成文本中是否避免重复已经出现过的 token。
- 正值会惩罚已经出现过的 token,减少重复。
- 负值会鼓励重复已经出现过的 token。
- 范围:
-2.0
到2.0
。 - 示例:
python">presence_penalty=0.5 # 轻微惩罚重复 token
7. frequency_penalty
- 作用: 控制生成文本中是否避免频繁出现相同的 token。
- 正值会惩罚频繁出现的 token,减少重复。
- 负值会鼓励频繁出现相同的 token。
- 范围:
-2.0
到2.0
。 - 示例:
python">frequency_penalty=0.5 # 轻微惩罚频繁出现的 token
8. logprobs
- 作用: 返回生成文本中每个 token 的对数概率。
- 用于分析生成文本的置信度。
- 范围:
True
或False
。 - 示例:
python">logprobs=True # 返回每个 token 的对数概率
9. n
- 作用: 指定生成多个独立的回复。
- 可以同时生成多个候选文本。
- 范围: 正整数。
- 示例:
python">n=3 # 生成 3 个独立的回复
10. best_of
- 作用: 生成多个候选文本,并返回其中最好的一个。
- 与
n
类似,但只返回一个最优结果。
- 与
- 范围: 正整数。
- 示例:
python">best_of=5 # 生成 5 个候选文本,返回最好的一个
11. echo
- 作用: 是否在生成文本中包含输入提示。
- 如果设置为
True
,返回结果会包含输入提示和生成文本。
- 如果设置为
- 范围:
True
或False
。 - 示例:
python">echo=True # 返回结果包含输入提示
12. logit_bias
- 作用: 调整特定 token 的生成概率。
- 可以增加或减少某些 token 的出现概率。
- 格式: 字典,键为 token ID,值为偏差值(-100 到 100)。
- 示例:
python">logit_bias={12345: -100} # 禁止生成 token ID 为 12345 的 token
13. seed
- 作用: 设置随机种子,确保生成结果可复现。
- 相同的种子和输入会生成相同的输出。
- 范围: 整数。
- 示例:
python">seed=42 # 设置随机种子为 42
14. stream
- 作用: 是否以流式传输方式返回生成结果。
- 适合生成较长文本时逐步返回结果。
- 范围:
True
或False
。 - 示例:
python">stream=True # 启用流式传输
15. suffix
- 作用: 在生成文本后附加一个后缀。
- 适合需要固定格式的生成任务。
- 示例:
python">suffix="\n\nGenerated by AI" # 在生成文本后附加后缀
16. user
- 作用: 标识用户 ID,用于跟踪和审计。
- 适合多用户场景。
- 示例:
python">user="user123" # 标识当前用户
这些参数可以帮助你更精细地控制生成文本的行为和质量。根据你的需求,可以灵活组合这些参数。例如:
- 使用
temperature
和top_p
控制生成文本的随机性和多样性。 - 使用
presence_penalty
和frequency_penalty
减少重复内容。 - 使用
stop
和max_tokens
控制生成文本的长度。