pip install agent-framework:微软多Agent框架1.0实测
微软4月3号发了Agent Framework 1.0正式版。这个框架把之前的Semantic Kernel和AutoGen合并成了一个SDK,Python和.NET都支持。
说直白点:以前想用微软的Agent能力,得在Semantic Kernel和AutoGen之间选。两套API不兼容,社区也分裂。现在合成一个了,装一个包就行。
我花了半天时间把它跑通了,从单Agent到多Agent编排、接MCP工具、用DevUI调试。下面把过程记下来。
安装
Python一行命令:
bash
pip install agent-framework
.NET也一行:
bash
dotnet add package Microsoft.Agents.AI
装完大概200MB左右。依赖项不少,建议用虚拟环境。
认证方式
Agent Framework用Azure认证。最简单的方式是Azure CLI:
bash
az login
登录完,代码里用AzureCliCredential就行,不用手动管token。
如果你没有Azure账号,也能用OpenAI的API key直接调。后面会说怎么配。
第一个Agent:5行代码
python
import asyncio
from agent_framework import Agent
from agent_framework.foundry import FoundryChatClient
from azure.identity import AzureCliCredential
agent = Agent(
client=FoundryChatClient(
project_endpoint="https://your-project.services.ai.azure.com",
model="gpt-5.3",
credential=AzureCliCredential(),
),
name="CodeHelper",
instructions="你是一个Python助手,回答简洁。"
)
result = asyncio.run(agent.run("怎么用Python读取CSV文件?"))
print(result)
跑起来大概2秒返回结果。注意project_endpoint要换成你自己的Azure AI Foundry项目地址。
如果用OpenAI的API:
python
from agent_framework.openai import OpenAIChatClient
agent = Agent(
client=OpenAIChatClient(
api_key="sk-你的key",
model="gpt-4o"
),
name="CodeHelper",
instructions="你是一个Python助手,回答简洁。"
)
换个Client就行,Agent的代码不用改。这是它设计上比较舒服的地方------Provider和Agent逻辑是分开的。
多Agent编排:让两个Agent协作
单Agent好办,多Agent编排才是这个框架的重点。
假设你要做一个代码review流程:一个Agent写代码,另一个Agent做review。用SequentialBuilder把它们串起来:
python
import asyncio
from agent_framework import Agent
from agent_framework.foundry import FoundryChatClient
from agent_framework.orchestrations import SequentialBuilder
from azure.identity import AzureCliCredential
async def main():
client = FoundryChatClient(credential=AzureCliCredential())
coder = Agent(
client=client,
instructions="你是一个Python开发者。写简洁的代码,加注释。",
name="coder",
)
reviewer = Agent(
client=client,
instructions="你是一个代码审查员。指出代码中的问题,给出改进建议。",
name="reviewer",
)
workflow = SequentialBuilder(participants=[coder, reviewer]).build()
async for event in workflow.run("写一个Python函数,实现LRU缓存", stream=True):
if event.type == "output":
for msg in event.data:
print(f"[{msg.author_name}]: {msg.text[:200]}")
asyncio.run(main())
跑起来的效果:coder先输出一段LRU缓存实现,reviewer接着指出"缺少线程安全处理""没有处理maxsize为0的边界情况"。两步串行执行,reviewer能看到coder的完整输出。
除了Sequential,框架还支持这些编排模式:
- Concurrent:多个Agent并行跑,各自独立
- Handoff:一个Agent干到一半,把任务交给另一个
- GroupChat:多个Agent轮流发言讨论
- Magentic-One:微软研究院出的模式,一个协调者Agent指挥其他Agent
给Agent装工具:接MCP
Agent Framework原生支持MCP(Model Context Protocol)。如果你已经有MCP Server在跑,直接接:
python
from agent_framework.mcp import MCPToolProvider
# 连接一个本地MCP Server
tools = MCPToolProvider(url="http://localhost:3000/mcp")
agent = Agent(
client=client,
name="FileAgent",
instructions="你可以读写文件。",
tool_providers=[tools]
)
Agent会自动发现MCP Server上暴露的工具,调用时传参也是自动的。
我测试了接一个文件系统MCP Server,Agent能正确调用read_file和write_file。但有个坑:如果MCP Server响应超过30秒,默认会超时。改超时的方法:
python
tools = MCPToolProvider(
url="http://localhost:3000/mcp",
timeout=60 # 秒
)
中间件:拦截和改写Agent行为
这个功能我觉得挺实用。你可以在Agent执行的各个阶段插入自定义逻辑,不用改Agent的prompt。
比如加一个内容安全过滤器:
python
from agent_framework.middleware import MiddlewareBase
class SafetyFilter(MiddlewareBase):
async def on_response(self, context, response, next_handler):
# 检查输出是否包含敏感内容
if "机密" in response.text:
response.text = "[内容已过滤]"
return await next_handler(context, response)
agent = Agent(
client=client,
name="SafeAgent",
instructions="你是一个助手。",
middleware=[SafetyFilter()]
)
中间件是链式执行的,可以叠加多个。日志记录、合规检查、调用限流都能用这个方式做。
DevUI:浏览器里调试Agent
1.0版本带了一个DevUI工具,是个本地Web界面,能看到Agent执行的全过程------消息流向、工具调用、编排决策。
启动方式:
bash
pip install agent-framework[devui]
然后在代码里加一行:
python
from agent_framework.devui import DevUI
DevUI.start(port=8080)
打开浏览器访问localhost:8080,就能看到Agent的执行流程图。多Agent编排的时候特别有用,能看清楚哪个Agent在什么时候说了什么。
目前是preview状态,界面比较素,但功能够用了。
YAML声明式配置
如果不想写Python代码来定义Agent,可以用YAML:
yaml
agents:
- name: writer
instructions: "你是文案写手,写简洁的营销文案。"
model: gpt-5.3
- name: reviewer
instructions: "你是文案审核,检查语法和事实准确性。"
model: gpt-5.3
workflow:
type: sequential
participants: [writer, reviewer]
然后一行代码加载:
python
from agent_framework import Workflow
workflow = Workflow.from_yaml("workflow.yaml")
result = asyncio.run(workflow.run("写一条关于AI编程工具的推文"))
这对于非开发人员或者CI/CD流水线来说比较方便------配置和代码分离。
踩坑记录
跑通的过程中遇到几个问题,记一下:
1. Azure CLI认证过期不报明确错误
az login的token默认有效期是1小时。过期后Agent不会报"认证过期",而是抛一个模糊的HTTP 401。解决办法是跑之前先az account get-access-token确认token有效。
2. SequentialBuilder的participants顺序就是执行顺序
这个没在文档里特别说明。participants列表的第一个Agent先执行,第二个Agent拿到第一个的输出再执行。弄反了结果会很奇怪。
3. 从Semantic Kernel迁移要注意Plugin的写法变了
以前SK的KernelFunction装饰器在新框架里不能直接用。得改成agent_framework的tool装饰器:
python
# 旧写法(Semantic Kernel)
@kernel_function
def search(query: str) -> str: ...
# 新写法(Agent Framework)
from agent_framework import tool
@tool
def search(query: str) -> str: ...
迁移工具能扫描代码给出改动建议,但不会自动改。手动改一遍不算太费时间。
4. 模型支持范围
官方说支持Azure OpenAI、OpenAI、Anthropic Claude、Amazon Bedrock、Google Gemini和Ollama。我测了Azure OpenAI和OpenAI两个,没问题。Claude的connector我没测,文档里标注是"first-party support",应该能用。
和LangChain、CrewAI比,差别在哪
LangChain偏通用,链式调用灵活但架子比较松散。CrewAI专注多Agent,上手快但可定制性一般。
Agent Framework的定位是企业级。它的优势在三个点:Azure深度集成、A2A和MCP双协议支持、中间件体系。如果你的项目跑在Azure上,或者需要和微软生态(Teams、Power Platform)对接,选它比较合理。
如果你只是跑个简单的Agent实验,LangChain或CrewAI上手更快。Agent Framework的配置项比较多,不适合快速原型。
代码仓库和文档
- GitHub:https://github.com/microsoft/agent-framework
- 官方文档:https://learn.microsoft.com/en-us/agent-framework/
- 快速开始:https://learn.microsoft.com/en-us/agent-framework/get-started/
- 迁移指南(SK):https://learn.microsoft.com/en-us/agent-framework/migration-guide/from-semantic-kernel
- 迁移指南(AutoGen):https://learn.microsoft.com/en-us/agent-framework/migration-guide/from-autogen
1.0是4月3号发的。现在装就是正式版,API不会再有breaking change。如果之前用RC版本,升级只要改一下包版本号。