📢 转载信息
原文作者:Andrew Shved, Muhammad Uzair Aslam, Arslan Mehboob, Vadim Shiianov
AutoScout24 是欧洲领先的汽车市场平台,连接了多个欧洲国家的全新和二手汽车、摩托车和商用车的买卖双方。他们的长期愿景是建立一个Bot Factory(机器人工厂),一个用于创建和部署人工智能(AI)智能体的集中化框架,这些智能体可以在工作流程中执行任务和做出决策,从而显著提高其组织的运营效率。
从零散实验到标准化框架
随着生成式AI智能体(能够推理、规划和行动的系统)变得越来越强大,AutoScout24看到了提高内部生产力的机会。这促使各个工程团队开始试验这项技术。随着AutoScout24内部AI创新加速,他们认识到需要开创一种标准化的AI开发方法。尽管AutoScout24已经在Amazon Web Services (AWS)上成功试验了各种工具和框架,但他们设想创建一个统一的企业级框架,以实现更快的创新。他们的目标是建立一条“铺设好的道路”(paved path),使组织内各团队能够更轻松地构建安全、可扩展且可维护的AI智能体。AutoScout24 AI平台工程团队与AWS原型和云工程(PACE)团队合作,进行了一次为期三周的AI训练营。目标是通过创建一个可重复使用的蓝图——Bot Factory——来标准化未来AI智能体的构建和操作方式,从而从零散的实验转向一个连贯的战略。
挑战:确定高影响力的用例
为了将Bot Factory蓝图植根于一个有形的业务案例,团队将目标对准了一个显著的运营成本:内部开发者支持。问题界定得很明确:AutoScout24的AI平台工程师花费多达30%的时间处理重复性任务,例如回答问题、授予工具访问权限以及查找文档。这种“支持税”降低了总体生产力,它分散了熟练工程师用于高优先级功能开发的精力,并迫使其他开发人员等待日常请求的处理完成。一个自动化的支持机器人是理想的第一个用例,因为它需要执行两个核心的智能体功能:
- 知识检索(Knowledge retrieval):通过搜索内部文档来回答“操作指南”式的问题,这是一种称为检索增强生成(RAG)的能力。
- 操作执行(Action execution):在其他系统中执行任务,例如分配一个GitHub Copilot许可证,这需要安全的API集成,或称为“工具使用”。
通过构建一个能够同时完成这两者的机器人,团队可以在交付即时业务价值的同时验证其蓝图。
架构概述
在本文中,我们将探讨AutoScout24用于构建其标准化AI开发框架的架构,该框架支持安全且可扩展的AI智能体的快速部署。

该架构设计了一个简单、解耦的流程,以确保系统既有弹性又易于维护。该图提供了一个简化的视图,重点关注核心的生成式AI工作流程。在生产环境中,可以集成额外的AWS服务,例如AWS身份和访问管理(IAM)、Amazon CloudWatch、AWS X-Ray、AWS CloudTrail、AWS Web Application Firewall (WAF) 和 AWS Key Management Service (KMS),以增强安全性、可观测性和运营治理。
请求通过系统的流程如下:
- 通过Slack进行用户交互: 开发者在支持频道中发布消息,例如:“@SupportBot,我能获得一个GitHub Copilot许可证吗?”
- 通过Amazon API Gateway和AWS Lambda进行安全入口: Slack将事件发送到Amazon API Gateway端点,该端点触发一个AWS Lambda函数。此函数执行一个关键的安全检查,验证请求的加密签名,以确认它是真实来自Slack的请求。
- 通过Amazon Simple Queue Service (SQS)进行解耦: 经验证的请求被放置到Amazon SQS先进先出(FIFO)队列中。这使得前端与智能体解耦,提高了弹性。使用FIFO队列,并将消息的时间戳作为MessageGroupId,确保单个对话中的回复按顺序处理,这对维持连贯的对话至关重要。
- 通过Amazon Bedrock AgentCore进行智能体执行: 当消息到达时,SQS队列会触发一个Lambda函数,激活在AgentCore运行时中运行的智能体。AgentCore管理操作任务,包括协调对基础模型和智能体工具的调用。使用Strands Agents构建的Orchestrator Agent(协调器智能体)的逻辑会分析用户的提示,并确定要调用的正确专业智能体——对于问题是知识库智能体,对于操作请求是GitHub智能体。
一个关键的实现细节是系统如何利用AgentCore的完全会话隔离功能。为了维护对话上下文,系统通过结合Channel ID和Thread Timestamp为每个Slack线程生成一个唯一的、确定的sessionId。这个sessionId会随该线程中的每次智能体调用一起传递。同一线程中的交互共享相同的sessionId,因此智能体将其视为一个连续的对话。同时,其他线程中的交互会获得不同的sessionIds,从而保持上下文分离。实际上,每个对话都在一个隔离的会话中运行:AgentCore为每个sessionId启动单独的资源,因此上下文和状态不会在线程之间泄漏。在实践中,这意味着如果开发者在一个Slack线程中发送多条消息,智能体会记住对话的早期部分。每个线程的历史记录都会被AgentCore自动保存。
这种会话管理策略对可观测性也至关重要。基于唯一的sessionId,可以使用AWS X-Ray来跟踪交互,从而深入了解流程——从API Gateway接收到的Slack消息到消息在SQS中排队,接着是协调器处理过程、对基础模型的调用、后续的工具调用(如知识库查找或GitHub API调用),最后是响应返回Slack。
元数据和时间信息有助于指示每个步骤的流程,以便了解时间花费在哪里。如果某个步骤失败或变慢(例如,外部API调用超时),X-Ray可以精确定位导致问题的步骤。这对于快速诊断问题和建立对系统行为的信心来说是无价的。
解决方案:由AWS驱动的可重用蓝图
AutoScout24和AWS团队设计的Bot Factory架构是事件驱动、无服务器的,并建立在托管AWS服务的基础上。这种方法提供了一个有弹性和可扩展的模式,可以适应新的用例。
该解决方案建立在Amazon Bedrock及其集成功能之上:
- Amazon Bedrock 提供对高性能基础模型(FMs)的访问,这些模型充当智能体的推理引擎。
- Amazon Bedrock Knowledge Bases 支持RAG能力,允许智能体连接到AutoScout24的内部文档并检索信息以准确回答问题。
- Amazon Bedrock AgentCore 是蓝图操作方面的关键组件。它提供了一个完全托管的、无服务器的运行时环境,用于部署、操作和扩展智能体。
该解决方案为AutoScout24带来了显著优势。他们无需为会话管理、安全性和可观测性构建基础架构,而是使用了AgentCore的专用服务。这使得团队能够专注于智能体的业务逻辑,而不是底层基础设施。AgentCore还提供内置的安全和隔离功能。每次智能体调用都在其自己的隔离容器中运行,有助于防止会话之间的数据泄漏。智能体被分配了特定的IAM角色,以限制其AWS权限(遵循最小权限原则)。智能体工具(如GitHub API密钥)所需的凭证或令牌安全地存储在AWS Secrets Manager中,并在运行时访问。这些功能为团队提供了一个安全的环境来运行智能体,而只需最少的自定义基础设施。
智能体本身是使用Strands Agents SDK构建的,这是一个开源框架,它使用Python简化了智能体的逻辑、工具和行为的定义。这种组合被证明是有效的:使用Strands构建智能体,使用AgentCore安全地大规模运行它。团队采用了复杂的“智能体即工具”设计模式,其中一个中央Orchestrator Agent充当主控制器。该协调器不包含每种可能任务的逻辑。相反,它会智能地将请求委派给专业的、单一用途的智能体。对于支持机器人而言,这包括一个用于处理信息查询的知识库智能体和一个用于执行如分配许可证等操作的GitHub智能体。这种模块化设计使得扩展系统的新功能(例如添加一个PR审查智能体)变得很直接,而无需重新架构整个管道。在Amazon Bedrock上运行这些智能体进一步增强了灵活性,因为团队可以从广泛的基础模型中进行选择。更强大的模型可以应用于复杂的推理任务,而更轻量、更具成本效益的模型则非常适合例行工作代理,例如GitHub许可证请求或操作工作流程。这种混合搭配模型的能力使AutoScout24能够在其智能体架构中平衡成本、性能和准确性。
协调器智能体:使用Strands SDK构建
使用Strands Agents SDK有助于团队使用简洁的声明性代码定义协调器智能体。该框架采用模型驱动的方法,其中开发者专注于定义智能体的指令和工具,而基础模型处理推理和规划。协调器智能体可以用几十行Python代码来表达。下面的代码片段(为清晰起见已简化,不建议直接使用)展示了如何使用模型、系统提示和工具列表(在此架构中代表专业智能体)来配置智能体:
# 使用Strands Agents SDK构建并部署在Amazon Bedrock AgentCore上的协调器智能体逻辑的简化、代表性示例 from bedrock_agentcore.runtime import BedrockAgentCoreApp from strands import Agent from strands.models import BedrockModel from tools import knowledge_base_query_tool, github_copilot_seat_agent # 初始化AgentCore应用程序,它充当无服务器容器 app = BedrockAgentCoreApp() class OrchestratorAgent: def __init__(self): # 1. 定义模型:指向Amazon Bedrock中的基础模型。 self.model = BedrockModel(model_id="anthropic.claude-3-sonnet-20240229-v1:0") # 2. 定义提示:为智能体提供核心指令。 self.system_prompt = """ You are a helpful and friendly support bot for the AutoScout24 Platform Engineering team. Your goal is to answer developer questions and automate common requests. Use your tools to answer questions or perform actions. If you cannot handle a request, politely say so. """ # 3. 定义工具:为智能体提供其能力。 # 这些工具是通往其他专业Strands智能体的入口点。 self.tools = [ knowledge_base_query_tool, github_copilot_seat_agent ] # 创建智能体实例 self.agent = Agent( model=self.model, system_prompt=self.system_prompt, tools=self.tools ) def __call__(self, user_input: str): # 运行智能体以获取用户输入的响应 return self.agent(user_input) # 定义AgentCore在收到来自SQS的新事件时将调用的入口点 @app.entrypoint def main(event): # 从传入事件中提取用户查询 user_query = event.get("prompt") # 实例化并运行协调器智能体 return OrchestratorAgent()(user_query)
另一个例子是GitHub Copilot许可证智能体。它被实现为一个Strands工具函数。下面的代码片段展示了团队如何使用 @tool 装饰器定义它。此函数创建一个GitHubCopilotSeatAgent,将其中的用户请求(一个GitHub用户名)传递给它,并返回结果:
from strands import Agent, tool class GitHubCopilotSeatAgent: def __call__(self, query: str): agent = Agent(model=self.model, system_prompt=self.system_prompt, tools=self.tools) return agent(query) @tool def github_copilot_seat_agent(github_username: str) -> str: agent = GitHubCopilotSeatAgent() response = agent(f"Request GitHub Copilot license for user: {github_username}") return str(response)
这种方法的关键优势在于关注点的明确分离。开发者编写关注智能体目的的声明性代码。复杂的底层架构逻辑,包括扩展、会话管理和安全执行,由Amazon Bedrock AgentCore处理。这种抽象使得快速开发成为可能,并使AutoScout24能够更快地从原型转向生产。tools列表有效地使其他智能体成为可调用的函数,允许协调器委托任务,而无需了解它们的内部实现细节。
影响:企业级智能体的验证蓝图
Bot Factory项目带来了超越初始原型的成果。它创造了即时的业务价值,并为AutoScout24未来的AI创新奠定了战略基础。关键成果包括:
- 面向生产的支持机器人: 团队部署了一个功能性的Slack机器人,它正在积极减少AutoScout24 AI平台工程团队的手动支持工作量,解决了先前花费在重复性任务上的30%时间。
- 可重用的Bot Factory蓝图: 该项目产生了一个经过验证的、可重用的架构模式。现在,AutoScout24的团队可以通过从这个经过验证的模板(Slack -> API Gateway -> SQS -> AgentCore)开始来构建一个新的智能体。这通过允许团队专注于自己独特的业务逻辑,而不是重新发明基础设施,从而显著加速了创新。这种模块化设计也为更高级的多智能体协作做好了准备,随着他们需求的发展,可能会使用像智能体间(A2A)协议这样的标准。
- 赋能更广泛的AI开发: 通过抽象化基础设施的复杂性,Bot Factory使用户能够构建AI解决方案。安全或数据分析领域的领域专家现在可以创建新的工具或专业智能体,并将其“插入”到工厂中,而无需成为分布式系统专家。
结论:企业级智能体的新模型
AutoScout24与AWS的合作将零散的生成式AI实验转变为一个可扩展、标准化的框架。通过采用Amazon Bedrock AgentCore,团队将其支持机器人从原型顺利过渡到生产环境,同时专注于其Bot Factory的愿景。AgentCore管理会话状态和扩展,因此工程师可以专注于高价值的业务逻辑,而不是基础设施。最终结果不仅仅是一个支持机器人:它是构建企业级智能体的可重用基础。借助AgentCore,AutoScout24可以高效地从原型进入生产,为组织如何在AWS上标准化生成式AI开发树立了一个典范。要开始使用Amazon Bedrock构建企业智能体,请查阅以下资源:
- Amazon Bedrock AgentCore 文档
- Amazon Bedrock Knowledge Bases 文档
- 使用Amazon Bedrock AgentCore安全启动和扩展智能体及工具
- 使用Amazon Bedrock AgentCore可观测性构建可信赖的AI智能体
关于作者
Andrew Shved 是一位高级AWS原型架构师,负责领导团队和客户在AWS上从早期原型到生产环境构建和交付由生成式AI驱动的解决方案。
Muhammad Uzair Aslam 是AWS原型团队的资深技术项目经理,与客户紧密合作,加速他们的云和AI之旅。他热衷于深入研究技术细节,将复杂性转化为有影响力的、以价值驱动的解决方案。
Arslan Mehboob 是一位平台工程师和AWS认证解决方案架构师,在云基础设施、可扩展系统和软件工程方面拥有深厚的专业知识。他目前负责构建有弹性的云平台,并对AI和新兴技术充满热情。
Vadim Shiianov 是一位数据科学家,专注于将机器学习和AI驱动的系统应用于现实世界的业务场景。他致力于设计和部署将复杂数据转化为可衡量影响的ML和生成式AI解决方案。他对新兴技术和围绕它们构建实用、可扩展的系统充满热情。
🚀 想要体验更好更全面的AI调用?
欢迎使用青云聚合API,约为官网价格的十分之一,支持300+全球最新模型,以及全球各种生图生视频模型,无需翻墙高速稳定,文档丰富,小白也可以简单操作。
评论区