Note
Go to the end to download the full example code.
Build Conversationο
AgentScope supports developers to build conversation with explicit message exchange among different agents.
from agentscope.agents import DialogAgent, UserAgent
from agentscope.message import Msg
from agentscope import msghub
import agentscope
# Initialize via model configuration for simplicity
agentscope.init(
model_configs={
"config_name": "my-qwen-max",
"model_name": "qwen-max",
"model_type": "dashscope_chat",
},
)
[]
Two Agentsο
Here we build a simple conversation between agent Jarvis and user.
angel = DialogAgent(
name="Angel",
sys_prompt="You're a helpful assistant named Angel.",
model_config_name="my-qwen-max",
)
monster = DialogAgent(
name="Monster",
sys_prompt="You're a helpful assistant named Monster.",
model_config_name="my-qwen-max",
)
Now, we can start the conversation by exchanging messages between these two agents for three rounds.
msg = None
for _ in range(3):
msg = angel(msg)
msg = monster(msg)
Angel: It seems like the conversation history is missing. Could you please provide more details or context so I can assist you better?
Monster: Of course! It looks like we might have started a new conversation. If you can, please provide some context or let me know what you'd like to discuss, and I'll do my best to help you. Whether it's a question, a topic you're interested in, or something specific you need assistance with, just let me know! π
Angel: I see, thank you for the clarification! I'm here to help with whatever you need. Could you please let me know what you'd like to discuss or any specific questions you have? Whether it's a topic you're curious about, a problem you need help with, or just a casual chat, I'm all ears! π
Monster: Hi Angel! It's great to have you here. Since we're starting fresh, I can help with a wide range of topics. Whether you need advice, want to discuss a particular subject, or just chat about something interesting, feel free to let me know. What would you like to talk about today? π
Angel: Hello! It looks like there might be a bit of a mix-up. I'm Angel, and I'm here to assist you. Could you please let me know what you'd like to discuss or any specific questions you have? Whether it's a topic you're curious about, a problem you need help with, or just a casual chat, I'm here to help! π
Monster: Hello Angel! It's nice to meet you. I'm Monster, and I'm here to assist with whatever you need. It seems like we both want to help each other, which is a bit of a mix-up! π
To clarify, I'm here to help you. So, if you have any specific questions, topics you're curious about, or just want to chat, feel free to let me know. What would you like to discuss today? π
If you want to participate in the conversation, just instantiate a built-in UserAgent to type messages to the agents.
user = UserAgent(name="User")
More than Two Agentsο
When there are more than two agents in a conversation, the message from one agent should be broadcasted to all the others.
To simplify the operation of broadcasting messages, AgentScope provides a msghub module. Specifically, the agents within the same msghub will receive messages from other participants in the same msghub automatically. By this way, we just need to organize the order of speaking without explicitly sending messages to other agents.
Here is a example for msghub, we first create three agents: Alice, Bob, and Charlie with qwen-max model.
alice = DialogAgent(
name="Alice",
sys_prompt="You're a helpful assistant named Alice.",
model_config_name="my-qwen-max",
)
bob = DialogAgent(
name="Bob",
sys_prompt="You're a helpful assistant named Bob.",
model_config_name="my-qwen-max",
)
charlie = DialogAgent(
name="Charlie",
sys_prompt="You're a helpful assistant named Charlie.",
model_config_name="my-qwen-max",
)
The three agents will participate in a conversation to report numbers alternatively.
# Introduce the rule of the conversation
greeting = Msg(
name="user",
content="Now you three count off each other from 1, and just report the number without any other information.",
role="user",
)
with msghub(
participants=[alice, bob, charlie],
announcement=greeting, # The announcement message will be broadcasted to all participants at the beginning.
) as hub:
# The first round of the conversation
alice()
bob()
charlie()
# We can manage the participants dynamically, e.g. delete an agent from the conversation.
hub.delete(charlie)
# Broadcast a message to all participants
hub.broadcast(
Msg(
"user",
"Charlie has left the conversation.",
"user",
),
)
# The second round of the conversation
alice()
bob()
charlie()
Alice: 1
Bob: 2
Charlie: 3
Alice: 4
Bob: 5
Charlie: 1
Now we print the memory of Alice and Bob to check if the operation is successful.
print("Memory of Alice:")
for msg in alice.memory.get_memory():
print(f"{msg.name}: {msg.content}")
print("\nMemory of Charlie:")
for msg in charlie.memory.get_memory():
print(f"{msg.name}: {msg.content}")
Memory of Alice:
user: Now you three count off each other from 1, and just report the number without any other information.
Alice: 1
Bob: 2
Charlie: 3
user: Charlie has left the conversation.
Alice: 4
Bob: 5
Memory of Charlie:
user: Now you three count off each other from 1, and just report the number without any other information.
Alice: 1
Bob: 2
Charlie: 3
Charlie: 1
In the above example, Charlie left the conversation after the first round without receiving β4β and β5β from Alice and Bob. Therefore, it reported β4β in the second round. On the other hand, Alice and Bob continued the conversation without Charlie.
Total running time of the script: (0 minutes 40.458 seconds)