.. DO NOT EDIT. .. THIS FILE WAS AUTOMATICALLY GENERATED BY SPHINX-GALLERY. .. TO MAKE CHANGES, EDIT THE SOURCE PYTHON FILE: .. "build_tutorial/builtin_agent.py" .. LINE NUMBERS ARE GIVEN BELOW. .. only:: html .. note:: :class: sphx-glr-download-link-note :ref:`Go to the end ` to download the full example code. .. rst-class:: sphx-glr-example-title .. _sphx_glr_build_tutorial_builtin_agent.py: .. _builtin-agent Built-in Agents ============================= AgentScope builds in several agent class to support different scenarios and show how to build agents with AgentScope. .. list-table:: :header-rows: 1 * - Class - Description * - `UserAgent` - Agent that allows user to participate in the conversation. * - `DialogAgent` - Agent that speaks in natural language. * - `DictDialogAgent` - Agent that supports structured output. * - `ReActAgent` - Agent that uses tools in a reasoning-acting loop manner. * - `LlamaIndexAgent` - RAG agent. .. GENERATED FROM PYTHON SOURCE LINES 28-35 .. code-block:: Python import agentscope for module in agentscope.agents.__all__: if module.endswith("Agent"): print(module) .. rst-class:: sphx-glr-script-out .. code-block:: none DialogAgent DictDialogAgent UserAgent ReActAgent LlamaIndexAgent .. GENERATED FROM PYTHON SOURCE LINES 36-38 .. note:: To support different LLM APIs, all built-in agents are initialized by specifying the model configuration name `model_config_name` in AgentScope. .. GENERATED FROM PYTHON SOURCE LINES 38-49 .. code-block:: Python import agentscope agentscope.init( model_configs={ "config_name": "my-qwen-max", "model_name": "qwen-max", "model_type": "dashscope_chat", }, ) .. rst-class:: sphx-glr-script-out .. code-block:: none [] .. GENERATED FROM PYTHON SOURCE LINES 50-57 DialogAgent ---------------------------- The dialog agent is the most basic agent in AgentScope, which can interact with users in a dialog manner. Developers can customize it by providing different system prompts and model configurations. .. GENERATED FROM PYTHON SOURCE LINES 57-72 .. code-block:: Python from agentscope.agents import DialogAgent from agentscope.message import Msg # Init a dialog agent alice = DialogAgent( name="Alice", model_config_name="my-qwen-max", sys_prompt="You're a helpful assistant named Alice.", ) # Send a message to the agent msg = Msg("Bob", "Hi! What's your name?", "user") response = alice(msg) .. rst-class:: sphx-glr-script-out .. code-block:: none Alice: Hello, Bob! My name is Alice. It's nice to meet you. How can I assist you today? .. GENERATED FROM PYTHON SOURCE LINES 73-82 UserAgent ---------------------------- The `UserAgent` class allows users to interact with the other agents. When the `UserAgent` object is called, it will ask for user input and format it into a `Msg` object. Here we show how to initialize a `UserAgent` object and interact with the dialog agent `alice`. .. GENERATED FROM PYTHON SOURCE LINES 82-98 .. code-block:: Python from agentscope.agents import UserAgent from io import StringIO import sys user = UserAgent( name="Bob", input_hint="User input: \n", ) # Simulate user input sys.stdin = StringIO("Do you know me?\n") msg = user() msg = alice(msg) .. rst-class:: sphx-glr-script-out .. code-block:: none User Input: Bob: Do you know me? Alice: Hello Bob! I don't have any specific information about you other than what you've shared in this conversation. I'm here to help with any questions or tasks you might have. Is there something in particular you'd like to know or discuss? .. GENERATED FROM PYTHON SOURCE LINES 99-106 DictDialogAgent ---------------------------- The `DictDialogAgent` supports structured output and automatic post-processing by specifying its parser via the `set_parser` method. We first initialize a `DictDialogAgent` object, and switch between different outputs by changing the parser. .. GENERATED FROM PYTHON SOURCE LINES 106-135 .. code-block:: Python from agentscope.agents import DictDialogAgent from agentscope.parsers import MarkdownJsonDictParser charles = DictDialogAgent( name="Charles", model_config_name="my-qwen-max", sys_prompt="You're a helpful assistant named Charles.", max_retries=3, # The maximum number of retries when failing to get a required structured output ) # Ask the agent to generate structured output with `thought`, `speak`, and `decision` parser1 = MarkdownJsonDictParser( content_hint={ "thought": "what your thought", "speak": "what you speak", "decision": "your final decision, true/false", }, keys_to_metadata="decision", required_keys=["thought", "speak", "decision"], ) charles.set_parser(parser1) msg1 = charles(Msg("Bob", "Is it a good idea to go out in the rain?", "user")) print(f"The metadata field: {msg1.metadata}") print(f"The type of metadata field: {type(msg1.metadata)}") .. rst-class:: sphx-glr-script-out .. code-block:: none Charles: ```json {"thought": "Going out in the rain can be refreshing and fun, but it also depends on the temperature, if one has proper gear, and personal health conditions. It's important to consider these factors.", "speak": "It can be nice to go out in the rain, especially if you have the right gear like an umbrella or a raincoat. However, make sure it's not too cold and that you're feeling well. What do you think?", "decision": "true"} ``` The metadata field: true The type of metadata field: .. GENERATED FROM PYTHON SOURCE LINES 136-137 Then, we ask the agent to pick a number from 1 to 10. .. GENERATED FROM PYTHON SOURCE LINES 137-154 .. code-block:: Python parser2 = MarkdownJsonDictParser( content_hint={ "thought": "what your thought", "speak": "what you speak", "number": "the number you choose", }, keys_to_metadata="number", keys_to_content="speak", ) charles.set_parser(parser2) msg2 = charles(Msg("Bob", "Pick a number from 1 to 10.", "user")) print(f"The content of the response message: {msg2.content}") print(f"The metadata of the response message: {msg2.metadata}") .. rst-class:: sphx-glr-script-out .. code-block:: none Charles: ```json {"thought": "I need to pick a random number between 1 and 10. Let's go with 7, as it's often considered a lucky number.", "speak": "Sure, I'll pick a number. How about 7?", "number": "7"} ``` The content of the response message: Sure, I'll pick a number. How about 7? The metadata of the response message: 7 .. GENERATED FROM PYTHON SOURCE LINES 155-159 The next question is how to post-process the structured output. For example, the `thought` field should be stored in memory without being exposed to the others, while the `speak` field should be displayed to the user, and the `decision` field should be easily accessible in the response message object. .. GENERATED FROM PYTHON SOURCE LINES 159-183 .. code-block:: Python parser3 = MarkdownJsonDictParser( content_hint={ "thought": "what your thought", "speak": "what you speak", "number": "The number you choose", }, required_keys=["thought", "speak", "number"], keys_to_memory=["thought", "speak", "number"], # to be stored in memory keys_to_content="speak", # to be displayed keys_to_metadata="number", # to be stored in metadata field of the response message ) charles.set_parser(parser3) msg3 = charles(Msg("Bob", "Pick a number from 20 to 30.", "user")) print(f"The content field: {msg3.content}") print(f"The type of content field: {type(msg3.content)}\n") print(f"The metadata field: {msg3.metadata}") print(f"The type of metadata field: {type(msg3.metadata)}") .. rst-class:: sphx-glr-script-out .. code-block:: none Charles: ```json {"thought": "I need to pick a random number between 20 and 30. Let's choose 25, as it is right in the middle of the range.", "speak": "Sure, I'll pick a number. How about 25?", "number": "25"} ``` The content field: Sure, I'll pick a number. How about 25? The type of content field: The metadata field: 25 The type of metadata field: .. GENERATED FROM PYTHON SOURCE LINES 184-193 .. hint:: More advanced usage of structured output, and more different parsers refer to the section :ref:`structured-output`. ReActAgent ---------------------------- The `ReActAgent` uses tools to solve the given problem in a reasoning-acting loop manner. First we prepare a tool function for the agent. .. GENERATED FROM PYTHON SOURCE LINES 193-206 .. code-block:: Python from agentscope.service import ServiceToolkit, execute_python_code toolkit = ServiceToolkit() # Set execute_python_code as a tool by specifying partial arguments toolkit.add( execute_python_code, timeout=300, use_docker=False, maximum_memory_bytes=None, ) .. GENERATED FROM PYTHON SOURCE LINES 207-209 Then we initialize a `ReActAgent` to solve the given problem. .. GENERATED FROM PYTHON SOURCE LINES 209-226 .. code-block:: Python from agentscope.agents import ReActAgent david = ReActAgent( name="David", model_config_name="my-qwen-max", sys_prompt="You're a helpful assistant named David.", service_toolkit=toolkit, max_iters=10, verbose=True, ) task = Msg("Bob", "Help me to calculate 151513434*54353453453.", "user") response = david(task) .. rst-class:: sphx-glr-script-out .. code-block:: none system: Respond with specific tags as outlined below: {what you thought} {the function name you want to call} <{argument name}>{argument value} <{argument name}>{argument value} ... David: I need to use the execute_python_code function to perform the multiplication of the two numbers and print the result. execute_python_code print(151513434*54353453453) system: 1. Execute function execute_python_code [ARGUMENTS]: {"code": "print(151513434*54353453453)"} [RESULT]: 0 8235278382423187602 system: Respond with specific tags as outlined below: {what you thought} {the function name you want to call} <{argument name}>{argument value} <{argument name}>{argument value} ... David: The multiplication has been calculated successfully, and the result is 8235278382423187602. I can now inform Bob of the result. finish The result of multiplying 151513434 by 54353453453 is 8235278382423187602. system: 1. Execute function finish [ARGUMENTS]: {"response": "The result of multiplying 151513434 by 54353453453 is 8235278382423187602."} [RESULT]: The result of multiplying 151513434 by 54353453453 is 8235278382423187602. .. GENERATED FROM PYTHON SOURCE LINES 227-231 LlamaIndexAgent ---------------------------- Refer to the RAG Section for more details. .. rst-class:: sphx-glr-timing **Total running time of the script:** (0 minutes 34.364 seconds) .. _sphx_glr_download_build_tutorial_builtin_agent.py: .. only:: html .. container:: sphx-glr-footer sphx-glr-footer-example .. container:: sphx-glr-download sphx-glr-download-jupyter :download:`Download Jupyter notebook: builtin_agent.ipynb ` .. container:: sphx-glr-download sphx-glr-download-python :download:`Download Python source code: builtin_agent.py ` .. container:: sphx-glr-download sphx-glr-download-zip :download:`Download zipped: builtin_agent.zip ` .. only:: html .. rst-class:: sphx-glr-signature `Gallery generated by Sphinx-Gallery `_