λÖãºÊ×Ò³ > ½ø½×½Ì³Ì > ÎªÊ²Ã´Í¬Ò»¸ö½Ó¿Úÿ´Î·µ»Ø¶¼²»Í¬£¿´óÄ£ÐͿɿ¿¶ÏÑÔд·¨½âÎö

Ϊʲôͬһ¸ö½Ó¿Úÿ´Î·µ»Ø¶¼²»Í¬£¿´óÄ£ÐͿɿ¿¶ÏÑÔд·¨½âÎö

ʱ¼ä£º2026-08-12  |  ×÷Õߣº318050  |  ÔĶÁ£º0

AI ²âÊÔ¿ª·¢ÃæÊÔ¸ßÆµÌ⣺¡°´óÄ£Ð͵ÄÊä³öÊDz»È·¶¨µÄ£¬ÄãÔõô×ö×Ô¶¯»¯²âÊÔ£¿¡±

ÕâÆªÓÃÒ»¸öÕæÊµÏßÉϹÊÕÏ£¬ÍêÕû»¹Ô­ AI ²âÊÔ¿ª·¢¹¤³ÌʦµÄ´¦Àí¹ý³Ì¡£

ÖØµã°üÀ¨£ºÔõô¶¨Î»¡¢Ôõôд´úÂë¡¢×îºó³Áµí³Éʲô·½·¨¡£

Ò»¡¢ÕæÊµ¹ÊÕÏ£º¶ÏÑÔÌìÌìºì£¬ºóÀ´ÓÐÈ˰ÑËü¹ØÁË

ijµçÉ̹«Ë¾µÄÖÇÄܿͷþÏîÄ¿À²âÊÔ¹¤³ÌʦСÖܸø¡°¶©µ¥×´Ì¬²éѯ¡±Õâ¸ö LLM ½Ó¿ÚдÁË×Ô¶¯»¯ÓÃÀý£¬¶ÏÑÔдµÃºÜ´«Í³£º

```python

assert response.text == "ÄúµÄ¶©µ¥ TEST-1001 ÒÑ·¢»õ£¬Ô¤¼Æ3ÌìÄÚËÍ´ï"

```

¸ÕÉÏÏßÄÇÒ»ÖÜ£¬ÕâÌõÓÃÀý¼¸ºõÌìÌì°Ñ CI ´òºì¡£

Ã÷Ã÷ιµÄÊÇͬһ·ÝÊäÈ룬ģÐͽñÌì»ØµÄÊÇ¡°ÒÑ·¢»õ£¬Ô¤¼Æ3ÌìËʹ£¬Ã÷ÌìÓÖ±ä³É¡°ÄúºÃ£¬°ü¹üÒÑÔÚ·ÉÏÀ²~¡±£¬µ½Á˺óÌ죬¸É´àÖ±½ÓÇгÉÁË markdown ÁÐ±í¡£

СÖÜÒ»¿ªÊ¼»¹ÊÔ×ŰѶÏÑÔ·Å¿í£¬¸Ä³É `assert "·¢»õ" in response.text`¡£

À´»ØÕÛÌÚÁ˼¸ÂÖÖ®ºó£¬ËûʵÔÚûÁËÄÍÐÄ£¬Ë÷ÐÔ°ÑÓÃÀýÖ±½Ó½ûÓã¬Ö»ÁôÏÂÒ»¾ä±¸×¢£º¡°LLM Êä³öËæ»ú£¬¶ÏÑÔûÒâÒ塱¡£

ÈýÖܺ󣬰ëÒ¹¸æ¾¯£º¶©µ¥²éѯ¹¦ÄÜÕûÌå²»¿ÉÓá£

ÅŲ鷢ÏÖ£¬Ä£ÐÍÊä³öÇÄÇıä³ÉÁË¡°´ø markdown ´úÂë¿éµÄ JSON¡±¡ª¡ªÄÚÈÝÆäʵû´í£¬µ«ÏÂÓηþÎñÖ±½Ó `json.loads()`£¬Óöµ½ ``` °ü¹ü¾ÍÅ×Òì³£¡£

ÖÂÃüµÄÊÇ£¬ÕâÌõÓÃÀýÔç¾Í±»½ûÓÃÁË£¬·¢²¼Ç°Ã»ÓÐÈκÎÀ¹½Ø£¬¹ÊÕϳÖÐøÁË 40 ·ÖÖÓ¡£

¸´ÅÌʱÍŶӲÅÒâʶµ½£º²»ÊÇ´óÄ£ÐͲ»Äܲ⣬¶øÊÇÓþ«È·Æ¥ÅäµÄ¾É˼·ȥ²â£¬Ò»¶¨»á¾­Àú¡°ÌìÌìÎó±¨ ¡ú Âé±Ô·ÅÆú ¡ú ¹ÊÕÏÂã±¼¡±Õâ¸öËÀÍöÑ­»·¡£

¶þ¡¢ÏÈÆÆ³ýÒ»¸öÎóÇø£ºtemperature=0 Ò²²»±£Ö¤Öð×ÖÏàͬ

ÃæÊÔÀïºÜ¶àÈ˵ÚÒ»·´Ó¦ÊÇ£º¡°°Ñ temperature Éè³É 0£¬Êä³ö²»¾Í¹Ì¶¨ÁËÂ𣿡±

»¹²»¹»¡£

°Ñ temperature ÉèΪ 0£¬±¾ÖÊÉÏÖ»ÊÇÈòÉÑù¹ý³ÌÍË»¯³ÉÖ±½ÓÑ¡Ôñ×î´ó¸ÅÂ浀 token£»µ«·þÎñ¶ËÏñ continuous batching¡¢¸¡µãÀÛ¼Ó˳Ðò¡¢²¢ÐнâÂëÕâÀàʵÏÖ²ãÃæµÄϸ½Ú£¬ÒÀÈ»¿ÉÄÜÈÃͬһ¶ÎÊäÈë³öÏÖϸ΢µÄ´ë´Ç²¨¶¯¡£

ÕâÒ»µãÆäʵÔç¾ÍÊǹ«¿ªµÄÒÑÖªÏÖÏó£¬ÔÚ OpenAI ¹Ù·½ÂÛ̳ºÍ GitHub issue ÀïÒѾ­±»·´¸´ÌÖÂÛ¹ýºÜ¶à´Î¡£

ËùÒÔÕýÈ·µÄÄ¿±ê²»ÊÇ¡°Öð×ÖÏàµÈ¡±£¬¶øÊǰѶÏÑԷֲ㣺»úÆ÷ÄÜÎȶ¨µÄ²¿·ÖÓÃÓ²¶ÏÑÔËøËÀ£¬ÓïÑÔÌìÈ»Æ¯ÒÆµÄ²¿·ÖÓÃÈí¶ÏÑÔ¶µ×¡¡£

Èý¡¢ºËÐÄ´úÂ룺ËIJã¶ÏÑÔ²ßÂÔ

µÚ 1 ²ã£ºÇëÇó²àÏÈÔ¼ÊøÊä³ö

Äܽṹ»¯µÄ¾ø²»×ÔÓÉ·¢»Ó¡£

`temperature=0` + ½á¹¹»¯Êä³ö£¬¿ÉÒÔ°Ñ 80% µÄ²»È·¶¨ÐÔÔÚÔ´Í·Æþµô£º

```python

import json

from openai import OpenAI

client = OpenAI()

def ask_order_status(order_id: str) -> str:

resp = client.chat.completions.create(

model="gpt-4o-mini",

temperature=0,

response_format={"type": "json_object"}, # Ç¿ÖÆ JSON Êä³ö

messages=[

{"role": "system", "content": (

"ÄãÊǿͷþÖúÊÖ£¬Ö»·µ»Ø JSON£º"

'{"status": "shipped|pending|refunding", "summary": "²»³¬¹ý30×Ö"}'

)},

{"role": "user", "content": f"²éѯ¶©µ¥ {order_id} µÄ״̬"},

],

)

return resp.choices[0].message.content

```

µÚ 2¡¢3 ²ã£º¸ñʽӲ¶ÏÑÔ + ÓïÒåÈí¶ÏÑÔ£¨LLM-as-Judge£©

¸ñʽ¡¢×ֶΡ¢Ã¶¾ÙÖµÕâЩ¡°»úÆ÷ÆõÔ¼¡±£¬±ØÐëÓ²¶ÏÑÔ£¬Ò»¸ö×Ö·û¶¼²»ÄÜÈá£

ÓïÒå´ë´ÇÔò½»¸ø²ÃÅÐÄ£ÐÍÅжϣº

```python

JUDGE_PROMPT = """ÄãÊÇÑϸñµÄ²âÊÔÆÀÉóÔ±¡£

²Î¿¼´ð°¸£º{expected}

Ä£ÐÍʵ¼ÊÊä³ö£º{actual}

ÅжÏʵ¼ÊÊä³öÓë²Î¿¼´ð°¸ÓïÒåÊÇ·ñÒ»Ö£¬ÇÒ²»º¬ÊÂʵ´íÎó¡£

Ö»·µ»Ø JSON£º{{"pass": true/false, "reason": "..."}}"""

def assert_llm_output(actual: str, expected: str):

# ¡ª¡ª µÚ2²ã£º¸ñʽӲ¶ÏÑÔ£¨¸´ÏÖ¹ÊÕϵĹؼü·ÀÏߣ©¡ª¡ª

data = json.loads(actual)# ²»ÊǺϷ¨ JSON Ö±½Óʧ°Ü

assert {"status", "summary"} <= set(data), "ȱÉÙ±ØÐè×Ö¶Î"

assert data["status"] in {"shipped", "pending", "refunding"}, "ö¾ÙÖµ·Ç·¨"

# ¡ª¡ª µÚ3²ã£ºÓïÒåÈí¶ÏÑÔ£¨LLM-as-Judge£©¡ª¡ª

verdict = client.chat.completions.create(

model="gpt-4o", temperature=0,

messages=[{"role": "user",

"content": JUDGE_PROMPT.format(expected=expected, actual=actual)}],

)

result = json.loads(verdict.choices[0].message.content)

assert result["pass"], f"ÓïÒå¶ÏÑÔʧ°Ü£º{result['reason']}"

```

×¢Ò⣬²ÃÅÐÄ£ÐÍҪѡ±È±»²âÄ£Ð͸üÇ¿µÄÐͺš£

²¢ÇÒ²ÃÅеÄÌáʾ´Ê¡¢Î¶ȶ¼Òª¹Ì¶¨¡ª¡ª²ÃÅб¾ÉíÒ²Òª¡°¿É¸´ÏÖ¡±¡£

µÚ 4 ²ã£ºÎȶ¨ÐÔ²âÊÔ£¬Óá°Ò»ÖÂÐÔÂÊ¡±Ìæ´úµ¥´ÎÅж¨

µ¥´Îͨ¹ý²»Ëãͨ¹ý¡£

ͬÑùµÄÊäÈëÅÜ N ´Î£¬¸ñʽһÖÂÐÔ±ØÐëÊÇ 100%£¬ÓïÒåÒ»ÖÂÐÔ¸øÒ»¸ö¿É½ÓÊܵÄãÐÖµ£º

```python

def test_output_stability(n=10):

results = []

for _ in range(n):

raw = ask_order_status("TEST-1001")

json.loads(raw)# ÈκÎÒ»´Î¸ñʽʧ°Ü¶¼Ë㲻ͨ¹ý

results.append(json.loads(raw))

semantic_ok = sum(r["status"] == "shipped" for r in results)

rate = semantic_ok / n

assert rate >= 0.9, f"ÓïÒåÒ»ÖÂÐÔÂÊ {rate:.0%}£¬µÍÓÚãÐÖµ 90%"

```

ÕâÌõÓÃÀý¾ÍÊÇСÖÜÍŶӸ´Å̺ó²¹Éϵġ£

Ëü²»¹ÜÄ£ÐÍÔõô´ë´Ç£¬Ö»Òª 10 ´ÎÀïÓÐ 1 ´Î¸ñʽ²»¶Ô£¬CI Á¢¿Ìºì¡ª¡ª¹ÊÕÏÀïÄÇÖÖ¡°¸ñÊ½Æ¯ÒÆ¡±´Ó´Ë²»¿ÉÄܾ²Ä¬ÉÏÏß¡£

ËÄ¡¢³Áµí³É·½·¨£ºAI ²âÊÔ¿ª·¢µÄ¶ÏÑÔËIJãÄ£ÐÍ

  • L1 ÇëÇó²àÔ¼Êø£ºÊä³ö¸ñʽ£»·½Ê½ÊÇ temperature=0¡¢response_format¡¢Ñϸñ schema£»Ä¿±êÊÇ´ÓÔ´Í·¼õÉÙÆ¯ÒÆ¡£
  • L2 ¸ñʽӲ¶ÏÑÔ£ºJSON ½á¹¹¡¢×ֶΡ¢Ã¶¾Ù£»·½Ê½ÊÇ´úÂë¶ÏÑÔ£»ÈÝÈ̶ÈÊÇÁãÈÝÈÌ¡£
  • L3 ÓïÒåÈí¶ÏÑÔ£ºÄÚÈÝÕýÈ·ÐÔ£»·½Ê½ÊÇ LLM-as-Judge / G-Eval£»ÈÝÈ̶ÈÊÇãÐÖµÖÆ£¨Èç ¡Ý0.8£©¡£
  • L4 Îȶ¨ÐÔ¶ÏÑÔ£ºÒ»ÖÂÐÔÂÊ£»·½Ê½ÊǶà´Î²ÉÑùͳ¼Æ£»ÒªÇóÊǸñʽ 100%£¬ÓïÒå ¡Ý90%¡£

ÅäÌ×Á½Ìõ¹¤³Ì¼ÍÂÉ£º

  • ½ûÖ¹½ûÓÃʧ°ÜÓÃÀý¡£LLM ÓÃÀýºìÁË£¬ÒªÃ´ÐÞ¶ÏÑÔ£¬ÒªÃ´ÐÞÄ£ÐÍ£¬²»Ðí¹Øµô¡£
  • ²ÃÅÐÌáʾ´ÊÄÉÈë°æ±¾¹ÜÀí¡£²ÃÅбä¸üÒ²Òª×߻ع顣

¿ªÔ´ÉçÇøµÄ DeepEval£¨G-Eval Ö¸±ê£©¡¢OpenAI Evals ¶¼ÊÇÕâÌ×˼·µÄ³ÉÊìʵÏÖ£¬¿ÉÒÔÖ±½Ó¸´Ó㬲»±Ø´ÓÁãÔì¡£

Îå¡¢ÃæÊÔ×·ÎÊ£¬Äã´ðµÃÉÏÀ´Âð

  • LLM-as-Judge ×Ô¼ºÒ²»á³ö´í¡¢Ò²»áÆ¯ÒÆ£¬Ôõô°ì£¿
    ´ð£º¹Ì¶¨²ÃÅÐÄ£ÐÍÓëÌáʾ´Ê°æ±¾¡¢Î¶ÈÉè 0¡¢¶¨ÆÚÓÃÈ˹¤±ê×¢¼¯Ð£×¼²ÃÅеÄ׼ȷÂÊ£¨²ÃÅеÄ׼ȷÂʱ¾ÉíÒ²ÊÇÒ»¸ö±»²âÖ¸±ê£©¡£
  • Ϊʲô²»Ö±½ÓÓÃÓàÏÒÏàËÆ¶È×öÓïÒå¶ÏÑÔ£¿
    ´ð£ºÏàËÆ¶È¶Ô´ë´ÇÃô¸Ð¡¢¶ÔÊÂʵ²»Ãô¸Ð£¬¡°3 ÌìËʹºÍ¡°5 ÌìËʹÏàËÆ¶ÈºÜ¸ßµ«¶¼ÊÇ´íµÄ£»ÓïÒåÅжϽ»¸ø¸üÇ¿µÄ²ÃÅÐÄ£Ð͸ü¿É¿¿£¬ÏàËÆ¶ÈÖ»ÊʺÏ×ö´Öɸ¡£
  • Îȶ¨ÐÔ²âÊÔÅÜ 10 ´Î³É±¾¸ß¡¢CI Âý£¬ÔõôȨºâ£¿
    ´ð£º·Ö²ãÖ´ÐСª¡ª¸ñʽ¶ÏÑÔÿ´Î PR ÅÜ£»ÓïÒåÓëÎȶ¨ÐÔ²âÊÔÿÍí¶¨Ê±ÅÜÈ«Á¿£¬·¢²¼Ç°ÅÜðÑÌ×Ó¼¯¡£

ÏÂһƪԤ¸æ£º¡¶RAG ÉÏÏߺóΪʲô×Ü¡°´ð·ÇËùÎÊ¡±£¿¡ª¡ª»Æ½ðÊý¾Ý¼¯Óë¼ìË÷ÖÊÁ¿ÆÀ²â¡·

Ϊʲôͬһ¸ö½Ó¿Úÿ´Î·µ»Ø¶¼²»Í¬£¿´óÄ£ÐͿɿ¿¶ÏÑÔд·¨½âÎö_wishdown.com

À´Ô´:ÕûÀí×Ô»¥ÁªÍø
ÃâÔðÉùÃ÷£ºÎÄÖÐͼÎľùÀ´×ÔÍøÂ磬ÈçÓÐÇÖȨÇëÁªÏµÉ¾³ý£¬ÐÄÔ¸ÓÎÏ··¢²¼´ËÎĽöΪ´«µÝÐÅÏ¢£¬²»´ú±íÐÄÔ¸ÓÎÏ·ÈÏͬÆä¹Ûµã»ò֤ʵÆäÃèÊö¡£

Ïà¹ØÎÄÕÂ

¸ü¶à

¾«Ñ¡ºÏ¼¯

¸ü¶à

´ó¼Ò¶¼ÔÚÍæ

ÈÈÃÅ»°Ìâ

´ó¼Ò¶¼ÔÚ¿´

¸ü¶à