tourze/volcano-ark-api-bundle
最新稳定版本:0.0.1
Composer 安装命令:
composer require tourze/volcano-ark-api-bundle
包简介
README 文档
README
一个用于集成 Volcano Ark(火山方舟)API 的 Symfony Bundle,提供了完整的 API 密钥管理、使用量统计和审计日志功能。
功能特性
- 🔑 API 密钥管理 - 支持多个 API 密钥的创建、激活、停用和自动轮换
- 📊 使用量统计 - 实时统计 API 调用次数、Token 使用量和成本估算
- 🔍 审计日志 - 完整的 API 调用审计追踪
- 🎯 OpenAI 兼容 - 提供兼容 OpenAI SDK 的客户端接口
- 🖥️ 管理后台 - 集成 EasyAdmin 的完整管理界面
- 🛠️ 命令行工具 - 丰富的 CLI 命令支持
- 🔄 自动同步 - 支持使用量和审计日志的自动同步
安装
composer require tourze/volcano-ark-api-bundle
配置
基础配置
# config/packages/volcano_ark_api.yaml tourze_volcano_ark_api: base_url: 'https://ark.cn-beijing.volces.com/api/v3' default_region: 'cn-beijing'
Doctrine 配置
# config/packages/doctrine.yaml doctrine: dbal: # ... 您的数据库配置 orm: # ... 您的 ORM 配置 mappings: VolcanoArkApiBundle: type: attribute is_bundle: true dir: '%kernel.project_dir%/vendor/tourze/volcano-ark-api-bundle/src/Entity' prefix: 'Tourze\VolcanoArkApiBundle\Entity' alias: VolcanoArkApi
使用方法
命令行工具
API 密钥管理
# 列出所有 API 密钥 php bin/console volcano:api-key:manage list # 创建新的 API 密钥 php bin/console volcano:api-key:manage create \ --name="生产环境密钥" \ --api-key="your-api-key" \ --secret-key="your-secret-key" \ --region="cn-beijing" # 激活 API 密钥 php bin/console volcano:api-key:manage activate --name="生产环境密钥" # 停用 API 密钥 php bin/console volcano:api-key:manage deactivate --name="生产环境密钥" # 删除 API 密钥 php bin/console volcano:api-key:manage delete --name="生产环境密钥"
数据同步
# 同步使用量数据 php bin/console volcano:usage:sync # 同步审计日志 php bin/console volcano:sync:audit-logs
服务层使用
使用 ApiKeyService
use Tourze\VolcanoArkApiBundle\Service\ApiKeyService; class MyService { public function __construct( private readonly ApiKeyService $apiKeyService, ) { } public function createApiKey(): void { $key = $this->apiKeyService->createKey( 'My API Key', 'api-key-value', 'secret-key-value', 'cn-beijing' ); $this->apiKeyService->activateKey($key); } public function getCurrentKey(): \Tourze\VolcanoArkApiBundle\Entity\ApiKey { return $this->apiKeyService->getCurrentKey(); } }
使用 UsageService
use Tourze\VolcanoArkApiBundle\Service\UsageService; class UsageController { public function __construct( private readonly UsageService $usageService, ) { } public function getUsageData(): array { $startTime = strtotime('-7 days'); $endTime = time(); return $this->usageService->getUsage( startTime: $startTime, endTime: $endTime, interval: 3600, // 1小时间隔 scenes: ['chat'], projectName: 'my-project' ); } }
使用 AuditLogService
use Tourze\VolcanoArkApiBundle\Service\AuditLogService; class AuditController { public function __construct( private readonly AuditLogService $auditLogService, ) { } public function getAuditLogs(): array { $startTime = strtotime('-7 days'); $endTime = time(); return $this->auditLogService->getAuditLogs( startTime: $startTime, endTime: $endTime, limit: 100 ); } }
OpenAI 兼容客户端
use Tourze\VolcanoArkApiBundle\Service\VolcanoArkOpenAiClient; class ChatController { public function __construct( private readonly VolcanoArkOpenAiClient $client, ) { } public function chat(string $message): array { $response = $this->client->chatCompletion([ 'model' => 'your-model-id', 'messages' => [ ['role' => 'user', 'content' => $message] ], 'temperature' => 0.7, 'max_tokens' => 1000, ]); return $response->getChoices(); } }
自定义客户端
use Tourze\VolcanoArkApiBundle\Client\VolcanoArkApiClient; use Tourze\VolcanoArkApiBundle\Request\VolcanoArkChatCompletionRequest; class CustomService { public function __construct( private readonly VolcanoArkApiClient $client, ) { } public function customRequest(): array { $request = new VolcanoArkChatCompletionRequest([ 'model' => 'your-model-id', 'messages' => [ ['role' => 'user', 'content' => 'Hello!'] ], ]); return $this->client->send($request); } }
数据模型
ApiKey
API 密钥实体,包含以下字段:
id: 主键 IDname: 密钥名称provider: 服务提供商(默认:volcano_ark)apiKey: API 密钥值(加密存储)secretKey: 密钥值(加密存储)region: 区域(默认:cn-beijing)isActive: 是否激活状态usageCount: 使用次数统计lastUsedTime: 最后使用时间description: 描述信息metadata: 扩展元数据(JSON 格式)createdAt: 创建时间updatedAt: 更新时间
ApiKeyUsage
API 密钥使用统计实体,包含以下字段:
id: 主键 IDapiKey: 关联的 API 密钥usageHour: 使用小时(按小时聚合)endpointId: 端点 IDpromptTokens: 提示 Token 数量completionTokens: 完成 Token 数量totalTokens: 总 Token 数量requestCount: 请求次数estimatedCost: 估算成本createdAt: 创建时间updatedAt: 更新时间
AuditLog
审计日志实体,包含以下字段:
id: 主键 IDapiKey: 关联的 API 密钥timestamp: 请求时间戳method: 请求方法endpoint: 请求端点requestId: 请求 IDpromptTokens: 提示 Token 数量completionTokens: 完成 Token 数量totalTokens: 总 Token 数量model: 使用的模型cost: 本次请求成本metadata: 额外元数据(JSON 格式)createdAt: 创建时间updatedAt: 更新时间
管理后台
Bundle 集成了 EasyAdmin,提供完整的管理界面:
- API 密钥管理 - 查看、创建、编辑、激活/停用 API 密钥
- 使用量统计 - 查看详细的使用量报告和图表
- 审计日志 - 浏览和搜索完整的审计记录
访问 /admin 即可进入管理后台。
事件系统
Bundle 提供了丰富的事件系统,允许您在关键节点执行自定义逻辑:
ApiKeyUsedEvent
当 API 密钥被使用时触发:
use Tourze\VolcanoArkApiBundle\Event\ApiKeyUsedEvent; use Symfony\Component\EventDispatcher\EventSubscriberInterface; class ApiKeyUsageSubscriber implements EventSubscriberInterface { public static function getSubscribedEvents(): array { return [ ApiKeyUsedEvent::class => 'onApiKeyUsed', ]; } public function onApiKeyUsed(ApiKeyUsedEvent $event): void { $apiKey = $event->getApiKey(); $request = $event->getRequest(); // 执行您的自定义逻辑 } }
UsageSyncedEvent
当使用量数据同步完成时触发。
AuditLogSyncedEvent
当审计日志同步完成时触发。
测试
# 运行测试 composer run test # 运行 PHPStan 静态分析 composer run phpstan # 运行代码格式检查 composer run cs-fix
性能优化
缓存策略
Bundle 内置了多种缓存策略来优化性能:
- API 密钥缓存 - 缓存当前激活的 API 密钥
- 使用量缓存 - 缓存频繁查询的使用量数据
- 模型列表缓存 - 缓存可用的模型列表
异步处理
对于大量的数据同步操作,建议使用队列系统:
# config/packages/framework.yaml framework: messenger: transports: async: 'doctrine://default' routing: 'Tourze\VolcanoArkApiBundle\Message\SyncUsageMessage': async
安全考虑
- 密钥加密 - 所有 API 密钥和密钥值在数据库中都经过加密存储
- 访问控制 - 管理后台需要适当的权限验证
- 审计追踪 - 所有 API 调用都有完整的审计日志
- 密钥轮换 - 支持自动和手动的密钥轮换
故障排除
常见问题
-
No active API key found
- 确保至少有一个激活的 API 密钥
- 检查密钥的
isActive字段是否为true
-
API request failed
- 验证 API 密钥和密钥值是否正确
- 检查网络连接和防火墙设置
- 确认区域设置是否正确
-
Database connection errors
- 确保 Doctrine 配置正确
- 检查数据库连接和权限
调试模式
启用调试模式获取更详细的日志信息:
# config/packages/dev/monolog.yaml monolog: handlers: volcano_ark: type: stream level: debug channels: ['volcano_ark'] path: '%kernel.logs_dir%/volcano_ark.log'
贡献
欢迎提交 Issue 和 Pull Request!
许可证
MIT
统计信息
- 总下载量: 0
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 0
- 点击次数: 0
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2025-11-09