Q CLI+Bedrock知识库,构建端到端智能问答系统
这一挑战尤为关键,因为网站FAQ中的问题通常按类别组织,在原始上下文中意义清晰,但一旦脱离分类结构,同样的问题可能变得模糊不清。该阶段主要解决的问题是从网页中快速、自动提取结构化信息,特别是对于常见问题解答(FAQ)页面,能够自动化提取问答对并将其转化为结构化数据,可以为知识库建设、客户支持系统和智能问答机器人提供信息资源。比如以下网页,Q&A已经使用问答形式将客户关心的问题和答案做了分类整理,但

传统企业通常将常见问题(FAQ)发布在网站上,方便客户自助查找信息。然而,随着生成式AI技术的迅速发展与商业渗透,这些企业正积极探索构建智能问答系统的新途径。这类系统不仅能显著提升客户体验,还能有效降低人工支持成本,实现客户服务的智能化转型。
本文将详细分享如何利用Amazon Q CLI和Amazon Bedrock知识库快速构建端到端的智能问答系统。本例将从网页爬取FAQ开始,到构建高效知识库,实现全流程自动化,帮助企业轻松迈入AI客户服务新时代。
智能问答系统构建
解决方案分为两个核心阶段。
1
数据采集阶段
利用Amazon Q CLI和Playwright MCP Server自动从网页爬取Q&A问答对,整理到Excel表中。
该阶段主要解决的问题是从网页中快速、自动提取结构化信息,特别是对于常见问题解答(FAQ)页面,能够自动化提取问答对并将其转化为结构化数据,可以为知识库建设、客户支持系统和智能问答机器人提供信息资源。
下文将分享如何利用Amazon Q CLI和Playwright MCP Server快速构建一个自动化工作流,实现网页爬取、内容识别和问答对提取。
2
知识库构建阶段
将结构化数据导入Amazon Bedrock知识库,构建Q&A系统。
该阶段主要解决的核心问题是:如何将结构化的Q&A对Excel文件转化为智能可查询的知识库,并确保系统能准确理解和匹配用户问题。这一挑战尤为关键,因为网站FAQ中的问题通常按类别组织,在原始上下文中意义清晰,但一旦脱离分类结构,同样的问题可能变得模糊不清。
例如,“如何修改订单”这一问题在不同业务场景下可能有完全不同的答案。需要确保智能问答系统不仅存储问答对,还能根据上下文进行问题分类,以实现精准的语义匹配和回答检索。
架构图如下:

基于Amazon Q CLI+Playwright
MCP Server的自动化数据采集
Amazon Q CLI是亚马逊云科技推出的一款命令行工具,作为Amazon Q Developer的一部分,它允许开发者直接在命令行界面与Amazon Q的人工智能能力进行交互。为了延伸Amazon Q CLI调用外部工具的能力,Amazon Q CLI从1.9.0版本开始支持MCP,借助外部MCP Server,可以极大扩充Amazon Q CLI的能力。
Playwright是一款开源浏览器自动化框架,提供了跨浏览器的自动化测试和网页交互能力。Playwright MCP Server则是基于MCP协议为大语言模型(LLM)提供了使用Playwright进行浏览器自动化的能力,具有以下核心功能。
-
网页导航与交互:允许AI模型打开网页、点击按钮、填写表单等。
-
屏幕截图和网站文字获取:捕获当前网页的截图,帮助AI分析页面内容。
-
JavaScript执行:在浏览器环境中运行JavaScript代码,实现复杂交互等。
Amazon Q CLI集成Playwright MCP Server后,在Amazon Q CLI中通过自然语言交互就能够实现网页的打开、点击,网页文字内容的读取存储和解析,无需手工操作处理。
比如以下网页,Q&A已经使用问答形式将客户关心的问题和答案做了分类整理,但如果想导入知识库,就需要把网站的内容导出到Excel文件,便于后续处理。

下文将逐步展示Amazon Q CLI集成Playwright MCP Server后的强大能力。
1
配置Amazon Q CLI集成
Playwright MCP Server
在Amazon Q CLI中集成MCP Server非常简单,在Amazon Q Developer的安装目录,通常是~/.aws/amazonq/mcp.json文件中配置Playwright MCP Server,您可参阅代码库。
配置playwright MCP Server:
https://github.com/executeautomation/mcp-playwright
{ "mcpServers": { "playwright": { "command": "npx", "args": ["-y", "@executeautomation/playwright-mcp-server"] } }}
左右滑动查看完整示意
启动Amazon Q Chat可以看到配置的Playwright MCP Server已经正常启动。

2
通过自然语言交互实现爬网
在Amazon Q Chat中输入以下提示词。
访问https://www.lalamove.com/en-sg/faq,点击[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”]。
访问https://www.lalamove.com/en-sg/faq,点击[data-section=”business”];只获取页面的文字内容而非html内容,然后将文字内容保存到”lalamove_personal_faq.txt”
这是因为网站中有多个“business”字样,如果不做特别说明,LLM通常会根据开发习惯猜测点击时使用的selector,将该参数传递给Playwright工具。当与实际情况不符时,Playwright往往难以点击到正确的链接。
通过如下方法获得准确的selector放入指令中,LLM就可以生成准确参数,实现精准点击。

3
通过自然语言交互
实现文本到Excel的转换
继续与Amazon Q CLI进行交互。

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

基于Amazon Bedrock知识库
构建知识库
该项目中主要遇到两个挑战。
挑战1:网站中的FAQ是按类别组织的,同样的问题在不同上下文回答可能完全不同。
为了解决这个问题,本例利用Amazon Bedrock知识库的元数据过滤功能,允许您根据文档的特定属性细化搜索结果,提高检索准确性和响应的相关性。
Amazon Bedrock知识库的元数据过滤功能:
https://aws.amazon.com/blogs/machine-learning/amazon-bedrock-knowledge-bases-now-supports-metadata-filtering-to-improve-retrieval-accuracy/
挑战2:客户是通过多轮会话进行提问的,每轮会话的意图(或是对应的分类)都有可能变化。
为了解决这个问题,本例采用结合历史会话和当前问题进行问题分类,结合Amazon Bedrock知识库的元数据过滤能力进行知识库的问题搜索。
1
基于元数据的Q&A问题导入
为了实现基于元数据的Q&A问题导入,对前面整理的Excel文件进行拆解,每个Q&A问题对都对应一个Excel文件和一个元数据metadata.json文件,如下所示。

每个Excel文件内容如下图所示。

对应的metadata.json文件内容如下。
{ "metadataAttributes": { "Category": "Business", "Sub-Category": "General" }}
左右滑动查看完整示意
将这些文件作为数据统一放在Amazon S3中,作为数据源导入到Amazon Bedrock知识库中。
2
基于多轮会话的意图识别
和Amazon Bedrock知识库查询
结合历史会话做意图分类的逻辑如下。

基于Amazon Bedrock知识库做信息检索的代码片段如下。
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("未使用分类过滤,将搜索所有分类") # 调用知识库检索API response = 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 []
左右滑动查看完整示意
基于Amazon Bedrock知识库的回取内容做答案生成的代码片段。
try: # 结合客户需求,当知识库中没有相关信息时直接返回,不需要LLM做总结。 ifnot 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} # 调用模型API response = 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_text except Exception as e: logger.error(f"生成答案时出错: {str(e)}") return f"处理您的问题时出错: {str(e)}"
左右滑动查看完整示意
总结
Amazon Q CLI可与MCP Server实现方便集成。本项目通过Amazon Q CLI与Playwright MCP集成,为网页内容提取和问答对识别提供了一种高效、智能的解决方案。通过简单的自然语言指令,即可快速实现从网页爬取到结构化数据生成的全流程自动化。这不仅大大提高了开发效率,也为构建智能知识库和问答系统提供了坚实基础。
同时,结合Amazon Bedrock知识库的元数据过滤功能,可以首先基于历史会话对问题进行分类,在准确的类别中再完成知识库的搜索和答案生成,进一步提升Q&A回复的准确率。
本篇作者

倪惠青
亚马逊云科技解决方案架构师,负责基于亚马逊云科技的云计算方案架构的咨询和设计,在国内推广亚马逊云科技技术和各种解决方案。

黄筱婷
亚马逊云科技客户解决方案经理,专注于为企业客户提供业务及解决方案咨询。


星标不迷路,开发更极速!
关注后记得星标「亚马逊云开发者」
听说,点完下面4个按钮
就不会碰到bug了!

点击阅读原文查看博客!获得更详细内容!
火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。
更多推荐
所有评论(0)