mirror of
https://github.com/Wei-Shaw/claude-relay-service.git
synced 2026-01-23 09:38:02 +00:00
feat: claude账户支持使用统一的客户端标识
This commit is contained in:
@@ -126,8 +126,11 @@ class ClaudeRelayService {
|
||||
// 获取有效的访问token
|
||||
const accessToken = await claudeAccountService.getValidAccessToken(accountId)
|
||||
|
||||
// 获取账户信息
|
||||
const account = await claudeAccountService.getAccount(accountId)
|
||||
|
||||
// 处理请求体(传递 clientHeaders 以判断是否需要设置 Claude Code 系统提示词)
|
||||
const processedBody = this._processRequestBody(requestBody, clientHeaders)
|
||||
const processedBody = this._processRequestBody(requestBody, clientHeaders, account)
|
||||
|
||||
// 获取代理配置
|
||||
const proxyAgent = await this._getProxyAgent(accountId)
|
||||
@@ -356,7 +359,7 @@ class ClaudeRelayService {
|
||||
}
|
||||
|
||||
// 🔄 处理请求体
|
||||
_processRequestBody(body, clientHeaders = {}) {
|
||||
_processRequestBody(body, clientHeaders = {}, account = null) {
|
||||
if (!body) {
|
||||
return body
|
||||
}
|
||||
@@ -458,9 +461,31 @@ class ClaudeRelayService {
|
||||
delete processedBody.top_p
|
||||
}
|
||||
|
||||
// 处理统一的客户端标识
|
||||
if (account && account.useUnifiedClientId && account.unifiedClientId) {
|
||||
this._replaceClientId(processedBody, account.unifiedClientId)
|
||||
}
|
||||
|
||||
return processedBody
|
||||
}
|
||||
|
||||
// 🔄 替换请求中的客户端标识
|
||||
_replaceClientId(body, unifiedClientId) {
|
||||
if (!body || !body.metadata || !body.metadata.user_id || !unifiedClientId) {
|
||||
return
|
||||
}
|
||||
|
||||
const userId = body.metadata.user_id
|
||||
// user_id格式:user_{64位十六进制}_account__session_{uuid}
|
||||
// 只替换第一个下划线后到_account之前的部分(客户端标识)
|
||||
const match = userId.match(/^user_[a-f0-9]{64}(_account__session_[a-f0-9-]{36})$/)
|
||||
if (match && match[1]) {
|
||||
// 替换客户端标识部分
|
||||
body.metadata.user_id = `user_${unifiedClientId}${match[1]}`
|
||||
logger.info(`🔄 Replaced client ID with unified ID: ${body.metadata.user_id}`)
|
||||
}
|
||||
}
|
||||
|
||||
// 🔢 验证并限制max_tokens参数
|
||||
_validateAndLimitMaxTokens(body) {
|
||||
if (!body || !body.max_tokens) {
|
||||
@@ -844,8 +869,11 @@ class ClaudeRelayService {
|
||||
// 获取有效的访问token
|
||||
const accessToken = await claudeAccountService.getValidAccessToken(accountId)
|
||||
|
||||
// 获取账户信息
|
||||
const account = await claudeAccountService.getAccount(accountId)
|
||||
|
||||
// 处理请求体(传递 clientHeaders 以判断是否需要设置 Claude Code 系统提示词)
|
||||
const processedBody = this._processRequestBody(requestBody, clientHeaders)
|
||||
const processedBody = this._processRequestBody(requestBody, clientHeaders, account)
|
||||
|
||||
// 获取代理配置
|
||||
const proxyAgent = await this._getProxyAgent(accountId)
|
||||
|
||||
Reference in New Issue
Block a user