扒开Microsoft Agent Framework的“核心”!搞懂这个“黄金三角”,你才算真正入门!

在 Agentic AI 爆发式发展的时代,我们追求的早已不只是“更强大的模型”——而是一次真正能让开发者睡个好觉的开发体验。在本地构建 Agent 的过程中,我们长期面临三大核心挑战:

  • 黑盒式执行:我的 Agent 到底在想什么?为什么卡住不动?(调试太难了)
  • 交互孤岛:Agent 已经写好了,但我要如何快速给业务方 / 客户演示一个“好看又能用”的界面?(产品化太难了)
  • 性能盲区:到底消耗了多少 Token?延迟出在哪里?(优化太难了)

今天,我将通过 Microsoft Agent Framework Samples 中一个经典示例 —— GHModel.AI,带你拆解一套真正解决这些痛点的“黄金三角”开发体系:DevUIAG-UIOpenTelemetry

让我们一起看看,这套强大组合如何打通 Agent 本地开发的完整生命周期。

GHModel.AI

https://github.com/microsoft/Agent-Framework-Samples/tree/main/09.Cases/GHModel.AI/?wt.mc_id=3reg_webpage_reactor

阶段一:创建 站在 GitHub Models 的肩膀上

GHModel.AI 这个案例中,我们首先要解决的,是 Agent 的「大脑」问题。

传统的本地开发,往往受限于算力不足,或者被昂贵的 API Key 成本所束缚。而这个案例非常巧妙地借助了 GitHub Models。作为一名技术布道者,我必须强烈推荐这套组合:

  • 零门槛接入:直接使用 GitHub 账号即可调用 GPT-4o、Llama 3 等前沿模型,无需复杂的 Azure 配置,也无需绑定信用卡。
  • 统一 SDK 抽象:通过 Agent Framework 提供的抽象层,我们只需改动几行代码,就可以自由切换不同的模型后端。

在这个案例的代码结构中,你会发现 Agent 的定义方式变得异常清晰:不再是杂乱无章的 Python / C# 代码,而是结构化、声明式的 Agent 定义。

Python

# Python - Create Agents with GitModels
from agent_framework.openai import OpenAIChatClient
chat_client = OpenAIChatClient(
base_url=os.environ.get("GITHUB_ENDPOINT"),    # 🌐 GitHub Models API endpoint
api_key=os.environ.get("GITHUB_TOKEN"),        # 🔑 Authentication token
model_id=os.environ.get("GITHUB_MODEL_ID")     # 🎯 Selected AI model
)
# Create Concierge Agent
CONCIERGE_AGENT_NAMES = "Concierge"
CONCIERGE_AGENT_INSTRUCTIONS = """
You are an are hotel concierge who has opinions about providing the most local and authentic experiences for travelers.
The goal is to determine if the front desk travel agent has recommended the best non-touristy experience for a traveler.
If so, state that it is approved.
If not, provide insight on how to refine the recommendation without using a specific example. """
concierge_agent = chat_client.create_agent(
instructions=CONCIERGE_AGENT_INSTRUCTIONS,
name=CONCIERGE_AGENT_NAMES,
)
# Create FrontDesk Agent
FRONTEND_AGENT_NAMES = "FrontDesk"
FRONTEND_AGENT_INSTRUCTIONS = """
You are a Front Desk Travel Agent with ten years of experience and are known for brevity as you deal with many customers.
The goal is to provide the best activities and locations for a traveler to visit.
Only provide a single recommendation per response.
You're laser focused on the goal at hand.
Don't waste time with chit chat.
Consider suggestions when refining an idea.
"""
frontend_agent = chat_client.create_agent(
instructions=FRONTEND_AGENT_INSTRUCTIONS,
name=FRONTEND_AGENT_NAMES,
)
# Create Workflow
frontend_executor = AgentExecutor(frontend_agent, id="frontend_agent")
concierge_executor = AgentExecutor(concierge_agent, id="concierge_agent")
workflow = (
WorkflowBuilder()
.set_start_executor(frontend_executor)
.add_edge(frontend_executor, concierge_executor)
.build()
)

.NET

// .NET - Creat Agents with GitHub Models
var openAIOptions = new OpenAIClientOptions()
{
Endpoint = new Uri(github_endpoint)
};
var openAIClient = new OpenAIClient(new ApiKeyCredential(github_token), openAIOptions);
var chatClient = openAIClient.GetChatClient(github_model_id).AsIChatClient();
conststring ReviewerAgentName = "Concierge";
conststring ReviewerAgentInstructions = @"
You are an are hotel concierge who has opinions about providing the most local and authentic experiences for travelers.
The goal is to determine if the front desk travel agent has recommended the best non-touristy experience for a traveler.
If so, state that it is approved.
If not, provide insight on how to refine the recommendation without using a specific example. ";
conststring FrontDeskAgentName = "FrontDesk";
conststring FrontDeskAgentInstructions = @"""
You are a Front Desk Travel Agent with ten years of experience and are known for brevity as you deal with many customers.
The goal is to provide the best activities and locations for a traveler to visit.
Only provide a single recommendation per response.
You're laser focused on the goal at hand.
Don't waste time with chit chat.
Consider suggestions when refining an idea.
""";
var reviewerAgentBuilder = new AIAgentBuilder(chatClient.CreateAIAgent(
name: ReviewerAgentName,
instructions: ReviewerAgentInstructions));
var frontDeskAgentBuilder = new AIAgentBuilder(chatClient.CreateAIAgent(
name: FrontDeskAgentName,
instructions: FrontDeskAgentInstructions));
AIAgent reviewerAgent = reviewerAgentBuilder.Build(serviceProvider);
AIAgent frontDeskAgent = frontDeskAgentBuilder.Build(serviceProvider);
// Create Workflow
var workflow = new WorkflowBuilder(frontDeskAgent)
.AddEdge(frontDeskAgent, reviewerAgent)
.Build();

阶段二:测试与调试

DevUI

这是本文的重头戏。过去,我们调试 Agent 只能靠 print() 和无休止的控制台日志“猜问题”;而现在,我们有了 DevUI。

**DevUI 是什么?**它是 Agent Framework 中,专为开发者打造的一款“内循环开发工具”。当 GHModel.AI 运行时,DevUI 会为你提供一个可视化控制台:

  • 思维链可视化:你再也不用去猜为什么 Agent 选择了工具 A 而不是 B。在 DevUI 中,你可以像看流程图一样,清楚看到每一个 Reasoning、Action 和 Observation 步骤。这不仅是调试工具,而是对 Agent 行为的“X 光透视”。
  • 实时状态监控:Agent 的内存里到底存了什么?上下文有没有溢出?DevUI 支持实时查看对话状态,帮你快速定位“幻觉”的根源。

Python

cd GHModel.Python.AI/GHModel.Python.AI.Workflow.DevUI
pip install agent-framework agent-framework-devui python-dotenv
python main.py
# Browser opens automatically at http://localhost:8090

.NET

cd GHModel.dotNET.AI/GHModel.dotNET.AI.Workflow.DevUI
dotnet run
# DevUI: https://localhost:50516/devui
# OpenAI API: https://localhost:50516/v1/responses

阶段三:交付与交互

AG-UI

调试结束后,老板说:“能不能给我个链接,我也想试试?”

此时此刻,千万不要手写 React 前端。你真正需要的是 —— AG-UI

那么,AG-UI 解决什么问题?它是一套标准化的 Agent–User 交互协议。在 GHModel.AI 这个案例中,通过集成 AG-UI:

  • 开箱即用的前端能力:Agent Framework 可以直接暴露符合 AG-UI 协议的接口。任何支持 AG-UI 的前端(例如 CopilotKit 提供的组件),都可以直接连接你的本地 Agent。
  • 流式响应与生成式 UI:它不仅支持文本流式输出,还支持服务端推送 UI 组件。这意味着,Agent 可以根据内容,在前端动态渲染图表、表格或卡片等组件 —— 无需为每种场景单独硬编码前端页面。

AG-UI 支持的功能

  • ✅ 流式响应(SSE)
  • ✅ 后端工具渲染
  • ✅ 人机协同审批机制
  • ✅ 共享状态同步
  • ✅ 与 CopilotKit 无缝集成

CopilotKit

https://copilotkit.ai/?wt.mc_id=3reg_webpage_reactor

实现示例

Python 服务器

# Server — Register AG-UI endpoint
from agent_framework_ag_ui import add_agent_framework_fastapi_endpoint
from workflow import workflow
app = FastAPI()
agent = workflow.as_agent(name="Travel Agent")
add_agent_framework_fastapi_endpoint(app, agent, "/")

.NET 服务器

// Program.cs — ASP.NET Core AG-UI endpoint registration
using Microsoft.Agents.AI.Hosting.AGUI.AspNetCore;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddAGUI();
var app = builder.Build();
AIAgent workflowAgent = ChatClientAgentFactory.CreateTravelAgenticChat();
app.MapAGUI("/", workflowAgent);
await app.RunAsync();

从 DevUI 到 AG-UI,本质上是一次从“开发者视角”到“用户视角”的无缝切换。我们可以借助 CopilotKit 来构建 UI。

阶段四:性能追踪 OpenTelemetry

在 Agent 正式上线之前,除了“能不能跑”,我们还必须回答两个问题:“够快吗?贵不贵?”

这正是 OpenTelemetry(OTel) 登场的地方。在 Agent Framework 中,OpenTelemetry 是原生内置支持的。在 GHModel.AI 的代码中,通常只需一行配置(例如 AddOpenTelemetrysetup_observability)即可启用:

  • 分布式追踪:当一个请求进入系统,经过路由、Guardrails、调用 GitHub Models,再返回结果时,OTel 会生成完整的火焰图,你可以精准看到:
  • 网络 I/O 花了多少时间?
  • LLM 的 Token 生成耗时多少?
  • 本地业务逻辑处理耗时多少?
  • 成本可视化:结合 OTel Metrics,我们可以监控 Token 消耗速率。这在从 GitHub Models(免费 / 原型阶段)迁移到 Azure OpenAI(付费 / 生产阶段)时,对成本预估至关重要。

🔧 快速配置

Python

# Enable telemetry in one line
from agent_framework.observability import setup_observability
from agent_framework import setup_logging
setup_observability()
setup_logging()

.NET

// OpenTelemetry configuration
var tracerProvider = Sdk.CreateTracerProviderBuilder()
.AddSource("*Microsoft.Agents.AI")
.AddOtlpExporter(options => options.Endpoint = new Uri("http://localhost:4317"))
.Build();

环境变量

ENABLE_OTEL=true
ENABLE_SENSITIVE_DATA=true               # Enable sensitive data logging in dev
OTLP_ENDPOINT=http://localhost:4317       # Aspire Dashboard / OTLP Collector
APPLICATIONINSIGHTS_CONNECTION_STRING=... # Azure Application Insights (optional)

📈 可视化选项

平台用例快速开始
Aspire 仪表盘本地开发docker run --rm -d -p 18888:18888 -p 4317:18889 mcr.microsoft.com/dotnet/aspire-dashboard:latest
应用洞察生产环境监控设置 APPLICATIONINSIGHTS_CONNECTION_STRING
Grafana 仪表盘高级可视化Agent Overview https://aka.ms/amg/dash/af-agent/?wt.mc_id=3reg_webpage_reactor Workflow Overview https://aka.ms/amg/dash/af-workflow/?wt.mc_id=3reg_webpage_reactor

架构概览

总结 构建你的“效率闭环”

回顾 GHModel.AI 的案例,它不仅是一份代码示例 —— 更展示了现代智能体开发的最佳实践架构:

层级工具用途
模型层GitHub Models借助免费的前沿模型快速验证想法
调试层DevUI获得 “上帝视角”,快速迭代逻辑
展示层AG-UI标准化输出结果,秒级生成用户界面
可观测性层OpenTelemetry基于数据驱动优化,告别主观猜测

那么,如何系统的去学习大模型LLM?

作为一名深耕行业的资深大模型算法工程师,我经常会收到一些评论和私信,我是小白,学习大模型该从哪里入手呢?我自学没有方向怎么办?这个地方我不会啊。如果你也有类似的经历,一定要继续看下去!这些问题啊,也不是三言两语啊就能讲明白的。

所以我综合了大模型的所有知识点,给大家带来一套全网最全最细的大模型零基础教程。在做这套教程之前呢,我就曾放空大脑,以一个大模型小白的角度去重新解析它,采用基础知识和实战项目相结合的教学方式,历时3个月,终于完成了这样的课程,让你真正体会到什么是每一秒都在疯狂输出知识点。

由于篇幅有限,⚡️ 朋友们如果有需要全套 《2025全新制作的大模型全套资料》,扫码获取~
在这里插入图片描述

👉大模型学习指南+路线汇总👈

我们这套大模型资料呢,会从基础篇、进阶篇和项目实战篇等三大方面来讲解。
在这里插入图片描述
在这里插入图片描述

👉①.基础篇👈

基础篇里面包括了Python快速入门、AI开发环境搭建及提示词工程,带你学习大模型核心原理、prompt使用技巧、Transformer架构和预训练、SFT、RLHF等一些基础概念,用最易懂的方式带你入门大模型。
在这里插入图片描述

👉②.进阶篇👈

接下来是进阶篇,你将掌握RAG、Agent、Langchain、大模型微调和私有化部署,学习如何构建外挂知识库并和自己的企业相结合,学习如何使用langchain框架提高开发效率和代码质量、学习如何选择合适的基座模型并进行数据集的收集预处理以及具体的模型微调等等。
在这里插入图片描述

👉③.实战篇👈

实战篇会手把手带着大家练习企业级的落地项目(已脱敏),比如RAG医疗问答系统、Agent智能电商客服系统、数字人项目实战、教育行业智能助教等等,从而帮助大家更好的应对大模型时代的挑战。
在这里插入图片描述

👉④.福利篇👈

最后呢,会给大家一个小福利,课程视频中的所有素材,有搭建AI开发环境资料包,还有学习计划表,几十上百G素材、电子书和课件等等,只要你能想到的素材,我这里几乎都有。我已经全部上传到优快云,朋友们如果需要可以微信扫描下方优快云官方认证二维码免费领取【保证100%免费】
在这里插入图片描述
相信我,这套大模型系统教程将会是全网最齐全 最易懂的小白专用课!!

以下是几种不同方式的扒取网站内容的代码示例: ### 使用`requests`和`BeautifulSoup`库 ```python import requests from bs4 import BeautifulSoup # 目标网站URL url = "https://example.com" # 设置请求头,模拟浏览器访问 headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36" } try: # 发送请求获取页面内容 response = requests.get(url, headers=headers) response.raise_for_status() # 使用BeautifulSoup解析页面内容 soup = BeautifulSoup(response.text, 'html.parser') # 提取页面标题 title = soup.title.string print(f"页面标题: {title}") # 提取所有链接 links = soup.find_all('a') for link in links: print(link.get('href')) except requests.RequestException as e: print(f"请求出错: {e}") except Exception as e: print(f"发生未知错误: {e}") ``` ### 使用`Scrapy`框架 首先需要安装`Scrapy`,可以使用`pip install scrapy`进行安装。 创建一个新的Scrapy项目: ```bash scrapy startproject myproject cd myproject scrapy genspider myspider example.com ``` 然后在`myproject/spiders/myspider.py`中编写以下代码: ```python import scrapy class MySpider(scrapy.Spider): name = "myspider" allowed_domains = ["example.com"] start_urls = ['https://example.com'] def parse(self, response): # 提取页面标题 title = response.css('title::text').get() print(f"页面标题: {title}") # 提取所有链接 links = response.css('a::attr(href)').getall() for link in links: print(link) ``` 运行爬虫: ```bash scrapy crawl myspider ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值