Skip to content

Python SDK 使用指南

基础调用示例

python
from openai import OpenAI

# 初始化客户端
client = OpenAI(
    api_key="sk-xxxxxxxx",              # 填入您的令牌
    base_url="https://www.laoge.xin/v1" # API 接入点
)

# 发送请求
response = client.chat.completions.create(
    model="[次]gemini-2.5-pro",
    messages=[
        {"role": "system", "content": "You are a helpful assistant."},
        {"role": "user", "content": "Hello!"}
    ],
    stream=False
)

print(response.choices[0].message.content)

视频分析示例

python
import cv2
import base64
import requests
import os
import math

class VideoAnalyzer:
    def __init__(self, video_path):
        self.video_path = video_path
        if not os.path.exists(video_path):
            raise FileNotFoundError(f"❌ 找不到视频文件: {video_path}")

    def get_metadata(self):
        """获取视频基础技术参数"""
        cap = cv2.VideoCapture(self.video_path)
        if not cap.isOpened():
            return None
        fps = cap.get(cv2.CAP_PROP_FPS)
        frame_count = int(cap.get(cv2.CAP_PROP_FRAME_COUNT))
        width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
        height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
        duration = frame_count / fps if fps > 0 else 0
        cap.release()
        return {
            "width": width, "height": height,
            "fps": round(fps, 2), "frame_count": frame_count,
            "duration_sec": round(duration, 2),
            "file_size_mb": round(os.path.getsize(self.video_path) / (1024 * 1024), 2)
        }

    def extract_keyframes(self, max_frames=5, target_width=512):
        """抽取关键帧用于AI分析"""
        cap = cv2.VideoCapture(self.video_path)
        total_frames = int(cap.get(cv2.CAP_PROP_FRAME_COUNT))
        if total_frames == 0:
            return []
        interval = max(1, total_frames // max_frames)
        base64_frames = []
        for i in range(0, total_frames, interval):
            if len(base64_frames) >= max_frames:
                break
            cap.set(cv2.CAP_PROP_POS_FRAMES, i)
            ret, frame = cap.read()
            if ret:
                h, w, _ = frame.shape
                aspect_ratio = h / w
                new_height = int(target_width * aspect_ratio)
                resized_frame = cv2.resize(frame, (target_width, new_height))
                _, buffer = cv2.imencode('.jpg', resized_frame)
                base64_str = base64.b64encode(buffer).decode('utf-8')
                base64_frames.append(base64_str)
        cap.release()
        return base64_frames

    def analyze_content_with_ai(self, api_key, base64_frames):
        """调用视觉大模型解析视频内容"""
        url = "https://www.laoge.xin/v1/chat/completions"
        content_payload = [
            {"type": "text", "text": "这是同一个视频中按时间顺序抽取的几帧画面。请详细描述这个视频里发生了什么?"}
        ]
        for b64 in base64_frames:
            content_payload.append({
                "type": "image_url",
                "image_url": {"url": f"data:image/jpeg;base64,{b64}", "detail": "low"}
            })
        payload = {
            "model": "[次]gemini-3-pro-preview",
            "messages": [{"role": "user", "content": content_payload}],
            "max_tokens": 1000, "stream": True
        }
        response = requests.post(url, headers={"Authorization": f"Bearer {api_key}"}, json=payload, stream=True)
        full_analysis = ""
        for line in response.iter_lines():
            if line:
                decoded = line.decode('utf-8')
                if decoded.startswith('data: ') and decoded != 'data: [DONE]':
                    import json
                    delta = json.loads(decoded[6:])['choices'][0]['delta'].get('content', '')
                    print(delta, end='', flush=True)
                    full_analysis += delta
        return full_analysis

图片分析示例

python
import requests, json, base64

API_URL = "https://www.laoge.xin/v1/chat/completions"
API_KEY = "Bearer sk-xxxxxxxx"  # 替换为你的API Key

def analyze_image(img_path):
    with open(img_path, "rb") as f:
        img_base64 = base64.b64encode(f.read()).decode()
    payload = {
        "model": "[次]gemini-3-pro-preview",
        "messages": [{
            "role": "user",
            "content": [
                {"type": "text", "text": "请描述这张图片"},
                {"type": "image_url", "image_url": {"url": f"data:image/jpeg;base64,{img_base64}"}}
            ]
        }],
        "stream": True
    }
    headers = {"Content-Type": "application/json", "Authorization": API_KEY}
    response = requests.post(API_URL, json=payload, headers=headers, stream=True)
    for line in response.iter_lines():
        if line:
            line = line.decode('utf-8').replace('data: ', '')
            if line.strip() == '[DONE]': break
            data = json.loads(line)
            if content := data['choices'][0]['delta'].get('content'):
                print(content, end="", flush=True)
    print()

analyze_image(r"你的图片路径.jpg")

图片生成示例

python
import requests, json, os, re
from pathlib import Path

class ImageGenerator:
    def __init__(self):
        self.api_key = "sk-xxxxxxxx"  # 替换为你的API密钥
        self.api_url = "https://www.laoge.xin/v1/chat/completions"
        self.model = "nano-banana"
        self.headers = {
            "Authorization": f"Bearer {self.api_key}",
            "Content-Type": "application/json"
        }

    def generate_image(self, prompt, save_dir="./generated_images"):
        Path(save_dir).mkdir(parents=True, exist_ok=True)
        payload = {
            "model": self.model,
            "messages": [{"role": "user", "content": f"Generate an image based on this prompt: {prompt}"}],
            "max_tokens": 1000
        }
        response = requests.post(self.api_url, headers=self.headers, json=payload, timeout=600)
        if response.status_code == 200:
            data = response.json()
            content = data['choices'][0]['message']['content']
            url_patterns = [r'https?://[^\s]+?\.(?:jpg|jpeg|png|gif|bmp|webp)']
            links = []
            for pattern in url_patterns:
                links.extend(re.findall(pattern, content, re.IGNORECASE))
            return {"success": True, "image_links": links, "content": content}
        return {"success": False, "error": f"HTTP {response.status_code}"}

提示

请使用 auto 分组的令牌。所有示例中的 sk-xxxxxxxx 需替换为您的实际令牌。

Laoge API Documentation