agent.md 3.97 KB
Newer Older
Sylvain Gugger's avatar
Sylvain Gugger committed
1
2
3
4
5
6
7
8
9
10
<!--Copyright 2023 The HuggingFace Team. All rights reserved.

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
specific language governing permissions and limitations under the License.
11
12
13
14

鈿狅笍 Note that this file is in Markdown but contain specific syntax for our doc-builder (similar to MDX) that may not be
rendered properly in your Markdown viewer.

Sylvain Gugger's avatar
Sylvain Gugger committed
15
16
17
18
19
20
-->

# Agents & Tools

<Tip warning={true}>

21
Transformers Agents is an experimental API which is subject to change at any time. Results returned by the agents
Sylvain Gugger's avatar
Sylvain Gugger committed
22
23
24
25
can vary as the APIs or underlying models are prone to change.

</Tip>

26
To learn more about agents and tools make sure to read the [introductory guide](../transformers_agents). This page
Sylvain Gugger's avatar
Sylvain Gugger committed
27
28
29
30
contains the API docs for the underlying classes.

## Agents

Aymeric Roucher's avatar
Aymeric Roucher committed
31
32
33
34
35
We provide two types of agents, based on the main [`Agent`] class:
- [`CodeAgent`] acts in one shot, generating code to solve the task, then executes it at once.
- [`ReactAgent`] acts step by step, each step consisting of one thought, then one tool call and execution. It has two classes:
  - [`ReactJsonAgent`] writes its tool calls in JSON.
  - [`ReactCodeAgent`] writes its tool calls in Python code.
Sylvain Gugger's avatar
Sylvain Gugger committed
36

Aymeric Roucher's avatar
Aymeric Roucher committed
37
### Agent
Sylvain Gugger's avatar
Sylvain Gugger committed
38

Aymeric Roucher's avatar
Aymeric Roucher committed
39
[[autodoc]] Agent
Sylvain Gugger's avatar
Sylvain Gugger committed
40

Aymeric Roucher's avatar
Aymeric Roucher committed
41
### CodeAgent
Sylvain Gugger's avatar
Sylvain Gugger committed
42

Aymeric Roucher's avatar
Aymeric Roucher committed
43
[[autodoc]] CodeAgent
Sylvain Gugger's avatar
Sylvain Gugger committed
44

Aymeric Roucher's avatar
Aymeric Roucher committed
45
### React agents
Sylvain Gugger's avatar
Sylvain Gugger committed
46

Aymeric Roucher's avatar
Aymeric Roucher committed
47
[[autodoc]] ReactAgent
Sylvain Gugger's avatar
Sylvain Gugger committed
48

Aymeric Roucher's avatar
Aymeric Roucher committed
49
[[autodoc]] ReactJsonAgent
Sylvain Gugger's avatar
Sylvain Gugger committed
50

Aymeric Roucher's avatar
Aymeric Roucher committed
51
[[autodoc]] ReactCodeAgent
Sylvain Gugger's avatar
Sylvain Gugger committed
52
53
54
55
56
57
58
59
60
61
62

## Tools

### load_tool

[[autodoc]] load_tool

### Tool

[[autodoc]] Tool

Aymeric Roucher's avatar
Aymeric Roucher committed
63
### Toolbox
Sylvain Gugger's avatar
Sylvain Gugger committed
64

Aymeric Roucher's avatar
Aymeric Roucher committed
65
[[autodoc]] Toolbox
Sylvain Gugger's avatar
Sylvain Gugger committed
66

Aymeric Roucher's avatar
Aymeric Roucher committed
67
### PipelineTool
Sylvain Gugger's avatar
Sylvain Gugger committed
68

Aymeric Roucher's avatar
Aymeric Roucher committed
69
[[autodoc]] PipelineTool
Sylvain Gugger's avatar
Sylvain Gugger committed
70
71
72
73

### launch_gradio_demo

[[autodoc]] launch_gradio_demo
Lysandre Debut's avatar
Lysandre Debut committed
74

Aymeric Roucher's avatar
Aymeric Roucher committed
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
### ToolCollection

[[autodoc]] ToolCollection

## Engines

You're free to create and use your own engines to be usable by the Agents framework.
These engines have the following specification:
1. Follow the [messages format](../chat_templating.md) for its input (`List[Dict[str, str]]`) and return a string.
2. Stop generating outputs *before* the sequences passed in the argument `stop_sequences`

### HfEngine

For convenience, we have added a `HfEngine` that implements the points above and uses an inference endpoint for the execution of the LLM.

```python
>>> from transformers import HfEngine

>>> 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."},
... ]

>>> HfEngine()(messages, stop_sequences=["conversation"])

"That's very kind of you to say! It's always nice to have a relaxed "
```

[[autodoc]] HfEngine


Lysandre Debut's avatar
Lysandre Debut committed
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
## 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.

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`.

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

### AgentText

Aymeric Roucher's avatar
Aymeric Roucher committed
126
[[autodoc]] transformers.agents.agent_types.AgentText
Lysandre Debut's avatar
Lysandre Debut committed
127
128
129

### AgentImage

Aymeric Roucher's avatar
Aymeric Roucher committed
130
[[autodoc]] transformers.agents.agent_types.AgentImage
Lysandre Debut's avatar
Lysandre Debut committed
131
132
133

### AgentAudio

Aymeric Roucher's avatar
Aymeric Roucher committed
134
[[autodoc]] transformers.agents.agent_types.AgentAudio