Roo Code 2.2.16:通过 AWS Bedrock 统一接入 Amazon Titan 与 Meta Llama 模型
【免费下载链接】Roo-CodeRoo Code gives you a whole dev team of AI agents in your code editor.项目地址: https://gitcode.com/GitHub_Trending/ro/Roo-Code
本文基于 Roo Code 2.2.16 版本的官方更新说明,结合仓库源码(Bedrock Provider 实现、模型定义、配置文档与测试用例),系统解析该版本新增的 Amazon Titan 与 Meta Llama 模型支持,以及 "统一 Bedrock 调用" 背后的技术实现。读完你将掌握:2.2.16 引入哪些新模型与对应模型 ID、统一调用架构如何工作、如何在 Roo Code 中完成 Bedrock 认证与模型配置,以及各模型的能力参数(上下文窗口、最大输出 token、价格)如何查阅与验证。
一、版本背景与变更概览
2.2.16 更新说明 是一份精炼的发布记录,核心变更只有一句话:通过 AWS Bedrock 新增对 Amazon Titan 与 Meta Llama 模型(3、3.1、3.2)的支持,并统一了 Bedrock 调用(由社区贡献者 Premshay 的 PR 引入)。
仓库根目录的 CHANGELOG.md 给出了更完整的表述:
Incorporate Premshay's PR to add support for Amazon Nova and Meta Llama Models via Bedrock (3, 3.1, 3.2) and unified Bedrock calls using BedrockClient and Bedrock Runtime API
这透露出 2.2.16 的两个关键动作:
- 模型扩容:将 Roo Code 的模型选择范围从 Claude 系扩展到了 Bedrock 生态内的 Titan 与 Llama 系列;
- 架构统一:底层统一改用 AWS 官方 SDK 的
BedrockRuntimeClient与 Bedrock Runtime API(Converse API),使得所有模型的请求走同一条代码路径,而非为每个模型家族维护独立调用逻辑。
二、新增模型详解:Amazon Titan 与 Meta Llama
2.1 模型 ID 与能力参数
在仓库的模型注册表中(packages/types/src/providers/bedrock.ts),bedrockModels对象集中定义了所有 Bedrock 模型的能力元数据。2.2.16 引入的 Titan 与 Llama 模型当前在仓库中对应的条目如下:
Amazon Titan 文本模型
| 模型 ID | maxTokens | contextWindow | 图像输入 | 输入价($/1M tokens) | 输出价($/1M tokens) |
|---|---|---|---|---|---|
amazon.titan-text-lite-v1:0 | 4096 | 8000 | 不支持 | 0.15 | 0.20 |
amazon.titan-text-express-v1:0 | 4096 | 8000 | 不支持 | 0.20 | 0.60 |
Meta Llama 3 / 3.1 / 3.2 系列
| 模型 ID | maxTokens | contextWindow | 图像输入 | 输入价($/1M tokens) | 输出价($/1M tokens) |
|---|---|---|---|---|---|
meta.llama3-8b-instruct-v1:0 | 2048 | 4000 | 不支持 | 0.30 | 0.60 |
meta.llama3-70b-instruct-v1:0 | 2048 | 8000 | 不支持 | 2.65 | 3.50 |
meta.llama3-1-8b-instruct-v1:0 | 8192 | 8000 | 不支持 | 0.22 | 0.22 |
meta.llama3-1-70b-instruct-v1:0 | 8192 | 128000 | 不支持 | 0.72 | 0.72 |
meta.llama3-1-70b-instruct-latency-optimized-v1:0 | 8192 | 128000 | 不支持 | 0.90 | 0.90 |
meta.llama3-1-405b-instruct-v1:0 | 8192 | 128000 | 不支持 | 2.40 | 2.40 |
meta.llama3-2-1b-instruct-v1:0 | 8192 | 128000 | 不支持 | 0.10 | 0.10 |
meta.llama3-2-3b-instruct-v1:0 | 8192 | 128000 | 不支持 | 0.15 | 0.15 |
meta.llama3-2-11b-instruct-v1:0 | 8192 | 128000 | 支持 | 0.16 | 0.16 |
meta.llama3-2-90b-instruct-v1:0 | 8192 | 128000 | 支持 | 0.72 | 0.72 |
meta.llama3-3-70b-instruct-v1:0 | 8192 | 128000 | 不支持 | 0.72 | 0.72 |
(以上参数直接取自 packages/types/src/providers/bedrock.ts 的bedrockModels定义;价格按每百万 token 计,与 AWS US-West-2 标价口径一致。)
几个值得注意的要点:
- 配置时使用模型 ID 而非模型名称,例如必须写
meta.llama3-1-70b-instruct-v1:0而不是 "Llama 3.1 70B"; - Llama 3.2 的 11B 与 90B 版本是这一系列中支持图像输入的成员(
supportsImages: true); - Titan 与 Llama 均不支持 prompt cache(
supportsPromptCache: false),而 Claude 系列大多支持,这意味着这些模型在长会话中的缓存优化能力有限; - 8B/70B 的 Llama 3 老版本上下文窗口较短(4K/8K),而 3.1/3.2 系列普遍提升到 128K。
2.2 从 "支持" 到 "可选" 的落地路径
"支持某模型" 在 Roo Code 中并非一个开关,而是一组配套数据:
bedrockModels中的能力元数据(上下文窗口、maxTokens、价格、缓存能力)用于请求构造与成本统计;BedrockModelId类型(keyof typeof bedrockModels)用于类型系统约束,保证传入的模型 ID 一定在注册表内;- 若用户填入一个不在注册表中的自定义模型 ID(如通过 ARN 指定的自定义模型),代码会走 bedrock.ts 中的
guessModelInfoFromId做启发式推断,或回退到BEDROCK_MAX_TOKENS(4096)与BEDROCK_DEFAULT_CONTEXT(128000)作为兜底参数。
三、技术内幕:Bedrock 调用为何要 "统一"
3.1 统一到 Converse API
2.2.16 之前,Roo Code 对不同模型家族可能需要拼接不同的请求体(例如 Titan 走InvokeModel的 JSON 格式、Claude 走 Anthropic 兼容格式)。统一之后,src/api/providers/bedrock.ts 中的AwsBedrockHandler一律使用:
import { BedrockRuntimeClient, ConverseStreamCommand, ConverseCommand, } from "@aws-sdk/client-bedrock-runtime"- 流式对话走
ConverseStreamCommand(createMessage主路径); - 一次性提示补全走
ConverseCommand(completePrompt,用于标题生成等场景)。
Converse API 是 AWS 为多模型统一交互设计的抽象层:开发者只需按统一的messages、system、inferenceConfig、toolConfig结构发请求,Bedrock 负责将请求翻译成各模型的方言。这让"新增模型"从"写一套新适配器"降级为"注册一条元数据"。
3.2 消息格式转换链路
既然 Converse 要求统一的消息结构,而 Roo Code 内部统一使用 Anthropic 消息格式,就需要一层转换。该转换被抽成了独立的纯函数模块 src/api/transform/bedrock-converse-format.ts:
convertToBedrockConverseMessages将 Anthropic 的MessageParam[]逐条映射为 Converse 的Message[];- 角色映射:
assistant → assistant,其余一律user; - 内容块映射:
text块直接对应{ text },图片/视频/tool_use/tool_result 各有对应结构(图片走 base64 source,视频走 s3Location); - 字符串形式的
content(纯文本消息)会被包装为单元素ContentBlock[]。
AwsBedrockHandler在调用该转换后,还会根据是否启用 prompt cache,通过MultiPointStrategy(见 src/api/transform/cache-strategy/multi-point-strategy.ts)计算缓存点插入位置,并在消息尾部追加cachePoint块。这是 Claude 模型缓存优化的核心环节,而 Titan/Llama 因supportsPromptCache: false不会命中该路径。
3.3 流式事件的多结构兼容处理
统一调用后还有一个细节:不同 AWS SDK 版本返回的流事件结构存在差异。AwsBedrockHandler为此做了兼容性设计,同时识别三种结构:
contentBlockStart.contentBlock.reasoningContent(官方推理结构)contentBlock.content_block.type === "thinking"(部分 SDK 版本的替代结构)delta.reasoningContent.text/delta.thinking(增量流中的推理文本)
统一转译为 Roo Code 内部流类型(text、reasoning、tool_call_partial、usage),再交给上层消费。
四、在 Roo Code 中配置 Bedrock(含新模型)
官方配置文档位于 apps/docs/docs/providers/bedrock.md,结合 2.2.16 的模型扩容,完整配置路径如下。
4.1 前置条件
- 有效的 AWS 账户,且已申请开通 Bedrock 服务;
- 在 Bedrock 控制台中申请目标模型的访问权限(如 Titan、Llama 系列各自需要单独开启);
- 安装 AWS CLI 并完成本地认证初始化:
aws configure4.2 获取凭证(二选一)
- Access Key(推荐用于开发)
- 创建具备
bedrock:InvokeModel权限的 IAM 用户; - 生成该用户的 Access Key ID 与 Secret Access Key;
- 若 IAM 策略要求临时凭证,可额外提供 Session Token。
- 创建具备
- AWS Profile
- 通过
aws configure或手工编辑 AWS credentials 文件配置命名 profile(如default)。
- 通过
4.3 界面配置步骤
- 打开 Roo Code 面板,点击齿轮图标进入Settings;
- 在API Provider下拉框中选择Bedrock;
- 选择认证方式并填写对应字段(Access Key / Secret Key / Session Token,或 Profile 名称);
- 选择 AWS 区域(如
us-east-1); - 可选:勾选Use cross-region inference启用跨区域推理;
- 可选(企业场景):勾选Use VPC Endpoint并填写 VPC Endpoint URL,将所有 LLM 请求限定在企业内网;
- 在Model下拉框中选择目标模型——2.2.16 起可在此处直接选择 Titan 与 Llama 系列。
4.4 底层如何匹配你的配置
从源码看,AwsBedrockHandler的构造函数(src/api/providers/bedrock.ts)按以下优先级组装 AWS 客户端凭据:
- API Key 方式:
awsUseApiKey && awsApiKey时,使用clientConfig.token = { token },并强制authSchemePreference = ["httpBearerAuth"](注释说明这是兼容 LiteLLM 透传所必需的),同时设置requestTimeout: 0; - Profile 方式:
awsUseProfile && awsProfile时,通过fromIni({ profile, ignoreCache: true })读取本地 AWS 配置; - 直连密钥:
awsAccessKey && awsSecretKey时直接构造 credentials,若存在awsSessionToken一并带上。
此外还支持通过awsCustomArn直接指定模型的 ARN(如推理配置arn:aws:bedrock:us-west-2:123456789012:inference-profile/...或自定义模型arn:...:provisioned-model/...),并支持自定义awsBedrockEndpoint(配合 VPC Endpoint 使用)。
五、ARN 解析与多分区兼容
当使用自定义 ARN 时,AwsBedrockHandler通过parseArn(src/api/providers/bedrock.ts)解析,其正则支持任意 AWS partition:
const arnRegex = /^arn:[^:]+:(?:bedrock|sagemaker):([^:]+):([^:]*):(?:([^\/]+)\/([\w\.\-:]+)|([^\/]+))$/可解析的资源类型包括:
- 基础模型:
arn:aws:bedrock:us-west-2::foundation-model/anthropic.claude-v2 - 推理配置(Inference Profile):
arn:aws:bedrock:us-west-2:123456789012:inference-profile/anthropic.claude-v2 - 跨区域推理配置:
arn:aws:bedrock:us-west-2:123456789012:inference-profile/us.anthropic.claude-3-5-sonnet-20241022-v2:0 - 预置吞吐(Provisioned Throughput):
arn:...:provisioned-model/my-custom-model - 导入模型(Imported Model):
arn:...:imported-model/my-imported-model
解析出的 region 若与用户所选区域不一致,会以 ARN 中的区域为准并记录日志;无效 ARN 会抛出带INVALID_ARN_FORMAT:前缀的错误,便于上层统一捕获。
同时,跨区域推理前缀会通过 packages/types/src/providers/bedrock.ts 的AWS_INFERENCE_PROFILE_MAPPING被剥离(us.、eu.、jp.、apac.、au.等),得到"基础模型 ID"用于后续的能力与特性判断。
六、测试验证:新增能力的质量保障
仓库针对 Bedrock 提供者的测试覆盖了本次变更涉及的多个维度:
- src/api/providers/tests/bedrock.spec.ts 验证了:
parseArn对基础模型、跨区域推理配置、区域不匹配等场景的解析结果;- 无效 ARN 抛出
INVALID_ARN_FORMAT错误; parseBaseModelId("amazon.titan-text-express-v1")原样保留 Titan 模型 ID;- service tier、1M context 等高级特性在请求 payload 中的字段位置(如
us.前缀拼接)。
- src/api/providers/tests/bedrock-inference-profiles.spec.ts 专门覆盖推理配置的解析与匹配。
从这些测试可以确认:统一后的 Bedrock 调用路径对 Titan、Llama 与 Claude 走的是同一套 Converse 逻辑,模型差异全部收敛在注册表元数据与 ARN 解析之中。
七、使用建议与注意事项
- 按需启用模型访问:Bedrock 的模型访问是按模型逐一授权的,选择 Llama 前请确认已在控制台开启对应模型;
- 关注成本口径:Titan/Llama 系列不支持 prompt cache,长上下文会话的 token 全部按输入价计费;Titan Text 的 8K 上下文与 Llama 3(非 3.1/3.2)的 4K/8K 上下文对长文档任务限制明显,建议优先选择 128K 的 3.1/3.2 系列;
- 推理预算仅限 Claude:扩展思考(reasoning budget)特性只对
supportsReasoningBudget: true的 Claude 模型生效(apps/docs/docs/providers/bedrock.md 中的说明),Titan/Llama 不适用; - IAM 权限最小化:至少需要
bedrock:InvokeModel;使用 VPC Endpoint 时确保 Endpoint 策略放行目标模型的调用。
八、小结
Roo Code 2.2.16 以一次 PR 完成了两件事:把 Amazon Titan 与 Meta Llama 3/3.1/3.2 纳入 Bedrock 提供者的模型清单,并将底层调用统一到 AWSBedrockRuntimeClient+ Converse API。前者让模型选择面从 Claude 一家扩展到整个 Bedrock 生态,后者则通过"统一请求结构 + 注册表元数据驱动"的架构,把未来新增模型的成本降到了最低。如果你想在编码助手中引入 Bedrock 上的多厂商模型,2.2.16 的设计就是可参照的范本:模型能力集中定义、消息转换独立成模块、流式事件做多版本兼容,最终由一套测试兜底。
【免费下载链接】Roo-CodeRoo Code gives you a whole dev team of AI agents in your code editor.项目地址: https://gitcode.com/GitHub_Trending/ro/Roo-Code
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考