AutoGen框架进行多智能体协作—AI Agentic Design Patterns with AutoGen(一)

1. 多代理对话:单口喜剧

在AutoGen中,Agent是一个可以代表人类意图执行操作的实体,发送消息,接收消息,执行操作,生成回复,并与其他代理交互。AutoGen具有一个名为Conversible Agent的内置代理类,它将不同类型的代理统一在同一个编程抽象中。

在这里插入图片描述
 Conversible Agent带有许多内置功能,如使用大型语言模型配置生成回复、执行代码或函数、保持人工干预并检查停止响应等。你可以打开或关闭每个组件,并根据应用程序的需求进行定制,通过这些不同的功能,你可以使用相同的接口创建具有不同角色的代理。

实验地址:https://learn.deeplearning.ai/courses/ai-agentic-design-patterns-with-autogen/lesson/2/multi-agent-conversation-and-stand-up-comedy

2. 实验运行

2.1 配置环境

包版本:

# requirements file
# note which revision of python, for example 3.9.6
# in this file, insert all the pip install needs, include revision

# python==3.10.13
pyautogen==0.2.25
chess==1.10.0
matplotlib
numpy
pandas
yfinance

utils工具类

# Add your utilities or helper functions to this file.

import os
from dotenv import load_dotenv, find_dotenv

# these expect to find a .env file at the directory above the lesson.                                                                                                                     # the format for that file is (without the comment)                                                                                                                                       #API_KEYNAME=AStringThatIsTheLongAPIKeyFromSomeService                                                                                                                                     
def load_env():
    _ = load_dotenv(find_dotenv())

def get_openai_api_key():
    load_env()
    openai_api_key = os.getenv("OPENAI_API_KEY")
    return openai_api_key
from utils import get_openai_api_key
OPENAI_API_KEY = get_openai_api_key()
llm_config = {"model": "gpt-3.5-turbo"}

2.2 定义一个AutoGen代理

from autogen import ConversableAgent

agent = ConversableAgent(
    name="chatbot",
    llm_config=llm_config,
    human_input_mode="NEVER",
)
reply = agent.generate_reply(
    messages=[{"content": "Tell me a joke.", "role": "user"}]
)
print(reply)

输出如下:

Sure, here's one for you:

Why couldn't the bicycle stand up by itself?

Because it was two tired!

2.3 让代理之间对话

设置凯西和乔这两个代理之间的对话,同时保留他们交互的记忆。

cathy = ConversableAgent(
    name="cathy",
    system_message=
    "Your name is Cathy and you are a stand-up comedian.",
    llm_config=llm_config,
    human_input_mode="NEVER",
)

joe = ConversableAgent(
    name="joe",
    system_message=
    "Your name is Joe and you are a stand-up comedian. "
    "Start the next joke from the punchline of the previous joke.",
    llm_config=llm_config,
    human_input_mode="NEVER",
)
chat_result = joe.initiate_chat(
    recipient=cathy, 
    message="I'm Joe. Cathy, let's keep the jokes rolling.",
    max_turns=2,
)

输出如下:

joe (to cathy):

I'm Joe. Cathy, let's keep the jokes rolling.

--------------------------------------------------------------------------------
cathy (to joe):

Sure thing, Joe! Why did the scarecrow win an award? Because he was outstanding in his field!

--------------------------------------------------------------------------------
joe (to cathy):

Haha, Cathy, that's a good one! Speaking of awards, I entered a pun contest and I really feel like I'm in my element.

--------------------------------------------------------------------------------
cathy (to joe):

That's awesome, Joe! I bet you'll clean up with those puns! Just remember, even if you don't win, at least you can say you gave it your punniest shot!

--------------------------------------------------------------------------------

2.4 查看历史结果

import pprint

pprint.pprint(chat_result.chat_history)

输出如下:

[{'content': "I'm Joe. Cathy, let's keep the jokes rolling.",
  'role': 'assistant'},
 {'content': 'Sure thing, Joe! Why did the scarecrow win an award? Because he '
             'was outstanding in his field!',
  'role': 'user'},
 {'content': "Haha, Cathy, that's a good one! Speaking of awards, I entered a "
             "pun contest and I really feel like I'm in my element.",
  'role': 'assistant'},
 {'content': "That's awesome, Joe! I bet you'll clean up with those puns! Just "
             "remember, even if you don't win, at least you can say you gave "
             'it your punniest shot!',
  'role': 'user'}]

查看花费

pprint.pprint(chat_result.cost)

输出如下:

{'usage_excluding_cached_inference': {'gpt-3.5-turbo-0125': {'completion_tokens': 93,
                                                             'cost': 0.0002435,
                                                             'prompt_tokens': 208,
                                                             'total_tokens': 301},
                                      'total_cost': 0.0002435},
 'usage_including_cached_inference': {'gpt-3.5-turbo-0125': {'completion_tokens': 93,
                                                             'cost': 0.0002435,
                                                             'prompt_tokens': 208,
                                                             'total_tokens': 301},
                                      'total_cost': 0.0002435}}

生成摘要总结

pprint.pprint(chat_result.summary)

输出如下:

("That's awesome, Joe! I bet you'll clean up with those puns! Just remember, "
 "even if you don't win, at least you can say you gave it your punniest shot!")、

2.5 获取更好的对话摘要

chat_result = joe.initiate_chat(
    cathy, 
    message="I'm Joe. Cathy, let's keep the jokes rolling.", 
    max_turns=2, 
    summary_method="reflection_with_llm",
    summary_prompt="Summarize the conversation",
)

输出如下:

joe (to cathy):

I'm Joe. Cathy, let's keep the jokes rolling.

--------------------------------------------------------------------------------
cathy (to joe):

Sure thing, Joe! Why did the scarecrow win an award? Because he was outstanding in his field!

--------------------------------------------------------------------------------
joe (to cathy):

Haha, Cathy, that's a good one! Speaking of awards, I entered a pun contest and I really feel like I'm in my element.

--------------------------------------------------------------------------------
cathy (to joe):

That's awesome, Joe! I bet you'll clean up with those puns! Just remember, even if you don't win, at least you can say you gave it your punniest shot!

--------------------------------------------------------------------------------
pprint.pprint(chat_result.summary)

输出如下:

('Joe and Cathy enjoy exchanging jokes and puns. Joe entered a pun contest and '
 "Cathy encouraged him to give it his best shot, reminding him that he's in "
 'his element with puns.')

2.6 设置对话终止条件

当开启了多轮对话时,往往需要对话终止条件去停止对话生成,配置如下

cathy = ConversableAgent(
    name="cathy",
    system_message=
    "Your name is Cathy and you are a stand-up comedian. "
    "When you're ready to end the conversation, say 'I gotta go'.",
    llm_config=llm_config,
    human_input_mode="NEVER",
    is_termination_msg=lambda msg: "I gotta go" in msg["content"],
)

joe = ConversableAgent(
    name="joe",
    system_message=
    "Your name is Joe and you are a stand-up comedian. "
    "When you're ready to end the conversation, say 'I gotta go'.",
    llm_config=llm_config,
    human_input_mode="NEVER",
    is_termination_msg=lambda msg: "I gotta go" in msg["content"] or "Goodbye" in msg["content"],
)
chat_result = joe.initiate_chat(
    recipient=cathy,
    message="I'm Joe. Cathy, let's keep the jokes rolling."
)

输出如下:

joe (to cathy):

I'm Joe. Cathy, let's keep the jokes rolling.

--------------------------------------------------------------------------------
cathy (to joe):

Hey Joe! Sure thing, I'm always ready for some laughs. So, did you hear about the mathematician who’s afraid of negative numbers? He'll stop at nothing to avoid them!

--------------------------------------------------------------------------------
joe (to cathy):

Haha, that's a good one, Cathy! Here's a math joke for you: Why was the equal sign so humble? Because he knew he wasn't less than or greater than anyone else!

--------------------------------------------------------------------------------
cathy (to joe):

Haha, I love that one, Joe! Math jokes are always a plus in my book. Speaking of books, did you hear about the claustrophobic astronaut? He just needed a little space!

--------------------------------------------------------------------------------
joe (to cathy):

Haha, I love a good space joke! It's out of this world! Speaking of space, did you hear about the claustrophobic astronaut's favorite part of a computer? The space bar!

--------------------------------------------------------------------------------
cathy (to joe):

Haha, that's a stellar one, Joe! You're really taking these jokes to new heights! But hey, I think it's time for me to launch off. I gotta go!

--------------------------------------------------------------------------------

可以看到经过三轮对话就结束了。我们再次查看历史对话信息:

cathy.send(message="What's last joke we talked about?", recipient=joe)

输出如下:

cathy (to joe):

What's last joke we talked about?

--------------------------------------------------------------------------------
joe (to cathy):

The last joke we talked about was the claustrophobic astronaut's favorite part of a computer being the space bar! If you need more jokes, feel free to come back anytime. See you later!

--------------------------------------------------------------------------------
cathy (to joe):

Thanks, Joe! It's been a blast chatting with you. Take care and remember, keep laughing! Bye!

--------------------------------------------------------------------------------
joe (to cathy):

You're welcome, Cathy! I had a great time too. Take care and keep smiling! Goodbye!

--------------------------------------------------------------------------------
cathy (to joe):

Goodbye!

--------------------------------------------------------------------------------

3. 总结

以上只是使用代理构建对话的基本示例。在接下来的课程中,我们将学习其他对话模式和一些代理设计模式,包括工具使用、反思、规划和代码执行等。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

l8947943

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值