maf

JaydenAI1 天前
ai·langchain·agent·ag-ui·maf
[AG-UI详解-08]AG-UI客户端工具 V.S. LangChain的Headless工具如果将Agent发布为AG-UI Server,意味着前端应用可以提供在本地执行的工具函数,具体的编程模式可以参考我的文章AG-UI详解-07:AG-UI针对MAF的客户端实现。LangChain提供了另一种在客户端执行工具函数的能力,被成为Headless工具。
JaydenAI5 天前
ai·nlp·agent·evaluation·maf
[Agent的评估-07]整合MEAI针对自然语言处理相关的评估器Agent的评估-05:MEAI用来评估LLM响应质量的9种评估器介绍了定义在NuGet包Microsoft.Extensions.AI.Evaluation.Quality中与质量相关指标(包括完整性、一致性、相关性和等效性等)的各种评估器。除此之外,在NuGet包Microsoft.Extensions.AI.Evaluation.NLP还包含两个与自然语言处理(NLP)相关的评估器,这篇文章就来聊聊它们都用来评估怎样的指标,以及如何利用Agent的评估-06:如何改进MAF针对MEAI评估系统的适配
JaydenAI11 天前
ai·agent·a2a·maf
[A2A协议与实现-08]基于MAF的A2A Server设计与实现前面的两篇文章通过简单例子简单介绍了如何利用一个ASP.NET Core应用来构建A2A Server,并分别采用JSON-RPC和HTTP-JSON这两种底层传输协议将指定的AIAgent对外暴露成A2A服务,这篇文章主要从设计和实现的角度介绍背后的故事。
JaydenAI12 天前
ai·agent·sse·a2a·maf
[A2A协议与实现-06]如何将一个MAF Agent发布为A2A服务[JSON-RPC]这个系列之前的文章对A2A协议本身提供了系统介绍,而且还提供了针对LangChain的A2A服务构建方式。借助于A2A SDK,MAF针对A2A提供了很好的支持,这篇文章通过几个简单的例子演示如何在一个ASP.NET Core应用构建A2A Server。A2A自身并未绑定到具体的传输协议,MAF分别提供针对JSON-RPC和HTTP-JSON两种协议的支持,本篇文章主要关注前者,下一篇会介绍后者。
JaydenAI13 天前
ai·agent·ag-ui·maf
[AG-UI详解-06]AG-UI针对MAF的服务端实现在AG-UI详解-04:如何构建一个兼容AG-UI协议的Agent中,我通过在ASP.NET Core应用中注册了一个绑定到IChatClient的路由中间件,构建了一个兼容AG-UI协议的Agent后端。虽然AG-UI协议定义的很多功能未曾实现,但是它与MAF与AG-UI集成的实现原理本质上是一致的。现在我们来看看微软官方是如何将一个MAF AIAgent暴露成一个兼容AG-UI的后端服务的。
JaydenAI17 天前
ai·agent·ag-ui·maf
[AG-UI详解-01]创建一个类似ChatGPT应用与Agent实时交互AG‑UI是微软在Microsoft Agent Framework (MAF)中定义的标准化前后端通信协议,用来构建Web/移动端的AI Agent UI。它让Agent不再只是后端逻辑,而是能以统一格式与前端实时交互、流式输出、同步状态,并渲染交互式组件。本系列将对协议本身以及背后的执行原理对AG-UI进行系统介绍。
JaydenAI20 天前
ai·agent·maf·loopagent·循环工程
[Loop Engineering在MAF中的实现-04]利用AIJudgeLoopEvaluator让LLM当评委本系列的首篇文章基于评估结果针对Agent的循环调用演示了一个利用LoopAgent构建了一个用来进行诗词创作的Agent,具体的做法是:通过封装AIAgent自定义一个LoopAEvaluator,借助LLM的能力对创作的作品进行评估并打分。如果分数达到要求,循环终止,否则让循环继续并提供反馈。我们也可以利用预定义的AIJudgeLoopEvaluator评估器来达到相同的目的。
JaydenAI22 天前
ai·agent·maf·loopagent·loopevaluator·循环工程
[Loop Engineering在MAF中的实现-03]Agent循环调用流程详解在Loop Engineering在MAF中的实现-03:Agent循环调用在LoopAgent中的实现中,我们已经对LoopAgent在默认情况下循环调用Agent的流程进行了简单的简单介绍。我们知道,循环调用Agent的总体流程如下:
Artech25 天前
ai·agent·maf·aicontextprovider·compactionprovider
[MAF预定义的AIContextProvider-05]CompactionProvider——采用多种策略压缩对话历史为解决LLM调用无状态的问题,我们不得不将消息历史作为上下文的一部分发送给LLM。但随着对话的进行,消息历史会不断增长,最终可能会超出LLM的上下文窗口限制。随着LLM的上下文窗口的不断扩大,可以有朝一日上下文窗口不再成为问题,但也并不意味着将整个对话历史原封不动地发送给LLM就是最优的选择。LLM拥有上下文的丰富程度与推理的质量并不是完全正相关的,当对话历史的长度超过一定程度后,过长的上下文反而会干扰LLM对当前对话的理解和推理,导致LLM生成的响应质量下降。所以对话历史的压缩需求可能永远都不会消失。针
Artech2 个月前
ai·agent·maf·aicontextprovider·chathistorymemoryprovider·mem0provider
[MAF预定义的AIContextProvider-04]Mem0Provider——长期记忆基于的云端解决方案在ChatHistoryMemoryProvider——赋予Agent从经验中学习的能力中,我们介绍了如何利用ChatHistoryMemoryProvider赋予Agent长期的记忆,使之具备从过去经验学习进化的能力。ChatHistoryMemoryProvider利用我们提供的向量数据库,对每次调用产生的消息针对指定的Scope维度进行存储,并将当前消息作为查询文本,结合设定的Scope维度检索历史消息作为上下文的一部分来参与LLM的推理。除了这种需要我们们自己搭建和维护的基于向量数据库的解决方案之
Artech2 个月前
ai·c#·agent·memory·maf
[MAF预定义的AIContextProvider-03]ChatHistoryMemoryProvider——赋予Agent从经验中学习的能力LLM具有固化的知识,而且针对LLM的调用是完全无状态,永远只做一锤子买卖。但是交给Agent的任务基本上不可能一蹴而就,而且还希望Agent具有学习进化的能力。所以你会发现,很多的Harness手段的目的就是为了弥合两者之间的鸿沟。解决这个问题的基本的前提是:需要赋予Agent记忆。短期记忆赋予Agent在同一个语境下进行多轮对话的能力,对于MAF来说,就是Session。长期记忆实现了跨Session的信息共享,其共享范围可以针对用户(比如了解用户的偏好)、针对Agent(比如了解Agent的能力和经
Artech2 个月前
ai·c#·agent·agent skills·maf
[MAF预定义的AIContextProvider-02]AgentSkillsProvider——将Agent Skills引入MAFSkills针对Agent的重要性是不言而喻的。从本质上讲,Agent Skills就是随着用户与LLM对话的推进,动态加载被称为Skill作为提示词的一种机制。在大部分实现中,Skill的内容会被封装成角色为Tool的消息被添加到对话历史中,因为这样可以借助针对对话历史的压缩实现对老旧Skill的卸载。Agent Skills依然是输入增强的一种形式,所以Agent Skills在MAF中是被AgentSkillsProvider的AIContextProvider引入的。
Artech2 个月前
ai·agent·rag·maf
[MAF预定义的AIContextProvider-01]TextSearchProvider——RAG在MAF中的实现作为最核心的AIAgent,ChatClientAgent构建了一个管道与LLM交互。为了让管道的输出更符合我们的需求,有两个主要的途径:输入增强(Input Enhancement)和输出增强(Output Enhancement),前者通过通过改变输入让LLM返回更高质量的内容,后者则直接对LLM的输出进行加工处理。个注册的AIContextProvider组成的管道位于ChatClientAgent管道的中间件部分(前后分别是AIAgent中间件管道和ChatClient管道),是专门为输入和输出增
Artech2 个月前
ai·agent·maf·messageinjectingchatclient
[MAF预定义ChatClient中间件-09]MessageInjectingChatClient-赋予工具消息注入的能力MAF中的ReAct循环是由FunctionInvokingChatClient中间件完成的,这意味着AIFunction的调用也是由它驱动。在默认的情况下,AIFunction绑定的委托执行完成后,结果会转换成AIContent并被封装成一个角色为Tool的ChatMessage。这个ChatMessage最终被添加到对话历史中,并作为后续调用LLM的输入。换言之,AIFunction不像LangChain的工具函数一样,可以通过返回Command对象添加具有合法结构的消息列表到对话历史中。当工具在执行
JaydenAI2 个月前
python·ai·langchain·c#·agent·hitl·maf
[对比学习LangChain和MAF-07]如何引入人机交互的审批流程如何执行的工具涉及一些较为敏感的操作,必需要经过人工审批才能执行,这时候就需要引入人机交互(Human-In-The-Loop)的机制。无论是LangChain还是MAF,都提供了相应的机制来支持人机交互,下面我们来看看它们是如何实现的。
Artech2 个月前
ai·agent·open telemetry·maf
[MAF预定义ChatClient中间件-08]OpenTelemetryChatClient-实现链路跟踪和性能监控赋予部署的应用和服务可观测性已经是一个基本的需求,在这方面,OpenTelemetry无疑已经称为了事实上的标准。OpenTelemetryChatClient是一个预定义的IChatClient中间件,它利用重写的GetResponseAsync和GetResponseStreamAsync方法,为LLM的调用添加了对于的链路和性能计数的输出。结合OpenTelemetry框架,开发者可以轻松地将这些数据发送到各种后端系统,如Prometheus、Jaeger等,以实现对LLM调用的深入分析和监控。本篇
JaydenAI2 个月前
ai·c#·agent·maf·agent中间件
[MAF预定义Agent中间件-05]ToolApprovalAgent-摆脱重复审批的烦恼涉及敏感操作的工具执行都需要引入基于人机交互(HITL, Human-In-The-Loop)的审批机制来确保安全。按照安全级别由高到低,我们可以采用如下三种常见的审批模式: