调整总结逻辑,支持流式回复,并且加入深度思考兼容

This commit is contained in:
liuwei
2026-02-04 09:26:41 +08:00
parent 79810eb19c
commit f9defd30d1

View File

@@ -229,8 +229,7 @@ class MessageSummaryPlugin(MessagePluginInterface):
# 设置请求头
headers = {
"Authorization": f"Bearer {self._api_key}",
"Content-Type": "application/json",
"Accept": "text/event-stream"
"Content-Type": "application/json"
}
try:
@@ -239,65 +238,35 @@ class MessageSummaryPlugin(MessagePluginInterface):
async with session.post(self._api_url, headers=headers, json=data) as response:
response.raise_for_status()
self.LOG.info(f"Dify API响应状态码: {response.status}")
ctype = response.headers.get("Content-Type", "")
answer = ""
answer_parts = []
current_event = None
data_buffer = []
async for raw_line in response.content:
line = raw_line.decode("utf-8").rstrip("\n")
if not line:
if data_buffer:
payload_str = "\n".join(data_buffer)
try:
payload = json.loads(payload_str)
if current_event == "message":
chunk = payload.get("answer") or ""
if chunk:
answer_parts.append(chunk)
except Exception as e:
self.LOG.debug(f"SSE数据解析失败: {e}")
current_event = None
data_buffer = []
continue
if line.startswith(":"):
continue
if line.startswith("event:"):
current_event = line.split(":", 1)[1].strip()
continue
if line.startswith("data:"):
data_buffer.append(line[5:].strip())
continue
answer = "".join(answer_parts)
spath = None
tokens_info = ""
if "text/event-stream" in ctype:
answer_parts = []
current_event = None
data_buffer = []
async for raw_line in response.content:
line = raw_line.decode("utf-8", errors="ignore").rstrip("\r\n")
if not line:
if data_buffer:
payload_str = "\n".join(data_buffer)
try:
payload = json.loads(payload_str)
if current_event == "message":
chunk = payload.get("answer") or ""
if chunk:
answer_parts.append(chunk)
elif current_event in ("message_end", "end", "completed"):
meta = payload.get("metadata", {})
usage = meta.get("usage", {})
if usage:
pt = usage.get("prompt_tokens", 0)
ct = usage.get("completion_tokens", 0)
tt = usage.get("total_tokens", 0)
tokens_info = f"\n\n【tokens】输入: {pt} 生成: {ct} 总: {tt}"
except Exception as e:
self.LOG.debug(f"SSE数据解析失败: {e}")
current_event = None
data_buffer = []
continue
if line.startswith(":"):
continue
if line.startswith("event:"):
current_event = line.split(":", 1)[1].strip()
continue
if line.startswith("data:"):
data_buffer.append(line[5:].strip())
continue
answer = "".join(answer_parts)
if tokens_info:
answer += tokens_info
else:
try:
response_data = await response.json()
self.LOG.debug(f"响应数据: {json.dumps(response_data, ensure_ascii=False, indent=2)}")
answer = response_data.get("answer", "") or ""
metadata = response_data.get("metadata", {}) or {}
usage = metadata.get("usage", {}) or {}
if usage:
pt = usage.get("prompt_tokens", 0)
ct = usage.get("completion_tokens", 0)
tt = usage.get("total_tokens", 0)
tokens_info = f"\n\n【tokens】输入: {pt} 生成: {ct} 总: {tt}"
answer += tokens_info
except Exception as e:
self.LOG.error(f"解析非SSE响应失败: {e}")
answer = ""
if answer:
try:
timestamp = int(time.time())