从文书山峰到数字自由:使用 Kiro 构建 IDP 解决方案

发布: (2026年1月6日 GMT+8 22:58)
10 min read
原文: Dev.to

I’m happy to translate the article for you, but I need the text you’d like translated. Could you please paste the content of the article (or the portion you want translated) here? I’ll keep the source link and all formatting exactly as you requested.

Source:

挑战:办公室员工被文书工作淹没

每天早晨,Mai 来到她工作的政府办公室。她的桌子已经堆满了纸质文件——公民申请、官方报告、会议纪要以及需要数字化的表格。

和成千上万的办公室职员一样,Mai 面临着令人筋疲力尽的日常工作:

  • 💢 长时间打字: 手动将每份文件转录到 Word
  • 💢 查找错误: 检查拼写和格式错误
  • 😫 加班工作: 为了完成积压的工作而留到很晚
  • 😫 感到疲惫: 每天重复同样的枯燥任务

一份 5 页的官方文件需要 30‑45 分钟 才能转录完毕。每天都有数十份文件到来,Mai 感到不堪重负。

如果有更好的办法呢?

思路

我想构建一个解决方案,让办公室员工能够:

  1. 用智能手机相机拍照
  2. 等待约 30 秒,让 AI 进行处理
  3. 下载格式完美的 Word 文档
  4. 完成! 可直接审阅和分发

但我遇到了问题:我不知道从哪里开始。

  • 如何使用 AWS Bedrock 进行 OCR?
  • 如何创建格式正确的 Word 文档?
  • 如何保留越南语文档的标题?
  • 如何构建网页界面?
  • 如何在 AWS 上部署?

就在这时,我求助于 Kiro —— 我的 AI 编码助手。

Source:

Kiro 来拯救

第一个提示

Me: "Given the AWS Bedrock Converse API and Claude Sonnet 4, build an AI solution to OCR images from a folder and convert them to Word DOCX files. Prefer Python. Search the internet for references."

Kiro 的输出(几分钟内完成):

  • 获取了 AWS Bedrock Converse API 文档
  • 调研了 python-docx
  • 创建了完整的项目结构
  • 生成了可运行的代码

第一个版本可以工作,但越南官方文件有特殊的 双栏页眉 未能正确捕获。

处理双栏页眉

我的请求:

“短语 ‘CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM’ 应放在一个两列的表格中。左列放组织信息,右列放国家标题和日期。”

Kiro 的回应:

  • 更新了 OCR 提示以检测双栏页眉
  • 修改 create_docx.py 以解析结构化标记
  • 创建了无边框表格以实现正确排版
  • 自动化测试了这些更改

结构化 OCR 提示

STRUCTURED_OCR_PROMPT = """
For Vietnamese official document headers with two columns, output as:
[HEADER_TABLE]
[LEFT]
organization line 1
organization line 2
Số: xx /TB-xxx
[/LEFT]
[RIGHT]
CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM
Độc lập - Tự do - Hạnh phúc  
Tp. xxx, ngày xx tháng xx năm xxxx
[/RIGHT]
[/HEADER_TABLE]
"""

结果: 完美的双栏页眉!

合并多页文档

我希望将名称相似的图片(例如 doc-1.pngdoc-2.png)合并为一个 Word 文件(doc.docx)。

我的请求:

“如果图片的文件名具有相同前缀但在连字符后有不同数字(如 tb-1tb-2),则将它们组合成一个 DOCX 文件(如命名为 tb),并包含多页。”

Kiro 的实现:

def get_prefix_and_page(filename: str) -> tuple:
    """
    Extract prefix and page number from filename.
    Examples:
        'invoice-1.png' -> ('invoice', 1)
        'report_2.jpg'   -> ('report', 2)
        'standalone.png' -> ('standalone', 0)
    """
    stem = Path(filename).stem
    match = re.match(r'^(.+?)[-_](\d+)$', stem)

    if match:
        return match.group(1), int(match.group(2))
    return stem, 0

结果: 自动生成多页文档!

构建用户友好的 Web 界面

CLI 可以工作,但我需要一个现代化的 Web UI。

我的请求:

“部署一个网站,接受图片上传,将它们存入 S3 桶,使用 Bedrock 处理,输出 DOCX 文件,并提供下载链接。”

Kiro 的回应(几分钟内完成):

  • 完整的 Flask Web 应用
  • 拖拽上传界面
  • 与 S3 的集成存储
  • 支持多用户的会话管理
  • 使用预签名 URL 的下载功能
  • HTML 模板

示例 Flask 路由

@app.route('/upload', methods=['POST'])
def upload_files():
    """Handle file upload and processing"""
    files = request.files.getlist('files')
    session_id = str(uuid.uuid4())[:8]

    # Upload to S3
    for file in files:
        filename = secure_filename(file.filename)
        local_path = f"/tmp/{filename}"
        file.save(local_path)

        s3_key = f"images/{session_id}/{filename}"
        s3_client.upload_file(local_path, S3_BUCKET, s3_key)

        # OCR with Bedrock
        text = ocr_image_with_bedrock(local_path)
        ocr_results[filename] = text

    # Create grouped DOCX files
    create_grouped_documents(ocr_results)

    return jsonify({"status": "processing started"})

第一个 UI 能用,但外观太普通。我想要更现代的效果。

我的请求:

“仪表盘的图标和配色看起来不可接受。搜索现代配色方案并升级 UI。”

Kiro 的改造:

  • 使用紫蓝渐变的暗色主题
  • 卡片采用玻璃拟态效果
  • 动画背景图案
  • 移动端响应式设计
  • 成功动画用于反馈

现代化设计

System (CSS)

/* Kiro's modern design system */
:root {
    --primary:   #6366f1;
    --secondary: #0ea5e9;
    --accent:    #8b5cf6;
    --gradient: linear-gradient(135deg, #6366f1 0%, #8b5cf6 50%, #0ea5e9 100%);
}

Result: 美观、专业的界面!

Final Demo

您可以按照命名规则(例如 tb-1.pngtb-2.png)上传两张图片文件,然后点击 Convert to DOCX
处理大约需要 1 分钟

Demo video: https://haianh-sing.s3.ap-southeast-1.amazonaws.com/2026-01-06+21-56-16.mp4

仅用 1 小时,借助 Kiro,我们就拥有了一个完整、可投入生产的 Intelligent Document Processing 平台,而手动构建则需要数天时间。

功能概述

功能描述
AI‑Powered OCRClaude Sonnet 4,准确率 95 %+
Mobile‑First支持任何智能手机摄像头
Vietnamese Support保持官方文档格式
Multi‑Page按文件名自动分组
Web Interface美观、响应式暗色主题设计
Cloud‑NativeAWS S3、Bedrock、EC2 Graviton(ARM64)
Secure使用最小权限的 IAM 角色
Cost‑Effective约 $0.003 每页
Production‑Ready已部署至 AWS 并进行监控

AWS 账户设置

  • AWS 账户,在 us‑west‑2(或任何支持 Bedrock 的地区)拥有 Bedrock 访问权限
  • 所需 IAM 权限:bedrock:*s3:*(限制在你的存储桶),ec2:*(用于实例),以及用于监控的 CloudWatch

在 Bedrock 控制台启用 Claude Sonnet 4 模型

前置条件

  • IAM 用户,具备管理员访问权限(用于初始设置)
  • 本地开发环境
    • Python 3.9 或更高版本
    • AWS CLI(已通过 aws configure 配置)
    • Git

第 1 步 – 创建 IAM 角色

# Create role with trust policy
aws iam create-role \
    --role-name Image2Docx-EC2-Role \
    --assume-role-policy-document file://iam-trust-policy.json

# Attach permissions policy
aws iam put-role-policy \
    --role-name Image2Docx-EC2-Role \
    --policy-name Image2Docx-Policy \
    --policy-document file://iam-policy.json

# Create instance profile
aws iam create-instance-profile \
    --instance-profile-name Image2Docx-EC2-Profile

# Add role to profile
aws iam add-role-to-instance-profile \
    --instance-profile-name Image2Docx-EC2-Profile \
    --role-name Image2Docx-EC2-Role

第 2 步 – 启动 EC2 实例

# Launch Graviton (ARM64) instance – cost‑efficient
aws ec2 run-instances \
    --image-id ami-xxxxxxxxx \   # Amazon Linux 2023 ARM64
    --instance-type t4g.micro \
    --key-name your-key-pair \
    --security-group-ids sg-xxxxxxxxx \
    --iam-instance-profile Name=Image2Docx-EC2-Profile \
    --tag-specifications 'ResourceType=instance,Tags=[{Key=Name,Value=Image2Docx-Server}]'

第 3 步 – 配置安全组

# Allow inbound HTTP on port 8080
aws ec2 authorize-security-group-ingress \
    --group-id sg-xxxxxxxxx \
    --protocol tcp \
    --port 8080 \
    --cidr 0.0.0.0/0

# Allow SSH for administration (replace with your IP)
aws ec2 authorize-security-group-ingress \
    --group-id sg-xxxxxxxxx \
    --protocol tcp \
    --port 22 \
    --cidr /32

第 4 步 – 部署应用程序

# SSH into the instance
ssh -i "your-key.pem" ec2-user@<public-ip>

# Update the system
sudo yum update -y

# Install dependencies
sudo yum install -y git python3-pip

# Clone the repository
git clone https://github.com/PNg-HA/Image2Docx.git
cd Image2Docx

# Install Python packages
pip3 install -r requirements.txt

# Run the app in the background
nohup python3 app.py > app.log 2>&1 &

第 5 步 – 访问你的应用程序

在浏览器中打开并访问:

http://<public-ip>:8080

成功! 你的智能文档平台已上线。

为什么这很重要

我们从一个简单的问题开始:“我们能帮助办公室员工摆脱文书工作陷阱吗?”
答案是响亮的 YES——而这段旅程本身与结果一样令人惊叹。

这个平台是我为消除繁琐文书工作、解放办公室工作人员所作的贡献。更重要的是,它展示了任何拥有远见并借助 AI 助手的人,都能构建出变革性的解决方案。

你会用 Kiro 构建什么?

Back to Blog

相关文章

阅读更多 »