
Smolagents:让构建自主 Ai 代理变得简单的拥抱脸框架!
技术文章标题
引言
在这篇文章中,我们将探讨一些技术细节和实现方法。
主要内容
-
技术概述
- 介绍了相关技术的背景及其重要性。
- 讨论了不同的应用场景。
-
实现步骤
- 第一步:设置环境
- 第二步:安装依赖
- 第三步:运行示例代码
## 示例代码
def example_function():
print("Hello, World!")
结论
通过以上步骤,我们可以成功实现所需的功能。希望这些信息对你有所帮助。
被付费墙挡住了?免费阅读!
Hugging Face 最近推出了 smolagents,这是一个精简的库,旨在促进开发和管理利用大语言模型 (LLMs) 的 AI 代理的过程。这个创新框架使开发者能够创建能够与现实世界互动、做出明智决策并根据其输出执行任务的代理。在本文中,我们将深入探讨 smolagents 的本质、功能、最佳使用案例以及它们所提供的优势。
什么是 Smolagents?
Smolagents 是一个极简但强大的库,可以用最少的代码构建 AI 代理。通过提供简化的接口,它允许开发者将大语言模型无缝集成到他们的应用中,使这些模型能够执行诸如网络搜索、数据检索等任务。smolagents 的核心逻辑封装在大约一千行代码中,强调简单性和最小抽象。
如果你喜欢这篇文章并想表达一些支持:
- 鼓掌 50 次——每一次的鼓掌都比你想象的更有帮助!
- 关注 我在 Medium 上,并免费订阅以获取我的最新文章。
- 让我们在 LinkedIn 上联系,在 GitHub 上查看我的项目,并在 Twitter 上保持联系!
Smolagents 的关键特性:
-
简洁性:该库的设计确保代理逻辑简洁,使开发人员易于理解和使用。
-
对代码代理的优先支持:Smolagents 专注于生成其操作代码的代理,增强了灵活性和控制力。为确保安全,它通过 E2B 支持在沙盒环境中执行。
-
Hub 集成:开发人员可以直接从 Hugging Face Hub 共享和加载工具,促进协作生态系统。
-
与各种大语言模型的兼容性:该框架支持托管在 Hugging Face Hub 上的模型,包括通过
transformers
库或推理 API 加载的模型。它还通过 LiteLLM 集成支持来自 OpenAI、Ollama 等提供商的模型。
何时使用 Smolagents
Smolagents 在应用程序需要大语言模型动态确定其工作流时特别有益。在预定义工作流因任务的复杂性或可变性而不足的情况下,smolagents 提供了必要的灵活性。
然而,对于具有简单、确定性工作流的应用程序,传统的编码方法而不使用代理行为可能就足够了。
使用 Smolagents 构建代理
为了说明 smolagents 的实际应用,首先设置一个虚拟环境。
创建虚拟环境:
为了隔离您的开发环境,可以使用 Conda 或 Python 内置的 venv
模块创建虚拟环境。
使用 Conda:
-
如果尚未安装 Conda,请先安装。
-
创建一个新环境:
conda create --name smolagents_env
-
激活该环境:
conda activate smolagents_env
使用 Python 内置的 venv
:
-
创建一个新的虚拟环境:
python -m venv smolagents_env
-
激活该环境:
对于 Windows:
smolagents_env\Scripts\activate
对于 macOS/Linux:
source smolagents_env/bin/activate
一旦环境准备好,请继续安装必要的依赖项,并按照下面的详细说明探索 smolagents 的功能。
安装
首先安装所需的包。创建一个 requirements.txt
文件,内容如下:
datasets
langchain
langchain_community
langchain_text_splitters
smolagents
rank_bm25
然后,执行:
pip install -r requirements.txt
代码实现:
利用以下 Python 脚本创建一个代码代理,从知识库中检索信息,使用 Llama3.2 模型和 Ollama API:
import datasets
from langchain.docstore.document import Document
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain_community.retrievers import BM25Retriever
from smolagents import Tool, LiteLLMModel, CodeAgent
knowledge_base = datasets.load_dataset("m-ric/huggingface_doc", split="train")
knowledge_base = knowledge_base.filter(lambda row: row["source"].startswith("huggingface/transformers"))
source_docs = [
Document(page_content=doc["text"], metadata={"source": doc["source"].split("/")[1]})
for doc in knowledge_base
]
text_splitter = RecursiveCharacterTextSplitter(
chunk_size=500,
chunk_overlap=50,
add_start_index=True,
strip_whitespace=True,
separators=["\\n\\n", "\\n", ".", " ", ""],
)
docs_processed = text_splitter.split_documents(source_docs)
class RetrieverTool(Tool):
name = "retriever"
description = "使用语义搜索来检索与您的查询最相关的 transformers 文档部分。"
inputs = {
"query": {
"type": "string",
"description": "要执行的查询。应与目标文档语义相近。使用肯定形式而非问题形式。",
}
}
output_type = "string"
def __init__(self, docs, **kwargs):
super().__init__(**kwargs)
self.retriever = BM25Retriever.from_documents(docs, k=10)
def forward(self, query: str) -> str:
assert isinstance(query, str), "您的搜索查询必须是字符串"
docs = self.retriever.invoke(query)
return "\n检索到的文档:\n" + "".join(
[f"\n\n===== 文档 {i} =====\n{doc.page_content}" for i, doc in enumerate(docs)]
)
model = LiteLLMModel(
model_id="ollama_chat/llama3.2",
api_base="http://localhost:11434",
api_key="ollama"
)
retriever_tool = RetrieverTool(docs_processed)
agent = CodeAgent(tools=[retriever_tool], model=model, max_iterations=4, verbose=True)
agent_output = agent.run("对于 transformers 模型训练,前向传播和反向传播哪个更慢?")
print("最终输出:")
print(agent_output)
该脚本演示了如何设置一个代码代理,可以处理和从指定知识库中检索信息,展示了 smolagents 在实际应用中的实用性。
使用 Smolagents 的优势
- 效率:通过降低代理开发的复杂性,smolagents 加速了 AI 驱动解决方案的部署。
- 灵活性:能够集成多种大语言模型和工具,使得可以针对特定应用需求提供量身定制的解决方案。
- 安全性:支持沙箱执行环境,smolagents 确保代码代理安全运行,降低潜在风险。
用例:
Smolagents 可以应用于各个领域,包括:
- 技术文档检索:通过检索精确且具有上下文相关性的内容,简化对知识库的访问。
- 动态工作流自动化:通过使大语言模型能够动态确定工作流,增强复杂系统中的决策过程。
- 互动教育工具:为学习平台构建 AI 代理,能够回答查询并根据用户需求提供量身定制的指导。
最终思考:
Smolagents 作为一个代理框架,弥合了大语言模型能力与实际应用之间的差距。它的极简设计、一流的代码代理支持和强大的集成使其成为人工智能开发领域的游戏规则改变者。
其他资源:
完整代码: https://github.com/imanoop7/experiment-notebooks
Smolagents: https://huggingface.co/blog/smolagents
Smolagents Github: https://github.com/huggingface/smolagents/tree/main
我的 GitHub: https://github.com/imanoop7
LinkedIn: www.linkedin.com/in/anoop-maurya-908499148
X: https://x.com/imanoop_7