保利威文档中心

幫助中心

保利威AI答疑助手API介面文件

更新時間:2025-05-23 11:42:35

目錄

介面概覽

介面名稱 介面位址 請求方式 說明
取得Token https://api.polyv.net/live/v3/common/token/get-ai-token POST 取得AI答疑助手的存取令牌
AI聊天問答 https://api.polyv.net/ai/v1/chat/question GET 向AI助手發送問題並串流取得回答

呼叫流程

  1. 取得Token

    • 使用應用資訊(appId、secretKey)呼叫取得Token介面
    • 產生簽名並提交請求
    • 取得回傳的token
  2. 使用Token進行AI聊天

    • 使用上一步取得的token呼叫AI聊天介面
    • 處理串流回傳的資料
    • 拼接回傳內容獲得完整回答

介面詳情

取得Token介面

基本資訊

  • 介面位址https://api.polyv.net/live/v3/common/token/get-ai-token
  • 請求方式:POST
  • 資料格式:form-data

請求參數

參數名 類型 必填 描述
appId String 客戶在保利威的應用ID
timestamp Long 目前時間戳記(毫秒)
viewerId String 觀看者/使用者唯一識別碼
sign String 請求簽名

回傳參數

參數名 類型 描述
code Integer 狀態碼,200表示成功
message String 回應訊息
status String 回應狀態
data.token String AI答疑助手的存取令牌
data.userId String 使用者ID
data.validTime Integer 令牌有效時間(秒)

回傳範例

{
  "code": 200,
  "message": "success",
  "status": "success",
  "data": {
    "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
    "userId": "viewer123456",
    "validTime": 3600
  }
}

AI聊天問答介面

基本資訊

  • 介面位址https://api.polyv.net/ai/v1/chat/question
  • 請求方式:GET
  • 回傳格式:EventStream(串流回傳)

請求參數

參數名 類型 必填 描述
question String 使用者的問題內容
aiId String AI助手的ID
token String 透過取得Token介面獲得的存取令牌

回傳格式

介面使用EventStream(Server-Sent Events)格式回傳資料,需要客戶端支援處理此格式:


event: message
data: {"content":"我可以回答您关于", "done":false}

回傳資料說明

事件類型 資料格式 描述
message JSON AI產生的部分回答內容
done JSON 表示回答已經結束

資料欄位說明

欄位名 類型 描述
content String AI產生的回答內容
done Boolean AI產生的回答內容是否完成

簽名產生規則

產生sign參數的步驟:

  1. 將除sign以外的全部參數按照參數名ASCII碼從小到大排序
  2. 將排序後的參數以key=value形式拼接,並用&連接
  3. 在拼接後的字串首尾加上金鑰(secretKey)
  4. 對拼接後的字串進行MD5加密並轉為大寫

簽名公式:

MD5(secretKey + 排序并拼接后的参数字符串 + secretKey).toUpperCase()

程式碼範例

Python完整呼叫流程

import time
import hashlib
import json
import requests
import sseclient  # 需要安装: pip install sseclient-py

POLYV_CONFIG = {
    "app_id": '保利威平台appId',
    "app_secret": '保利威平台appSecret'
}

# 第一步:获取Token
def get_ai_token(viewer_id):
 """获取聊天Token的接口"""

    # 构建请求参数
    if viewerId is None:
        print("viewerId is None")
        viewerId = f"polyvWebscriptViewerId-{uuid.uuid4()}"

    print("最后的viewerId", viewerId)
    form_data = {
        "appId": POLYV_CONFIG["app_id"],
        "timestamp": int(time.time() * 1000),
        "viewerId": viewerId
    }

    # 添加签名
    form_data["sign"] = create_api_sign(POLYV_CONFIG["app_secret"], form_data)

    # 发送请求到保利威API
    response = requests.post(
        "https://api.polyv.net/live/v3/common/token/get-ai-token",
        data=form_data
    )

    print(response.json())
    token = response.json().get('data')
    return token
# 第二步:使用token调用AI聊天接口
def chat_with_ai(token, ai_id, question):
    """向AI助手发送问题并获取回答"""
    # 构建请求URL
    url = f"https://api.polyv.net/ai/v1/chat/question?question={question}&aiId={ai_id}&token={token}"

    # 发送请求
    headers = {
        "Accept": "text/event-stream",
        "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36"
    }

    response = requests.get(url, headers=headers)
    print(response)
    client = sseclient.SSEClient(response)

    # 处理EventStream响应
    answer = ""
    try:
        for event in client.events():
            data = json.loads(event.data)
            print(data)
            content = data.get("content", "")
            done = data.get("done")
            if not done:
                print(f'过程数据:===>{content}')
                answer += content
                # 处理回答片段
            else:
                answer += content
                print("回答完成")
                break
        return answer
    except Exception as e:
        print(f"处理响应出错: {e}")
        raise

# 使用示例
if __name__ == "__main__":
    # 配置参数
    APP_ID = "你的appId"
    SECRET_KEY = "你的secretKey"
    VIEWER_ID = "用户唯一标识"
    AI_ID = "1159"
    QUESTION = "你好,请介绍一下自己"
    
    try:
        # 注意:实际应用中token获取应在后端进行
        token = get_ai_token(APP_ID, SECRET_KEY, VIEWER_ID)
        print(f"获取token成功: {token}")
        
        # 使用token进行聊天
        answer = chat_with_ai(token, AI_ID, QUESTION)
        print(f"完整回答: {answer}")
    except Exception as e:
        print(f"错误: {e}")

常見問題

  1. Token安全問題

    • 取得Token的介面必須在伺服器端呼叫,避免將secretKey暴露在前端
    • 可以在自己的後端服務中封裝一個取得Token的介面供前端呼叫
  2. Token有效期

    • Token有效期通常為3600秒(1小時)
    • 建議在Token過期前自動更新,可以設定定時任務在過期前5-10分鐘更新Token
  3. EventStream處理

    • 不同前端框架處理EventStream的方式可能不同
    • 需要正確拼接所有message事件中的content欄位以取得完整回答
    • 當收到type為"done"的事件時,表示本次回答已經結束
  4. 錯誤處理

    • 建議加入逾時處理機制,避免網路問題導致請求一直掛起
    • 加入錯誤重試機制,在網路波動時能夠自動重新連線
  5. 請求限制

    • 介面呼叫頻率限制:單一appId每秒最多500次請求
    • 確保合理控制請求頻率,避免觸發限流
联系客服,在线咨询