内容
# 基于Bedrock MCP Server和Kiro的上下文感知AI
构建上下文感知型开发助手,允许开发人员直接从Kiro IDE或Kiro CLI查询组织知识 — ADRs、API规范、安全指南、编码标准 — 无需离开编辑器。
使用官方的[awslabs.bedrock-kb-retrieval-mcp-server](https://awslabs.github.io/mcp/servers/bedrock-kb-retrieval-mcp-server)进行Kiro集成,以及替代LangChain的演示,展示如何通过最小的代码更改交换编排层。
## 架构
### Bedrock KB MCP 服务器

开发人员在Kiro中提出问题。Kiro通过`uvx`启动官方的[Amazon Bedrock](https://aws.amazon.com/bedrock/) 知识库MCP服务器。服务器发现标记为`mcp-multirag-kb=true`的知识库,使用Retrieve API查询它们,并返回带有引用的相关段落。在后台,[Amazon Bedrock 知识库](https://aws.amazon.com/bedrock/knowledge-bases/)将查询与Amazon Titan Text Embeddings v2嵌入,搜索[Amazon OpenSearch Serverless](https://aws.amazon.com/opensearch-service/features/serverless/)以匹配块,并返回排名结果。
### LangChain 替代方案

LangChain服务器用自定义Python实现替换官方MCP服务器。它使用LangChain的LCEL链(`AmazonKnowledgeBasesRetriever → ChatPromptTemplate → ChatBedrock Converse → StrOutputParser`)来编排检索和答案生成。主要优势是提供商的可移植性 — 在不更改向Kiro公开的MCP工具的情况下,交换矢量存储、LLM或嵌入模型。
## 项目结构
```
├── .kiro/settings/mcp.json # Kiro MCP 配置(两个服务器)
├── kiro-bedrock-kb-mcp/
│ ├── infrastructure/ # AWS CDK 堆栈(VPC、S3、OpenSearch、Bedrock KB、IAM、CloudWatch)
│ │ ├── bin/app.ts # CDK 应用入口点
│ │ └── lib/
│ │ ├── bedrock-kb-stack.ts # 核心基础设施
│ │ └── monitoring-stack.ts # CloudWatch 仪表板和警报
│ ├── langchain-alternative/ # 自定义MCP服务器 — Python(LangChain)
│ │ ├── mcp_server.py # MCP 工具与LangChain编排
│ │ ├── kb_retriever.py # LCEL链:检索器 → 提示 → LLM → 解析
│ │ ├── metrics.py # CloudWatch 指标发射器
│ │ └── run_server.sh # 包装脚本(动态解析venv路径)
│ ├── sample-knowledge-base/ # 示例团队文档(上传到S3)
│ ├── scripts/ # 自动化设置和同步脚本
│ ├── TESTING-GUIDE.md # 详细测试指南,适用于两个服务器
│ └── COMPARISON.md # 官方与LangChain服务器比较
└── README.md # 此文件
```
## 在您的AWS账户中创建的内容
| 资源 | 目的 |
|----------|---------|
| VPC + 私有子网 | OpenSearch的网络隔离 |
| OpenSearch Serverless 集合 | 文档嵌入的矢量存储 |
| S3 存储桶 | 存储知识库文档 |
| Bedrock 知识库 | 编排嵌入 + 检索 |
| IAM 角色 | 适用于所有服务的最小权限访问 |
| CloudWatch 仪表板 | 监控(延迟、错误、查询量) |
---
## 完整设置指南
### 阶段 1:安装先决条件
```bash
# Node.js 18+(需要CDK)
brew install node
# AWS CLI v2
brew install awscli
# AWS CDK
npm install -g aws-cdk
# uv/uvx(运行官方MCP服务器)
brew install uv
# jq(JSON处理器,脚本使用)
brew install jq
# Python 3.11+(需要LangChain替代方案)
brew install python@3.11
# Kiro IDE — 从 https://kiro.dev/downloads/ 下载
```
验证所有内容:
```bash
node -v # 应该为18+
aws --version # 应该为v2
cdk --version # 应该为2.x
uvx --version # 应该打印版本号
jq --version # 应该打印版本号
python3 --version # 应该为3.11+
```
### 阶段 2:克隆仓库
```bash
git clone <repo_url>
```
### 阶段 3:配置AWS凭证
在 [AWS 控制台](https://console.aws.amazon.com/iam/) 中创建具有以下托管策略的IAM用户:
- `AmazonBedrockFullAccess`
- `AmazonS3FullAccess`
- `AmazonOpenSearchServiceFullAccess`
- `CloudWatchFullAccess`
- `IAMFullAccess`
- `AWSCloudFormationFullAccess`
- `AmazonVPCFullAccess`
- `AWSLambda_FullAccess`
为CLI访问创建访问密钥,然后配置:
```bash
aws configure
# 输入:访问密钥ID、秘密访问密钥、区域:us-east-1、输出:json
# 验证
aws sts get-caller-identity
```
### 阶段 4:启用Bedrock模型访问(AWS控制台 - 一次性)
1. 进入 [Amazon Bedrock 控制台](https://console.aws.amazon.com/bedrock/) → **模型访问**
2. 请求访问:
- **Amazon Titan Text Embeddings v2** (必需 - 用于文档嵌入)
- **Anthropic Claude 3.5 Haiku** (LangChain替代方案必需)
3. 等待状态显示“访问授予”
### 阶段 5:部署基础设施
```bash
cd kiro-bedrock-kb-mcp
chmod +x scripts/setup.sh
./scripts/setup.sh
```
这大约需要10-15分钟。它将:
1. 安装CDK依赖项
2. 捆绑OpenSearch索引创建的Lambda函数
3. 在您的账户/区域中启动CDK
4. 部署VPC、OpenSearch Serverless、S3、Bedrock知识库、IAM角色、CloudWatch仪表板
5. 将示例文档上传到S3
6. 触发文档摄入(约2-3分钟)
> **注意:** 脚本可能会在“验证MCP服务器可用性”处挂起 — 按 **Ctrl+C** 跳过。该步骤仅为验证,不会影响部署。
保存输出 — 您需要部署输出中的 **知识库ID** 。
### 阶段 6:验证文档摄入
```bash
KB_ID=$(jq -r '.KiroBedrockKBStack.KnowledgeBaseId' cdk-outputs.json)
DS_ID=$(jq -r '.KiroBedrockKBStack.DataSourceId' cdk-outputs.json)
aws bedrock-agent list-ingestion-jobs \
--knowledge-base-id "$KB_ID" \
--data-source-id "$DS_ID" \
--region us-east-1 \
--query 'ingestionJobSummaries[0].status' \
--output text
```
应该返回 `COMPLETE`。如果显示 `IN_PROGRESS`,请等待一分钟后重试。
### 阶段 7:在Kiro中测试官方MCP服务器
`.kiro/settings/mcp.json` 已预配置为官方服务器 - 无需更改。
1. 在 **Kiro** 中打开项目文件夹
2. 重启Kiro(macOS上Cmd+Q,然后重新启动)以获取MCP配置
3. 在Kiro聊天中询问:
- *"我们的电路中断模式是什么?"*
- *"Orders API需要什么身份验证?"*
- *"我们的错误处理编码标准是什么?"*
官方服务器会自动连接并返回知识库的结果。
### 阶段 8:设置LangChain替代方案(可选)
LangChain服务器添加了RAG功能 — 带引用的合成答案、置信度过滤和提供商可移植性。
```bash
# 1. 创建Python venv并安装依赖项
cd kiro-bedrock-kb-mcp/langchain-alternative
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
# 2. 使包装脚本可执行
chmod +x run_server.sh
# 3. 获取您的知识库ID
cd ..
KB_ID=$(jq -r '.KiroBedrockKBStack.KnowledgeBaseId' cdk-outputs.json)
echo "您的知识库ID:$KB_ID"
```
### 阶段 9:使用您的知识库ID更新MCP配置
编辑 `.kiro/settings/mcp.json` 并在 `bedrock-kb-langchain` 部分替换占位符:
```
"KNOWLEDGE_BASE_ID": "<YOUR_KNOWLEDGE_BASE_ID>"
```
将 `<YOUR_KNOWLEDGE_BASE_ID>` 更改为您之前的知识库ID。
### 阶段 10:测试两个MCP服务器
1. 重启Kiro(Cmd+Q,重新启动)
2. 检查MCP日志以确认两个服务器均显示“成功连接”
3. 使用以下提示进行测试:
| 提示 | 测试内容 |
|--------|--------------|
| *"我们的电路中断模式是什么?"* | 官方服务器 — 原始文档检索 |
| *"列出我们知识库中的文档类型"* | LangChain — `list_knowledge_sources` |
| *"我应该如何在TypeScript服务中实现错误处理?"* | LangChain — `ask_knowledge_base` (RAG) |
| *"同时查询两个MCP服务器关于我们的部署回滚程序"* | 两个服务器并排 |
参见 [TESTING-GUIDE.md](kiro-bedrock-kb-mcp/TESTING-GUIDE.md) 以获取完整的测试指南和 [COMPARISON.md](kiro-bedrock-kb-mcp/COMPARISON.md) 以获取两个服务器的详细比较。
---
## 添加您自己的文档
1. 将markdown、text或PDF文件添加到 `kiro-bedrock-kb-mcp/sample-knowledge-base/`
2. 同步并重新摄入:
```bash
cd kiro-bedrock-kb-mcp
chmod +x scripts/sync-knowledge-base.sh
./scripts/sync-knowledge-base.sh
```
## Kiro CLI 用法
`.kiro/settings/mcp.json` 配置适用于Kiro IDE和Kiro CLI — 无需单独配置。
```bash
# 交互式会话
kiro-cli chat
# 无头查询(需要KIRO_API_KEY — Kiro Pro/Pro+/Power订阅)
export KIRO_API_KEY="your-api-key"
kiro-cli chat --no-interactive --trust-tools=read \
"我们的电路中断模式是什么?"
```
## 监控
CDK堆栈部署了一个名为 **Kiro-BedrockKB-Integration** 的CloudWatch仪表板,包含:
- 查询量和P99检索延迟
- 错误计数和空结果率
- 警报状态(延迟 > 5s,错误 > 10/5分钟)
从CDK输出 `DashboardURL` 访问它,或在 [Amazon CloudWatch 控制台](https://console.aws.amazon.com/cloudwatch/) 中查找。
## 清理
```bash
cd kiro-bedrock-kb-mcp/infrastructure
npx cdk destroy --all
```
这将删除所有AWS资源,包括VPC、OpenSearch集合、S3存储桶、知识库、IAM角色和CloudWatch仪表板。
> **重要:** OpenSearch Serverless每天的费用约为20-30美元。在使用完毕后请务必清理。
## 故障排除
| 问题 | 修复 |
|---------|-----|
| LangChain服务器的`ENOENT`错误 | 运行阶段8 — 创建`.venv`并执行`chmod +x run_server.sh` |
| `security token invalid` | 使用`aws configure`刷新AWS凭证并重启Kiro |
| `ResourceNotFoundException: model marked as Legacy` | 将`mcp.json`中的`MODEL_ID`更新为当前推理配置文件 |
| 官方服务器找不到任何知识库 | 验证知识库在Bedrock控制台中是否具有`mcp-multirag-kb=true`标签 |
| 摄入卡在`IN_PROGRESS` | 等待5分钟。如果仍然卡住,请检查Bedrock控制台中的错误 |
| 设置脚本在“验证MCP服务器”处挂起 | 按Ctrl+C — 它只是一个验证步骤 |
| `No relevant documents found` | 运行 `./scripts/sync-knowledge-base.sh` 重新摄入文档 |
## 贡献
参见 [CONTRIBUTING.md](CONTRIBUTING.md) 以获取有关报告错误、建议功能和提交拉取请求的指南。
## 许可证
MIT-0