用Smolagents开发AI代理

LIBRARY Jan 15, 2025

本教程探讨了一个实用的示例,通过将强大的 Llama 2 语言模型与 smolagents 框架集成来构建 AI 代理。我们将分析一个代码片段(可在 GitHub 上找到),该片段作为问答任务的概念验证(POC)。这个练习为构建更强大和自主的 AI 系统提供了宝贵的见解。

1、加载和优化语言模型

第一步涉及从 Hugging Face Transformers 加载 Llama 2 7B 聊天模型的量化版本。这里使用了 4 位量化。

像 Llama 2 这样的大型语言模型具有数百万或数十亿个参数,需要大量的内存和处理能力。4 位量化是一种技术,可以在不显著牺牲性能的情况下减少这些模型的内存占用。

与将每个参数存储为全精度浮点数(通常为 32 位)不同,4 位量化将它们压缩为仅 4 位。这将模型的大小减少了 8 倍,使其更易于在消费级硬件上运行或在资源受限的环境中部署。

代码使用 Hugging Face Transformers 的 BitsAndBytesConfig 来实现这种量化:

bnb_config = BitsAndBytesConfig(
    load_in_4bit=True,
    bnb_4bit_quant_type="nf4",
    bnb_4bit_use_double_quant=True,
    bnb_4bit_compute_dtype=torch.bfloat16
)

model = AutoModelForCausalLM.from_pretrained(model_id, device_map="auto", quantization_config=bnb_config)

此配置指定模型应以 4 位量化加载(load_in_4bit=True),并使用“nf4”量化类型,该类型因其在减少内存使用的同时保持模型准确性而闻名。它还启用了双重量化(bnb_4bit_use_double_quant=True)以进一步优化,并将计算数据类型设置为 torch.bfloat16 以提高效率。

2、通过自定义包装器桥接差距

定义了一个自定义的 Llama2Wrapper 类,以确保 Llama 2 模型与 smolagents 框架之间的无缝交互。该包装器处理各种输入类型,确保与 LLM 的兼容性,并将生成的输出格式化为符合 smolagents 的期望。它充当桥梁,将 Llama 2 模型的输出转换为 smolagents 框架可以理解和有效使用的格式。

class Llama2Wrapper:
    def __init__(self, generator, tokenizer):
        self.generator = generator
        self.tokenizer = tokenizer

    def __call__(self, text, stop_sequences=None, **kwargs):
        # ... (输入处理、文本生成和输出格式化的代码) ...

3、设计有效的提示

代码随后定义了一个问答任务,并展示了提示工程的关键作用。构建了一个详细的提示,为 Llama 2 模型提供了问题、相关上下文、答案选项以及输出正确答案对应字母的明确指令。这一步不仅重要,而且是整个过程中的关键。

prompt = f"""
The user asked: {question}

Even though it's unlikely a leopard would run across Pont des Arts, let's make a hypothetical estimate.
Consider the following:
# ... (Relevant information and calculations) ...
"""

4、处理和分析输出

生成响应后,代码使用正则表达式过滤输出,确保其符合预期格式。最终输出是问题的答案,根据 LLM 的响应从答案选项中提取。

final_answer = llm(prompt) 
final_answer_text = final_answer['generated_text'] 
# ... (正则表达式过滤) ...
actual_answer = answer_choices.get(final_answer_text)

5、理解 Smol Agents

smolagents 由 Hugging Face 开发,是一个相对较新的框架,旨在实现简单性和灵活性。它强调代码驱动的方法,代理生成并执行代码以实现目标。smolagents 支持安全的执行环境,并促进与各种 LLM 的集成。

6、探索潜力

这个 POC 展示了将 LLM 与 smolagents 结合以构建交互式 AI 代理的潜力,这些代理能够理解自然语言、推理信息,并可能通过代码执行与现实世界互动。这种潜力的影响是巨大的,从创建能够理解和响应复杂查询的虚拟助手,到开发能够根据自然语言指令执行任务的 AI 系统。

7、讨论

这个示例展示了使用 Llama 2 和 smolagents 构建基本问答代理的关键步骤。它强调了仔细的提示工程和输出处理的重要性,以确保准确和可靠的结果。通过扩展这种方法,可以开发更复杂的代理来处理各种任务,例如信息检索、代码生成和与外部 API 的交互。

将 LLM 与代码驱动的代理集成,为创建更自主和强大的 AI 系统开辟了令人兴奋的可能性。LLM 可以提供自然语言理解和推理能力,而 smolagents 则支持执行操作和与环境交互。这种协同作用可以导致开发出能够执行复杂任务并适应动态情况的代理。

8、结束语

本教程为探索 AI 代理世界和强大语言模型的集成提供了基础。通过结合 Llama 2 和 smolagents 的优势,开发人员可以创建复杂的 AI 系统,这些系统能够以越来越复杂的方式理解、推理和与环境交互。这种方法为 AI 的未来带来了巨大的希望,使开发更智能和自主的代理成为可能,这些代理能够解决现实世界的问题。


原文链接:Building AI Agents with Llama 2 and Smol Agents: A Code-Driven Tutorial

汇智网翻译整理,转载请标明出处

Tags