diff --git a/docs/source/zh/reference/agents.md b/docs/source/zh/reference/agents.md index e5e51188c..bd7f3a779 100644 --- a/docs/source/zh/reference/agents.md +++ b/docs/source/zh/reference/agents.md @@ -1,3 +1,4 @@ + -# Agents +# Agents(智能体) -Smolagents is an experimental API which is subject to change at any time. Results returned by the agents -can vary as the APIs or underlying models are prone to change. +Smolagents 是一个实验性的 API,可能会随时发生变化。由于 API 或底层模型可能发生变化,代理返回的结果也可能有所不同。 -To learn more about agents and tools make sure to read the [introductory guide](../index). This page -contains the API docs for the underlying classes. - -## Agents +要了解有关智能体和工具的更多信息,请务必阅读[入门指南](../index)。本页面包含基础类的 API 文档。 -Our agents inherit from [`MultiStepAgent`], which means they can act in multiple steps, each step consisting of one thought, then one tool call and execution. Read more in [this conceptual guide](../conceptual_guides/react). +## 智能体(Agents) -We provide two types of agents, based on the main [`Agent`] class. - - [`CodeAgent`] is the default agent, it writes its tool calls in Python code. - - [`ToolCallingAgent`] writes its tool calls in JSON. +我们的智能体继承自 [`MultiStepAgent`],这意味着它们可以执行多步操作,每一步包含一个思考(thought),然后是一个工具调用和执行。请阅读[概念指南](../conceptual_guides/react)以了解更多信息。 -Both require arguments `model` and list of tools `tools` at initialization. +我们提供两种类型的代理,它们基于主要的 [`Agent`] 类: + - [`CodeAgent`] 是默认代理,它以 Python 代码编写工具调用。 + - [`ToolCallingAgent`] 以 JSON 编写工具调用。 +两者在初始化时都需要提供参数 `model` 和工具列表 `tools`。 -### Classes of agents +### 智能体类 [[autodoc]] MultiStepAgent @@ -44,10 +42,9 @@ Both require arguments `model` and list of tools `tools` at initialization. [[autodoc]] ToolCallingAgent - ### ManagedAgent -_This class is deprecated since 1.8.0: now you just need to pass name and description attributes to an agent to directly use it as previously done with a ManagedAgent._ +_此类自 1.8.0 起已被弃用:现在您只需向普通代理传递 `name` 和 `description` 属性即可使其可被管理代理调用。_ ### stream_to_gradio @@ -56,99 +53,11 @@ _This class is deprecated since 1.8.0: now you just need to pass name and descri ### GradioUI > [!TIP] -> You must have `gradio` installed to use the UI. Please run `pip install smolagents[gradio]` if it's not the case. +> 您必须安装 `gradio` 才能使用 UI。如果尚未安装,请运行 `pip install smolagents[gradio]`。 [[autodoc]] GradioUI -## Models - -You're free to create and use your own models to power your agent. - -You could use any `model` callable for your agent, as long as: -1. It follows the [messages format](./chat_templating) (`List[Dict[str, str]]`) for its input `messages`, and it returns a `str`. -2. It stops generating outputs *before* the sequences passed in the argument `stop_sequences` - -For defining your LLM, you can make a `custom_model` method which accepts a list of [messages](./chat_templating) and returns text. This callable also needs to accept a `stop_sequences` argument that indicates when to stop generating. - -```python -from huggingface_hub import login, InferenceClient - -login("") - -model_id = "meta-llama/Llama-3.3-70B-Instruct" - -client = InferenceClient(model=model_id) - -def custom_model(messages, stop_sequences=["Task"]) -> str: - response = client.chat_completion(messages, stop=stop_sequences, max_tokens=1000) - answer = response.choices[0].message.content - return answer -``` - -Additionally, `custom_model` can also take a `grammar` argument. In the case where you specify a `grammar` upon agent initialization, this argument will be passed to the calls to model, with the `grammar` that you defined upon initialization, to allow [constrained generation](https://huggingface.co/docs/text-generation-inference/conceptual/guidance) in order to force properly-formatted agent outputs. - -### TransformersModel - -For convenience, we have added a `TransformersModel` that implements the points above by building a local `transformers` pipeline for the model_id given at initialization. - -```python -from smolagents import TransformersModel - -model = TransformersModel(model_id="HuggingFaceTB/SmolLM-135M-Instruct") - -print(model([{"role": "user", "content": "Ok!"}], stop_sequences=["great"])) -``` -```text ->>> What a -``` - -> [!TIP] -> You must have `transformers` and `torch` installed on your machine. Please run `pip install smolagents[transformers]` if it's not the case. - -[[autodoc]] TransformersModel - -### HfApiModel - -The `HfApiModel` wraps an [HF Inference API](https://huggingface.co/docs/api-inference/index) client for the execution of the LLM. - -```python -from smolagents import HfApiModel - -messages = [ - {"role": "user", "content": "Hello, how are you?"}, - {"role": "assistant", "content": "I'm doing great. How can I help you today?"}, - {"role": "user", "content": "No need to help, take it easy."}, -] - -model = HfApiModel() -print(model(messages)) -``` -```text ->>> Of course! If you change your mind, feel free to reach out. Take care! -``` -[[autodoc]] HfApiModel - -### LiteLLMModel - -The `LiteLLMModel` leverages [LiteLLM](https://www.litellm.ai/) to support 100+ LLMs from various providers. -You can pass kwargs upon model initialization that will then be used whenever using the model, for instance below we pass `temperature`. - -```python -from smolagents import LiteLLMModel - -messages = [ - {"role": "user", "content": "Hello, how are you?"}, - {"role": "assistant", "content": "I'm doing great. How can I help you today?"}, - {"role": "user", "content": "No need to help, take it easy."}, -] - -model = LiteLLMModel("anthropic/claude-3-5-sonnet-latest", temperature=0.2, max_tokens=10) -print(model(messages)) -``` - -[[autodoc]] LiteLLMModel - -## Prompts +## 提示(Prompts) [[autodoc]] smolagents.agents.PromptTemplates diff --git a/docs/source/zh/reference/models.md b/docs/source/zh/reference/models.md new file mode 100644 index 000000000..79c9e72a4 --- /dev/null +++ b/docs/source/zh/reference/models.md @@ -0,0 +1,166 @@ + + +# 模型 + + + +Smolagents 是一个实验性 API,其可能会随时发生更改。由于 API 或底层模型可能会变化,智能体返回的结果可能会有所不同。 + + + +要了解有关智能体和工具的更多信息,请务必阅读[入门指南](../index)。此页面包含底层类的 API 文档。 + +## 模型 + +您可以自由创建和使用自己的模型为智能体提供支持。 + +您可以使用任何 `model` 可调用对象作为智能体的模型,只要满足以下条件: +1. 它遵循[消息格式](./chat_templating)(`List[Dict[str, str]]`),将其作为输入 `messages`,并返回一个 `str`。 +2. 它在生成的序列到达 `stop_sequences` 参数中指定的内容之前停止生成输出。 + +要定义您的 LLM,可以创建一个 `custom_model` 方法,该方法接受一个 [messages](./chat_templating) 列表,并返回一个包含 `.content` 属性的对象,其中包含生成的文本。此可调用对象还需要接受一个 `stop_sequences` 参数,用于指示何时停止生成。 + +```python +from huggingface_hub import login, InferenceClient + +login("") + +model_id = "meta-llama/Llama-3.3-70B-Instruct" + +client = InferenceClient(model=model_id) + +def custom_model(messages, stop_sequences=["Task"]): + response = client.chat_completion(messages, stop=stop_sequences, max_tokens=1000) + answer = response.choices[0].message + return answer +``` + +此外,`custom_model` 还可以接受一个 `grammar` 参数。如果在智能体初始化时指定了 `grammar`,则此参数将在调用模型时传递,以便进行[约束生成](https://huggingface.co/docs/text-generation-inference/conceptual/guidance),从而强制生成格式正确的智能体输出。 + +### TransformersModel + +为了方便起见,我们添加了一个 `TransformersModel`,该模型通过为初始化时指定的 `model_id` 构建一个本地 `transformers` pipeline 来实现上述功能。 + +```python +from smolagents import TransformersModel + +model = TransformersModel(model_id="HuggingFaceTB/SmolLM-135M-Instruct") + +print(model([{"role": "user", "content": [{"type": "text", "text": "Ok!"}]}], stop_sequences=["great"])) +``` +```text +>>> What a +``` + +> [!TIP] +> 您必须在机器上安装 `transformers` 和 `torch`。如果尚未安装,请运行 `pip install smolagents[transformers]`。 + +[[autodoc]] TransformersModel + +### HfApiModel + +`HfApiModel` 封装了 huggingface_hub 的 [InferenceClient](https://huggingface.co/docs/huggingface_hub/main/en/guides/inference),用于执行 LLM。它支持 HF 的 [Inference API](https://huggingface.co/docs/api-inference/index) 以及 Hub 上所有可用的[Inference Providers](https://huggingface.co/blog/inference-providers)。 + +```python +from smolagents import HfApiModel + +messages = [ + {"role": "user", "content": [{"type": "text", "text": "Hello, how are you?"}]} +] + +model = HfApiModel() +print(model(messages)) +``` +```text +>>> Of course! If you change your mind, feel free to reach out. Take care! +``` +[[autodoc]] HfApiModel + +### LiteLLMModel + +`LiteLLMModel` 利用 [LiteLLM](https://www.litellm.ai/) 支持来自不同提供商的 100+ 个 LLM。您可以在模型初始化时传递 `kwargs`,这些参数将在每次使用模型时被使用,例如下面的示例中传递了 `temperature`。 + +```python +from smolagents import LiteLLMModel + +messages = [ + {"role": "user", "content": [{"type": "text", "text": "Hello, how are you?"}]} +] + +model = LiteLLMModel("anthropic/claude-3-5-sonnet-latest", temperature=0.2, max_tokens=10) +print(model(messages)) +``` + +[[autodoc]] LiteLLMModel + +### OpenAIServerModel + +此类允许您调用任何 OpenAIServer 兼容模型。 +以下是设置方法(您可以自定义 `api_base` URL 指向其他服务器): +```py +import os +from smolagents import OpenAIServerModel + +model = OpenAIServerModel( + model_id="gpt-4o", + api_base="https://api.openai.com/v1", + api_key=os.environ["OPENAI_API_KEY"], +) +``` + +[[autodoc]] OpenAIServerModel + +### AzureOpenAIServerModel + +`AzureOpenAIServerModel` 允许您连接到任何 Azure OpenAI 部署。 + +下面是设置示例,请注意,如果已经设置了相应的环境变量,您可以省略 `azure_endpoint`、`api_key` 和 `api_version` 参数——环境变量包括 `AZURE_OPENAI_ENDPOINT`、`AZURE_OPENAI_API_KEY` 和 `OPENAI_API_VERSION`。 + +请注意,`OPENAI_API_VERSION` 没有 `AZURE_` 前缀,这是由于底层 [openai](https://github.com/openai/openai-python) 包的设计所致。 + +```py +import os + +from smolagents import AzureOpenAIServerModel + +model = AzureOpenAIServerModel( + model_id = os.environ.get("AZURE_OPENAI_MODEL"), + azure_endpoint=os.environ.get("AZURE_OPENAI_ENDPOINT"), + api_key=os.environ.get("AZURE_OPENAI_API_KEY"), + api_version=os.environ.get("OPENAI_API_VERSION") +) +``` + +[[autodoc]] AzureOpenAIServerModel + +### MLXModel + +```python +from smolagents import MLXModel + +model = MLXModel(model_id="HuggingFaceTB/SmolLM-135M-Instruct") + +print(model([{"role": "user", "content": "Ok!"}], stop_sequences=["great"])) +``` +```text +>>> What a +``` + +> [!TIP] +> 您必须在机器上安装 `mlx-lm`。如果尚未安装,请运行 `pip install smolagents[mlx-lm]`。 + +[[autodoc]] MLXModel diff --git a/docs/source/zh/reference/tools.md b/docs/source/zh/reference/tools.md index 847c497ea..86f19dca4 100644 --- a/docs/source/zh/reference/tools.md +++ b/docs/source/zh/reference/tools.md @@ -1,3 +1,4 @@ + -# Tools +# 工具 -Smolagents is an experimental API which is subject to change at any time. Results returned by the agents -can vary as the APIs or underlying models are prone to change. +Smolagents 是一个实验性 API,可能会随时更改。由于 API 或底层模型可能发生变化,代理返回的结果可能会有所不同。 -To learn more about agents and tools make sure to read the [introductory guide](../index). This page -contains the API docs for the underlying classes. +要了解更多关于智能体和工具的信息,请务必阅读[入门指南](../index)。本页面包含底层类的 API 文档。 -## Tools +## 工具 ### load_tool @@ -43,40 +42,51 @@ contains the API docs for the underlying classes. [[autodoc]] launch_gradio_demo -## Default tools +## 默认工具 ### PythonInterpreterTool [[autodoc]] PythonInterpreterTool +### FinalAnswerTool + +[[autodoc]] FinalAnswerTool + +### UserInputTool + +[[autodoc]] UserInputTool + ### DuckDuckGoSearchTool [[autodoc]] DuckDuckGoSearchTool +### GoogleSearchTool + +[[autodoc]] GoogleSearchTool + ### VisitWebpageTool [[autodoc]] VisitWebpageTool -## ToolCollection +### SpeechToTextTool + +[[autodoc]] SpeechToTextTool + +## 工具集合 [[autodoc]] ToolCollection -## Agent Types +## 智能体类型 -Agents can handle any type of object in-between tools; tools, being completely multimodal, can accept and return -text, image, audio, video, among other types. In order to increase compatibility between tools, as well as to -correctly render these returns in ipython (jupyter, colab, ipython notebooks, ...), we implement wrapper classes -around these types. +智能体可以处理工具之间的任何类型的对象;工具是完全多模态的,可以接受和返回文本、图像、音频、视频以及其他类型的对象。为了增加工具之间的兼容性,以及正确呈现在 ipython(jupyter、colab、ipython notebooks 等)中的返回结果,我们为这些类型实现了包装类。 -The wrapped objects should continue behaving as initially; a text object should still behave as a string, an image -object should still behave as a `PIL.Image`. +被包装的对象应该继续保持其初始行为;例如,一个文本对象应继续表现为字符串,一个图像对象应继续表现为 `PIL.Image`。 -These types have three specific purposes: +这些类型有三个特定的用途: -- Calling `to_raw` on the type should return the underlying object -- Calling `to_string` on the type should return the object as a string: that can be the string in case of an `AgentText` - but will be the path of the serialized version of the object in other instances -- Displaying it in an ipython kernel should display the object correctly +- 调用 `to_raw` 方法时,应返回底层对象 +- 调用 `to_string` 方法时,应将对象转换为字符串:对于 `AgentText` 类型,可以直接返回字符串;对于其他实例,则返回对象序列化版本的路径 +- 在 ipython 内核中显示时,应正确显示对象 ### AgentText