从 Claude 到 Kimi:基于 NVIDIA NIM API 的单轮对话代理实现
a simple claude to kimi python proxy script
这是一个轻量级代理服务器,允许通过 Claude 兼容的接口访问 NVIDIA NIM 平台上的 Kimi K2 Instruct 模型。
功能特点:
- 将 Anthropic Claude 格式的请求转换为 NVIDIA NIM API 格式
- 支持单轮对话(无状态,不保存对话历史)
- 将 Kimi K2 的响应转回 Claude 兼容格式
个人开发者可以通过 NVIDIA NIM for Developers 平台获取 API 密钥,
免费访问 Kimi K2 Instruct 等模型进行测试和开发。
设置
.env 文件
NVIDIA_API_KEY=nvapi-SZxxxx-nim-moonshot-key
安装的依赖 requirements.txt
fastapi==0.116.1
openai==1.97.0
python-dotenv==1.1.1
requests==2.32.3
uvicorn==0.35.0
``
single_turn_anthropic_nim_adapter.py 如下
```single_turn_anthropic_nim_adapter.py
import os, json, requests, uvicorn
from fastapi import FastAPI, Request, Response
from dotenv import load_dotenv
# 加载 .env 文件中的环境变量
load_dotenv()
# 从环境变量获取 API 密钥
API_KEY = os.getenv('NVIDIA_API_KEY')
if not API_KEY:
raise ValueError("NVIDIA_API_KEY 环境变量未设置。请确保 .env 文件中包含此变量。")
END = "https://integrate.api.nvidia.com/v1/chat/completions"
HEADERS = {"Authorization": f"Bearer {API_KEY}",
"Content-Type": "application/json"}
app = FastAPI()
@app.post("/v1/messages")
async def proxy(req: Request):
body = await req.json()
print("\n\n===== REQUEST BODY =====")
print(json.dumps(body, indent=2))
print("========================\n\n")
# 把 anthropic 的格式转成 kimi K2 认识的 OpenAI 兼容格式
payload = {
"model": "moonshotai/kimi-k2-instruct", # 或其他可用的的 model id
"messages": [{"role": "user",
"content": body["messages"][-1]["content"]}]
}
try:
response = requests.post(END, json=payload, headers=HEADERS)
print(f"API Response: {response.status_code} {response.text}")
if response.status_code != 200:
return {
"content": [{"type": "text", "text": f"API Error: {response.status_code} {response.text}"}]
}
res = response.json()
# 再把 K2 的 openai 响应转回 anthropic 格式
return {
"content": [{"type": "text", "text": res["choices"][0]["message"]["content"]}]
}
except Exception as e:
print(f"Exception: {str(e)}")
return {
"content": [{"type": "text", "text": f"Error: {str(e)}"}]
}
if __name__ == "__main__":
uvicorn.run(app, host="0.0.0.0", port=8088)
claude code 使用时,设置环境变量
set anthropic_base_url=http://localhost:8088
set anthropic_api_key=anything_you_like
可以通过 curl 命令测试
curl -v http://localhost:8088/v1/messages -H "Content-Type: application/json; charset=utf-8" -d "{\"messages\":[{\"role\":\"user\",\"content\":\"\u4f60\u5c3d\u529b\u4e86\u5417\"}]}"
(不支持直接 curl 中文请求)
浙公网安备 33010602011771号