autogen-agentchat 0.4.0.dev8版本的安装
1. 安装命令
pip install autogen-agentchat==0.4.0.dev8 autogen-ext[openai]==0.4.0.dev8
2. 版本检查
import autogen_agentchat
print(autogen_agentchat.__version__)
0.4.0.dev8
import autogen_ext
print(autogen_ext.__version__)
0.4.0.dev8
3. 第一个案例
使用 autogen-agentchat 创建一个智能代理系统,其中代理通过 智谱chatglm 模型处理用户查询(在本例中是查询天气),并使用定义的工具(如 get_weather)来返回结果。代理团队的任务是轮流响应查询,直到满足终止条件。
import asyncio
from autogen_agentchat.agents import AssistantAgent
from autogen_agentchat.task import Console, TextMentionTermination
from autogen_agentchat.teams import RoundRobinGroupChat
from autogen_ext.models import OpenAIChatCompletionClient
# Define a tool
async def get_weather(city: str) -> str:
return f"The weather in {city} is 73 degrees and Sunny."
async def main() -> None:
# Define an agent
weather_agent = AssistantAgent(
name="weather_agent",
model_client=OpenAIChatCompletionClient(
model="GLM-4-Plus",
api_key="your api key",
base_url="https://open.bigmodel.cn/api/paas/v4/",
model_capabilities={
"vision": True,
"function_calling": True,
"json_output": True,
},
),
tools=[get_weather],
)
# Define termination condition
termination = TextMentionTermination("TERMINATE")
# Define a team
agent_team = RoundRobinGroupChat([weather_agent], termination_condition=termination)
# Run the team and stream messages to the console
stream = agent_team.run_stream(task="What is the weather in New York?")
await Console(stream)
await main()
---------- user ----------
What is the weather in New York?
---------- weather_agent ----------
[FunctionCall(id='call_-9186124499374425060', arguments='{"city": "New York"}', name='get_weather')]
[Prompt tokens: 141, Completion tokens: 11]
---------- weather_agent ----------
[FunctionExecutionResult(content='The weather in New York is 73 degrees and Sunny.', call_id='call_-9186124499374425060')]
---------- weather_agent ----------
The weather in New York is 73 degrees and Sunny. TERMINATE
[Prompt tokens: 166, Completion tokens: 16]
---------- Summary ----------
Number of messages: 4
Finish reason: Text 'TERMINATE' mentioned
Total prompt tokens: 307
Total completion tokens: 27
Duration: 1.82 seconds
4. 出现的错误:
4.1 安装出错
C:\Users\32564>pip install 'autogen-agentchat==0.4.0.dev8' 'autogen-ext[openai]==0.4.0.dev8'
ERROR: Invalid requirement: "'autogen-agentchat==0.4.0.dev8'": Expected package name at the start of dependency specifier
'autogen-agentchat==0.4.0.dev8'
这个问题是由于在 pip install 命令中使用了单引号 ’ 导致的。Windows 命令行(cmd)不正确地解析了这些单引号,将其作为字符串的一部分,而不是用作命令的分隔符。
解决方法
在 Windows 上,请使用双引号 " 或直接省略引号:
替换单引号为双引号:
pip install "autogen-agentchat==0.4.0.dev8" "autogen-ext[openai]==0.4.0.dev8"
或者直接省略引号:
pip install autogen-agentchat==0.4.0.dev8 autogen-ext[openai]==0.4.0.dev8
为什么会报错?
在 Linux 和 macOS 上,单引号(')可以用来包裹参数,而在 Windows 的 cmd 中,单引号不会被解释为参数的边界,而是被当作字符的一部分。
因此,‘autogen-agentchat==0.4.0.dev8’ 被视为整个参数,而不是包名和版本号的组合。
4.2 asyncio.run() 在jupyter notebook中运行出错
---------------------------------------------------------------------------
RuntimeError Traceback (most recent call last)
Cell In[3], line 34
31 stream = agent_team.run_stream(task="What is the weather in New York?")
32 await Console(stream)
---> 34 asyncio.run(main())
File d:\soft\anaconda\envs\auto_four\Lib\asyncio\runners.py:190, in run(main, debug, loop_factory)
161 """Execute the coroutine and return the result.
162
163 This function runs the passed coroutine, taking care of
(...)
186 asyncio.run(main())
187 """
188 if events._get_running_loop() is not None:
189 # fail fast with short traceback
--> 190 raise RuntimeError(
191 "asyncio.run() cannot be called from a running event loop")
193 with Runner(debug=debug, loop_factory=loop_factory) as runner:
194 return runner.run(main)
这个错误 RuntimeError: asyncio.run() cannot be called from a running event loop 表示你在已经运行的事件循环中尝试调用 asyncio.run(),而 asyncio.run() 只能在没有其他事件循环正在运行的情况下调用。
为什么会报这个错?
asyncio.run() 是用于启动一个新的事件循环并运行一个异步任务的函数。它不能在已经有事件循环运行的环境中调用。常见的情况是在 Jupyter Notebook 或某些框架(如 Gradio、FastAPI 等)中,这些环境本身就已经有一个事件循环在运行,导致你不能再使用 asyncio.run()。
解决方法
方法 1: 使用 await 代替 asyncio.run()
在 Jupyter Notebook 中或者在已经有事件循环的环境中,你应该直接 await 异步函数,而不是使用 asyncio.run()。比如:
# 原来你可能这样做:
# asyncio.run(main())
应该改为:
await main()
参考链接:https://github.com/microsoft/autogen/tree/main
如果有任何问题,欢迎在评论区提问。