揭秘Claude to ChatGPT工作原理:API转换核心代码分析
【免费下载链接】claude-to-chatgpt This project converts the API of Anthropic's Claude model to the OpenAI Chat API format. 项目地址: https://gitcode.com/gh_mirrors/cl/claude-to-chatgpt
Claude to ChatGPT是一个创新工具,能够将Anthropic的Claude模型API转换为OpenAI Chat API格式,让开发者可以轻松地在现有OpenAI兼容的应用中使用Claude模型。本文将深入解析其核心工作原理,帮助你理解这个强大工具如何实现不同AI模型API之间的无缝转换。
核心转换机制:ClaudeAdapter类解析
在claude_to_chatgpt/adapter.py文件中,ClaudeAdapter类是整个转换系统的核心。这个类封装了所有API转换的关键逻辑,主要包括参数转换、请求处理和响应转换三个核心环节。
角色映射:弥合API差异的第一步
Claude和ChatGPT在消息角色定义上存在差异,ClaudeAdapter通过角色映射解决了这一问题:
role_map = {
"system": "Human",
"user": "Human",
"assistant": "Assistant",
}
这段代码将OpenAI的角色体系(system、user、assistant)转换为Claude理解的角色体系(Human、Assistant),确保对话历史能够正确传递给Claude模型。
消息格式转换:从ChatGPT到Claude
convert_messages_to_prompt方法是消息格式转换的关键,它将OpenAI格式的消息列表转换为Claude所需的prompt格式:
def convert_messages_to_prompt(self, messages):
prompt = ""
for message in messages:
role = message["role"]
content = message["content"]
transformed_role = role_map[role]
prompt += f"\\n\\n{transformed_role.capitalize()}: {content}"
prompt += "\\n\\nAssistant: "
return prompt
这个方法遍历所有消息,将每个消息转换为"角色: 内容"的格式,并在最后添加"Assistant: "来提示Claude继续生成回复。
参数转换:统一API调用体验
openai_to_claude_params方法负责将OpenAI风格的参数转换为Claude API所需的参数格式:
def openai_to_claude_params(self, openai_params):
model = model_map.get(openai_params["model"], "claude-2")
messages = openai_params["messages"]
prompt = self.convert_messages_to_prompt(messages)
claude_params = {
"model": model,
"prompt": prompt,
"max_tokens_to_sample": 100000,
}
# 处理其他参数如max_tokens、stop、temperature等
if openai_params.get("max_tokens"):
claude_params["max_tokens_to_sample"] = openai_params["max_tokens"]
# … 其他参数处理代码
这个方法不仅处理了模型名称映射(通过model_map),还将OpenAI的参数如max_tokens、stop和temperature转换为Claude对应的参数,确保用户可以使用熟悉的OpenAI API参数来调用Claude模型。
响应转换:从Claude格式到ChatGPT格式
获取Claude的响应后,还需要将其转换回OpenAI格式,以便客户端能够正确解析。这一功能通过claude_to_chatgpt_response和claude_to_chatgpt_response_stream两个方法实现。
普通响应转换
claude_to_chatgpt_response方法处理非流式响应:
def claude_to_chatgpt_response(self, claude_response):
completion_tokens = num_tokens_from_string(
claude_response.get("completion", "")
)
openai_response = {
"id": f"chatcmpl-{str(time.time())}",
"object": "chat.completion",
"created": int(time.time()),
"model": "gpt-3.5-turbo-0613",
"usage": {
"prompt_tokens": 0,
"completion_tokens": completion_tokens,
"total_tokens": completion_tokens,
},
"choices": [
{
"message": {
"role": "assistant",
"content": claude_response.get("completion", ""),
},
"index": 0,
"finish_reason": stop_reason_map[claude_response.get("stop_reason")]
if claude_response.get("stop_reason")
else None,
}
],
}
return openai_response
这个方法将Claude返回的 completion 内容包装成OpenAI风格的响应格式,包括消息对象、使用情况统计和完成原因等。
流式响应转换
对于流式响应,claude_to_chatgpt_response_stream方法会生成符合OpenAI SSE (Server-Sent Events) 格式的响应:
def claude_to_chatgpt_response_stream(self, claude_response):
completion = claude_response.get("completion", "")
completion_tokens = num_tokens_from_string(completion)
openai_response = {
"id": f"chatcmpl-{str(time.time())}",
"object": "chat.completion.chunk",
"created": int(time.time()),
"model": "gpt-3.5-turbo-0613",
"usage": {
"prompt_tokens": 0,
"completion_tokens": completion_tokens,
"total_tokens": completion_tokens,
},
"choices": [
{
"delta": {
"role": "assistant",
"content": completion,
},
"index": 0,
"finish_reason": stop_reason_map[claude_response.get("stop_reason")]
if claude_response.get("stop_reason")
else None,
}
],
}
return openai_response
完整工作流程:从请求到响应
ClaudeAdapter的chat方法实现了完整的API转换流程:
无论是普通请求还是流式请求,chat方法都能妥善处理,确保整个转换过程对用户透明。
总结:无缝桥接两个AI生态系统
Claude to ChatGPT通过精妙的适配器设计,成功解决了不同AI模型API之间的兼容性问题。核心的转换逻辑集中在claude_to_chatgpt/adapter.py文件中,通过角色映射、消息格式转换、参数转换和响应转换四个关键步骤,实现了Claude API到OpenAI Chat API的无缝转换。
这个项目不仅为开发者提供了使用Claude模型的便利,也展示了API适配器模式在解决不同系统间兼容性问题时的强大能力。通过理解这些核心代码,你不仅可以更好地使用这个工具,还能从中学习到如何设计和实现类似的API转换系统。
要开始使用这个工具,你可以通过以下命令克隆仓库:
git clone https://gitcode.com/gh_mirrors/cl/claude-to-chatgpt
然后按照项目文档的指引进行安装和配置,即可在你的OpenAI兼容应用中轻松使用Claude模型的强大能力。
【免费下载链接】claude-to-chatgpt This project converts the API of Anthropic's Claude model to the OpenAI Chat API format. 项目地址: https://gitcode.com/gh_mirrors/cl/claude-to-chatgpt
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



