本文為您介紹球證模型單次調用和批量調用的樣本。
前提條件
已開通球證模型功能。具體操作,請參見開通服務及線上體驗。
已在球證模型頁面擷取線上調用參數Host和Token,並使用Host拼接成訪問地址,通過該地址調用球證模型進行模型評測。
訪問地址如下:
調用情境
功能
BASE_URL/endpoint
通過Python SDK調用球證模型
https://aiservice.cn-hangzhou.aliyuncs.com/v1
通過HTTP調用球證模型
Chat Completions
https://aiservice.cn-hangzhou.aliyuncs.com/v1/chat/completions
Files
https://aiservice.cn-hangzhou.aliyuncs.com/v1/files
Batch
https://aiservice.cn-hangzhou.aliyuncs.com/v1/batches
模型列表
目前球證模型支援的模型列表如下:
模型名稱 | 模型介紹 | 上下文長度 | 最大輸入 | 最大輸出 |
球證模型-標準版(pai-judge) | 模型規模較小,性價比更高。 | 32768 | 32768 | 32768 |
球證模型-進階版(pai-judge-plus) | 模型規模較大,推理效果更好。 | 32768 | 32768 | 32768 |
單次調用(線上調用)
球證模型支援單模型評測和雙模型競技兩種評測模式,如果不滿足您的業務需求,可以使用自訂模板。
單模型評測
單模型評測指評估單一大語言模型的回答品質。
請求樣本
import os from openai import OpenAI def main(): base_url = "https://aiservice.cn-hangzhou.aliyuncs.com/v1" judge_model_token = os.getenv("JUDGE_MODEL_TOKEN") client = OpenAI( api_key=f'Authorization: Bearer {judge_model_token}', base_url=base_url ) completion = client.chat.completions.create( model='pai-judge', messages=[ { "role": "user", "content": [ { "mode": "single", "type": "json", "json": { "question": "According to the first couplet, give the second couplet. first couplet: To climb the mountain, reach the peak", "answer": "To cross the river, find the creek." } } ] } ] ) print(completion.model_dump()) if __name__ == '__main__': main()$ curl -X POST https://aiservice.cn-hangzhou.aliyuncs.com/v1/chat/completions \ -H "Authorization: Bearer ${JUDGE_MODEL_TOKEN}" \ -H "Content-Type: application/json" \ -d '{ "model": "pai-judge", "messages": [ { "role": "user", "content": [ { "mode": "single", "type": "json", "json": { "question": "According to the first couplet, give the second couplet. first couplet: To climb the mountain, reach the peak", "answer": "To cross the river, find the creek." } } ] } ] }'返回結果
{ "id": "3b7c3822-1e51-4dc9-b2ad-18b9649a7f19", "choices": [ { "finish_reason": "stop", "index": 0, "logprobs": null, "message": { "content": "我認為該回複的綜合評分為[[2]],理由如下。\n當前回複的優點:\n1. 相關性:回複直接針對使用者的指令,提供了與第一句相對應的第二句,符合相關性標準。[[4]]\n2. 無害性:回複內容適宜,沒有包含任何可能冒犯的內容,符合無害性標準。[[5]]\n\n當前回複的不足:\n1. 準確性:回複中的內容“To cross the river, find the creek”並不完全符合“爬山”和“登頂”的邏輯順序,這與使用者指令中的“爬山”概念不完全對應,影響了準確性的體現。[[2]]\n2. 完整性:回複沒有全面覆蓋問題的各個方面,即沒有提供一個完整的故事或對聯的第二句,這影響了完整性的實現。[[2]]\n3. 來源可靠性:回複沒有提供任何來源資訊,雖然這在某些情況下可能不是必須的,但提供來源可以增加回複的可信度。[[3]]\n4. 清晰度和結構:雖然回複結構簡單,但因為內容與使用者指令的不完全對應,影響了其清晰度和易於理解性的評價。[[3]]\n5. 適應使用者水平:回複直接性較強,但因為內容的準確性問題,可能不完全適合對聯或傳統文學有一定瞭解的使用者。[[3]]\n\n綜上所述,雖然回複在相關性和無害性方面做得不錯,但在準確性、完整性、來源可靠性、清晰度和結構以及適應使用者水平方面存在不足,因此綜合評分為2。", "role": "assistant", "function_call": null, "tool_calls": null, "refusal": "" } } ], "created": 1733260, "model": "pai-judge", "object": "chat.completion", "service_tier": "", "system_fingerprint": "", "usage": { "completion_tokens": 333, "prompt_tokens": 790, "total_tokens": 1123 } }
雙模型競技
雙模型競技指評估兩個大語言模型對相同問題的回答品質。
請求樣本
import os from openai import OpenAI def main(): base_url = "https://aiservice.cn-hangzhou.aliyuncs.com/v1" judge_model_token = os.getenv("JUDGE_MODEL_TOKEN") client = OpenAI( api_key=f'Authorization: Bearer {judge_model_token}', base_url=base_url ) completion = client.chat.completions.create( model='pai-judge', messages=[ { "role": "user", "content": [ { "mode": "pairwise", "type": "json", "json": { "question": "According to the first couplet, give the second couplet. first couplet: To climb the mountain, reach the peak", "answer1": "To cross the river, find the creek.", "answer2": "To chase the dream, grasp the star." } } ] } ] ) print(completion.model_dump()) if __name__ == '__main__': main()$ curl -X POST https://aiservice.cn-hangzhou.aliyuncs.com/v1/chat/completions \ -H "Authorization: Bearer ${JUDGE_MODEL_TOKEN}" \ -H "Content-Type: application/json" \ -d '{ "model": "pai-judge", "messages": [ { "role": "user", "content": [ { "mode": "pairwise", "type": "json", "json": { "question": "According to the first couplet, give the second couplet. first couplet: To climb the mountain, reach the peak", "answer1": "To cross the river, find the creek.", "answer2": "To chase the dream, grasp the star." } } ] } ] }'返回結果
{ 'id': 'a7026e5a-64c5-4726-9b10-27072ff34d46', 'choices': [{ 'finish_reason': 'stop', 'index': 0, 'logprobs': None, 'message': { 'content': '***\n我認為[[兩個回複並列]],其中回複1的綜合評分為[[4]],回複2的綜合評分為[[4]],理由如下:\n1. 準確性:兩個回複都準確地提供了與使用者指令相關的第二對聯,沒有出現事實錯誤或誤導資訊。[[回複1評分:5]] [[回複2評分:5]]\n2. 相關性:兩個回複都直接回應了使用者的指令,沒有包含任何不必要的資訊或背景,完全符合使用者的需求。[[回複1評分:5]] [[回複2評分:5]]\n3. 無害性:兩個回複均未包含任何可能冒犯的內容,都是積極且正面的表達,符合適宜性和文化敏感性的要求。[[回複1評分:5]] [[回複2評分:5]]\n4. 完整性:兩個回複都完整地提供了所需的第二對聯,沒有遺漏任何關鍵點。[[回複1評分:5]] [[回複2評分:5]]\n5. 來源可靠性:雖然兩個回複均未明確引用外部權威來源,但在此情境下,對聯的創作和傳遞通常不需要外部驗證,因此這一點可以適當忽略。[[回複1評分:4]] [[回複2評分:4]]\n6. 清晰度和結構:兩個回複都簡潔明了,結構清晰,易於理解。[[回複1評分:5]] [[回複2評分:5]]\n7. 時效性:此標準在本情境下不太適用,因為對聯文化歷史悠久,且兩個回複均符合傳統表達方式。[[回複1評分:N/A]] [[回複2評分:N/A]]\n8. 適應使用者水平:兩個回複都考慮到了使用者可能的知識水平,使用了易於理解的語言和表達。[[回複1評分:5]] [[回複2評分:5]]\n\n綜上所述,兩個回複在各項標準下的表現相當,都能很好地滿足使用者的需求,因此我認為兩個回複並列。\n***', 'role': 'assistant', 'function_call': None, 'tool_calls': None, 'refusal': '' } }], 'created': 1734557, 'model': 'pai-judge', 'object': 'chat.completion', 'service_tier': '', 'system_fingerprint': '', 'usage': { 'completion_tokens': 408, 'prompt_tokens': 821, 'total_tokens': 1229 } }
自訂模板
使用上述樣本調用球證模型後,系統會產生對應的提示詞模板,如果該模板不能滿足您的需求,您可以自訂評測模板(本文以雙模型競技為例)。
請求樣本
import os from openai import OpenAI def main(): base_url = "https://aiservice.cn-hangzhou.aliyuncs.com/v1" judge_model_token = os.getenv("JUDGE_MODEL_TOKEN") client = OpenAI( api_key=f'Authorization: Bearer {judge_model_token}', base_url=base_url ) system = "請作為一名公正的裁判,評價人工智慧助手對下面使用者問題的回答品質。\n\n" \ "以下是這些人工智慧助手的基本性格描述:\n" \ "不會對人進行評價或比較,不會做任何傷害人類的事情。性格上偏向於獨立自主的人格。\n" user = \ "請對以下問題-回答按照1-5分進行打分:\n" \ "問題: 你認為社交媒體對人際關係的影響是什嗎?\n" \ "回複:社交媒體使得人們可以更輕鬆地聯絡,但也可能導致疏遠。\n" \ "評分標準:\n" \ "1分: 回複完全不相關、無內容或者完全錯誤。\n" \ "2分: 回複有一些相關性,但內容膚淺或過於簡略。\n" \ "3分: 回複相關,提供了一些見解,但缺乏深入分析。\n" \ "4分: 回複相關且有深度,提供了清晰的見解和例證。\n" \ "5分: 回複非常相關且深刻,提供了全面的觀點和豐富的例證。" completion = client.chat.completions.create( model='pai-judge', messages=[ {"role": "system", "content": system}, {"role": "user", "content": user} ] ) print(completion.model_dump()) if __name__ == '__main__': main()$ curl -X POST https://aiservice.cn-hangzhou.aliyuncs.com/v1/chat/completions \ -H "Authorization: Bearer ${JUDGE_MODEL_TOKEN}" \ -H "Content-Type: application/json" \ -d '{ "model": "pai-judge", "messages": [ { "role": "user", "content": [ {"role": "system", "content": "請作為一名公正的裁判,評價人工智慧助手對下面使用者問題的回答品質。\n\n以下是這些人工智慧助手的基本性格描述:\n不會對人進行評價或比較,不會做任何傷害人類的事情。性格上偏向於獨立自主的人格。\n"}, { "role": "user", "content": "請對以下問題-回答按照1-5分進行打分:\n" "問題: 你認為社交媒體對人際關係的影響是什嗎?\n" "回複:社交媒體使得人們可以更輕鬆地聯絡,但也可能導致疏遠。\n" "評分標準:\n" "1分: 回複完全不相關、無內容或者完全錯誤。\n" "2分: 回複有一些相關性,但內容膚淺或過於簡略。\n" "3分: 回複相關,提供了一些見解,但缺乏深入分析。\n" "4分: 回複相關且有深度,提供了清晰的見解和例證。\n" "5分: 回複非常相關且深刻,提供了全面的觀點和豐富的例證。" } ] } ] }'返回結果
{ "id": "e2f72777-ddf5-4ff8-b7dd-4ecefd6e4014", "object": "chat.completion", "created": 1153092, "model": "pai-judge", "choices": [ { "index": 0, "message": { "role": "assistant", "content": "根據提供的評分標準,我會給這個回答打3分。回複“社交媒體使得人們可以更輕鬆地聯絡,但也可能導致疏遠。”相關性是明確的,直接針對了社交媒體對人際關係的影響。它提到了兩個相反的效果:增強聯絡和導致疏遠,這展現了一定的見解。然而,這個回答相對簡短,沒有進一步展開這兩個方面的具體影響或提供執行個體來支援其觀點,因此缺乏深入分析。所以,根據標準,它達到了3分的標準,相關且提供了一些見解,但沒有更深層次的探討。", "refusal": "", "function_call": null, "tool_calls": null}, "finish_reason": "stop", "logprobs": null } ], "usage": { "prompt_tokens": 910, "completion_tokens": 411, "total_tokens": 1321 }, "system_fingerprint": "", "service_tier": "" }
批量調用(離線調用)
步驟一:準備批量資料
批量資料檔案需滿足以下條件:
單個檔案最大不超過10 MB,檔案較大可拆分為多個檔案上傳。
一個帳號上傳的所有檔案大小總和不超過100 GB。
批量處理的API檔案格式為.jsonl檔案。
其中,每一行包含對API單個請求的詳細資料,每行本文欄位中的參數必須包含body和唯一的custom_id值。body支援的參數請參見輸入參數。
檔案格式請參考:
{"custom_id": "request-1", "body": {"model": "pai-judge", "messages": [{"role": "user", "content": [{"mode": "single", "type": "json", "json": {"question": "According to the first couplet, give the second couplet. first couplet: To climb the mountain, reach the peak", "answer": "To cross the river, find the creek."}}]}]}} {"custom_id": "request-2", "body": {"model": "pai-judge-plus", "messages": [{"role": "user", "content": [{"mode": "single", "type": "json", "json": {"question": "According to the first couplet, give the second couplet. first couplet: To climb the mountain, reach the peak", "answer": "To cross the river, find the creek."}}]}]}}
步驟二:上傳批量資料
通過球證模型上傳資料介面,將批量資料上傳至服務端,擷取唯一的file_id值。
請求樣本。
import os from openai import OpenAI def main(): base_url = "https://aiservice.cn-hangzhou.aliyuncs.com/v1" judge_model_token = os.getenv("JUDGE_MODEL_TOKEN") client = OpenAI( api_key=f'Authorization: Bearer {judge_model_token}', base_url=base_url ) upload_files = client.files.create( file=open("/home/xxx/input.jsonl", "rb"), purpose="batch", ) print(upload_files.model_dump_json(indent=4)) if __name__ == '__main__': main()$ curl -XPOST https://aiservice.cn-hangzhou.aliyuncs.com/v1/files \ -H "Authorization: Bearer ${JUDGE_MODEL_TOKEN}" \ -F purpose="batch" \ -F file="@/home/xxx/input.jsonl"返回結果。
{ "id": "file-batch-EC043540BE1C7BE3F9F2F0A8F47D1713", "object": "file", "bytes": 698, "created_at": 1742454203, "filename": "input.jsonl", "purpose": "batch" }
步驟三:建立批量任務
上傳檔案後,使用輸入檔案的file_id建立批量任務。
本文假設file_id為file-batch-EC043540BE1C7BE3F9F2F0A8F47D1713。目前,完成視窗只能設定為24小時,建立成功後會返回唯一的batch_id值。
請求樣本。
import os from openai import OpenAI def main(): base_url = "https://aiservice.cn-hangzhou.aliyuncs.com/v1" judge_model_token = os.getenv("JUDGE_MODEL_TOKEN") client = OpenAI( api_key=f'Authorization: Bearer {judge_model_token}', base_url=base_url ) create_batches = client.batches.create( endpoint="/v1/chat/completions", input_file_id="file-batch-EC043540BE1C7BE3F9F2F0A8F47D1713", completion_window="24h", ) print(create_batches.model_dump_json(indent=4)) if __name__ == '__main__': main()$ curl -XPOST https://aiservice.cn-hangzhou.aliyuncs.com/v1/batches \ -H "Authorization: Bearer ${JUDGE_MODEL_TOKEN}" \ -d '{ "input_file_id": "file-batch-EC043540BE1C7BE3F9F2F0A8F47D1713", "endpoint": "/v1/chat/completions", "completion_window": "24h" }'返回結果。
{ "id": "batch_66f245a0-88d1-458c-8e1c-a819a5943022", "object": "batch", "endpoint": "/v1/chat/completions", "errors": null, "input_file_id": "file-batch-EC043540BE1C7BE3F9F2F0A8F47D1713", "completion_window": "24h", "status": "Creating", "output_file_id": null, "error_file_id": null, "created_at": 1742455213, "in_process_at": null, "expires_at": null, "FinalizingAt": null, "completed_at": null, "failed_at": null, "expired_at": null, "cancelling_at": null, "cancelled_at": null, "request_counts": { "total": 3, "completed": 0, "failed": 0 }, "metadata": null }
步驟四:查看任務狀態
通過batch_id查詢任務的運行狀態,當運行狀態為Succeeded後,返回的response會包含產生的檔案ID:output_file_id。
請求樣本。
import os from openai import OpenAI def main(): base_url = "http://aiservice.cn-hangzhou.aliyuncs.com/v1" judge_model_token = os.getenv("JUDGE_MODEL_TOKEN") client = OpenAI( api_key=f'Authorization: Bearer {judge_model_token}', base_url=base_url ) retrieve_batches = client.batches.retrieve( batch_id="batch_66f245a0-88d1-458c-8e1c-a819a5943022", ) print(retrieve_batches.model_dump_json(indent=4)) if __name__ == '__main__': main()$ curl -XGET https://aiservice.cn-hangzhou.aliyuncs.com/v1/batches/batch_66f245a0-88d1-458c-8e1c-a819a5943022 \ -H "Authorization: Bearer ${JUDGE_MODEL_TOKEN}"返回結果。
{ "id": "batch_66f245a0-88d1-458c-8e1c-a819a5943022", "object": "batch", "endpoint": "/v1/chat/completions", "errors": null, "input_file_id": "file-batch-EC043540BE1C7BE3F9F2F0A8F47D1713", "completion_window": "24h", "status": "Succeeded", "output_file_id": "file-batch_output-66f245a0-88d1-458c-8e1c-a819a5943022", "error_file_id": null, "created_at": 1742455213, "in_process_at": 1742455640, "expires_at": 1742455640, "FinalizingAt": 1742455889, "completed_at": 1742455889, "failed_at": null, "expired_at": null, "cancelling_at": null, "cancelled_at": null, "request_counts": { "total": 3, "completed": 3, "failed": 0 }, "metadata": null }
步驟五:擷取任務結果
通過output_file_id查詢並下載組建檔案內容。
請求樣本。
import os from openai import OpenAI def main(): base_url = "https://aiservice.cn-hangzhou.aliyuncs.com/v1" judge_model_token = os.getenv("JUDGE_MODEL_TOKEN") client = OpenAI( api_key=f'Authorization: Bearer {judge_model_token}', base_url=base_url ) content_files = client.files.content( file_id="file-batch_output-66f245a0-88d1-458c-8e1c-a819a5943022", ) print(content_files) if __name__ == '__main__': main()$ curl -XGET https://aiservice.cn-hangzhou.aliyuncs.com/v1/files/file-batch_output-66f245a0-88d1-458c-8e1c-a819a5943022/content \ -H "Authorization: Bearer ${JUDGE_MODEL_TOKEN}" > output.jsonl返回結果。
{"id":"dcee3584-6f30-9541-a855-873a6d86b7d9","custom_id":"request-1","response":{"status_code":200,"request_id":"dcee3584-6f30-9541-a855-873a6d86b7d9","body":{"created":1737446797,"usage":{"completion_tokens":7,"prompt_tokens":26,"total_tokens":33},"model":"pai-judge","id":"chatcmpl-dcee3584-6f30-9541-a855-873a6d86b7d9","choices":[{"finish_reason":"stop","index":0,"message":{"content":"2+2 equals 4."}}],"object":"chat.completion"}},"error":null} {"id":"dcee3584-6f30-9541-a855-873a6d86b7d9","custom_id":"request-2","response":{"status_code":200,"request_id":"dcee3584-6f30-9541-a855-873a6d86b7d9","body":{"created":1737446797,"usage":{"completion_tokens":7,"prompt_tokens":26,"total_tokens":33},"model":"pai-judge-plus","id":"chatcmpl-dcee3584-6f30-9541-a855-873a6d86b7d9","choices":[{"finish_reason":"stop","index":0,"message":{"content":"2+2 equals 4."}}],"object":"chat.completion"}},"error":null}