OpenFeign和Gateway

核心内容摘要

BetterNCM插件管理器安装故障排除指南
Youtu-Parsing快速部署教程:Web界面操作,支持剪贴板粘贴图片

Qwen3-Reranker-0.6B应用场景:医疗病历检索增强生成(RAG)优化

对于一些技术性比较强的文章我都会使用AI来帮助我生成部分文章内容并自动推送到微信公众号的草稿箱。

简单地说在写文章这件事情上我和AI是责任共担的AI负责生成封面图片并根据我的要求产生文章内容主体我则负责审核生成的内容并根据自己的需要和技术细节进行修改这不仅能够提高我的撰文效率而且还可以保证输出优质的文章内容。

目前这个小工具是以ASP.NET Core Web API托管了AI服务和微信公众号服务它以容器的形式运行在Azure WebApp上后端数据库采用了PostgreSQL代码实现本身使用了Microsoft Semantic Kernel它的整体架构如下图这样的一个小工具基本可以满足我的撰文需求但是使用一段时间后发现AI自动生成的文章中的有些内容并不是特别贴合主题而且还会存在错误的情况这可能是由于模型本身所感知的外部信息有限无法提供更为准确的内容输出。

此外有些特殊需求无法通过单一的问答式模型实现比如我想写篇文章基于已有代码介绍这套代码的设计思想我想写篇文章收集公开文献中针对某种前沿技术的主流观点并进行

总结归纳我想写篇文章对现行主流思想给出相对客观的评价等等于是我决定对这个小工具进行重构尝试引入Agent的概念并通过Agent Workflow达到多Agent合作并生成高质量文章的目的。

相比Semantic KernelMicrosoft Agent Framework在多Agent支持方面做得更为完善和易用所以决定使用Agent Framework来替换Semantic Kernel的部分功能。

| 重构引入Agent Framework在ASP.NET Core Web API中引入Agent Framework是很简单的只需要引入Microsoft.Agents.AI.Hosting这个NuGet包就可以了。

之后就是对代码的一顿魔改首先从环境变量读入Azure OpenAI中配置的大语言模型的相关信息var aiModel builder.Configuration[ComposerAzureOpenAiModelConfigKey] ?? throw new ApplicationException(Azure OpenAI Model is not configured.);var aiApiKey builder.Configuration[ComposerAzureOpenAiApiKeyConfigKey] ?? throw new ApplicationException(Azure OpenAI ApiKey is not configured.);var aiEndpoint builder.Configuration[ComposerAzureOpenAiEndpointConfigKey] ?? throw new ApplicationException(Azure OpenAI Endpoint is not configured.);然后注入OpenAIClient对象builder.Services.AddSingleton(_ new AzureOpenAIClient( new Uri(aiEndpoint), new ApiKeyCredential(aiApiKey)) .GetChatClient(aiModel) .AsIChatClient());接下来就是注入Agent实例并通过这个Agent产生一个简单的Agent Workflowbuilder.AddAIAgent(Composer, (sp, key) { var chatClient sp.GetRequiredServiceIChatClient(); var agent chatClient.AsAIAgent(new ChatClientAgentOptions { Name key, Id FD61B

CFA-4124-AE5B-1561F3530135, ChatOptions new ChatOptions { Temperature

3f, Instructions 你是一个技术博客写作助手帮助用户生成文章。

请根据用户提供的摘要生成一篇文章。

请确保文章内容与摘要相关并且逻辑清晰。

你可以使用一些常见的写作技巧来增强文章的质量比如使用比喻、类比等修辞手法尽量做到文章内容通俗易懂 请注意生成的内容应该是原创的不要抄袭或引用其他人的作品也不要使用Markdown格式直接生成文本就可以。

请确保生成的内容符合相关法律法规不包含任何违法或不当内容。

请遵循这些指导原则帮助用户生成高质量的文章。

文章最后 不要提出任何询问用户的问题。

} }, services: sp); return agent;}); builder.AddWorkflow(WechatAIComposerWorkflow, (sp, key) { var agent sp.GetRequiredKeyedServiceAIAgent(Composer); return AgentWorkflowBuilder.BuildSequential(key, agent);}).AddAsAIAgent(WechatAIComposerAgent);在使用的时候可以通过构造器注入获得由Workflow创建的AI Agent的实例public class WechatArticleComposer( // ... [FromKeyedServices(WechatAIComposerAgent)] AIAgent wechatComposerAgent, // ...) : IWechatArticleComposer{ // ...}最后直接调用AI Agent的RunAsync方法即可var response await wechatComposerAgent.RunAsync(summary);经过重构之后文章生成的整个过程就是基于Agent Framework了这为接下来引入新的设计做好了准备。

| 思考新的设计虽然重构后技术栈从Semantic Kernel换到了Agent Framework但是从用户使用的角度并没有明显变化也就是仍然无法满足之前我列举出来的几个主要需求。

考虑上面的实现不难发现在应用程序启动的时候AI Agent和Agent Workflow的创建过程就已经决定了其实这也就意味着单个AI Agent单兵作战的模式就已经确定了。

为什么单兵作战有问题呢因为从满足需求的角度以及日后方便扩展的角度我更希望能够让某个AI Agent负责某个方面的任务最后可以由另一个AI Agent对其它负责各个方面的AI Agent的结论进行

总结完成文章撰写。

这样的设计有两个主要亮点处理特定任务的Agent是可以扩展的比如我可以让某个Agent具有阅读源代码并

总结代码设计的能力而另一个Agent则可以上网搜索相关设计模式的实践经验各个Agent之间的合作方式也是可以自定义的比如我可以让“代码阅读Agent”完成代码解读并让“设计评估Agent”根据已有的成功案例评估我的代码设计最后由“

总结撰文Agent”根据这两个Agent的结论

总结成一篇文章我也可以选择不使用“设计评估Agent”而是由“代码阅读Agent”完成代码解读之后直接产生文章内容我还可以面向多个不同的领域收集最前沿的科技信息然后汇总成文【Agent工作流跨领域科技文章撰写】根据这样的技术需求可以将设计调整成这个样子点击图片放大基本设计思路是用户可以自定义AI Agent和WorkflowAI Agent和Workflow的元数据Metadata可以通过数据库访问组件进行存储和读取这里仍然使用PostgreSQL数据库这部分逻辑使用仓储模式实现。

接下来AgentWorkflowService会使用AI Agent和Workflow的仓储根据需要从数据库中获取相关元数据并创建Workflow最后将Workflow转化为AI Agent并返回到调用方。

于是在界面上用户可以创建具有各种能力的AI Agent并且通过自定义Workflow将这些Agents编排在一起以完成特定的撰文任务。

由于Workflow也是可管理的所以在分配撰文任务的时候还可以让Agent自己选择合适的Workflow来完成文章撰写。

下面是AgentWorkflowService的部分代码实现通过这个代码可以看到这个服务是如何通过AgentMetadata构建AI Agent并通过这些Agents来创建Workflow的。

在这里仅仅创建了一个简单的Sequential Workflow实际上应该通过WorkflowMetadataRepository读取WorkflowMetadata的信息然后根据WorkflowMetadata动态创建Workflow这里就不详细展开介绍了。

public async TaskAIAgent GetOrCreateWorkflowAgentAsync(CancellationToken cancellationToken default){ if (_workflowAgent is not null) { logger.LogDebug(Returns the workflow agent from cache.); return _workflowAgent; } logger.LogDebug(Building the workflow agent.); var agentMetadataList await agentRepository.GetAgentsAsync(cancellationToken); ListAIAgent agents []; foreach (var agentMetadata in agentMetadataList) { agents.Add(new ChatClientAgent(chatClient, new ChatClientAgentOptions { Id $chat_agent_{agentMetadata.Id}, Name agentMetadata.Name, Description agentMetadata.Description, ChatOptions new ChatOptions { Instructions agentMetadata.Instructions, Temperature agentMetadata.Temperature, } })); } logger.LogDebug($Number of agents from repository: {agents.Count}); _workflowAgent AgentWorkflowBuilder.BuildSequential(agents).AsAgent(); return _workflowAgent;}|

总结通过Microsoft Agent Framework可以非常方便地搭建Agent工作流并且AI Agent和工作流的构建是非常灵活的。

其实对于现有的设计再向外扩展一下比如加入插件式的Tools和Skills的支持就能得到一款看上去像Clawdbot的个人AI助理工具只不过这个工具会更专注于文章撰写而且也会相对安全可控。

豆花官方网站免费登录入口-豆花官方网站免费登录入口应用

百度百家号客服电话人工服务

123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123