基于 Amazon Q Developer CLI 和 Amazon Bedrock Knowledge Bases 实现智能问答系统

1. 引言

传统企业通常将常见问题(FAQ)发布在网站上,方便客户自助查找信息。然而,随着生成式 AI 技术的迅速发展与商业渗透,这些企业正积极探索构建智能问答系统的新途径。这类系统不仅能显著提升客户体验,还能有效降低人工支持成本,实现客户服务的智能化转型。

本文将详细分享如何利用 Amazon Q Developer CLI(以下简称 Q CLI) 和 Amazon Bedrock Knowledge Bases(以下简称 Bedrock KB) 快速构建端到端的智能问答系统。我们将从网页爬取 FAQ 开始,到构建高效知识库,实现全流程自动化,帮助企业轻松迈入 AI 客户服务新时代。

📢限时插播:Amazon Q Developer 来帮你做应用啦!

🌟10分钟帮你构建智能番茄钟应用,1小时搞定新功能拓展、测试优化、文档注程和部署

⏩快快点击进入《Agentic Al 帮你做应用 -- 从0到1打造自己的智能番茄钟》实验

免费体验企业级 AI 开发工具的真实效果吧

构建无限,探索启程!

2. 智能问答系统构建

我们的解决方案分为两个核心阶段:

1、数据采集阶段 – 利用 Q CLI 和 Playwright MCP Server 自动从网页爬取 Q&A 问答对,整理到 Excel 表中。

该阶段主要解决的问题是从网页中快速、自动提取结构化信息,特别是对于常见问题解答(FAQ)页面,能够自动化提取问答对并将其转化为结构化数据,可以为知识库建设、客户支持系统和智能问答机器人提供信息资源。本文将分享如何利用 Q CLI 和 Playwright MCP Server 快速构建一个自动化工作流,实现网页爬取、内容识别和问答对提取。

2、知识库构建阶段 – 将结构化数据导入 Bedrock KB,构建 Q&A 系统。

该阶段主要解决的核心问题是:如何将结构化的 Q&A 对 Excel 文件转化为智能可查询的知识库,并确保系统能准确理解和匹配用户问题。这一挑战尤为关键,因为网站 FAQ 中的问题通常按类别组织,在原始上下文中意义清晰,但一旦脱离分类结构,同样的问题可能变得模糊不清。例如,”如何修改订单?”这个问题在不同业务场景下可能有完全不同的答案。我们需要确保智能问答系统不仅存储问答对,还能根据上下文进行问题分类,以实现精准的语义匹配和回答检索。

架构图如下:

3. 基于 Q CLI + Playwright MCP Server 的自动化数据采集

Amazon Q CLI 是亚马逊推出的一种命令行工具,作为 Amazon Q Developer 的一部分,它允许开发者直接在命令行界面与 Amazon Q 的人工智能能力进行交互。为了延伸 Q CLI 调用外部工具的能力,Q CLI 从 1.9.0 版本开始支持模型上下文协议(Model Context Protocol MCP),借助外部 MCP Server,可以极大地扩充 Q CLI 的能力。

Playwright 是一款开源浏览器自动化框架,提供了跨浏览器的自动化测试和网页交互能力。而 Playwright MCP Server 则是基于 MCP 协议为大语言模型(LLM)提供了使用 Playwright 进行浏览器自动化的能力。具有以下核心功能:

  • 网页导航与交互:允许 AI 模型打开网页、点击按钮、填写表单,等等。

  • 屏幕截图和网站文字获取:捕获当前网页的截图,帮助 AI 分析页面内容。

  • JavaScript 执行:在浏览器环境中运行 JavaScript 代码,实现复杂交互,等等。

当 Q CLI 集成 Playwright MCP Server 后,我们在 Q CLI 中通过自然语言交互就能够实现网页的打开、点击,网页文字内容的读取存储和解析,无需手工操作处理。

比如如下的网页,Q&A 已经使用问答形式将客户关心的问题和答案做了分类整理,但如果我们想导入知识库,就需要把网站的内容导出到 Excel 文件,便于后续处理。

下面我们就向大家一步步展示 Q CLI 集成 Playwright MCP Server 后的强大能力。

3.1 配置 Q CLI 集成 Playwright MCP Server

在 Q CLI 中集成 MCP Server 非常简单,在 Q Developer 的安装目录,通常是~/.aws/amazonq/mcp.json 文件中配置 playwright MCP Server,如下:

参考:https://github.com/executeautomation/mcp-playwright

{"mcpServers": {"playwright": {"command": "npx","args": ["-y", "@executeautomation/playwright-mcp-server"]}}
}

启动 Q Chat 可以看到配置的 Playwright MCP server 已经正常启动了。

3.2 通过自然语言交互实现爬网

在 Q Chat 中输入:

访问 Courier & Delivery Services FAQs | Lalamove Singapore,点击[data-section=”business”];只获取页面的文字内容而非 html 内容,然后将文字内容保存到”lalamove_personal_faq.txt”

就可以看到 Amazon Q 已经开始理解我们的需求,并调用 Playwright MCP Server 提供的合适的工具开始爬网了。它分别使用:

  • playwright_navigate 工具打开指定的网站

  • playwright_click 点击上面网页的“Business”链接

  • playwright_get_visible_text 工具获得网站上的文字内容

  • fs_write 将文字内容保存在本地文件

这里有个有趣的点值得一提:你会发现我们的提示词里面特别添加了点击[data-section=”business”]

访问 Courier & Delivery Services FAQs | Lalamove Singapore,点击[data-section=”business”];只获取页面的文字内容而非 html 内容,然后将文字内容保存到”lalamove_personal_faq.txt”

这样做的原因是,网站中有多个“business”的字样,如果不做特别说明,LLM 通常会根据开发习惯猜测点击时使用的 selector,将该参数传递给 Playwright 工具,当与实际情况不符时,Playwright 往往难以点击到正确的链接。我们通过如下的方法获得准确的 selector 放入指令中,LLM 就可以生成准确的参数,实现精准的点击。

3.3 通过自然语言交互实现文本到 Excel 的转换

我们继续与 Q CLI 进行交互:

Q CLI 经过上面的一系列的自动操作几分钟之内就将网页的 Q&A 对整理到 Excel 文件中:

4. 基于 Amazon Bedrock Knowledge Bases 的知识库构建

该项目中我们主要遇到两个挑战:

  • 网站中的 FAQ 是按类别组织的,同样的问题在不同上下文回答可能完全不同。

为了解决这个问题,我们利用 Bedrock KB 的元数据过滤功能(Amazon Bedrock Knowledge Bases now supports metadata filtering to improve retrieval accuracy | AWS Machine Learning Blog),允许您根据文档的特定属性细化搜索结果,提高检索准确性和响应的相关性。

  • 客户是通过多轮会话进行提问的,每轮会话的意图(或是对应的分类)都有可能变化。

为了解决这个问题,我们采用结合历史会话和当前问题进行问题分类,结合 Bedrock KB 的元数据过滤能力进行知识库的问题搜索。

4.1 基于元数据的 Q&A 问题导入

为了实现基于元数据的 Q&A 问题导入,我们对前面整理出来的 Excel 文件进行拆解,每个 Q&A 问题对都对应一个 Excel 文件和一个元数据 metadata.json 文件,如下:

每个 Excel 文件内容:

对应的 metadata.json 文件内容:

{"metadataAttributes": {"Category": "Business","Sub-Category": "General"}
}

将这些文件作为数据统一放在 S3 中作为数据源导入到 Bedrock KB 中。

4.2 基于多轮会话的意图识别和 Bedrock KB 查询

结合历史会话做意图分类的逻辑如下:

基于 Bedrock KB 做信息检索的代码片段:

try:# 设置Bedrock KB配置最多返回3条信息retrieval_config = {'vectorSearchConfiguration': {'numberOfResults': 3}}# 根据问题做的分类来添加过查询bedrock KB的过滤条件if category != "others":# 添加分类过滤条件retrieval_config['vectorSearchConfiguration']['filter'] = {'equals': {'key': 'Category','value': category}}logger.info(f"使用分类过滤: {category}")else:logger.info("未使用分类过滤,将搜索所有分类")# 调用知识库检索APIresponse = bedrock_agent_runtime.retrieve(retrievalQuery={'text': query},knowledgeBaseId=KNOWLEDGE_BASE_ID,retrievalConfiguration=retrieval_config)# 打印检索结果logger.info(json.dumps(response['retrievalResults'], ensure_ascii=False, indent=2))return response['retrievalResults']except Exception as e:logger.error(f"查询知识库时出错: {str(e)}")return []

基于 Bedrock KB 的回取内容做答案生成的代码片段:

try:# 结合客户需求,当知识库中没有相关信息时直接返回,不需要LLM做总结。if not reference_items: return "抱歉,知识库中没有找到相关信息。"# 构建提示词system_prompt, user_message = build_prompts(query, reference_items)# 设置对话消息system_prompts = [{"text": system_prompt}]messages = [{"role": "user","content": [{"text": user_message}]}]# 设置推理参数inference_config = {"temperature": 0}additional_model_fields = {"top_k": 50}# 调用模型APIresponse = bedrock_runtime.converse(modelId=MODEL,messages=messages,system=system_prompts,inferenceConfig=inference_config,additionalModelRequestFields=additional_model_fields)# 获取模型响应output_message = response['output']['message']response_text = output_message['content'][0]['text']return response_textexcept Exception as e:logger.error(f"生成答案时出错: {str(e)}")return f"处理您的问题时出错: {str(e)}"

5. 总结

Amazon Q CLI 可以与 MCP Server 实现方便的集成。本项目通过 Q CLI 与 Playwright MCP 集成,为网页内容提取和问答对识别提供了一种高效、智能的解决方案。通过简单的自然语言指令,我们就可以快速实现从网页爬取到结构化数据生成的全流程自动化。这不仅大大提高了开发效率,也为构建智能知识库和问答系统提供了坚实基础。

同时,结合 Amazon Bedrock Knowledge Bases 的元数据过滤功能,我们可以首先基于历史会话对问题进行分类,在准确的类别中再完成知识库的搜索和答案生成,进一步提升 Q&A 回复的准确率。

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

本篇作者

本期最新实验为《Agentic AI 帮你做应用 —— 从0到1打造自己的智能番茄钟》

✨ 自然语言玩转命令行,10分钟帮你构建应用,1小时搞定新功能拓展、测试优化、文档注释和部署

💪 免费体验企业级 AI 开发工具,质量+安全全掌控

⏩️[点击进入实验] 即刻开启 AI 开发之旅构建无限, 探索启程!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/bicheng/83561.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Go 为何天生适合云原生?

当前我们正处在 AI 时代,但是在基础架构领域,仍然处在云原生时代。云原生仍然是当前时代的风口之一。作为一个 Go 开发者,职业进阶的下一站就是学习云原生技术。作为 Go 开发者学习云原生技术有得天独厚的优势,这是因为 Go 天生适…

Mac查看MySQL版本的命令

通过 Homebrew 查看(如果是用 Homebrew 安装的) brew info mysql 会显示你安装的版本、路径等信息。 你的终端输出显示:你并没有安装 MySQL,只是查询了 brew 中的 MySQL 安装信息。我们一起来看下重点: &#x1f9fe…

Kafka ACK机制详解:数据可靠性与性能的权衡之道

在分布式消息系统中,消息确认机制是保障数据可靠性的关键。Apache Kafka 通过 ACK(Acknowledgment)机制 实现了灵活的数据确认策略,允许用户在 数据可靠性 和 系统性能 之间进行权衡。本文将深入解析 Kafka ACK 机制的工作原理、配…

FastMCP:构建 MCP 服务器和客户端的高效 Python 框架

在人工智能领域,模型上下文协议(Model Context Protocol,简称 MCP)作为一种标准化的协议,为大型语言模型(LLM)提供了丰富的上下文和工具支持。而 FastMCP 作为构建 MCP 服务器和客户端的 Python…

动态库导出符号与extern “C“

1. windows下动态库导出符号 根据C/C语法规则,函数声明中的修饰符(如__declspec(dllexport))可以放在返回类型之前或返回类型之后、函数名之前。这两种方式在功能上是等价的,编译器会以相同的方式处理。 __declspec(dllexport) …

Linux(9)——进程(控制篇——下)

目录 三、进程等待 1)进程等待的必要性 2)获取子进程的status 3)进程的等待方法 wait方法 waitpid方法 多进程创建以及等待的代码模型 非阻塞的轮训检测 四、进程程序替换 1)替换原理 2)替换函数 3&…

Datatable和实体集合互转

1.使用已废弃的 JavaScriptSerializer,且反序列化为弱类型 ArrayList。可用但不推荐。 using System; using System.Collections; using System.Collections.Generic; using System.Data; using System.Linq; using System.Reflection; using System.Web; using Sy…

阿里云服务器ECS详解:云服务器是什么,云服务器优势和应用场景及参考

云服务器ECS是阿里云众多云产品中,最受用户关注的产品,阿里云服务器提供多样化的计算能力,支持x86、Arm架构,涵盖CPU、GPU等多种服务器类型,满足各种用户需求。其便捷易用特性包括分钟级交付、通用API和性能监控框架&a…

【Oracle】游标

个人主页:Guiat 归属专栏:Oracle 文章目录 1. 游标基础概述1.1 游标的概念与作用1.2 游标的生命周期1.3 游标的分类 2. 显式游标2.1 显式游标的基本语法2.1.1 声明游标2.1.2 带参数的游标 2.2 游标的基本操作2.2.1 完整的游标操作示例 2.3 游标属性2.3.1…

pikachu靶场通关笔记11 XSS关卡07-XSS之关键字过滤绕过(三种方法渗透)

目录 一、源码分析 1、进入靶场 2、代码审计 3、攻击思路 二、渗透实战 1、探测过滤信息 2、注入Payload1 3、注入Payload2 4、注入Payload3 本系列为通过《pikachu靶场通关笔记》的XSS关卡(共10关)渗透集合,通过对XSS关卡源码的代码审计找到安…

XML 元素:基础、应用与优化

XML 元素:基础、应用与优化 引言 XML(可扩展标记语言)作为一种数据交换的标准格式,广泛应用于互联网数据交换、数据存储等领域。XML 元素是 XML 文档的核心组成部分,本文将深入探讨 XML 元素的概念、特性、应用以及优化方法。 一、XML 元素概述 1.1 XML 元素的定义 X…

【Axure高保真原型】交通事故大屏可视化分析案例

今天和大家分享交通事故大屏可视化分析案例的原型模板,包括饼图分类分析、动态显示发生数、柱状图趋势分析、中部地图展示最新事故发现地点和其他信息、右侧列表记录发生事故的信息…… 通过多种可视化图表展示分析结果,具体效果可以点击下方视频观看或…

HCIP(BGP基础)

一、BGP 基础概念 1. 网络分类与协议定位 IGP(内部网关协议):用于自治系统(AS)内部路由,如 RIP、OSPF、EIGRP,关注选路效率、收敛速度和资源占用。EGP(外部网关协议)&a…

【HarmonyOS 5】 ArkUI-X开发中的常见问题及解决方案

一、跨平台编译与适配问题 1. 平台特定API不兼容 ‌问题现象‌:使用Router模块的replaceUrl或startAbility等鸿蒙专属API时,编译跨平台工程报错cant support crossplatform application。 ‌解决方案‌: 改用ohos.router的跨平台封装API&a…

Matlab2018a---安装教程

目录 壹 | 引 言 贰 | 安装环境 叁 | 安 装 肆 | 结 语 壹 | 引 言 大家好,我是子正。 最近想学习一下DSP数字信号处理有关的知识,要用到Matlab进行数据处理,于是又重新把Matlab捡了回来; 记得上学那会儿用的还是Matlab2012a&#xff…

分布式流处理与消息传递——Kafka ISR(In-Sync Replicas)算法深度解析

Java Kafka ISR(In-Sync Replicas)算法深度解析 一、ISR核心原理 #mermaid-svg-OQtnaUGNQ9PMgbW0 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-OQtnaUGNQ9PMgbW0 .error-icon{fill:#55222…

ARM GIC V3概述

中断类型 locality- specific peripheral interrupt(LPI):LPI是一个有针对性的外设中断,通过affinity路由到特定的PE。 为非安全group1中断边沿触发可以通过its进行路由没有active状态,所以不需要明确的停用操作LPI总…

蓝桥杯国赛训练 day1

目录 k倍区间 舞狮 交换瓶子 k倍区间 取模后算组合数就行 import java.util.HashMap; import java.util.Map; import java.util.Scanner;public class Main {static Scanner sc new Scanner(System.in);public static void main(String[] args) {solve();}public static vo…

安装和配置 Nginx 和 Mysql —— 一步一步配置 Ubuntu Server 的 NodeJS 服务器详细实录6

前言 昨天更新了四篇博客,我们顺利的 安装了 ubuntu server 服务器,并且配置好了 ssh 免密登录服务器,安装好了 服务器常用软件安装, 配置好了 zsh 和 vim 以及 通过 NVM 安装好Nodejs,还有PNPM包管理工具 。 作为服务器的运行…

鸿蒙版Taro 搭建开发环境

鸿蒙版Taro 搭建开发环境 一、配置鸿蒙环境 下载安装 DevEco 建议使用最新版本的 IDE,当前为 5.0.5Release 版本。 二、创建鸿蒙项目 打开 DevEco,点击右上角的 Create Project,在 Application 处选择 Empty Ability,点击 Ne…