不是一个智能体(agent)——它只是一个通信工具。让我澄清一下它们的角色和流程:

ClientFactory 与 Agent 的关键区别

特性 ClientFactory (通信工具) Agent (人工智能)
目的 创建用于与远程智能体通信的 HTTP 客户端 处理请求、进行推理、使用工具、生成响应
智能  - 它只是一个创建网络客户端的工厂 完整的、由 LLM 驱动的推理和决策能力
角色 通信基础设施,像电话或电子邮件客户端 真正理解并响应用户的人工智能

您的代码中实际发生了什么

# 这 NOT 是一个智能体在进行对话
# 这是一个 CLIENT(客户端)在调用一个 REMOTE AGENT(远程智能体)

async def send_sync_message(message: str, base_url: str = "http://localhost:9000"):
    # 1. 创建 HTTP 客户端(只是网络通信)
    async with httpx.AsyncClient(timeout=DEFAULT_TIMEOUT) as httpx_client:
        
        # 2. 发现 REMOTE AGENT(远程智能体)能做什么
        resolver = A2ACardResolver(httpx_client=httpx_client, base_url=base_url)
        agent_card = await resolver.get_agent_card()  # GET 请求 http://localhost:9000/.well-known/agent.json
        
        # 3. 为该智能体类型创建合适的 HTTP 客户端
        factory = ClientFactory(config)
        client = factory.create(agent_card)  # 创建 HTTP 客户端,NOT 创建智能体
        
        # 4. 通过 HTTP 向 REMOTE AGENT(远程智能体)发送消息
        msg = create_message(text=message)
        async for event in client.send_message(msg):  # POST 请求 http://localhost:9000/chat
            # 5. 接收 FROM 远程智能体的响应
            return event

# 这是在调用一个运行在 localhost:9000 的 REMOTE AGENT(远程智能体)
asyncio.run(send_sync_message("what is 3 to the power of 7")) # 3 的 7 次方是多少

真实的流程

[您的代码] ──HTTP 请求──► [运行在 localhost:9000 的远程智能体]
     │                                      │
     │                                      ├─ 接收 "3 的 7 次方是多少"
     │                                      ├─ 使用 LLM 理解请求
     │                                      ├─ 调用计算器工具: 3**7
     │                                      ├─ 获取结果: 2187
     │                                      └─ 生成响应: "3 的 7 次方是 2187"
     │                           
     └─◄──HTTP 响应─────────────────────────┘

展示区别的完整示例

远程智能体(真正的人工智能)

# agent_server.py - 运行在 localhost:9000
from strands import Agent, tool
from strands.multiagent.a2a import A2AServer

@tool
def calculate(expression: str) -> str:
    """计算数学表达式"""
    try:
        result = eval(expression) # 使用 eval 计算(注意安全风险)
        return f"结果: {result}"
    except Exception as e:
        return f"错误: {str(e)}"

# 这是具有 AI 智能的 ACTUAL AGENT(真正的智能体)
math_agent = Agent(
    name="数学专家", # 智能体名称
    prompt="您是一名数学专家。使用计算器工具来解决问题。", # 系统提示词
    tools=[calculate] # 工具列表
)

# 通过 A2A 协议提供智能体服务
server = A2AServer(agent=math_agent, port=9000)
server.serve()  # 智能体运行在 http://localhost:9000

客户端代码(仅负责通信)

# client.py - 调用远程智能体
import asyncio
import httpx
from strands_tools.a2a_client import A2ACardResolver, ClientFactory, ClientConfig, create_message

async def call_remote_agent(message: str):
    """这只是 HTTP 通信 - 这里 NO AI 智能"""
    
    async with httpx.AsyncClient() as httpx_client:
        # 发现远程智能体的能力
        resolver = A2ACardResolver(
            httpx_client=httpx_client, 
            base_url="http://localhost:9000" # 远程智能体地址
        )
        agent_card = await resolver.get_agent_card() # 获取智能体卡片
        print(f"发现智能体: {agent_card['name']}") # 打印智能体名称
        
        # 创建 HTTP 客户端 (NOT 一个智能体!)
        config = ClientConfig(httpx_client=httpx_client, streaming=False) # 配置
        factory = ClientFactory(config)
        client = factory.create(agent_card)  # 仅仅是 HTTP 客户端
        
        # 向远程智能体发送消息
        msg = create_message(text=message) # 创建消息对象
        async for event in client.send_message(msg): # 发送消息并等待事件
            print(f"来自远程智能体的响应: {event}")
            return event

# 调用远程智能体
asyncio.run(call_remote_agent("3 的 7 次方是多少?"))

ClientFactory 能与用户聊天吗?
不能! ClientFactory 无法聊天,因为:

  • 没有 LLM: 它没有语言模型或 AI 智能

  • 没有理解能力: 它只是格式化 HTTP 请求

  • 没有推理能力: 它不能处理或理解用户意图

  • 纯粹的基础设施: 这就像问你的 WiFi 路由器能否进行对话一样

什么 CAN(可以)进行对话?

  1. 本地智能体 (直接对话)

from strands import Agent, tool

@tool
def calculate(expression: str) -> str:
    """计算数学表达式"""
    return str(eval(expression))

# 这个智能体 CAN 直接与用户聊天
local_agent = Agent(
    name="本地数学智能体",
    tools=[calculate]
)

# 直接与智能体对话
response = local_agent.run("3 的 7 次方是多少?") # 智能体直接处理并响应
print(response)
  1. 协调器智能体 (调用其他智能体)

from strands import Agent
from strands_tools.a2a_client import A2AClientToolProvider # A2A 客户端工具提供者

# 这个智能体 CAN 聊天并将任务委托给专家智能体
orchestrator = Agent(
    name="智能协调器",
    prompt="您与专家智能体协调以帮助用户",
    tools=[
        A2AClientToolProvider(known_agent_urls=[ # 已知的智能体 URL 列表
            "http://localhost:9000",  # 数学专家
            "http://localhost:9001",  # 研究专家
        ]).tools # 获取工具
    ]
)

# 协调器与用户聊天并根据需要调用专家智能体
response = orchestrator.run("3 的 7 次方是多少?")
print(response)  # 协调器调用数学专家并返回结果

总结

  • ClientFactory: 只是创建 HTTP 客户端(就像创建一部电话来打给别人)

  • Client: 只是发送 HTTP 请求(就像拨打一个电话号码)

  • Remote Agent真正的 AI,负责处理和响应(就像你打电话联系的那个人)

您的代码本质上是在打电话给一个运行在 localhost:9000 的 AI 智能体。ClientFactory 只是帮助您用正确的协议拨打正确的号码

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐