Re: [心得] token maximum
※ 引述《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
推
03/08 00:50,
6小時前
, 1F
03/08 00:50, 1F
推
03/08 01:33,
5小時前
, 2F
03/08 01:33, 2F
討論串 (同標題文章)
完整討論串 (本文為第 4 之 4 篇):
心得
7
13