Microsoft 提供了一条由四个课程组成的实践路径,使用 Microsoft Agent Framework 通过 C# 构建人工智能代理:从围绕 IChatClient 的简单调用开始,最终构建出能够被监控、评估、治理并部署到 Microsoft Foundry 的代理。示例使用个人理财教育助手,以展示读取数据、修改文件和执行具有影响的操作(例如模拟交易)之间的差异。
什么是 Agent Harness?
语言模型能够生成文本,但自身并不提供代理所需的运行循环。该循环会调用工具、检查工具结果、更新计划、维护记忆、处理上下文窗口、请求用户批准敏感操作,然后持续工作直至任务完成。来源将这一外围层称为 harness,而“claw”则指构建在该层之上的命令行工具风格代理。
在示例中,只需配置指令和工具,就可以启动一个能够自动调用函数、在模型调用后保存记录、创建任务列表、压缩上下文、使用文件记忆,并在模型服务支持时使用网络搜索的代理;此外,它还可以请求工具审批,并通过 OpenTelemetry 发送测量数据。这些能力仍然可以通过自定义提供程序进行替换、禁用或扩展。
构建代理的四个阶段
第一课从一个连接到 Microsoft Foundry 中模型的聊天客户端开始,将其转换为配备自定义 C# 工具的代理,用于获取示例股票价格。当用户询问代理 MSFT 的价格时,模型会选择该工具,harness 调用工具,然后将结果返回给模型以生成回答。当提出更广泛的任务(例如审查观察列表并建议下一步应研究的内容)时,代理可以创建计划和任务列表,而开发者无需为演示单独构建规划引擎。
第二课重点介绍如何安全地处理用户数据。代理只从获准的工作目录中读取 CSV 格式的投资组合文件,而指定的边界会阻止它访问文件系统中的任意路径。模拟交易则被封装在需要审批的工具中,因此模型可以请求执行操作,但不能直接执行。相比之下,只读操作可以自动传递,从而避免因不必要的确认请求而使用户不堪其扰。
来源还展示了一种带有时间限制的审批策略:每次尝试限时五秒,最多五次;当没有输入或输入无效时重试;输入 y 时立即批准,输入 n 时拒绝,并在最后一次尝试后自动拒绝。来源还讨论了 application 所拥有的本地 JSON 记忆与 Microsoft Foundry Memory 之间的差异,并强调,模型说“我已经保存了”并不能证明数据确实已写入,或已在正确的范围内保存。
第三课加入了将专业知识封装在文件中的技能,只有在需要时才会将这些文件完整加载到基础指令中;同时还加入了受限的 shell 访问、用于在受控环境中运行代码的 CodeAct,以及能够并行执行独立研究任务的后台代理。来源明确指出,在运行命令或代码时,审批和策略不能替代隔离。
在生产环境中实际会发生什么变化?
第四课专门介绍监控、治理、评估和部署。监控包括 OpenTelemetry 追踪、工具和模型调用以及令牌消耗;治理则与 Microsoft Purview 策略相结合。重复评估用于将对演示质量的主观印象转化为可衡量的信号;此外,还介绍了将托管代理部署到 Foundry 的选项,使控制台应用、托管端点和评估环境共享同一个定义。
这里最重要的信息是,能力的可组合性并不意味着必须将所有能力都带入生产环境。开发代理可能需要文件或 shell,但共享的托管容器不应仅仅因为这些权限在构建期间有用,就继承广泛的本地访问权限。决定允许代理读取、写入、执行、记忆或追踪哪些内容,仍然是由开发方掌握的设计决策。
为什么这一方法很重要?
Harness 层减少了每个项目都重新构建工具、规划、记忆和审批循环的需要,但并不会免除确定边界的责任。该系列的实际价值在于,将高级能力与相应的控制措施联系起来:文件对应获准目录,敏感操作对应审批,记忆对应可验证的存储结果,代码执行对应隔离和策略,部署对应监控和评估。财务示例仍然是教育性质的;其中使用的价格和交易均为 mock 数据和示例,并非财务建议。