ZhipuAI Python SDK

repository·main·Indexed 41 days ago

https://github.com/metaglm/zhipuai-sdk-python-v4

A high-performance, type-safe SDK for accessing ZhipuAI's large model APIs. Version 2.1.5.20250825 provides interfaces for chat completions (glm-4), multimodal vision (glm-4v), video generation (cogvideox-2), AI assistants (glm-4-assistant), and role-playing (charglm-3). It includes support for streaming responses, web search tools, and comprehensive error handling via specific exception classes like APIStatusError and APIReachLimitError.

Tokens
4.6K
Snippets
19
Records
19
Agent score
44%

What's inside ZhipuAI

  1. Configure the ZhipuAI client

    main

    You can configure the ZhipuAI client using environment variables or directly in your code.

    Environment Variables:

    • ZHIPUAI_API_KEY: Your API key.
    • ZHIPUAI_BASE_URL: Custom API endpoint (optional, defaults to https://open.bigmodel.cn/api/paas/v4/).

    Code Configuration: Pass the api_key to the ZhipuAI constructor. For advanced settings, you can also configure timeout, max_retries, and base_url.

    import httpx
    from zhipuai import ZhipuAI
    
    client = ZhipuAI(
        api_key="your_api_key_here",
        timeout=httpx.Timeout(timeout=300.0, connect=8.0),
        max_retries=3,
        base_url="https://open.bigmodel.cn/api/paas/v4/"
    )
  2. Initialize the ZhipuAI client

    main

    You can initialize the ZhipuAI client using either environment variables or direct code configuration.

    Environment Variables:

    • ZHIPUAI_API_KEY: Your API key.
    • ZHIPUAI_BASE_URL: (Optional) The API endpoint, e.g., https://open.bigmodel.cn/api/paas/v4/.

    Code Configuration: Pass api_key and an optional base_url directly to the constructor.

    from zhipuai import ZhipuAI
    
    # Using explicit configuration
    client = ZhipuAI(
        api_key="your-api-key",
        base_url="https://open.bigmodel.cn/api/paas/v4/"
    )
  3. Configure advanced client settings

    main

    Customize client behavior such as timeouts and retries using httpx.Timeout and the max_retries parameter.

    from zhipuai import ZhipuAI
    import httpx
    
    client = ZhipuAI(
        api_key="your-api-key",
        timeout=httpx.Timeout(timeout=300.0, connect=8.0),  # Request timeout
        max_retries=3,  # Retry attempts
        base_url="https://open.bigmodel.cn/api/paas/v4/"
    )
  4. Handle ZhipuAI API errors

    main

    The SDK provides specific exception classes for error handling. Wrap your calls in try...except blocks to catch specific failure modes.

    Common Exceptions:

    • zhipuai.APIStatusError: General API error.
    • zhipuai.APITimeoutError: Request timeout.
    • zhipuai.APIRequestFailedError: Invalid request parameters (HTTP 400).
    • zhipuai.APIAuthenticationError: Authentication failed (HTTP 401).
    • zhipuai.APIReachLimitError: Rate limit exceeded (HTTP 429).
    • zhipuai.APIInternalError: Internal server error (HTTP 500).
    • zhipuai.APIServerFlowExceedError: Server overloaded (HTTP 503).
    from zhipuai import ZhipuAI
    import zhipuai
    
    client = ZhipuAI()
    
    try:
        response = client.chat.completions.create(
            model="glm-4",
            messages=[{"role": "user", "content": "Hello, ZhipuAI!"}]
        )
        print(response.choices[0].message.content)
        
    except zhipuai.APIStatusError as err:
        print(f"API Status Error: {err}")
    except zhipuai.APITimeoutError as err:
        print(f"Request Timeout: {err}")
    except Exception as err:
        print(f"Other Error: {err}")
  5. Handle API errors and exceptions

    main

    The SDK provides specific exception classes for error handling. You should catch zhipuai.APIStatusError and zhipuai.APITimeoutError to manage request failures gracefully.

    Common Error Codes:

    Status CodeException TypeDescription
    400APIRequestFailedErrorInvalid request parameters
    401APIAuthenticationErrorAuthentication failed
    429APIReachLimitErrorRate limit exceeded
    500APIInternalErrorInternal server error
    503APIServerFlowExceedErrorServer traffic exceeded
    N/AAPIStatusErrorGeneral API error
    from zhipuai import ZhipuAI
    import zhipuai
    
    client = ZhipuAI(api_key="your-api-key")
    
    try:
        response = client.chat.completions.create(
            model="glm-4",
            messages=[
                {"role": "user", "content": "你好,智谱AI!"}
            ]
        )
        print(response.choices[0].message.content)
        
    except zhipuai.APIStatusError as err:
        print(f"API状态错误: {err}")
    except zhipuai.APITimeoutError as err:
        print(f"请求超时: {err}")
    except Exception as err:
        print(f"其他错误: {err}")
  6. Generate videos

    main

    Use client.videos.generations to create videos with models like cogvideox-2.

    Key Parameters:

    • prompt: The text description of the video.
    • quality: 'quality' (priority on quality) or 'speed' (priority on speed).
    • with_audio: Boolean to include background audio.
    • size: Resolution (e.g., "1920x1080").
    • fps: Frame rate (e.g., 30 or 60).

    After initiating generation, use client.videos.retrieve_videos_result(id=response.id) to check the status and retrieve the result.

    from zhipuai import ZhipuAI
    
    client = ZhipuAI(api_key="your-api-key")
    response = client.videos.generations(
        model="cogvideox-2",
        prompt="一个美丽的日落海滩场景",
        quality="quality",
        with_audio=True,
        size="1920x1080",
        fps=30,
        user_id="user_12345"
    )
    
    result = client.videos.retrieve_videos_result(id=response.id)
    print(result)
  7. Stream chat completions

    main

    To receive real-time streaming responses, set stream=True in the create method. The response becomes an iterator of chunks.

    from zhipuai import ZhipuAI
    
    client = ZhipuAI(api_key="your-api-key")
    response = client.chat.completions.create(
        model="glm-4",
        messages=[
            {"role": "system", "content": "You are a helpful assistant."},
            {"role": "user", "content": "Tell me a story about AI."}
        ],
        stream=True
    )
    
    for chunk in response:
        if chunk.choices[0].delta.content:
            print(chunk.choices[0].delta)
  8. Interact with AI Agents (Assistants)

    main

    Use client.assistant.conversation to interact with a specific assistant. You must provide an assistant_id and a model like glm-4-assistant. This method supports streaming.

    from zhipuai import ZhipuAI
    
    client = ZhipuAI(api_key="your-api-key")
    
    response = client.assistant.conversation(
        assistant_id="your_assistant_id",
        model="glm-4-assistant",
        messages=[
            {
                "role": "user",
                "content": [{"type": "text", "text": "帮我搜索智谱AI的最新产品信息"}]
            }
        ],
        stream=True
    )
    
    for chunk in response:
        print(chunk)
  9. Use role-playing with meta information

    main

    For role-playing models like charglm-3, use the meta parameter to define user_info, bot_info, bot_name, and user_name to shape the conversation context.

    from zhipuai import ZhipuAI
    
    client = ZhipuAI(api_key="your-api-key")
    response = client.chat.completions.create(
        model="charglm-3",
        messages=[
            {
                "role": "user",
                "content": "你好,最近在忙什么呢?"
            }
        ],
        meta={
            "user_info": "我是一位电影导演,擅长拍摄音乐题材的电影。",
            "bot_info": "你是一位当红的国内女歌手及演员,拥有出众的音乐才华。",
            "bot_name": "小雅",
            "user_name": "导演"
        },
    )
    print(response.choices[0].message.content)
  10. Use streaming chat completions

    main

    To receive responses in real-time, set stream=True in the client.chat.completions.create method. The response becomes an iterator that yields chunks of data.

    from zhipuai import ZhipuAI
    
    client = ZhipuAI(api_key="your-api-key")
    response = client.chat.completions.create(
        model="glm-4",
        messages=[
            {"role": "system", "content": "你是一个人工智能助手,你叫ChatGLM"},
            {"role": "user", "content": "你好!你叫什么名字"},
        ],
        stream=True,
    )
    
    for chunk in response:
        if chunk.choices[0].delta.content:
            print(chunk.choices[0].delta)
  11. Perform basic chat completions

    main

    Use client.chat.completions.create to interact with text models like glm-4. You can provide a list of messages with roles (e.g., user, system) and use extra_body for parameters like temperature or max_tokens. You can also enable tools like web_search.

    from zhipuai import ZhipuAI
    
    client = ZhipuAI(api_key="your-api-key")
    response = client.chat.completions.create(
        model="glm-4",
        messages=[
            {"role": "user", "content": "你好,请介绍一下智谱AI"}
        ],
        tools=[
            {
                "type": "web_search",
                "web_search": {
                    "search_query": "Search the Zhipu",
                    "search_result": True,
                }
            }
        ],
        extra_body={"temperature": 0.5, "max_tokens": 50}
    )
    print(response.choices[0].message.content)