用 Amazon Bedrock 知识库构建会说话的企业知识助手

2026-08-25 42 预计阅读时间: 1 分钟
来源: aws.amazon.com AI 摘要 Original link

Disclaimer: This article is an AI-assisted summary. Read it together with the original source when precision matters. The summary may omit context, version differences, or edge cases and is not official documentation.

预计阅读时间:9 分钟

企业里最难沉淀的,往往不是正式文档,而是资深员工在排障、交接和日常协作中积累的“部落知识”。这套 AWS 加速器将语音优先的 AI 虚拟形象、智能缓存和 Amazon Bedrock Knowledge Bases 组合起来,让员工可以用自然语言提问,并获得基于内部资料的回答。它还通过 AWS CloudFormation 将部署过程压缩到数小时级别,降低了原型验证和定制落地的门槛。

从“聊天机器人”到可追溯的知识检索

系统的关键不在于让模型直接回答问题,而在于让模型先检索企业知识,再基于检索结果生成答案。这正是检索增强生成(RAG)的职责分工:

  • 知识库保存经过索引的制度、运行手册、产品说明和故障记录等内容。
  • 检索层根据用户问题找到最相关的片段。
  • 生成模型结合问题与检索上下文组织自然语言回答。
  • 语音虚拟形象承担交互入口,把键盘输入扩展为语音对话体验。

这种模式不能保证每个回答都绝对正确,但比让通用模型凭训练数据猜测企业内部流程更可控。对于审批规则、生产操作和安全规范,回答中应保留来源引用,并明确提示用户在执行高风险动作前核对正式文档。

智能缓存该缓存什么

知识问答很容易出现重复请求:新员工反复询问 VPN 配置,值班工程师持续查询相同的告警含义,培训期间同一批问题被多次提出。缓存可以降低延迟和模型调用成本,但缓存策略不能只按完整问题字符串匹配。

更实用的缓存键通常需要同时考虑:

  • 规范化后的问题,例如去掉多余空格、统一大小写。
  • 用户所属部门、角色或权限范围。
  • 当前知识库版本或索引版本。
  • 回答语言和输出格式。

尤其要注意权限边界。一个面向全员的缓存答案,不能因为问题文本相同,就泄露仅限某个团队访问的内容。知识库更新后,也应主动失效旧缓存,避免用户继续收到过期流程。

可以这样实践:先用 CLI 验证 RAG 链路

在接入语音和虚拟形象之前,建议先验证 Bedrock Knowledge Bases 的检索生成链路。下面的命令假设你已经创建了知识库,并拥有可用的 Amazon Bedrock 模型 ARN。

先设置环境变量,将值替换为实际资源:

export AWS_REGION="us-east-1"
export KB_ID="YOUR_KNOWLEDGE_BASE_ID"
export MODEL_ARN="arn:aws:bedrock:us-east-1::foundation-model/YOUR_MODEL_ID"

然后执行一次检索增强问答:

aws bedrock-agent-runtime retrieve-and-generate \
  --region "$AWS_REGION" \
  --input '{"text":"新员工如何申请公司 VPN 访问权限?请给出步骤和注意事项。"}' \
  --retrieve-and-generate-configuration "{\"type\":\"KNOWLEDGE_BASE\",\"knowledgeBaseConfiguration\":{\"knowledgeBaseId\":\"$KB_ID\",\"modelArn\":\"$MODEL_ARN\",\"retrievalConfiguration\":{\"vectorSearchConfiguration\":{\"numberOfResults\":5}}}}"

返回结果通常包含生成答案及其引用信息。验证时重点检查三件事:检索到的资料是否属于预期范围、答案是否准确引用了资料、无关问题是否会被模型编造成看似合理的结论。

如果要将这条链路放进应用服务,可以把缓存限制在低风险、重复率高的问题上。下面是一个可改造的 Python 示例,使用内存缓存演示基本策略;生产环境可替换为 Redis,并将知识库版本纳入缓存键。

import hashlib
import json
import os
import time

import boto3

client = boto3.client(
    "bedrock-agent-runtime",
    region_name=os.environ.get("AWS_REGION", "us-east-1"),
)

KB_ID = os.environ["KB_ID"]
MODEL_ARN = os.environ["MODEL_ARN"]
KB_VERSION = os.environ.get("KB_VERSION", "2025-01")
CACHE_TTL_SECONDS = 300
cache = {}


def cache_key(question: str, role: str) -> str:
    normalized = " ".join(question.lower().split())
    raw = f"{KB_VERSION}:{role}:{normalized}"
    return hashlib.sha256(raw.encode("utf-8")).hexdigest()


def ask_knowledge_base(question: str, role: str = "employee") -> dict:
    key = cache_key(question, role)
    cached = cache.get(key)
    if cached and cached["expires_at"] > time.time():
        return {"cached": True, "answer": cached["answer"]}

    response = client.retrieve_and_generate(
        input={"text": question},
        retrieveAndGenerateConfiguration={
            "type": "KNOWLEDGE_BASE",
            "knowledgeBaseConfiguration": {
                "knowledgeBaseId": KB_ID,
                "modelArn": MODEL_ARN,
                "retrievalConfiguration": {
                    "vectorSearchConfiguration": {"numberOfResults": 5}
                },
            },
        },
    )

    answer = {
        "text": response["output"]["text"],
        "citations": response.get("citations", []),
    }
    cache[key] = {"answer": answer, "expires_at": time.time() + CACHE_TTL_SECONDS}
    return {"cached": False, "answer": answer}


if __name__ == "__main__":
    result = ask_knowledge_base("如何申请公司 VPN 访问权限?")
    print(json.dumps(result, ensure_ascii=False, indent=2, default=str))

运行前安装依赖并配置 AWS 凭证:

pip install boto3
export AWS_REGION="us-east-1"
export KB_ID="YOUR_KNOWLEDGE_BASE_ID"
export MODEL_ARN="arn:aws:bedrock:us-east-1::foundation-model/YOUR_MODEL_ID"
python app.py

语音入口不是权限绕过入口

语音优先的虚拟形象能让知识系统更像一次自然对话,特别适合现场支持、培训和不方便操作键盘的场景。不过,语音识别结果应被当作不可信输入处理。

实践中需要把语音转写后的文本送入与网页端相同的认证、授权、审计和内容过滤链路。对于“执行重启”“修改配置”“导出客户数据”这类请求,知识助手可以解释流程,但不应仅凭一轮语音对话直接执行操作。将“问答”和“动作执行”拆成两个明确的权限边界,能显著降低误操作风险。

落地时先定义知识责任人

CloudFormation 可以加快基础设施部署,但不能替代知识治理。真正决定系统质量的是资料是否新鲜、是否有明确责任人,以及过期内容是否能被及时撤下。

上线前可以用下面这份清单做一次评估:

  • 为每类知识指定业务负责人和复审周期。
  • 区分公开资料、部门资料和敏感资料的检索权限。
  • 为答案保留引用,支持用户回到原始文档核验。
  • 将知识库更新与缓存失效联动。
  • 记录无答案、低质量答案和人工纠正,用于持续补充资料。
  • 在正式面向全员开放前,用真实但脱敏的问题集进行评测。

先从一个边界清晰的场景开始,例如 IT 服务台、设备维护或新人入职流程。确认检索质量、访问控制和反馈闭环都稳定后,再逐步将语音虚拟形象和更多知识域接入系统。


相关推荐