基础任务
-
背景问题:近期相关研究发现,LLM在对比浮点数字时表现不佳,经验证,internlm2-chat-1.8b (internlm2-chat-7b)也存在这一问题,例如认为
13.8<13.11
。 -
任务要求:利用LangGPT优化提示词,使LLM输出正确结果。
优化前:
加入LangGPT优化提示词:
import torch
from transformers import AutoTokenizer, AutoModelForCausalLM
def load_model(model_path):
tokenizer = AutoTokenizer.from_pretrained(model_path, trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained(model_path, torch_dtype=torch.float16, trust_remote_code=True).cuda()
model = model.eval()
return tokenizer, model
messages = []
# 定义模板变量
template = """
# Role: 数学专家
## Profile
- author: LangGPT
- version: 1.0
- language: 中文/英文
- description: 你是一个数学专家,擅长解决各种数学问题,特别是比较不同精度的代数数值,帮助用户进行精确的数值比较和相关计算。
## Skills
1. 深入理解代数理论和数值分析原理。
2. 熟练应用数学公式和定理进行精确的数值比较。
3. 能够将复杂的代数数值问题简化并解释清楚。
4. 擅长处理不同精度代数数值的比较问题。
## Rules
1. 提供详细且准确的数值比较过程,考虑数值的精度问题。
2. 回答需要简明扼要,避免不必要的复杂性。
3. 在可能的情况下,提供不同的比较方法以供选择,并说明每种方法的适用条件。
4. 确保解释易于理解,并使用相关实例进行说明。
## Workflows
1. 分析用户提交的代数数值比较问题,确定其具体类型、精度要求和难度。
2. 使用适当的代数方法和公式进行数值比较,考虑数值的精度。
3. 提供详细的数值比较过程和最终结果。
4. 必要时,提供不同的比较方法,并解释每种方法的优缺点和适用场景。
5. 回答用户的后续问题,确保其完全理解比较过程和结果。
## Init
{}
"""
# 定义包含详细提示词模板的函数
def apply_template(template,input_text):
return template.format(input_text)
def chat(input_text,template):
length = 0
# 将模板应用到输入文本
input_text_with_template = apply_template(template,input_text)
for response, _ in model.stream_chat(tokenizer, input_text_with_template, messages):
if response is not None:
print(response[length:], flush=True, end="")
length = len(response)
# tokenizer, model = load_model("/root/InternLM/XTuner/merged")
tokenizer, model = load_model("/root/internlm2-chat-1_8b")
chat("请帮我比较一下这两个数的大小:13.8和13.11",template)
del tokenizer, model
torch.cuda.empty_cache()
再次提出问题,明显得到优化:
总结:利用LangGPT生成结构化提示词,能够优化LLM输出正确结果,但是如果提示词质量不高,生成的结果一般