mirror of
				https://github.com/microsoft/autogen.git
				synced 2025-11-04 03:39:52 +00:00 
			
		
		
		
	Update docs for new executors (#2119)
* Update docs for new executors * Update website/docs/FAQ.mdx Co-authored-by: gagb <gagb@users.noreply.github.com> * Update website/docs/FAQ.mdx Co-authored-by: gagb <gagb@users.noreply.github.com> * Update website/docs/installation/Installation.mdx Co-authored-by: gagb <gagb@users.noreply.github.com> * Update website/docs/installation/Installation.mdx Co-authored-by: gagb <gagb@users.noreply.github.com> --------- Co-authored-by: gagb <gagb@users.noreply.github.com>
This commit is contained in:
		
							parent
							
								
									01afc9bbe7
								
							
						
					
					
						commit
						3dfa305acb
					
				@ -71,31 +71,46 @@ in the system message. This line is in the default system message of the `Assist
 | 
				
			|||||||
If the `# filename` doesn't appear in the suggested code still, consider adding explicit instructions such as "save the code to disk" in the initial user message in `initiate_chat`.
 | 
					If the `# filename` doesn't appear in the suggested code still, consider adding explicit instructions such as "save the code to disk" in the initial user message in `initiate_chat`.
 | 
				
			||||||
The `AssistantAgent` doesn't save all the code by default, because there are cases in which one would just like to finish a task without saving the code.
 | 
					The `AssistantAgent` doesn't save all the code by default, because there are cases in which one would just like to finish a task without saving the code.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## Code execution
 | 
					## Legacy code executor
 | 
				
			||||||
 | 
					
 | 
				
			||||||
We strongly recommend using docker to execute code. There are two ways to use docker:
 | 
					:::note
 | 
				
			||||||
 | 
					The new code executors offers more choices of execution backend.
 | 
				
			||||||
 | 
					Read more about [code executors](/docs/tutorial/code-executors).
 | 
				
			||||||
 | 
					:::
 | 
				
			||||||
 | 
					
 | 
				
			||||||
1. Run AutoGen in a docker container. For example, when developing in [GitHub codespace](https://codespaces.new/microsoft/autogen?quickstart=1), AutoGen runs in a docker container. If you are not developing in Github codespace, follow instructions [here](installation/Docker.md#option-1-install-and-run-autogen-in-docker) to install and run AutoGen in docker.
 | 
					The legacy code executor is used by specifying the `code_execution_config` in the agent's constructor.
 | 
				
			||||||
2. Run AutoGen outside of a docker, while performing code execution with a docker container. For this option, make sure docker is up and running. If you want to run the code locally (not recommended) then `use_docker` can be set to `False` in `code_execution_config` for each code-execution agent, or set `AUTOGEN_USE_DOCKER` to `False` as an environment variable.
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
### Enable Python 3 docker image
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
You might want to override the default docker image used for code execution. To do that set `use_docker` key of `code_execution_config` property to the name of the image. E.g.:
 | 
					 | 
				
			||||||
```python
 | 
					```python
 | 
				
			||||||
user_proxy = autogen.UserProxyAgent(
 | 
					from autogen import UserProxyAgent
 | 
				
			||||||
    name="agent",
 | 
					
 | 
				
			||||||
    human_input_mode="TERMINATE",
 | 
					user_proxy = UserProxyAgent(
 | 
				
			||||||
    max_consecutive_auto_reply=10,
 | 
					    name="user_proxy",
 | 
				
			||||||
    code_execution_config={"work_dir":"_output", "use_docker":"python:3"},
 | 
					    code_execution_config={"work_dir":"_output", "use_docker":"python:3"},
 | 
				
			||||||
    llm_config=llm_config,
 | 
					 | 
				
			||||||
    system_message=""""Reply TERMINATE if the task has been solved at full satisfaction.
 | 
					 | 
				
			||||||
Otherwise, reply CONTINUE, or the reason why the task is not solved yet."""
 | 
					 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
If you have problems with agents running `pip install` or get errors similar to `Error while fetching server API version: ('Connection aborted.', FileNotFoundError(2, 'No such file or directory')`, you can choose **'python:3'** as image as shown in the code example above and that should solve the problem.
 | 
					In this example, the `code_execution_config` specifies that the code will be
 | 
				
			||||||
 | 
					executed in a docker container with the image `python:3`.
 | 
				
			||||||
 | 
					By default, the image name is `python:3-slim` if not specified.
 | 
				
			||||||
 | 
					The `work_dir` specifies the directory where the code will be executed.
 | 
				
			||||||
 | 
					If you have problems with agents running `pip install` or get errors similar to
 | 
				
			||||||
 | 
					`Error while fetching server API version: ('Connection aborted.', FileNotFoundError(2, 'No such file or directory')`,
 | 
				
			||||||
 | 
					you can choose **'python:3'** as image as shown in the code example above and
 | 
				
			||||||
 | 
					that should solve the problem.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
### Agents keep thanking each other when using `gpt-3.5-turbo`
 | 
					By default it runs code in a docker container. If you want to run code locally
 | 
				
			||||||
 | 
					(not recommended) then `use_docker` can be set to `False` in `code_execution_config`
 | 
				
			||||||
 | 
					for each code-execution agent, or set `AUTOGEN_USE_DOCKER` to `False` as an
 | 
				
			||||||
 | 
					environment variable.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					You can also develop your AutoGen application in a docker container.
 | 
				
			||||||
 | 
					For example, when developing in [GitHub codespace](https://codespaces.new/microsoft/autogen?quickstart=1),
 | 
				
			||||||
 | 
					AutoGen runs in a docker container.
 | 
				
			||||||
 | 
					If you are not developing in GitHub Codespaces,
 | 
				
			||||||
 | 
					follow instructions [here](installation/Docker.md#option-1-install-and-run-autogen-in-docker)
 | 
				
			||||||
 | 
					to install and run AutoGen in docker.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Agents keep thanking each other when using `gpt-3.5-turbo`
 | 
				
			||||||
 | 
					
 | 
				
			||||||
When using `gpt-3.5-turbo` you may often encounter agents going into a "gratitude loop", meaning when they complete a task they will begin congratulating and thanking each other in a continuous loop. This is a limitation in the performance of `gpt-3.5-turbo`, in contrast to `gpt-4` which has no problem remembering instructions. This can hinder the experimentation experience when trying to test out your own use case with cheaper models.
 | 
					When using `gpt-3.5-turbo` you may often encounter agents going into a "gratitude loop", meaning when they complete a task they will begin congratulating and thanking each other in a continuous loop. This is a limitation in the performance of `gpt-3.5-turbo`, in contrast to `gpt-4` which has no problem remembering instructions. This can hinder the experimentation experience when trying to test out your own use case with cheaper models.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -78,35 +78,29 @@ pip install pyautogen
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
:::
 | 
					:::
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Install Docker for Code Execution
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## Code execution with Docker (default)
 | 
					We recommend using Docker for code execution.
 | 
				
			||||||
 | 
					To install Docker, follow the instructions for your operating system on the [Docker website](https://docs.docker.com/get-docker/).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Even if you install AutoGen locally, we highly recommend using Docker for [code execution](FAQ.mdx#code-execution).
 | 
					A simple example of how to use Docker for code execution is shown below:
 | 
				
			||||||
 | 
					 | 
				
			||||||
The default behaviour for code-execution agents is for code execution to be performed in a docker container.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
**To turn this off**: if you want to run the code locally (not recommended) then `use_docker` can be set to `False` in `code_execution_config` for each code-execution agent, or set `AUTOGEN_USE_DOCKER` to `False` as an environment variable.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
You might want to override the default docker image used for code execution. To do that set `use_docker` key of `code_execution_config` property to the name of the image. E.g.:
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
```python
 | 
					```python
 | 
				
			||||||
user_proxy = autogen.UserProxyAgent(
 | 
					from pathlib import Path
 | 
				
			||||||
    name="agent",
 | 
					from autogen import UserProxyAgent
 | 
				
			||||||
    human_input_mode="TERMINATE",
 | 
					from autogen.coding import DockerCommandLineCodeExecutor
 | 
				
			||||||
    max_consecutive_auto_reply=10,
 | 
					
 | 
				
			||||||
    code_execution_config={"work_dir":"_output", "use_docker":"python:3"},
 | 
					work_dir = Path("coding")
 | 
				
			||||||
    llm_config=llm_config,
 | 
					work_dir.mkdir(exist_ok=True)
 | 
				
			||||||
    system_message=""""Reply TERMINATE if the task has been solved at full satisfaction.
 | 
					
 | 
				
			||||||
Otherwise, reply CONTINUE, or the reason why the task is not solved yet."""
 | 
					with DockerCommandLineCodeExecutor(work_dir=work_dir) as code_executor:
 | 
				
			||||||
)
 | 
					    user_proxy = UserProxyAgent(
 | 
				
			||||||
 | 
					        name="user_proxy",
 | 
				
			||||||
 | 
					        code_execution_config={"executor": code_executor},
 | 
				
			||||||
 | 
					    )
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
**Turn off code execution entirely**: if you want to turn off code execution entirely, set `code_execution_config` to `False`. E.g.:
 | 
					To learn more about code executors, see the [code executors tutorial](/docs/tutorial/code-executors).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
```python
 | 
					You might have seen a different way of defining the executors without creating the
 | 
				
			||||||
user_proxy = autogen.UserProxyAgent(
 | 
					executor object, please refer to FAQ for this [legacy code executor](/docs/FAQ#legacy-code-executor).
 | 
				
			||||||
    name="agent",
 | 
					 | 
				
			||||||
    llm_config=llm_config,
 | 
					 | 
				
			||||||
    code_execution_config=False,
 | 
					 | 
				
			||||||
)
 | 
					 | 
				
			||||||
```
 | 
					 | 
				
			||||||
 | 
				
			|||||||
@ -21,76 +21,88 @@ set TOGETHER_API_KEY=YourTogetherAIKeyHere
 | 
				
			|||||||
Create your LLM configuration, with the [model you want](https://docs.together.ai/docs/inference-models).
 | 
					Create your LLM configuration, with the [model you want](https://docs.together.ai/docs/inference-models).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
```python
 | 
					```python
 | 
				
			||||||
import autogen
 | 
					 | 
				
			||||||
import os
 | 
					import os
 | 
				
			||||||
 | 
					
 | 
				
			||||||
llm_config={
 | 
					config_list = [
 | 
				
			||||||
    "config_list": [
 | 
					    {
 | 
				
			||||||
        {
 | 
					        # Available together.ai model strings:
 | 
				
			||||||
            # Available together.ai model strings:
 | 
					        # https://docs.together.ai/docs/inference-models
 | 
				
			||||||
            # https://docs.together.ai/docs/inference-models
 | 
					        "model": "mistralai/Mistral-7B-Instruct-v0.1",
 | 
				
			||||||
            "model": "mistralai/Mistral-7B-Instruct-v0.1",
 | 
					        "api_key": os.environ['TOGETHER_API_KEY'],
 | 
				
			||||||
            "api_key": os.environ['TOGETHER_API_KEY'],
 | 
					        "base_url": "https://api.together.xyz/v1"
 | 
				
			||||||
            "base_url": "https://api.together.xyz/v1"
 | 
					    }
 | 
				
			||||||
        }
 | 
					]
 | 
				
			||||||
    ],
 | 
					 | 
				
			||||||
    "cache_seed": 42
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## Construct Agents
 | 
					## Construct Agents
 | 
				
			||||||
 | 
					
 | 
				
			||||||
```python
 | 
					```python
 | 
				
			||||||
 | 
					from pathlib import Path
 | 
				
			||||||
 | 
					from autogen import AssistantAgent, UserProxyAgent
 | 
				
			||||||
 | 
					from autogen.coding import LocalCommandLineCodeExecutor
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					work_dir = Path("groupchat")
 | 
				
			||||||
 | 
					work_dir.mkdir(exist_ok=True)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Create local command line code executor.
 | 
				
			||||||
 | 
					code_executor = LocalCommandLineCodeExecutor(work_dir=work_dir)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# User Proxy will execute code and finish the chat upon typing 'exit'
 | 
					# User Proxy will execute code and finish the chat upon typing 'exit'
 | 
				
			||||||
user_proxy = autogen.UserProxyAgent(
 | 
					user_proxy = UserProxyAgent(
 | 
				
			||||||
    name="UserProxy",
 | 
					    name="UserProxy",
 | 
				
			||||||
    system_message="A human admin",
 | 
					    system_message="A human admin",
 | 
				
			||||||
    code_execution_config={
 | 
					    code_execution_config={
 | 
				
			||||||
        "last_n_messages": 2,
 | 
					        "last_n_messages": 2,
 | 
				
			||||||
        "work_dir": "groupchat",
 | 
					        "executor": code_executor,
 | 
				
			||||||
        "use_docker": False,
 | 
					    },
 | 
				
			||||||
    },  # Please set use_docker=True if docker is available to run the generated code. Using docker is safer than running the generated code directly.
 | 
					 | 
				
			||||||
    human_input_mode="TERMINATE",
 | 
					    human_input_mode="TERMINATE",
 | 
				
			||||||
    is_termination_msg=lambda x: "TERMINATE" in x.get("content"),
 | 
					    is_termination_msg=lambda x: "TERMINATE" in x.get("content"),
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Python Coder agent
 | 
					# Python Coder agent
 | 
				
			||||||
coder = autogen.AssistantAgent(
 | 
					coder = AssistantAgent(
 | 
				
			||||||
    name="softwareCoder",
 | 
					    name="softwareCoder",
 | 
				
			||||||
    description="Software Coder, writes Python code as required and reiterates with feedback from the Code Reviewer.",
 | 
					    description="Software Coder, writes Python code as required and reiterates with feedback from the Code Reviewer.",
 | 
				
			||||||
    system_message="You are a senior Python developer, a specialist in writing succinct Python functions.",
 | 
					    system_message="You are a senior Python developer, a specialist in writing succinct Python functions.",
 | 
				
			||||||
    llm_config=llm_config,
 | 
					    llm_config={"config_list": config_list},
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Code Reviewer agent
 | 
					# Code Reviewer agent
 | 
				
			||||||
reviewer = autogen.AssistantAgent(
 | 
					reviewer = AssistantAgent(
 | 
				
			||||||
    name="codeReviewer",
 | 
					    name="codeReviewer",
 | 
				
			||||||
    description="Code Reviewer, reviews written code for correctness, efficiency, and security. Asks the Software Coder to address issues.",
 | 
					    description="Code Reviewer, reviews written code for correctness, efficiency, and security. Asks the Software Coder to address issues.",
 | 
				
			||||||
    system_message="You are a Code Reviewer, experienced in checking code for correctness, efficiency, and security. Review and provide feedback to the Software Coder until you are satisfied, then return the word TERMINATE",
 | 
					    system_message="You are a Code Reviewer, experienced in checking code for correctness, efficiency, and security. Review and provide feedback to the Software Coder until you are satisfied, then return the word TERMINATE",
 | 
				
			||||||
    is_termination_msg=lambda x: "TERMINATE" in x.get("content"),
 | 
					    is_termination_msg=lambda x: "TERMINATE" in x.get("content"),
 | 
				
			||||||
    llm_config=llm_config,
 | 
					    llm_config={"config_list": config_list},
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## Establish the group chat
 | 
					## Establish the group chat
 | 
				
			||||||
 | 
					
 | 
				
			||||||
```python
 | 
					```python
 | 
				
			||||||
 | 
					from autogen import GroupChat, GroupChatManager
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Establish the Group Chat and disallow a speaker being selected consecutively
 | 
					# Establish the Group Chat and disallow a speaker being selected consecutively
 | 
				
			||||||
groupchat = autogen.GroupChat(agents=[user_proxy, coder, reviewer], messages=[], max_round=12, allow_repeat_speaker=False)
 | 
					groupchat = GroupChat(agents=[user_proxy, coder, reviewer], messages=[], max_round=12, allow_repeat_speaker=False)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Manages the group of multiple agents
 | 
					# Manages the group of multiple agents
 | 
				
			||||||
manager = autogen.GroupChatManager(groupchat=groupchat, llm_config=llm_config)
 | 
					manager = GroupChatManager(groupchat=groupchat, llm_config={"config_list": config_list})
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## Start Chat
 | 
					## Start Chat
 | 
				
			||||||
 | 
					
 | 
				
			||||||
```python
 | 
					```python
 | 
				
			||||||
# Start the chat with a request to write a function
 | 
					from autogen.cache import Cache
 | 
				
			||||||
user_proxy.initiate_chat(
 | 
					
 | 
				
			||||||
    manager,
 | 
					# Cache LLM responses.
 | 
				
			||||||
    message="Write a Python function for the Fibonacci sequence, the function will have one parameter for the number in the sequence, which the function will return the Fibonacci number for."
 | 
					with Cache.disk() as cache:
 | 
				
			||||||
)
 | 
					    # Start the chat with a request to write a function
 | 
				
			||||||
# type exit to terminate the chat
 | 
					    user_proxy.initiate_chat(
 | 
				
			||||||
 | 
					        manager,
 | 
				
			||||||
 | 
					        message="Write a Python function for the Fibonacci sequence, the function will have one parameter for the number in the sequence, which the function will return the Fibonacci number for.",
 | 
				
			||||||
 | 
					        cache=cache,
 | 
				
			||||||
 | 
					    )
 | 
				
			||||||
 | 
					    # type exit to terminate the chat
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Output:
 | 
					Output:
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user