feat: 添加深度思考适配
This commit is contained in:
parent
7f8043003c
commit
c87a5b3f0e
|
|
@ -196,7 +196,6 @@ def build_glm_messages(messages: list, files: list | None = None) -> tuple[list,
|
||||||
_SENTINEL = object()
|
_SENTINEL = object()
|
||||||
|
|
||||||
|
|
||||||
# ── 流式 SSE 生成器 ───────────────────────────────────────────────────
|
|
||||||
async def glm_stream_generator(
|
async def glm_stream_generator(
|
||||||
messages: list,
|
messages: list,
|
||||||
model: str,
|
model: str,
|
||||||
|
|
@ -255,6 +254,9 @@ async def glm_stream_generator(
|
||||||
|
|
||||||
loop = asyncio.get_running_loop()
|
loop = asyncio.get_running_loop()
|
||||||
|
|
||||||
|
full_reasoning = "" # 累计思考内容(用于判断是否首次)
|
||||||
|
full_content = "" # 累计正式回答(用于判断是否首次)
|
||||||
|
|
||||||
while True:
|
while True:
|
||||||
item = await loop.run_in_executor(None, chunk_queue.get)
|
item = await loop.run_in_executor(None, chunk_queue.get)
|
||||||
|
|
||||||
|
|
@ -268,17 +270,40 @@ async def glm_stream_generator(
|
||||||
|
|
||||||
try:
|
try:
|
||||||
delta = item.choices[0].delta
|
delta = item.choices[0].delta
|
||||||
|
reasoning = getattr(delta, "reasoning_content", "") or ""
|
||||||
text = getattr(delta, "content", "") or ""
|
text = getattr(delta, "content", "") or ""
|
||||||
if not text:
|
|
||||||
|
delta_str = ""
|
||||||
|
|
||||||
|
# ── 思考过程(reasoning_content)────────────────────────
|
||||||
|
if reasoning:
|
||||||
|
if not full_reasoning:
|
||||||
|
# 首个思考片段:加 Markdown 引用块标题
|
||||||
|
delta_str += "> **💭 深度思考过程:**\n> \n> "
|
||||||
|
full_reasoning += reasoning
|
||||||
|
# 引用块内换行需在每行前加 `> `
|
||||||
|
delta_str += reasoning.replace("\n", "\n> ")
|
||||||
|
|
||||||
|
# ── 正式回答(content)──────────────────────────────────
|
||||||
|
if text:
|
||||||
|
if not full_content and full_reasoning:
|
||||||
|
# 思考结束后首次出现正式回答:加分隔线
|
||||||
|
delta_str += "\n\n---\n\n"
|
||||||
|
full_content += text
|
||||||
|
delta_str += text
|
||||||
|
|
||||||
|
if not delta_str:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
data = {
|
data = {
|
||||||
"id": f"chatcmpl-{generate_unique_id()}",
|
"id": f"chatcmpl-{generate_unique_id()}",
|
||||||
"object": "chat.completion.chunk",
|
"object": "chat.completion.chunk",
|
||||||
"created": get_current_timestamp(),
|
"created": get_current_timestamp(),
|
||||||
"model": actual_model,
|
"model": actual_model,
|
||||||
"choices": [{"index": 0, "delta": {"content": text}, "finish_reason": None}],
|
"choices": [{"index": 0, "delta": {"content": delta_str}, "finish_reason": None}],
|
||||||
}
|
}
|
||||||
yield f"data: {json.dumps(data, ensure_ascii=False)}\n\n"
|
yield f"data: {json.dumps(data, ensure_ascii=False)}\n\n"
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print(f"[GLM] chunk 解析异常:{e}")
|
print(f"[GLM] chunk 解析异常:{e}")
|
||||||
|
|
||||||
|
|
@ -293,6 +318,7 @@ async def glm_stream_generator(
|
||||||
yield "data: [DONE]\n\n"
|
yield "data: [DONE]\n\n"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# ── 非流式调用 ────────────────────────────────────────────────────────
|
# ── 非流式调用 ────────────────────────────────────────────────────────
|
||||||
def glm_chat_sync(
|
def glm_chat_sync(
|
||||||
messages: list,
|
messages: list,
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue