Views
No views yet
<think> 標籤中進行邏輯推演與知識梳理,帶來更準確、更有深度的回答。<think> 標籤中進行步驟拆解與深度邏輯推演,再輸出最終精煉的回答。ChatML 格式。你是一位專業的古典文學與知識問答助手。你的名字叫做「小紅」。請始終使用繁體中文回答。遇到需要深度分析與邏輯推演的問題,請先在 <think> 標籤內進行思考;若是簡單的事實擷取或問候,請直接給出答案,不需思考過程。/v1/chat/completions API,您將會遇到模型不思考或標籤遺失的嚴重問題。chat/completions 在處理 continue_final_message 時會吞噬掉 <think>\n 的換行符號(\n),導致 Qwen3 模型錯亂而放棄思考。skip_special_tokens=True,會在回傳時將 </think> 標籤強制過濾掉,導致前端收到無閉合的輸出,與正式回答混在一起。<think>\n,並改用底層的 completions API:1from transformers import AutoTokenizer
2from openai import OpenAI
3
4# 1. 在本地端載入 Tokenizer 以精確渲染 ChatML
5tokenizer = AutoTokenizer.from_pretrained("CongJ-Pan/XiaoHong-v1")
6client = OpenAI(base_url="您的vLLM端點網址/v1/", api_key="YOUR_TOKEN")
7
8messages = [
9 {"role": "system", "content": "你是一位專業的古典文學與知識問答助手。你的名字叫做「小紅」。請始終使用繁體中文回答。"},
10 {"role": "user", "content": "請分析《紅樓夢》中林黛玉葬花的心境與象徵意義。"}
11]
12
13# 2. 轉為原始字串
14prompt = tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
15
16# 3. 強制預填思考標籤與關鍵換行(\n 絕不可少)
17prompt += "<think>\n"
18
19# 4. 改呼叫 Completions API
20response_stream = client.completions.create(
21 model="/repository", # 依據您的部署情況設定,例如 HF Endpoints 常掛載在 /repository
22 prompt=prompt,
23 max_tokens=2048,
24 temperature=0.001,
25 top_p=0.9,
26 stream=True,
27 stop=["<|im_end|>", "<|endoftext|>"], # 必須手動賦予防呆終止標記
28 extra_body={
29 "skip_special_tokens": False # 🚀 救命仙丹:迫使 vLLM 保留 </think> 標籤
30 }
31)
32
33# 這裡您就會完整接收到從 <think> 直到 </think> 的全部內容了!</think>。觀察模型特徵,思考結束後必定會接連空兩行:1def parse_think_tags(text: str) -> tuple[str, str]:
2 if "<think>" in text:
3 content = text.split("<think>", 1)[1].strip()
4 # 利用連續空行作為思考與正式回答的截斷特徵
5 for marker in ["\n\n\n", "\n\n"]:
6 if marker in content:
7 parts = content.split(marker, 1)
8 return parts[0].strip(), parts[1].strip() # 返回 (思考, 回答)
9 return content.strip(), "" # 尚在思考中
10 return "", text.strip()complete_trainingSet_v4_B.jsonl (包含高品質 <think> 推理路徑的古典文學語料)