
欢迎来到雲闪世界.最近的大型语言模型 (LLM) 在大多数语言生成任务中都表现出色。然而,由于它们基于下一个标记预测进行操作,因此它们通常难以准确执行数学运算。此外,由于它们的知识匮乏,它们可能缺乏准确回答某些查询所需的信息。
缓解这些问题的一种方法是通过函数调用。函数调用允许 LLM 可靠地连接到外部工具。它支持与外部 API 交互。例如,通过将 LLM 与网络搜索引擎和计算器连接,可以通过函数调用从互联网检索信息并执行数学运算。
在本文中,我们将了解如何微调 LLM 以进行函数调用。我使用 xLAM,这是 Salesforce 发布的包含 60k 条函数调用条目的数据集,用于微调 Llama 3。我们将了解如何格式化数据集以及如何利用微调适配器进行函数调用。
我还制作了这个笔记本,实现了本文中描述的代码以进行微调,以及一些推理示例:
LLM 的函数调用:它是如何工作的?
如果你向标准 LLM 发出“给我 3342398 的平方根”的提示,它将一次一位地生成答案,这可能非常不准确。让我们用 Llama 3 Instruct 试试:
import transformers
import torch
model_id = "meta-llama/Meta-Llama-3-8B-Instruct"
pipeline = transformers.pipeline(
"text-generation",
model=model_id,
model_kwargs={"torch_dtype": torch.bfloat16},
device_map="auto",
)
messages = [
{"role": "system", "content": "You are a calculator."},
{"role": "user", "content": "Give me the square root of 3342398"},
]
terminators = [
pipeline.tokenizer.eos_token_id,
pipeline.tokenizer.convert_tokens_to_ids("<|eot_id|>")
]
outputs = pipeline(
messages,
max_new_tokens=256,
eos_token_id=terminators,
do_sample=True,
temperature=0.6,
top_p=0.9,
)
print(outputs[0]["generated_text"][-1])
注意:我使用了Meta 提供的推理代码。我只更改了提示。
结果:
The square root of 3342398 is 1833.13
答案很接近,但错了。正确答案是“1828.222634144977”。LLM 无法准确地进行数学运算。它们可以推理数学问题并得出近似结果,但不如计算器那么准确。它们不是为此设计的。但是,它们可以调用计算器。我们只需要模型“理解”我们请求的是数字3342398的平方根。
为此,我们可以对函数调用数据集上的 LLM 进行微调。通常,函数调用数据集至少有两列:
- 查询(或提示):这是一个标准提示,例如“给我 3342398 的平方根”
- 工具调用:一般为JSON格式,例如:
{
"name": "math.sqrt"
"description": "Python square root function"
"tool_id":20
"arguments":
{
"1": 33423


3488

被折叠的 条评论
为什么被折叠?



