飞书桥接 + AWS Bedrock Provider:Claude 模型被误报为协议不匹配

Đang mở Phù hợp với người mới
#648 2 bình luận 0 reaction 0 người được giao Xem trên GitHub

Chưa có ai nhận issue này.

Đánh giá

Độ khó
2/5
Thời gian dự kiến
1-3 giờ
Mức phù hợp với người mới
65/100
Loại issue
Lỗi
Độ rõ ràng
Đặc tả rõ ràng
Mức độ hoạt động
Ít trao đổi
Công nghệ
typescript
Lĩnh vực
backend-api-design

Hướng nghiên cứu

Đọc phần kiểm tra mô hình Claude trong src/lib/bridge/conversation-engine.ts và so sánh danh sách cho phép giao thức của phần này với CLAUDE_CODE_READY_PRESETS trong runtime-compat.ts. Kiểm tra cách cầu nối Feishu phân giải nhà cung cấp và mô hình, sau đó xác minh rằng các mô hình Claude của Bedrock và Vertex không còn kích hoạt lỗi không khớp, trong khi các giao thức không được hỗ trợ vẫn kích hoạt lỗi đó.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Mô tả

问题描述

在飞书桥接(Feishu Bridge)中,将 Provider 配置为 AWS Bedrock(protocol: 'bedrock')并使用 Claude 模型(如 global.anthropic.claude-sonnet-5)时,发送消息会报错:

Error: Provider "AWS Bedrock" uses bedrock protocol but model "global.anthropic.claude-sonnet-5" is an Anthropic model. Please configure the correct provider for this bridge channel.

即使模型 ID 是 Bedrock 上真实存在、可用的模型,该报错依然会触发,无法正常使用。

根因

src/lib/bridge/conversation-engine.ts 附近(约第 183-191 行)有一段 fail-fast 保护逻辑:

const isAnthropicModel = modelLower.includes('claude') || ['sonnet','opus','haiku'].includes(modelLower);
const isNonAnthropicProtocol = !['anthropic', 'openai-compatible', 'openrouter'].includes(resolved.protocol);
if (isAnthropicModel && isNonAnthropicProtocol) {
  throw new Error(...);
}

问题在于协议白名单 ['anthropic', 'openai-compatible', 'openrouter'] 里漏掉了 bedrock 和 vertex。而 AWS Bedrock 和 Google Vertex AI 恰恰是官方支持、专门用来托管运行 Claude/Anthropic 模型的两个云协议——这一点可以从代码库自身另一处常量得到印证(runtime-compat.ts):

const CLAUDE_CODE_READY_PRESETS = new Set(['anthropic-official', 'bedrock', 'vertex']);

这里已经明确把 bedrock、vertex 和 anthropic-official 并列,认定它们都是能正常运行 Claude Code 的正规协议。

因此,只要 provider 的 protocol 是 bedrock(或 vertex),并且模型名包含 "claude"/"sonnet"/"opus"/"haiku",这条 guard 就会必定误报,把"协议本来就是用来服务 Anthropic 模型的"错误判断为"协议和模型不匹配"。

复现步骤

  1. 在 CodePilot 中新建一个 Provider,protocol 选择 bedrock,配置好 AWS 凭证。
  2. 将该 Provider 设为某个飞书桥接频道/群的默认 Provider,模型填一个真实存在的 Claude 模型 ID(例如 global.anthropic.claude-sonnet-5)。
  3. 在飞书里给机器人发消息。
  4. 收到报错:Provider "AWS Bedrock" uses bedrock protocol but model "..." is an Anthropic model...

建议修复

将 conversation-engine.ts 中的协议白名单补全为:

const isNonAnthropicProtocol = !['anthropic', 'openai-compatible', 'openrouter', 'bedrock', 'vertex'].includes(resolved.protocol);

环境

  • CodePilot 桌面版(macOS)
  • 触发场景:飞书消息桥接(Feishu Bridge)+ AWS Bedrock Provider
Ngôn ngữ chính
TypeScript
Star
6.5k
Fork
697
Chỉ số merge pull request
Không có pull request nào được merge trong 30 ngày

Chuẩn bị môi trường

  • Không có Dockerfile hay tệp Docker Compose
  • Có mẫu pull request
  • Không có hướng dẫn đóng góp

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Issue khác của op7418/CodePilot

Tất cả issue của op7418/CodePilot

Issue tương tự

Thêm issue về TypeScript

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.