@crvouga/mockingbird-service-bedrock

中文文档
3.11.0发布于 2026/11/11MITTypeScriptES Module构建来源已验证近 30 天下载 1.7万

AWS Bedrock Runtime(Converse, ConverseStream, InvokeModel incl.)的状态可脚本仿真器. 土卫一嵌入,Nova Sonic双向流过h2c)和Agent Core Invoke Harness,精确地设定出事件流.

中文使用文档
文档目录11 节
  1. 安装
  2. 使用量
  3. 议定书
  4. 路线
  5. 脚本( S) PUT /__admin/scripts (中文(简体) )
  6. 错误
  7. 管理员(超过标准合同)
  8. 最佳猜测,不是甲骨文验证
  9. 命名空间
  10. 故意不模拟
  11. API 密码

@crvouga/mockingbird-service-bedrock (英语)

本地模拟器。 真正的API合同. 部分 嘲笑鸟。 。 。 .

状态、可脚本仿真器 亚马逊 Bedrock 运行时间 测试套房: Converse, (中文(简体) ), ConverseStream (字节精确) application/vnd.amazon.eventstream 框架, , , InvokeModel (Anthropic Messages bodies and Titan text interestings), (Athropic Messages bodies and Titan text princepting s. ), (原始内容存档于2018年1月1日). 克克林特·克林特(英语:C, InvokeModelWithBidirectionalStream (诺瓦·索尼克战胜了HTTP/2 二重奏)和特工科雷 InvokeHarness 事件流.

模拟器从不生成语言. 它会重播 脚本:一个测试说"当聊天模式 看见了 头晕 与 report_rx_symptom 可用, 发送此选项 toolUse; 工具结果之后 回来,说这个。" 聊天转弯、批准卡、护栏板块、结构化产出和 节流阀变得具有决定力,并取出毫秒.

安装

npm install -D @crvouga/mockingbird-service-bedrock

仅限无害环境管理。 节点 22或 Bun 1.2. 无土生属地. 给它服务 npx mockingbird-bedrock serve (h2c + 一个端口的HTTP/1.1), createServer 从 ./server, (中文(简体) ), 或者说 createRuntime 与任何获取服务器(仅HTTP/1.1——见下文).

使用量

对准应用程序 没有代码更改:每个客户端都会遵守端点变量.

npx mockingbird-bedrock serve --port 8796
export AWS_ENDPOINT_URL_BEDROCK_RUNTIME=http://127.0.0.1:8796    # SDK v3, AI SDK, botocore
export AWS_ENDPOINT_URL_BEDROCK_AGENTCORE=http://127.0.0.1:8796  # AgentCore InvokeHarness
import { BedrockRuntimeClient, ConverseCommand } from "@aws-sdk/client-bedrock-runtime"
import { createServer } from "@crvouga/mockingbird-service-bedrock/server"

// Test setup: start the emulator and script the model's turns.
const emulator = await createServer()
await fetch(`${emulator.url}/__admin/scripts`, {
  method: "PUT",
  headers: { "content-type": "application/json" },
  body: JSON.stringify({
    scripts: [
      {
        id: "rx-symptom-approval",
        match: { modelId: "*sonnet*", lastUserText: { contains: "dizzy" }, toolsInclude: ["report_rx_symptom"] },
        turns: [
          {
            toolUse: { name: "report_rx_symptom", input: { symptoms: [{ symptomDefinitionId: 7, severity: 3 }] } },
            stopReason: "tool_use",
          },
          {
            expectToolResult: { name: "report_rx_symptom" },
            text: "I've flagged that for your care team.",
            chunkSize: 12,
            usage: { inputTokens: 1200, outputTokens: 40, cacheReadInputTokens: 900 },
          },
        ],
      },
    ],
  }),
})

// The AWS SDK client your application uses; only the endpoint changes.
const bedrock = new BedrockRuntimeClient({
  endpoint: emulator.url,
  region: "us-east-1",
  credentials: { accessKeyId: "fixture", secretAccessKey: "fixture" },
})

// Application code: the chat turn now asks for the tool, which the app shows as an approval card.
const turn = await bedrock.send(
  new ConverseCommand({
    modelId: "global.anthropic.claude-sonnet-4-6",
    messages: [{ role: "user", content: [{ text: "I feel dizzy" }] }],
    toolConfig: {
      tools: [{ toolSpec: { name: "report_rx_symptom", inputSchema: { json: { type: "object" } } } }],
    },
  }),
)
// turn.stopReason === "tool_use"
// turn.output?.message?.content?.[0]?.toolUse?.name === "report_rx_symptom"
// Sending the tool result back resumes the turn: "I've flagged that for your care team."

await emulator.close() // after the test

议定书

Bedrock 运行时默认的 AWS SDK v3 客户端 NodeHttp2Handler: 反对 http:// 他们说话的终点 (单位:千美元) (有事先知识的文本HTTP/2),和Nova Sonic 需要 HTTP/2 二进制 。 AI SDK和Agent Core使用HTTP/1.1. mockingbird-bedrock serve 财务报告和审定财务报表 createServer 嗅出每个连接的第一个字节,并服务在一个端口上. ()serve --config 从另一个服务的CLI,和 createRuntime 在普通获取服务器后, 说 HTTP/1.1只——对AI SDK罚款,对SDK v3 Bedrock客户端不罚款. )

路线

路线行为
POST /model/{modelId}/converse电话JSON: output.message.content[] (单位:千美元)text, (中文(简体) ), toolUse, (中文(简体) ), reasoningContent, (中文(简体) ), stopReason, (中文(简体) ), usage (与 cacheRead/WriteInputTokens 当 a cachePoint 现为正本), metrics, (中文(简体) ), trace.guardrail (与 guardrailConfig.trace: "enabled", (中文(简体) ), x-amzn-RequestId。 。 。 .
POST /model/{modelId}/converse-stream与事件框架相同的答案 : messageStart, (中文(简体) ), contentBlockStart (工具的使用), contentBlockDelta (单位:千美元)text, (中文(简体) ), toolUse.input 部分的JSON,(JSON), reasoningContent, (中文(简体) ), contentBlockStop, (中文(简体) ), messageStop, (中文(简体) ), metadata; 例外框中游.
POST /model/{modelId}/invokeamazon.titan-embed-text-*数字 : {embedding, inputTextTokenCount} - SHA-256的确定单位矢量(inputText(默认为1024-d; dimensions 第256/512/1024号决议,或 embeddingMode: "lexical" (见设置). 克洛德模型:一个Anthropic Messages body in,一个Messages响应出.
POST /model/{modelId}/invoke-with-bidirectional-stream诺瓦·索尼克(Nova Sonic)*sonic*), HTTP/2 二进制:读取 chunk 当事件到达时( SigV4 信封未被包装), 回答每个用户的转动 textOutput + 24 kHz PCM 语气 audioOutput + 键 toolUse,则 usageEvent· ; completionEnd 之后 sessionEnd。 。 。 .
POST /harnesses/invoke?harnessArn=代理Core牵引流 : messageStart, (中文(简体) ), contentBlockDelta (单位:千美元)text 或者说 toolResult[], (中文(简体) ), contentBlockStop, (中文(简体) ), messageStop, (中文(简体) ), metadata· ; validationException 编号 : internalServerException 编号 : runtimeClientError 边框.

modelId 是任何型号 id, 推想- profile id (global. 编号 : us.)或URL编码为ARN. 西格维4是 未经核实而接受。 请求检查贝德洛克制造和我们的代码分支 执行:角色交替,第一个/最后一个消息是用户(助手) 预补 被拒绝 用于Claude 4.5+),工具使用/工具结果配对, toolConfig 需要有工具块,a 文档需要一个兄弟姐妹的文本块, temperature + 键 top_p claude 4.5+上,加上 在"最佳猜想"下列出的最佳猜想检查,而非甲骨文验证. 错误是 x-amzn-ErrorType: <Name>:http://internal.amazon.com/coral/com.amazon.bedrock/ + 键 {"message"}。 。 。 . 产出超过 maxTokens (%% 4个字符/ token) 切入 stopReason: "max_tokens"。 。 。 .

脚本( S)PUT /__admin/scripts(中文(简体) )

脚本是 {id, match?, turns, times?}。第一个脚本(按插入顺序) match 接受电话 财务报告和审定财务报表 在谈话中,有这个转折的答案; times 盖子 有多少人称它为答案.

  • 匹配密钥 : modelId (英语:glob), operation (单位:千美元)Converse, (中文(简体) ), ConverseStream, (中文(简体) ), InvokeModel, (中文(简体) ), InvokeModelWithBidirectionalStream, (中文(简体) ), InvokeHarness, (中文(简体) ), lastUserText (字符串=包含,或 {contains, regex, flags}, (中文(简体) ), systemHash (系统文本块的SHA-256六分块与 \n, (中文(简体) ), systemText (同一系统合并文本, cachePoint 已跳过; 字符串 = 不敏感大小写包含,或 {contains, regex, flags}; 一个没有系统的电话 永远不要 匹配;用于 InvokeModel 克劳德 system 字符串或文本块,从未存储), jsonSchemaName (单位:千美元)outputConfig.textFormat.structure.jsonSchema.name; 字符串= 案件不敏感平等,或 {contains, regex, flags}; 无名称的呼叫 outputConfig 计谋永远不匹配, toolsInclude, (中文(简体) ), toolChoice (单位:千美元)auto 编号 : any / 一个工具名称, hasDocument, (中文(简体) ), hasImage, (中文(简体) ), callIndex (以0为基础的命名空间中调用索引). match 是关闭的集合:未知 或拼错的密钥 (lastUserTxt)或一个错误的标准使 PUT编号 :POST /__admin/scripts 答 400 (中文(简体) )scripts[0].match.lastUserTxt: unknown match field (one of ...)改为 默地匹配每通呼叫;文本匹配中的未知密钥也是如此.
  • 转动选择 读取对话,而不是服务器状态: 转 无 接电话 接下来 无 助理留言,因为成员上次说了些什么。 所以,转0是 第一次调用用户回合,第1回合是工具结果后恢复调用,每个新调用 谈话重新开始. expectToolResult: {name} 只在最后一个时进行回转 用户信息带有该工具的结果。 Nova Sonic在会话中计算答案.
  • 转一圈 系指: text (流入 chunkSize- 典型的三角洲, delayMsPerChunk 模范者, reasoning, (中文(简体) ), toolUse (单位:千美元){name, input, toolUseId?} 或名单, json (结构化产出,以所要求的形式提供——见下文), guardrail (单位:千美元)true 或者说 {text, trace}数字 : guardrail_intervened 与贝德罗克的拒绝文本和追踪, toolResult (痛苦), userTranscript (诺瓦索尼克), stopReason, (中文(简体) ), usage, (中文(简体) ), fault。 。 。 .
  • 结构化产出 (单位:千美元)json作为 JSON 的文本出炉 outputConfig.textFormat.structure.jsonSchema (Python Boto3客户端)和 additionalModelRequestFields.output_config.format (AI SDK 原生)和作为 toolUse 会 议 日 程 和 议 程 强制工具 toolChoice: {tool} 或者说 {any} (AI SDK的合成器) json 工具、见解 报告" record_chat_*) (中文(简体) ).
  • 未描述的默认,每个计算为 unscripted (单位:千美元)GET /__admin/scripts → stats: 聊天 —— "OK." (单位:千美元)PUT /__admin/settings {"defaultText"});结构输出 − 最小 对象对请求的图谋有效; 我们的意图分类器(它的系统提示请求) {"category","confidence"}页:1 {"category":"general","confidence":0.9}; 带有一个 Claude body (EMR 语录) → a 4-section SOAP JSON; Titan → sHA-256向量; Invoke Harness - 一个 eligible_for_clinician_review 预屏幕摘要; Nova Sonic → "OK." 说.

错误

转弯 fault (或预设, POST /__admin/faults {"preset": "<name>", "count"?: n},哪个 适用于调用名称空间中的每个模型和调用:

预设/ 过失效果
throttling429个 ThrottlingException 在第一个块之前
mid_stream_exception (单位:千美元)afterChunks, (中文(简体) ), exceptionType(中文(简体) )内容块,然后是 a modelStreamErrorException 帧( 频率 : internalServerException(中文(简体) )
mid_stream_throttling同样的a throttlingException 边框
validation_exception 编号 : validation400个 ValidationException
max_tokens输出切成一半, stopReason: "max_tokens"
latency (单位:千美元)latencyMs(中文(简体) )在模拟器时钟上的 2 s 后开始响应
truncated_frame溪流通过一个框架半途而废(两个解码器都抛出)
model_timeout, (中文(简体) ), service_unavailable, (中文(简体) ), access_denied, (中文(简体) ), internal_server408 / 503 / 403 / 500 配对 x-amzn-ErrorType
resource_not_found404 (韩语) ResourceNotFoundException ("没有找到指定的资源ARN. 请检查archive-date=中的日期值 (帮助) Converse Stream and InvokeModel上的 Converse, ConverseStream 和 InvokeModel 任何帧之前,请检查ARN并再试一次

时空相接 模拟时钟: 冻结它( namePOST /__admin/clock {"freeze": true}),并推进以释放出每个块,所以时间到第一的测试是准确的.

管理员(超过标准合同)

路线效果
PUT /__admin/scripts替换命名空间的脚本( N){"scripts": [...]}; 验证.
POST /__admin/scripts添加脚本( 相同的 ids 覆盖) .
GET /__admin/scripts脚本加 stats (单位:千美元)calls, (中文(简体) ), scripted, (中文(简体) ), unscripted, (中文(简体) ), byScript, (中文(简体) ), byFallback, (中文(简体) ), byOperation) (中文(简体) ).
DELETE /__admin/scripts[?id=]删除一个或全部.
GET /__admin/model-metrics只是数据.
GET/PUT /__admin/settingsdefaultText, (中文(简体) ), chunkSize (16个), delayMsPerChunk (0个), audioTurnChunks (0: Nova Sonic 语音转会结束于音频) contentEnd; n: 在n音频帧后, embeddingMode (单位:千美元)sha256 默认,或 lexical, (中文(简体) ), validatePromptCaching (单位:千美元)true 默认; false 禁用模式检查 cachePoint) (中文(简体) ).

embeddingMode: "lexical" (opt- in; #522中的测试控制请求,而非贝德洛克行为) 保持土卫一矢量的确定性和单位长度,但使其具有相似性保留: 单词(小写、重音和发音下降)增加了SHA-256选择的签名维度,所以 文本仅在下列情况下不同:平分或相距相近; 相近相近; 共享最多的文本 单词得分高,文本没有共同分数的单词接近0. 这是口袋话,不是 语言模型:同义词("晚上"/"夜晚")保持相去不远. 脚本的文字向量不是 已执行. normalize: false 在两种模式中被忽略(向量总是单位长度).

请求日记GET /__admin/requests(仅每个电话的记录) modelId, (中文(简体) ), script (或 unscripted:<default>),工具名称,旗帜(cachePoint, (中文(简体) ), guardrail, (中文(简体) ), document, (中文(简体) ), image, (中文(简体) ), structured:<form>, (中文(简体) ), stopReason 和符号计数——永远不要及时发送或发送信件.

最佳猜测,不是甲骨文验证

这些要求的检查来自AWS的文档 以及消费者对现场报道的内容 贝德洛克,不是从观察服务; 标有"我们"的准确信息文本是 模拟器选择 。 全部回复 400 ValidationException。 。 。 .

  • 结构化产出计划 (单位:千美元)outputConfig.textFormat.structure.jsonSchema.schema旋转 和交锋, 文档: schema 这不是JSON对象; oneOf (单位:千美元)Schema type 'oneOf' is not supported(三); additionalProperties 设置为除 false 在任何节点上, true 或子图 (单位:千美元)For 'object' type, 'additionalProperties: <X>' is not supported. Please set 'additionalProperties' to false; 仅限字符串 enum 结合工会 type 例如 ["string","null"] (我们); minimum, (中文(简体) ), maximum, (中文(简体) ), multipleOf, (中文(简体) ), minLength, (中文(简体) ), maxLength, (中文(简体) ), minItems 1以上,一个外部 $ref递归 $ref (我们) 省略一个 additionalProperties 财务报告和审定财务报表 anyOf 编号 : allOf 内部 $ref 编号 : $defs 通过。 只有 outputConfig 选中窗体, 不 additionalModelRequestFields.output_config 也没有 InvokeModel 尸体
  • 文件名称 (单位:千美元)document.name, (中文(简体) ), API 参考: ASCII 字母的 1到 200 个字符、 数字、 空白、 连字符、 括号和正方形 括号,不包含两个空白字符。 留言是消费者录的 从活贝德洛克.
  • cachePoint (单位:千美元)文档: (单位:千美元) cachePoint 内容块直接位于 document 块(消费者报告;我们的信息); 在交锋/交锋上 cachePoint 内 system, (中文(简体) ), messages 或者说 toolConfig.tools (克洛德·3.5·海库、3.5·索内 v2、3.7·索内、克洛德) 4,后为Opus / Sonnet / Haiku, 有线和神话; Nova Micro / Lite / Pro / 2 Lite),相配 在平原上, us. 编号 : global. 和ARN表单。 列表增长: 转换模型 检查关闭 PUT /__admin/settings {"validatePromptCaching": false}编辑 ttl 字段为 未检查.
  • 未知的型号标识 仍按正常情况回答(modelId 是任何编号。 A 类 knownModels 设置 使未知的 id 失败在 # 523 中被请求, 但未构建: 是否活的 Bedrock 答案 ResourceNotFoundException 或者说 ValidationException 因为它没有被观察到.

命名空间

x-mockingbird-namespace页:1 /__admin/ns/<name> 前缀在端点 URL上,或者通过证书: SDKs 无法添加信头, 因此绘制每个工人的访问密钥 id : PUT /__admin/credentials {"credentials": {"<AWS_ACCESS_KEY_ID>": "<namespace>"}}。 。 。 .

故意不模拟

  • 语言:输出只来自脚本或固定的默认.
  • 真实语音:Nova Sonic音频出自440 Hz PCM语气,其长度跟随文本;音频 在其中被计数,从未被转录(口语转折匹配 lastUserText: "") (中文(简体) ).
  • InvokeModelWithResponseStream (没有消费者称它) 护栏评估本身 (单位:千美元)ApplyGuardrail; 脚本决定护栏何时介入, 快速缓存算术 (cache sorders计数为0,除非脚本被写入),模型特定输出符号限制.
  • SigV4 签名未被验证;访问密钥 id 只选择一个命名空间 .

API 密码

导出仁爱说明
BedrockAPI类进程模拟器 : fetch, (中文(简体) ), reset, (中文(简体) ), scripts(), (中文(简体) ), putScripts(scripts, replace?), (中文(简体) ), removeScripts(id?), (中文(简体) ), stats()选项: sqlite, (中文(简体) ), now, (中文(简体) ), namespace, (中文(简体) ), settings, (中文(简体) ), scripts, (中文(简体) ), sleep。 。 。 .
createRuntime函数具有完整服务合同的仿真器(健康,管理员,命名空间,SigV4证书,预设,脚本). 选项 : settings, (中文(简体) ), scripts, (中文(简体) ), clock, (中文(简体) ), seed, (中文(简体) ), adminKey, (中文(简体) ), onLog, (中文(简体) ), sqlite。 。 。 .
BEDROCK_PRESETS对象每个命名的断层预设.
BEDROCK_NAMESPACE字符串服务名称, "bedrock"。 。 。 .
bedrockError函数贝德罗克错误反应( A)status, (中文(简体) ), x-amzn-ErrorType, (中文(简体) ), {message}) (中文(简体) ).
accessKeyCredential函数SigV4 访问请求的密钥 ID( 如何将证书映射到命名空间) .
clockSleep函数等待(可能冷冻)仿真时钟的睡眠.
titanEmbedding函数确定性单元矢量土卫一回答.
lexicalEmbedding, (中文(简体) ), EMBEDDING_MODES函数,数组选择式相似性保留嵌入和 embeddingMode 数值.
sampleSchema函数JSON Schema的最小实例(无标注的结构输出).
parseScript函数验证一个脚本( 什么 PUT /__admin/scripts 运行).
MODEL_OPERATIONS, (中文(简体) ), STOP_REASONS, (中文(简体) ), TURN_FAULTS数组价值 operation, (中文(简体) ), stopReason 财务报告和审定财务报表 fault 接受 .
DEFAULT_SETTINGS, (中文(简体) ), DEFAULT_CHAT_TEXT, (中文(简体) ), DEFAULT_CLASSIFIER, (中文(简体) ), DEFAULT_SOAP_NOTE, (中文(简体) ), GUARDRAIL_BLOCKED_TEXT数值诸相缺失.
encodeMessage, (中文(简体) ), decodeMessage, (中文(简体) ), FrameReader, (中文(简体) ), readFrames, (中文(简体) ), eventFrame, (中文(简体) ), exceptionFrame, (中文(简体) ), unwrapSigned, (中文(简体) ), crc32, (中文(简体) ), EventStreamError代码c事件流编码器(精确的前奏,头和CRC32),双向.
document, (中文(简体) ), operationIds, (中文(简体) ), supportedOperationIds数值销售商为OpenAPI合同及其业务代号.
createServer, (中文(简体) ), serveTarget, (中文(简体) ), DEFAULT_PORT, (中文(简体) ), listenH2c (单位:千美元)./server(中文(简体) )节点在一个端口上服务 h2c + HTTP/1.1 serve CLI 目标; 第8796端口; 任何获取处理器的双协议收听器.

部分 嘲笑鸟。 。 。 .

版本与发布记录

@crvouga/mockingbird-service-bedrock 共发布 42 个版本,首次发布于 2026/09/23;过去 12 个月发布了 42 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
3.11.0latest2026/11/11今天
3.10.92026/11/038 天前
3.10.82026/11/038 天前
3.10.72026/11/038 天前
3.10.62026/11/038 天前
3.10.52026/11/038 天前

关于 @crvouga/mockingbird-service-bedrock 的常见问题

@crvouga/mockingbird-service-bedrock 是什么?

AWS Bedrock Runtime(Converse, ConverseStream, InvokeModel incl.)的状态可脚本仿真器. 土卫一嵌入,Nova Sonic双向流过h2c)和Agent Core Invoke Harness,精确地设定出事件流.

如何安装 @crvouga/mockingbird-service-bedrock?

在项目目录运行 npm install @crvouga/mockingbird-service-bedrock,或使用 pnpm add / yarn add / bun add。它还提供命令行工具 mockingbird-bedrock,可以用 npx mockingbird-bedrock 直接运行。

@crvouga/mockingbird-service-bedrock 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@crvouga/mockingbird-service-bedrock 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@crvouga/mockingbird-service-bedrock 可以商用吗?

@crvouga/mockingbird-service-bedrock 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@crvouga/mockingbird-service-bedrock 的下载量有多少?

根据 npm 官方下载统计,@crvouga/mockingbird-service-bedrock 在 2026/10/11 – 2026/11/09 这 30 天内被下载 16,575 次,日均约 553 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@crvouga/mockingbird-service-bedrock 还在维护吗?

最新版本 3.11.0 发布于 2026/11/11(今天);至今共发布 42 个版本,其中过去 12 个月发布了 42 个;首次发布于 2026/09/23。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。