看板 Soft_Job 關於我們 聯絡資訊
※ 引述《pacino (掃地僧)》之銘言: : 看了這兩串, 充滿了疑問.. : 想討論一下這個主題: token : (1) 每個LLM 都有自己的max. tokens : 這是在training model時就要決定的 : (2) max output tokens是讓agent在送給LLM 之前處理用的,避免超過LLM model的max. to : (3) rules 沒被執行,有可能是context可能超過LLM model的max. tokens, agent 主動壓? : 這樣不就解釋了兩串原po的問題? : 麻煩指正,若我的了解有誤。 CLAUDE_CODE_MAX_OUTPUT_TOKENS 用途:用來指定LLM單次最多回答多少tokens。 但這個長度控制,不是由LLM或agent來控制的。 也不是放在prompt給LLM做推理判斷長度的。 LLM只是一堆權重與計算。 不是真正有action的程式,不會自己決定輸出長度。只會被動的等待輸入,計算輸出。 LLM會停止輸出,全部是靠寫死的程式碼控制。 (非AI自己決定停止) 以下舉幾個例子: 1.正常情況: 沒用滿模型token最大長度限制,就得到答案。 機制如下: 應用層的model serving 程式碼 (例如用vllm假設) 看到LLM這是是輸出 EOS (end-of-sentence) token。 tokens,停止繼續使用LLM推理。 決定停止推理下一個token的不是LLM 而是應用層,程式碼碼寫死:看到了各模型輸出了特殊的EOS,請應用層停止再使用LLM。 對模型來說,輸出EOS是沒特殊意義的, 就是機率+ decoding strategy決定的。 LLM不會因為輸出EOS有什麼行動。 賦予EOS要停止使用LLM的是應用層。 簡單說:停止答案繼續輸出,的絕對不是LLM自己決定的。 2. 模型一直輸出,但輸出太長了還是沒算出答案 也就是一直輸出,但沒算出EOS token。 這種情況,也不是LLM在控制長度, 而是應用層在處理太長的問題。 這分成兩種情況: 1. model serving層有做防呆機制,發現長度太長了,所以直接不使用llm產生next token,是回傳訊息到上一層訊息,讓上一層決定怎麼處理。 (大家看到市面上產品,都是走這種方式) 所以會看到 claude產品會輸出提示訊息。 所以,長度控制,也不是LLM決定的,是應用層model serving決定的。也可以說人去設定的。 2. 沒做防呆機制,直接丟過長的文字(或tensor)給LLM去推理。這是也是看推理層程式碼有沒有防呆,例如,如果是走pytorch,就是直接跳error程長度不一致,直接結束process。 長度不符,根本進不去,LLM做計算。 以上所有情況可發現: LLM本身不決定輸出長度,全部是其他應用層決定的。 硬要扯:LLM會自己決定輸出EOS,要求停止。 這也是觀念錯誤,EOS對LLM沒有特殊意義。 EOS是應用層賦予的意義。 你也可以寫成看到EOS不要停止的問答系統。 (許多model serving tools都可以改EOS) 最後回答最初那篇: 64K輸出長度限制都沒終結答案。 也輸出過程大概都超過 3000行文字或程式碼了。 通常有兩種改善方向: 1. prompt要更明確,縮減範圍。 2.把複雜任務,拆小一點,每個session解決一個小問題。 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 27.247.193.27 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Soft_Job/M.1772900896.A.06D.html
umum29: 感謝分享運作邏輯 除了工具運用外 其實了解底層運作很重要 03/08 00:50
viper9709: 感謝分享 03/08 01:33