跳转到主要内容

标签(标签)

资源精选(342) Go开发(108) Go语言(103) Go(99) LLM(84) angular(83) 大语言模型(67) 人工智能(56) 前端开发(50) LangChain(43) golang(43) 机器学习(40) Go工程师(38) Go程序员(38) Go开发者(36) React(34) Go基础(29) Python(24) Vue(23) Web开发(20) 深度学习(20) Java(20) Web技术(19) 精选资源(19) ChatGTP(17) Cookie(16) android(16) 前端框架(13) JavaScript(13) Next.js(12) ChatGPT(11) LLMOps(11) 提示工程(11) 聊天机器人(11) 安卓(11) 智能体(10) typescript(10) 资料精选(10) PostgreSQL(10) mlops(10) NLP(10) 第三方Cookie(9) Redwoodjs(9) RAG(9) Go语言中级开发(9) 自然语言处理(9) 区块链(9) 安全(9) 全栈开发(8) OpenAI(8) Linux(8) AI(8) GraphQL(8) iOS(8) 数据科学(8) 软件架构(7) Go语言高级开发(7) AWS(7) C++(7) whisper(6) Prisma(6) 隐私保护(6) Agent(6) JSON(6) DevOps(6) 数据可视化(6) wasm(6) 计算机视觉(6) 算法(6) Rust(6) 微服务(6) 隐私沙盒(5) FedCM(5) 语音识别(5) Angular开发(5) 快速应用开发(5) 生成式AI(5) LLaMA(5) 低代码开发(5) Go测试(5) gorm(5) REST API(5) kafka(5) 推荐系统(5) WebAssembly(5) GameDev(5) 数据分析(5) CMS(5) CSS(5) machine-learning(5) 机器人(5) 游戏开发(5) Blockchain(5) Web安全(5) nextjs(5) Kotlin(5) 低代码平台(5) 机器学习资源(5) Go资源(5) Nodejs(5) PHP(5) Swift(5) MCP(4) RAG架构(4) devin(4) LLM Agent(4) Blitz(4) javascript框架(4) Redwood(4) GDPR(4) 生成式人工智能(4) Angular16(4) Alpaca(4) 编程语言(4) SAML(4) JWT(4) JSON处理(4) Go并发(4) 移动开发(4) 移动应用(4) security(4) 认证(4) 隐私(4) spring-boot(4) 物联网(4) 网络安全(4) API(4) Ruby(4) 信息安全(4) flutter(4) 专家智能体(3) Chrome(3) CHIPS(3) 3PC(3) SSE(3) 人工智能软件工程师(3) Remix(3) Ubuntu(3) GPT4All(3) 模型评估(3) 软件开发(3) 问答系统(3) 开发工具(3) 最佳实践(3) RxJS(3) SSR(3) Node.js(3) Dolly(3) 移动应用开发(3) 低代码(3) IAM(3) Web框架(3) CORS(3) 基准测试(3) Go语言数据库开发(3) Oauth2(3) 并发(3) 主题(3) Theme(3) earth(3) nginx(3) 软件工程(3) azure(3) keycloak(3) 生产力工具(3) gpt3(3) 工作流(3) C(3) jupyter(3) prometheus(3) GAN(3) Spring(3) 逆向工程(3) 应用安全(3) Docker(3) Django(3) Machine Learning(3) R(3) .NET(3) 大数据(3) Hacking(3) 渗透测试(3) C++资源(3) Mac(3) 微信小程序(3) Python资源(3) JHipster(3) SQL(2) Apache(2) Hashicorp Vault(2) Spring Cloud Vault(2) Go语言Web开发(2) Go测试工程师(2) WebSocket(2) 容器化(2) AES(2) 加密(2) 输入验证(2) ORM(2) Fiber(2) Postgres(2) Gorilla Mux(2) Go数据库开发(2) 模块(2) 泛型(2) 指针(2) HTTP(2) PostgreSQL开发(2) Vault(2) K8s(2) Spring boot(2) R语言(2) 深度学习资源(2) 半监督学习(2) semi-supervised-learning(2) architecture(2) 普罗米修斯(2) 嵌入模型(2) productivity(2) 编码(2) Qt(2) 前端(2) Rust语言(2) NeRF(2) 神经辐射场(2) 元宇宙(2) CPP(2) spark(2) 流处理(2) Ionic(2) 人体姿势估计(2) human-pose-estimation(2) 视频处理(2) deep-learning(2) kotlin语言(2) kotlin开发(2) burp(2) Chatbot(2) npm(2) quantum(2) OCR(2) 游戏(2) game(2) 内容管理系统(2) MySQL(2) python-books(2) pentest(2) opengl(2) IDE(2) 漏洞赏金(2) Web(2) 知识图谱(2) PyTorch(2) 数据库(2) reverse-engineering(2) 数据工程(2) swift开发(2) rest(2) robotics(2) ios-animation(2) 知识蒸馏(2) 安卓开发(2) nestjs(2) solidity(2) 爬虫(2) 面试(2) 容器(2) C++精选(2) 人工智能资源(2) 备忘单(2) 编程书籍(2) angular资源(2) 速查表(2) cheatsheets(2) SecOps(2) mlops资源(2) R资源(2) DDD(2) 架构设计模式(2) 量化(2) Hacking资源(2) 强化学习(2) flask(2) 设计(2) 性能(2) Sysadmin(2) 系统管理员(2) Java资源(2) 机器学习精选(2) android资源(2) android-UI(2) Mac资源(2) iOS资源(2) Vue资源(2) flutter资源(2) JavaScript精选(2) JavaScript资源(2) Rust开发(2) deeplearning(2) RAD(2)

category

在最近的一篇研究出版物《构建有效的代理》中,Anthropic分享了关于构建有效的大型语言模型(LLM)代理的宝贵见解。这项研究特别有趣的是,它强调简单性和可组合性,而不是复杂的框架。让我们探讨一下这些原则是如何使用Spring AI转化为实际实现的。

代理系统


虽然模式描述和图表来源于Anthropic的原始出版物,但我们将重点介绍如何使用Spring AI的模型可移植性和结构化输出功能来实现这些模式。我们建议先阅读原始论文。

代理模式项目实现了下面讨论的模式。

代理系统


该研究出版物对两种类型的代理系统进行了重要的架构区分:

  • 工作流:通过预定义的代码路径编排LLM和工具的系统(例如,规范性系统)
  • 代理:LLM动态指导自己的流程和工具使用的系统


关键的见解是,虽然完全自主的代理可能看起来很有吸引力,但工作流通常为定义明确的任务提供更好的可预测性和一致性。这与可靠性和可维护性至关重要的企业需求完全一致。

让我们来看看Spring AI是如何通过五种基本模式实现这些概念的,每种模式都服务于特定的用例:

1.链式工作流程


链式工作流模式体现了将复杂任务分解为更简单、更易于管理的步骤的原则。

快速链接工作流

何时使用:

  • 具有明确顺序步骤的任务
  • 当你想用延迟换取更高的准确性时
  • 当每一步都建立在前一步的输出之上时


以下是Spring AI实现的一个实例:

public class ChainWorkflow {
   private final ChatClient chatClient;
   private final String[] systemPrompts;
   // Processes input through a series of prompts, where each step's output
   // becomes input for the next step in the chain.     
   public String chain(String userInput) {
       String response = userInput;
       for (String prompt : systemPrompts) {
           // Combine the system prompt with previous response
           String input = String.format("{%s}\n {%s}", prompt, response);
           // Process through the LLM and capture output
           response = chatClient.prompt(input).call().content();
       }
       return response;
   }
}


该实施展示了几个关键原则:

  • 每一步都有明确的责任
  • 一步的输出成为下一步的输入
  • 链条易于扩展和维护


2.并行化工作流程


LLM可以同时处理任务,并以编程方式聚合其输出。并行化工作流程体现在两个关键变化中:

  • 分段:将任务分解为独立的子任务以进行并行处理
  • 投票:运行同一任务的多个实例以达成共识


并行化工作流程

何时使用:

  • 处理大量类似但独立的项目
  • 需要多个独立视角的任务
  • 当处理时间很关键并且任务可以并行时


并行化工作流模式展示了多个大型语言模型(LLM)操作的高效并发处理。此模式对于需要并行执行具有自动输出聚合的LLM调用的场景特别有用。

以下是一个使用并行化工作流的基本示例:

List<String> parallelResponse = new ParallelizationWorkflow(chatClient)
   .parallel(
       "Analyze how market changes will impact this stakeholder group.",
       List.of(
           "Customers: ...",
           "Employees: ...",
           "Investors: ...",
           "Suppliers: ..."
       ),
       4
   );


此示例演示了利益相关者分析的并行处理,其中每个利益相关者组都是同时分析的。

3.路由工作流程


路由模式实现了智能任务分配,为不同类型的输入提供了专门的处理。

路由工作流

此模式专为复杂任务而设计,其中不同类型的输入由专门的流程更好地处理。它使用LLM来分析输入内容,并将其路由到最合适的专用提示或处理程序。

何时使用:

  • 具有不同输入类别的复杂任务
  • 当不同的输入需要专门处理时
  • 当分类可以准确处理时


以下是一个使用路由工作流的基本示例:

@Autowired
private ChatClient chatClient;
// Create the workflow
RoutingWorkflow workflow = new RoutingWorkflow(chatClient);
// Define specialized prompts for different types of input
Map<String, String> routes = Map.of(
   "billing", "You are a billing specialist. Help resolve billing issues...",
   "technical", "You are a technical support engineer. Help solve technical problems...",
   "general", "You are a customer service representative. Help with general inquiries..."
);
// Process input
String input = "My account was charged twice last week";
String response = workflow.route(input, routes);

4.编排者-工作者


此模式演示了如何在保持控制的同时实现更复杂的类似代理的行为:

  • 中央LLM协调任务分解
  • 专业人员处理特定的子任务
  • 清晰的边界保持系统的可靠性


编排工作流

何时使用:

  • 无法提前预测子任务的复杂任务
  • 需要不同方法或视角的任务
  • 需要适应性解决问题的情况


该实现使用Spring AI的ChatClient进行LLM交互,包括:

public class OrchestratorWorkersWorkflow {
   public WorkerResponse process(String taskDescription) {
       // 1. Orchestrator analyzes task and determines subtasks
       OrchestratorResponse orchestratorResponse = // ...
       // 2. Workers process subtasks in parallel
       List<String> workerResponses = // ...
       // 3. Results are combined into final response
       return new WorkerResponse(/*...*/);
   }
}


使用示例:
 

ChatClient chatClient = // ... initialize chat client
OrchestratorWorkersWorkflow workflow = new OrchestratorWorkersWorkflow(chatClient);
// Process a task
WorkerResponse response = workflow.process(
   "Generate both technical and user-friendly documentation for a REST API endpoint"
);
// Access results
System.out.println("Analysis: " + response.analysis());
System.out.println("Worker Outputs: " + response.workerResponses());


5.评估优化器


Evaluator Optimizer模式实现了一个双LLM过程,其中一个模型生成响应,而另一个模型在迭代循环中提供评估和反馈,类似于人类作家的改进过程。该模式由两个主要部分组成:

  • 发电机LLM:产生初始响应并根据反馈进行改进
  • 评估员LLM:分析反馈并提供详细的改进反馈


评估器优化器工作流程

何时使用:

  • 存在明确的评估标准
  • 迭代细化提供了可衡量的价值
  • 任务受益于多轮批评


该实现使用Spring AI的ChatClient进行LLM交互,包括:

public class EvaluatorOptimizerWorkflow {
   public RefinedResponse loop(String task) {
       // 1. Generate initial solution
       Generation generation = generate(task, context);
       
       // 2. Evaluate the solution
       EvaluationResponse evaluation = evaluate(generation.response(), task);
       
       // 3. If PASS, return solution
       // 4. If NEEDS_IMPROVEMENT, incorporate feedback and generate new solution
       // 5. Repeat until satisfactory
       return new RefinedResponse(finalSolution, chainOfThought);
   }
}


使用示例:


ChatClient chatClient = // ... initialize chat client
EvaluatorOptimizerWorkflow workflow = new EvaluatorOptimizerWorkflow(chatClient);
// Process a task
RefinedResponse response = workflow.loop(
   "Create a Java class implementing a thread-safe counter"
);
// Access results
System.out.println("Final Solution: " + response.solution());
System.out.println("Evolution: " + response.chainOfThought());


Spring AI的实施优势


Spring AI对这些模式的实现提供了几个与Anthropic的建议相一致的好处:

模型可移植性


<!-- Easy model switching through dependencies -->
<dependency>
   <groupId>org.springframework.ai</groupId>
   <artifactId>spring-ai-openai-spring-boot-starter</artifactId>
</dependency>


结构化输出


// Type-safe handling of LLM responses
EvaluationResponse response = chatClient.prompt(prompt)
   .call()
   .entity(EvaluationResponse.class);


一致的API

  • 跨不同LLM提供商的统一接口
  • 内置错误处理和重试
  • 灵活的提示管理

最佳实践和建议


基于Anthropic的研究和Spring AI的实现,以下是构建有效的基于LLM的系统的关键建议:

简单开始

  • 在增加复杂性之前,先从基本工作流程开始
  • 使用符合您要求的最简单模式
  • 仅在需要时添加复杂性


可靠性设计

  • 实施明确的错误处理
  • 尽可能使用类型安全响应
  • 每一步的内置验证


考虑权衡

  • 平衡延迟与准确性
  • 评估何时使用并行处理
  • 在固定工作流和动态代理之间进行选择


未来工作


在本系列的第2部分中,我们将探讨如何构建更高级的代理,将这些基础模式与复杂功能相结合:

模式组成

  • 结合多种模式以创建更强大的工作流
  • 构建利用每种模式优势的混合系统
  • 创建能够适应不断变化的需求的灵活架构


高级代理内存管理

  • 跨对话实现持久内存
  • 高效管理上下文窗口
  • 制定长期知识保留策略


工具和模型上下文协议(MCP)集成

  • 通过标准化接口利用外部工具
  • 实施MCP以增强模型交互
  • 构建可扩展的代理架构


请继续关注这些高级功能的详细实现和最佳实践。

Tanzu-Gen人工智能解决方案


基于Spring AI的VMware Tanzu Platform 10 Tanzu AI服务器提供:

  • 企业级AI部署:用于在VMware Tanzu环境中部署AI应用程序的生产就绪解决方案
  • 简化模型访问:通过统一界面简化对Amazon Bedrock Nova模型的访问
  • 安全和治理:企业级安全控制和治理特征
  • 可扩展的基础设施:基于Spring AI,该集成支持AI应用程序的可扩展部署,同时保持高性能

有关使用Tanzu AI Server部署AI应用程序的更多信息,请访问VMware Tanzu人工智能文档。

结论


Anthropic的研究见解和Spring AI的实际实现相结合,为构建有效的基于LLM的系统提供了一个强大的框架。通过遵循这些模式和原则,开发人员可以创建健壮、可维护和有效的人工智能应用程序,在避免不必要的复杂性的同时提供真正的价值。

关键是要记住,有时最简单的解决方案是最有效的。从基本模式开始,彻底了解你的用例,只有当它明显提高了系统的性能或能力时,才增加复杂性。

文章链接