9.3 KiB
9.3 KiB
Supply-Intelligence 核心接口设计
状态说明(2026-05 收敛修订):本文件保留为旧版接口草案,已不再作为当前实现真源。 当前接口真源以 /home/long/project/立交桥/projects/supply-intelligence/tech/BASELINE_TECHLEAD_V2.md 为准。 以下旧接口定义已废止,不得继续作为实现入口:
- pricing comparison / recommendations / predictions 相关接口
- 与新 candidate 状态机不一致的旧状态枚举
- 未区分 published 与 gateway applied 的旧消费口径
版本:v1.0 | 状态:初稿
1. 内部模块间接口
1.1 ProbeService
type ProbeService interface {
// 执行单次探针
Probe(ctx context.Context, accountID string) (*ProbeResult, error)
// 批量探针(按供应商或全量)
ProbeBatch(ctx context.Context, filter ProbeFilter) (*BatchProbeResult, error)
// 获取探针结果历史
GetProbeHistory(ctx context.Context, accountID string, limit int) ([]ProbeResult, error)
// 手动触发掠针(运营干预)
TriggerManualProbe(ctx context.Context, accountID string, actorID string) (*ProbeResult, error)
}
type ProbeResult struct {
AccountID string
Status string // active suspended disabled
RiskScore int // 0-100
RiskReason string
LatencyMs int
ResponseCode int
CheckedAt time.Time
NextCheckAt time.Time
}
type ProbeFilter struct {
Platform *string
Status *string
RiskScoreMin *int
RiskScoreMax *int
}
1.2 DiscoveryService
type DiscoveryService interface {
// 执行单次全网扫描
Scan(ctx context.Context) (*ScanResult, error)
// 获取最近扫描结果
GetLastScan(ctx context.Context) (*ScanResult, error)
// 获取候选模型列表
ListCandidates(ctx context.Context, filter CandidateFilter) ([]ModelCandidate, error)
// 手动触发扫描
TriggerManualScan(ctx context.Context, actorID string) (*ScanResult, error)
// 忽略候选模型
IgnoreCandidate(ctx context.Context, candidateID string, reason string, actorID string) error
}
type ScanResult struct {
ScannedAt time.Time
Platforms []string
NewModels int
RemovedModels int
Errors []ScanError
}
type ModelCandidate struct {
ID string
Platform string
ModelID string
Status string // discovered queued testing test_passed test_failed ignored
DiscoveredAt time.Time
TestedAt *time.Time
TestResult *TestResult
}
1.3 AdmissionService
type AdmissionService interface {
// 执行准入测试
RunTest(ctx context.Context, candidateID string) (*TestResult, error)
// 获取测试结果
GetTestResult(ctx context.Context, candidateID string) (*TestResult, error)
// 手动确认上架(运营干预)
Publish(ctx context.Context, candidateID string, actorID string) error
// 强制上架(测试失败但运营确认)
ForcePublish(ctx context.Context, candidateID string, reason string, actorID string) error
}
type TestResult struct {
CandidateID string
Status string // passed failed
Dimensions []TestDimension
FailedReason *string
ExecutedAt time.Time
DurationMs int
}
type TestDimension struct {
Name string
Passed bool
Detail string
}
1.4 AccountService
type AccountService interface {
// 创建账号(手动或自动)
CreateAccount(ctx context.Context, req CreateAccountRequest) (*SupplyAccount, error)
// 获取账号信息
GetAccount(ctx context.Context, accountID string) (*SupplyAccount, error)
// 更新账号状态
UpdateStatus(ctx context.Context, accountID string, status string, reason string) error
// 轮换密钥
RotateKey(ctx context.Context, accountID string, actorID string) error
// 列表账号
ListAccounts(ctx context.Context, filter AccountFilter) ([]SupplyAccount, error)
}
type SupplyAccount struct {
ID string
Platform string
ProxyID string
Status string
RiskScore int
APIKeyHint string // 密钥前 4 后 4
CreatedAt time.Time
UpdatedAt time.Time
}
1.5 HealthBoardService
type HealthBoardService interface {
// 获取供应商健康大盘
GetBoard(ctx context.Context, scope BoardScope) (*HealthBoard, error)
// 获取模型比价报表
GetPricingComparison(ctx context.Context, modelID string) ([]PricingComparison, error)
// 获取供应链覆盖率
GetCoverage(ctx context.Context) (*CoverageReport, error)
// 获取预测分析
GetPredictions(ctx context.Context, minConfidence float64) ([]Prediction, error)
}
type HealthBoard struct {
Accounts []AccountHealth
Candidates []CandidateSummary
Coverage float64
FreshnessIndex float64
}
2. 外部系统集成接口
2.1 与 Bridge Gateway 集成
| 方法 | 路径 | 请求 | 响应 | 说明 |
|---|---|---|---|---|
| 查询账号状态 | GET /internal/supply-intelligence/accounts/{id}/health |
- | ProbeResult |
Gateway 路由决策时查询 |
| 查询模型定价 | GET /internal/supply-intelligence/pricing/{model_id} |
- | PricingInfo |
动态定价参考 |
| 获取推荐供应商 | GET /internal/supply-intelligence/recommendations |
?model={model_id}&strategy=cost |
[]Recommendation |
智能路由推荐 |
2.2 与 supply-api 集成
| 方法 | 路径 | 请求 | 响应 | 说明 |
|---|---|---|---|---|
| 读取账号列表 | GET /internal/supply/accounts |
- | []SupplyAccount |
探针器获取待检测账号 |
| 更新账号状态 | POST /internal/supply/accounts/{id}/status |
{"status":"suspended","reason":""} |
{"success":true} |
探针结果写回 |
| 读取模型列表 | GET /internal/supply/packages |
- | []SupplyPackage |
扫描比对基准 |
| 创建模型 | POST /internal/supply/packages |
SupplyPackage |
{"id":""} |
准入测试通过后上架 |
| 获取审计日志格式 | GET /internal/supply/audit/schema |
- | {"schema":{}} |
审计事件格式一致 |
3. API 接口规范
3.1 REST API 基础
- 基础路径:
/api/v1/supply-intelligence/ - 内部路径 (集成模式):
/internal/supply-intelligence/ - 内容类型:
application/json - 错误响应格式:
{
"error": {
"code": "SI_PRB_4001",
"message": "供应商账号不存在",
"details": {}
}
}
3.2 核心端点
探针管理
| 方法 | 路径 | 描述 |
|---|---|---|
| GET | /api/v1/supply-intelligence/probes |
列表探针结果 |
| POST | /api/v1/supply-intelligence/probes/{account_id} |
手动触发探针 |
| GET | /api/v1/supply-intelligence/probes/{account_id}/history |
探针历史 |
扫描与发现
| 方法 | 路径 | 描述 |
|---|---|---|
| POST | /api/v1/supply-intelligence/discovery/scan |
手动触发全网扫描 |
| GET | /api/v1/supply-intelligence/discovery/candidates |
列表候选模型 |
| GET | /api/v1/supply-intelligence/discovery/candidates/{id} |
获取候选模型详情 |
| POST | /api/v1/supply-intelligence/discovery/candidates/{id}/ignore |
忽略候选模型 |
准入测试
| 方法 | 路径 | 描述 |
|---|---|---|
| POST | /api/v1/supply-intelligence/admission/{candidate_id}/test |
手动执行准入测试 |
| GET | /api/v1/supply-intelligence/admission/{candidate_id}/result |
获取测试结果 |
| POST | /api/v1/supply-intelligence/admission/{candidate_id}/publish |
确认上架 |
| POST | /api/v1/supply-intelligence/admission/{candidate_id}/force-publish |
强制上架 |
账号管理
| 方法 | 路径 | 描述 |
|---|---|---|
| GET | /api/v1/supply-intelligence/accounts |
列表账号 |
| POST | /api/v1/supply-intelligence/accounts |
创建账号 |
| GET | /api/v1/supply-intelligence/accounts/{id} |
获取账号 |
| POST | /api/v1/supply-intelligence/accounts/{id}/rotate-key |
轮换密钥 |
| POST | /api/v1/supply-intelligence/accounts/{id}/status |
更新状态 |
健康大盘
| 方法 | 路径 | 描述 |
|---|---|---|
| GET | /api/v1/supply-intelligence/health-board |
获取健康大盘 |
| GET | /api/v1/supply-intelligence/pricing/{model_id}/comparison |
模型比价 |
| GET | /api/v1/supply-intelligence/coverage |
供应链覆盖率 |
| GET | /api/v1/supply-intelligence/predictions |
预测分析 |
3.3 错误码定义
| 错误码 | HTTP 状态 | 说明 |
|---|---|---|
SI_PRB_4001 |
404 | 供应商账号不存在 |
SI_PRB_4002 |
429 | 探针频率过高,请等待 |
SI_DIS_4001 |
404 | 候选模型不存在 |
SI_DIS_4002 |
409 | 候选模型状态不允许忽略 |
SI_ADM_4001 |
404 | 准入测试任务不存在 |
SI_ADM_4002 |
409 | 准入测试正在执行中 |
SI_ADM_4003 |
400 | 测试未通过,无法上架 |
SI_ACC_4001 |
404 | 账号不存在 |
SI_ACC_4002 |
409 | 账号状态不允许此操作 |
SI_ACC_4003 |
403 | 无权执行此操作 |
SI_BRD_4001 |
400 | 查询参数无效 |
3.4 WebSocket 接口
路径: /ws/v1/supply-intelligence/board
- 运营工作台订阅后,实时推送探针结果、候选模型变更、状态变更待办。
- 心跳间隔 30 秒。