Agents#
警告
AgentChat 正在开发中。API 可能会在未来的版本中发生变化。
AutoGen AgentChat 提供了一组预设代理,每个代理在响应消息的方式上都有所不同。 所有代理都共享以下属性和方法:
name
: 代理的唯一名称。description
: 代理的文本描述。on_messages()
: 向代理发送一系列ChatMessage
并获得Response
.on_messages_stream()
: 与on_messages()
相同,但返回一个迭代器,包含AgentMessage
,最后一项是Response
。on_reset()
: 将代理重置为初始状态。
有关 AgentChat 消息类型的更多信息,请参见 autogen_agentchat.messages
。
Assistant Agent#
AssistantAgent
是一个内置代理,
它使用具有使用工具能力的语言模型。
from autogen_agentchat.agents import AssistantAgent
from autogen_agentchat.messages import TextMessage
from autogen_core.base import CancellationToken
from autogen_ext.models import OpenAIChatCompletionClient
# Define a tool that searches the web for information.
async def web_search(query: str) -> str:
"""Find information on the web"""
return "AutoGen is a programming framework for building multi-agent applications."
# Create an agent that uses the OpenAI GPT-4o model.
model_client = OpenAIChatCompletionClient(
model="gpt-4o",
api_key="sk-",
)
agent = AssistantAgent(
name="assistant",
model_client=model_client,
tools=[web_search],
system_message="Use tools to solve tasks.",
)
我们可以调用 on_messages()
方法来获取代理对消息的响应。
async def assistant_run() -> None:
response = await agent.on_messages(
[TextMessage(content="Find information on AutoGen", source="user")],
cancellation_token=CancellationToken(),
)
print(response.inner_messages)
print(response.chat_message)
# Use asyncio.run(assistant_run()) when running in a script.
await assistant_run()
[ToolCallMessage(source='assistant', models_usage=RequestUsage(prompt_tokens=61, completion_tokens=15), content=[FunctionCall(id='call_90iZvYWtw8YLOvzPIhyYFCaw', arguments='{"query":"AutoGen"}', name='web_search')]), ToolCallResultMessage(source='assistant', models_usage=None, content=[FunctionExecutionResult(content='AutoGen is a programming framework for building multi-agent applications.', call_id='call_90iZvYWtw8YLOvzPIhyYFCaw')])]
source='assistant' models_usage=RequestUsage(prompt_tokens=92, completion_tokens=14) content='AutoGen is a programming framework used for building multi-agent applications.'
调用 on_messages()
方法
会返回一个 Response
,
其中包含代理的最终响应(在 chat_message
属性中),
以及一个内部消息列表(在 inner_messages
属性中),
这些内部消息存储了代理产生最终响应的"思考过程"。
流式消息#
我们还可以使用 on_messages_stream()
方法
来实时流式获取代理生成的每条消息,
并使用 Console
将消息
实时打印到控制台。
from autogen_agentchat.task import Console
async def assistant_run_stream() -> None:
# Option 1: read each message from the stream.
# async for message in agent.on_messages_stream(
# [TextMessage(content="Find information on AutoGen", source="user")],
# cancellation_token=CancellationToken(),
# ):
# print(message)
# Option 2: use Console to print all messages as they appear.
await Console(
agent.on_messages_stream(
[TextMessage(content="Find information on AutoGen", source="user")],
cancellation_token=CancellationToken(),
)
)
# Use asyncio.run(assistant_run_stream()) when running in a script.
await assistant_run_stream()
---------- assistant ----------
[FunctionCall(id='call_VfVDAK3OBqB9BQ6emRoraTKe', arguments='{"query":"AutoGen programming framework"}', name='web_search')]
[Prompt tokens: 127, Completion tokens: 17]
---------- assistant ----------
[FunctionExecutionResult(content='AutoGen is a programming framework for building multi-agent applications.', call_id='call_VfVDAK3OBqB9BQ6emRoraTKe')]
---------- assistant ----------
AutoGen is a programming framework designed for developing multi-agent applications.
[Prompt tokens: 160, Completion tokens: 14]
---------- Summary ----------
Number of inner messages: 2
Total prompt tokens: 287
Total completion tokens: 31
Duration: 1.88 seconds
on_messages_stream()
方法返回一个异步生成器,它会生成代理产生的每条内部消息,
最后一项是 chat_message
属性中的最终响应消息。
从消息中可以看到,助手代理使用了 web_search
工具来搜索信息,并使用搜索结果进行响应。
理解工具调用#
大型语言模型(LLMs)通常仅限于生成文本或代码响应。然而,许多复杂任务都能从使用外部工具执行特定操作中受益,比如从 API 或数据库获取数据。
为了解决这个限制,现代 LLMs 现在可以接受一个可用工具模式列表(工具及其参数的描述)并生成工具调用消息。这种能力被称为Tool Calling或Function Calling,正在成为构建智能代理应用程序的流行模式。
其他预设代理#
以下预设代理可供使用:
CodeExecutorAgent
: 一个可以执行代码的代理。MultimodalWebSurfer
: 一个多模态代理,可以搜索网页并访问网页获取信息。
下一步#
现在我们已经讨论了如何使用 AssistantAgent
,
我们可以继续下一节来学习如何使用 AgentChat 的团队功能。