亚马逊AWS官方博客

Amazon Q Developer CLI + 飞书——打造对话式的 AI Agent 智能运维平台

项目背景

在现代云原生架构中,越来越多的组织采用微服务模式,系统由多个团队共同维护。为了隔离权限和业务板块,不少组织会管理数十个 AWS 账号。当出现问题时,传统的响应方式往往是逐一联系相关负责人进行排查,导致沟通链条冗长、协作效率低下,甚至可能错失最佳处理时机。这种“拉人战术“不仅消耗大量时间,还会导致问题定位和解决的延迟。此外,在 AWS 官方博客《Generative AI-powered technology operations》中也曾指出,传统的运维工作,如事件管理、知识库维护、支持工单处理,通常需要大量的人工干预和重复性工作。

为了解决这一挑战,AWS 提供了生成式 AI 解决方案,如 Amazon Bedrock、Amazon Q Developer,旨在通过自然语言交互和智能体的特性,自动化这些任务,提升技术运维的整体效率和响应速度。

本文将指导您如何结合 Amazon Q Developer CLI 和 飞书(也可以是其它具备开放平台的 IM 工具,如 Slack),搭建对话式的 AI Agent 智能运维平台。

技术方案总览

1. 通过飞书或 Slack 开放平台创建 Bot 应用并开通相应的权限,用户通过在飞书中 @ 机器人并输入问题发起会话

2. Lambda 中运行的 Function 作为协调器,通过 Bedrock 引入较小参数的 LLM 识别用户意图并过滤无效请求:

  • 当识别到用户会话内容和运维无关,则直接回复不适用;
  • 当识别到用户会话内容不需要查询当前 AWS 服务或 K8S 集群的运行状态,则直接结合 Bedrock 知识库进行回复;
  • 当识别到用户会话内容需要结合 AWS 各项服务的状态,则调用部署在 EC2 上的 Q CLI 代理程序启动 Q CLI 进行数据采集、分析总结后回复;

3. Amazon Bedrock 作为 AWS 的大模型服务平台,提供市面上一流的大语言模型,包括 Claude 4,DeepSeek-R1 满血版等。在此方案中,我们选择了参数较小的 LLM 用于意图识别,并结合知识库做 RAG,输出的内容也可以通过 Guardrails 进行过滤与防护。关于知识库与安全围栏可参考以下文档搭建:

4. EC2 实例中主要运行下服务:

  • Q CLI 代理服务:用于接收 Lambda 传入的会话内容并调起 Q CLI 的 q chat 命令发起会话;
  • Amazon Q Developer CLI:Q CLI 核心工作原理遵循 ReAct(Reasoning and Action)框架:
    • 思维链(Chain of Thought:将一个大的复杂任务进行拆解,拆解成多个思维步骤。
    • 推理(Reasoning:负责分析和处理输入的数据,生成有效的决策。
    • 行动(Action:执行具体的操作,比如搜索、执行代码,或者其余自定义的行动。
    • 观察(Observation:监控和收集环境反馈的数据,为下一步的推理和行动提供依据。
  • (可选)配置多账号的 AWS CLI Profile ,需要提前为 AWS CLI 设置不同账号的 Profile;
  • (可选)配置其它命令行工具,如 kubectl、helm 或其它云平台的 CLI 工具;
  • (可选)配置 MCP Servers,需要为 Q CLI 注册需要使用的 MCP Servers,拓展 Q CLI 能力。

5. 本文主要包含 Amazon Bedrock Knowledge Bases Retrieval MCP Server AWS Support MCP Server

  • Amazon Bedrock Knowledge Bases Retrieval MCP Server 用于 Q CLI 结合知识库中的 runbook 来判断当前服务是否正常,解答类似这样的问题:“请告诉我最近半个月生产环境的 MSK 集群的各项指标是否满足我们的 SLA 要求”。Q CLI 在提取 MSK 集群最近半个月指标,再从知识库中提取 SLA 预定义的指标数据,给出最终回复。甚至在保障安全的前提下执行 runbook 中定义的脚本自动化修复问题。
  • AWS Support MCP Server  根据工单模板 Q CLI 自动填充相关信息:包括工单类别,服务 ID 与问题描述等,最后自动提交技术工单,提升整体效率并降低人工操作的错误率。同时也能检索过往工单内容,提取类似问题的解决方法。

实施步骤

1. 创建 Lambda 用于集成飞书聊天机器人,实现与用户的对话功能

Lambda 用于接收群内用户 @机器人 发送的消息,然后调用 Bedrock LLM 对问题实现意图识别:

  • 当用户的问题有关 AWS 账号中各项服务的运行情况、故障定位等问题时,则调用 Q CLI 的代理服务以获取答案;
  • 当用户的问题涉及运维相关的操作手册、配置文档、应急响应手册、知识库等内容的查询,则通过 Bedrock Knowledge Bases 构建的知识库 RAG 系统做出回复;
  • 无关问题则返回默认回复。

步骤:

1. 创建 Lambda Function,本方案 Function 命名为:LarkBotAdapter,Runtime 选择 Python 3.12Architecture 选择 x86_64Execution role 选择 Create a new role with basic Lambda permissions,完成创建。

  1. Lambda 有依赖项,可使用 Layer 来导入依赖包。在 Lambda 左侧导航窗格中点击 Layers,上传已打包好的 Layer 文件点击下载,完成创建。在 Lambda 的 Code => Layers 中 添加这个 Layer 供运行时引用。
  2. 编辑自动创建的 Lambda Role 的权限策略 (AWSLambdaBasicExecutionRole-xxxx),添加调用 Bedrock LLMs 的权限:
    {
        "Sid": "BedrockClaudeHaikuAccess",
        "Effect": "Allow",
        "Action": [
            "bedrock:InvokeModel",
            "bedrock:InvokeModelWithResponseStream"
        ],
        "Resource": [
            "arn:aws:bedrock:*::foundation-model/*"
        ]
    }
    
  3. 上传 Lambda 文件 lambda_function.py 和 intent_recognition.py
  4. 在 Lambda Configuration 中调整 Lambda 的超时时间为 10 分钟、调整 Lambda 的运行内存为 512m开启 SnapStart 以消除冷启动时间,然后在 Lambda 的Versions 中 点击 Publish new version 发布一个开启了 SnapStart 的 Lambda Version。

2. 创建 API Gateway,构建 HTTP API,添加 / ANY 的 Route;配置 Integration,Integration target 选择 Lambda function,在下拉列表中选中 LarkBotAdapter 的 arn,并在末尾加上 :版本号 以使用 SnapStart 的版本,例如:arn:aws:lambda:us-east-1:123456789012:function:LarkBotAdapter:1;增大Integration 中的超时时间为 30

3. 配置 Lambda 的环境变量

在 Lambda 的 Configuration 中点击 Environment variables ,配置如下环境变量:

变量名 说明
BEDROCK_REGION Bedrock 已开通各类大模型的所在区域
KNOWLEDGE_BASE_ID 在 Bedrock 中创建完 Knowledge Bases,在控制台界面提取 ID
KNOWLEDGE_MODEL_ARN 知识库 RAG 需要使用的 LLM ARN
KNOWLEDGE_SUMMARY 知识库的目录清单,也可以是知识库的涵盖内容的大致描述,主要用于意图识别中判断是否需要调用知识库进行作答
LARK_APP_ID 飞书机器人应用的 APP ID
LARK_APP_SECRET 飞书机器人应用的 APP SECRET
RECOGNITION_MODEL_ID 用于意图识别的 LLM
QLI_SERVER_ADDRESS Q CLI 代理服务器地址

配置完成后如下图所示:

2. 配置飞书开放平台与 AWS API Gateway 的集成

  1. 在飞书开放平台中添加或编辑企业自建应用
  2. 权限管理中添加以下权限:
  3. 事件与回调中,设置订阅方式为“将事件发送至开发服务器”,并添加“接收消息”事件。

3. 订阅 Q Developer Pro 和安装 Q CLI

在本方案中,Q CLI 作为多用户的共用平台,所以必须开通 Pro 版本才不受配额限制。以下是免费版和 Pro 版本对比:

步骤:

1. 在 AWS 控制台搜索 Amazon Q Developer,您需要确认右上角的区域为 us-east-1,点击右下角 Get started。

2. 设置您的 Profile,Q Developer Profile 本质上是一个管理工具,让管理员可以集中管理和控制 Amazon Q 的使用方式。 您可以修改 Profile name,修改后点击右下角的创建按钮。

3. 您会自动进入到 IAM Identity Center,在这里您需要创建用户,通过选择用户-创建用户,您需要填写以下信息:

Username:这个也是您后面登录 Q Pro 会用到的信息
Email address:输入有效的邮箱地址
Display name:由 First name 和 Last name 组成,后面在 Q Developer Pro 中订阅用户会用到

所有信息填写完成后就可以创建用户,显示状态为 Enabled 即为用户创建成功。

4. 为 Q Developer Pro 订阅用户,控制台搜索 Q Developer 点击 Subscribe,选择分配用户/组,输入上一步编辑的 Display name,找到用户后选择右下角的添加。添加完成后会看到状态为“不可用”,这是因为我们需要进行激活。

5. 接受 IAM Identity Center的邀请:您需要登录到注册的邮箱,找到一封标题为“Invitation to join AWS IAM Identity Center “的邮件,点击接受邀请(Accept invitation),使用刚刚在 IAM Identity Center 设置的 User name,重置密码后点击登录, 注意密码需要满足:8-64个字符,大写和小写字母,数字,非字母数字符。为了安全,您可以设置 MFA 设备,这些步骤做完后您就可以使用 Q Developer Pro 了。

6. 激活并使用 Q Pro

  1. 安装 Q CLI (本文以 ubuntu 操作系统为例,要在其它操作系统安装 Q CLI 请参考:https://docs.aws.amazon.com/amazonq/latest/qdeveloper-ug/command-line-installing.html
  2. 启动一台 EC2,SSH 登录后执行以下命令:
    wget <https://desktop-release.q.us-east-1.amazonaws.com/latest/amazon-q.deb>
    sudo apt-get install -f 
    sudo dpkg -i amazon-q.deb
    
  3. 执行 q login 后需要选择登录方式和 URL 等信息

    登录方式:选择使用 Pro license 登录输入
    Start URL: 您可以从订阅的 Q Developer 控制台内找到
    输入区域:输入您订阅的区域,您可以从 Q Developer 控制台找到,如下图所示

  4. 所有信息输入完后,在控制台回车,会出现一个 URL,复制到浏览器进行打开,浏览器会提示您需要输入注册时的 Username 和密码,以及 MFA 验证数字,输入后点击 sign in 按钮。
  5. 登录后点击“Confirm and continue”
  6. 接下来您会看到允许 Q CLI 的访问,选择允许访问
  7. 可以通过命令行看到登录成功的提示
  8. 此时,您可以在命令行输入 q,出现如下画面表示 Q CLI 已成安装并关联 Pro 版本

    同时您也可以看到 Q D 的订阅控制台里状态变为 Active

4. 部署 Q CLI 代理服务

Q CLI 代理服务器主要用于接收 Lambda 传输过来的用户问题,然后利用 Q CLI Agent 特性查询 AWS 账号的服务状态、分析故障原因、给出优化建议等。

在整个工作流程中,Q CLI 的特点在于可以执行 Linux 命令、运行 bash 脚本、调用 aws cli、kubectl 等常用命令行工具或调用 MCP 服务来完成整个任务。本文主要演示如何结合 AWS CLI 实现多 AWS 账号服务的信息提取和故障分析。

1. 配置 AWS CLI 权限:

  1. 在本账号中创建一个用户并附加 ReadOnlyAccess 的权限策略,包含了几乎所有 AWS 服务的只读访问权限;
  2. 创建该用户的 AK/SK 用于 AWS CLI;
  3. 安装 AWS CLI 后,通过 aws configure -profile <profile name> 创建 AWS CLI 的 Profile,并填入上一步创建的AK/SK 和主要资源所在的 Region;
  4. 如果需要管理多个 AWS 账号,则需要在每个账号中创建用户和 AK/SK 并设置对应的 Profile(也就是重复前面 3 个步骤);
  5. Q CLI 会根据输入分析后决定使用哪一个 Profile 执行 AWS CLI 命令,所以 Profile 的命名需要有明确的意义,便于 Q CLI 理解。比如:UAT 环境、PROD 环境、日志账号、安全账号等。
    aws configure —profile uat
    aws configure —profile prod
    aws configure —profile logs
    aws configure —profile security
    ...
    

2. 部署 Python Flask 程序(Python 版本 3.12)用于和 Lambda 交互。将 python_flask.py 上传到安装好 Q CLI 的 EC2,确保监听端口为 0.0.0.0 并启动程序。

3. 代码中的 Prompt 会指示 Q CLI 识别具体使用哪个 Profile 执行 AWS CLI 命令,另外也可以在这里设置调用其它工具的指示,比如 kubectl、helm,甚至是其它云平台的 CLI 工具。示例 Prompt 模板如下:

任务描述:
您将收到一段用户的自然语言输入,描述其希望执行的 AWS 相关操作。
您需要根据该输入判断用户的意图,并从以下两个 AWS CLI 配置文件中选择最合适的一个:
security:用于安全相关的服务,涉及产品关键字包括 WAF、GuardDuty、CloudTrail 等。
networking:用于网络相关的服务,涉及产品关键包括 VPC、Subnet、NAT、安全组等。
logs: 用于存放日志相关的服务,涉及产品关键字包括 Cloudwatch Logs、Audit Log、OpenSearch等。

输出要求:
仅输出最合适的配置文件名称:如:security 或 networking。
示例输入:
“我想查看最近的安全组配置。”

示例输出:
networking

注意事项:
如果用户的输入同时涉及多个领域,请根据主要意图选择最相关的配置文件。
输出必须严格为 security 或 networking,不包含其他文字或解释。
如果没有识别出具体配置文件,请返回 default。

请根据上述要求,处理以下用户输入:
“{user_inputs}”

5. Q CLI 与 MCP Server 集成

Q CLI 可以与不同的 MCP Server 集成实现扩展能力。本文描述了如何集成 AWS Support MCP Server 来提交和管理工单,以及 Amazon Bedrock Knowledge Bases Retrieval MCP Server 结合知识库来分析服务状态或故障。

安装基础环境:

  1. 更新并安装 pipx
    sudo apt-get update && sudo apt-get install -y pipx
  2. 下载 ux
    curl -fsSL <https://astral.sh/uv/install.sh> | bash
  3. 确保 Q Developer 的版本在 1.9.0 或以上
    q upgrade

AWS Support  MCP Server

使用 AWS Support MCP 需要当前账户开启Business、Enterprise On-Ramp 或 Enterprise 支持计划,主要可应用到以下两个场景:

1. 自动提交 Support 工单:

当通过 Q CLI 获取账号资源状态时,如果发现某些服务资源有异常但无法精确定位根因,可以让 Q CLI 调用 Support MCP 自动提交 Support 工单。Q CLI 可提取服务相关信息,按照如下工单模板自动填充必要信息后生成并提交工单。为了避免自动提交无效工单,可在自动提交工单前加入审批环节。比如,通过飞书 Bot 艾特相关负责人,负责人回复 Approve 后才正式提交工单。

提交工单需要按以下模板提供信息:

  • 主题(subject)- 清晰描述问题的标题
  • 服务代码(service_code)- 与问题相关的 AWS 服务代码,例如 “amazon-elastic-compute-cloud-linux”(适用于 EC2 Linux 问题)
  • 类别代码(category_code)- 问题的类别代码,例如 “using-aws”(使用 AWS 相关问题)
  • 严重级别代码(severity_code)- 问题的严重程度,可选值包括:
    • low(一般指导):一般开发问题或功能请求
    • normal(系统受损):非关键功能异常或时间敏感的开发问题
    • high(生产系统受损):重要功能受损但有解决方法
    • urgent(生产系统宕机):业务受到显著影响且无解决方法
    • critical(业务关键系统宕机):业务面临风险且关键功能不可用
  • 通信正文(communication_body)- 详细描述您的问题

2. 查询过往工单内容,找到类似问题的解决方案。

安装和使用

1. 执行如下命令,在 mcp.json 中加入配置

pipx install awslabs.bedrock-kb-retrieval-mcp-server

vim ~/.aws/amazonq/mcp.json
{
   "mcpServers": {
      "awslabs_support_mcp_server": {
         "command": "uvx",
         "args": [
            "-m", "awslabs.aws-support-mcp-server@latest",
            "--debug",
            "--log-file",
            "./logs/mcp_support_server.log"
         ],
         "env": {
            "AWS_PROFILE": "your-aws-profile"
         }
      }
   }
}

2. 重新输入 q 后,可以看到 MCP Server 和 MCP 相关 Tools 都关联成功

Amazon Bedrock Knowledge Bases Retrieval MCP Server

安装和使用:

1. 执行如下命令,在 mcp.json 文件的 “mcpServers” 节点下加入配置

pipx install awslabs.bedrock-kb-retrieval-mcp-server
vim ~/.aws/amazonq/mcp.json
"awslabs.bedrock-kb-retrieval-mcp-server": {
      "command": "awslabs.bedrock-kb-retrieval-mcp-server",
      "args": [],
      "env": {
        "AWS_PROFILE": "default",
        "AWS_REGION": "us-east-1",
        "FASTMCP_LOG_LEVEL": "DEBUG",
        "BEDROCK_KB_RERANKING_ENABLED": "false",
      "KB_INCLUSION_TAG_KEY": "mcp-multirag-kb"
      },
      "disabled": false,
      "autoApprove": ["QueryKnowledgeBases"]
    }

注:

(1)以上配置文件中 Profile 为 default,您需要保证此处的 Profile 所关联的 AK/SK 具有以下操作权限 :

 bedrock-agent:Retrieve - 查询知识库的核心权限
 bedrock-agent:ListKnowledgeBases - 列出可用知识库的权限
 以及对特定知识库的访问权限

(2)区域必须为 Amazon Bedrock 支持的区域。

(3)如果启用重排序功能,仅支持以下区域:us-west-2,us-east-1,ap-northeast-1 以及 ca-central-1。

(4)配置完成后重新输入 q,就可以看到 bedrock_kb_retrieval_mcp_server 关联成功。

(5)bedrock_kb_retrieval_mcp_server 核心服务: QueryKnowledgeBases

将 QueryKnowledgeBases 定义为 MCP 工具:

@mcp.tool(name='QueryKnowledgeBases')
async def query_knowledge_bases_tool(
    query: str = Field(...),
    knowledge_base_id: str = Field(...),
    number_of_results: int = Field(10),
    reranking: bool = Field(kb_reranking_enabled),
    # 其他参数...
):
    # 函数实现...

此工具函数内部会调用 query_knowledge_base 函数:

result = await query_knowledge_base(
    query=query,
    knowledge_base_id=knowledge_base_id,
    kb_agent_client=kb_agent_client,
    number_of_results=number_of_results,
    reranking=reranking,
    # 其他参数...
)

query_knowledge_base 函数会执行以下步骤:

1. 检查区域是否支持重排序(如果启用)
2. 构建检索请求配置:
   ```python
   retrieve_request: KnowledgeBaseRetrievalConfigurationTypeDef = {
       'vectorSearchConfiguration': {
           'numberOfResults': number_of_results,
       }
   }```
 3. 如果提供了 `data_source_ids`,添加过滤器 
 4. 如果启用了重排序,添加重排序配置
 5. 调用 Bedrock Agent Runtime 的 `retrieve` API:
   ```python
   response = kb_agent_client.retrieve(
       knowledgeBaseId=knowledge_base_id,
       retrievalQuery={'text': query},
       retrievalConfiguration=retrieve_request,
   )
   ```
6. 处理响应结果,提取文档内容
7. 返回格式化的结果

以下是在 Q CLI 中使用 bedrock_kb_retrieval_mcp_server 工具,根据内部运维知识库中定义的各项 SLA 指标进行检索,对比当前系统的指标是否符合要求。

比如:查询知识库,告诉我公司内部关于 Test 项目 Bedrock 模型调用延迟参数的定义信息

可以看到 bedrock_kb_retrieval_mcp_server 工具可以召回知识库里的相关信息

效果演示

  1. 通过 AT 机器人发起会话,机器人回复到单独的对话线程,避免消息过多打扰群内其他成员。
  2. 通过设置分段回复,避免用户长时间等待反馈信息,提升用户体验。

总结

综上所述,本文以 Amazon Q Developer CLI 与 IM 工具(如飞书)的集成为例,展示了如何构建一个对话式的 AI Agent 运维平台,实现传统运维流程的智能化升级。通过接入自定义的 MCP Server,不仅扩展了 Q Developer 的能力边界,更为企业带来了更高效、更智能的运维体验。生成式 AI 不再只是技术趋势,而是可以实实在在落地、提升工作效率的工具。希望本文的示例能够为读者在自身业务场景中的运维自动化提供启发,借助 Amazon Bedrock、Q Developer 等服务,打造符合自身需求的 AI 运维解决方案,真正迈入智能运维的新阶段。


*前述特定亚马逊云科技生成式人工智能相关的服务仅在亚马逊云科技海外区域可用,亚马逊云科技中国仅为帮助您了解行业前沿技术和发展海外业务选择推介该服务。

参考资料

本文涉及代码的 Github 地址:https://github.com/JustinTanCQ/im-with-qcli/tree/main

Amazon Q Developer 详细介绍:https://aws.amazon.com/cn/q/developer

AWS 官方 MCP 库:https://github.com/awslabs/mcp

本篇作者

谭欣

亚马逊云科技解决方案架构师,负责帮助客户设计和优化符合自身业务场景的云架构,并提供技术支持。拥有 7 年创业经历,在直播音视频架构设计、生成式 AI 应用落地方面有着丰富的实战经验。

刘元元

亚马逊云科技解决方案架构师,拥有十多年的企业级应用的设计和开发经验,历任架构师、开发总监等岗位。行业分布金融、文旅、交通等,在 SaaS 平台架构与 Serverless 技术领域具备丰富的实践积累。主导完成多个行业大型系统的全生命周期架构和开发工作,成功推动企业应用系统向现代化云架构演进。

李文靖

亚马逊云科技解决方案架构师,专注于架构咨询以及基于亚马逊云科技云计算方案的架构设计。同时致力于探索云技术的最新发展,并将创新理念应用于实际项目。她还对人工智能(AI)和云运维领域有着独到的见解,能够为客户提供专业且深入的解决方案。