feat: 接入langfuse

This commit is contained in:
2026-09-27 17:42:14 +08:00
parent 576791fd4e
commit fb98a10b4c
6 changed files with 354 additions and 35 deletions
+35 -28
View File
@@ -77,34 +77,41 @@ class DecisionEngine:
| {"type": question.type}
for name, question in request.decisions.items()
}
try:
response = await client.system_one(
state=request.state,
questions=questions,
model=request.model,
extra_body=request.extra_body or None,
)
except TypeSafeAPIResponseValidationError as error:
raise DecisionError(
"Jev 返回的数据格式无效",
kind="response_validation",
status=error.status,
request_id=error.request_id,
) from error
except TypeSafeAPIError as error:
raise DecisionError(
f"Jev 请求失败(HTTP {error.status})",
kind="api",
status=error.status,
request_id=error.request_id,
) from error
except TypeSafeAPITimeoutError as error:
raise DecisionError("Jev 请求超时", kind="timeout") from error
except TypeSafeAPIConnectionError as error:
raise DecisionError("无法连接 Jev 服务", kind="connection") from error
except TypeSafeError as error:
raise DecisionError("Jev SDK 调用失败", kind="sdk") from error
return self._parse_response(request, response)
from app.observability.tracing import observe_decision, record_decision
# 观测包在请求外面:成功才记结果,失败仍抛原来的 DecisionError
# generation 为 None 时 record_decision 什么都不做
with observe_decision(request) as generation:
try:
response = await client.system_one(
state=request.state,
questions=questions,
model=request.model,
extra_body=request.extra_body or None,
)
except TypeSafeAPIResponseValidationError as error:
raise DecisionError(
"Jev 返回的数据格式无效",
kind="response_validation",
status=error.status,
request_id=error.request_id,
) from error
except TypeSafeAPIError as error:
raise DecisionError(
f"Jev 请求失败(HTTP {error.status})",
kind="api",
status=error.status,
request_id=error.request_id,
) from error
except TypeSafeAPITimeoutError as error:
raise DecisionError("Jev 请求超时", kind="timeout") from error
except TypeSafeAPIConnectionError as error:
raise DecisionError("无法连接 Jev 服务", kind="connection") from error
except TypeSafeError as error:
raise DecisionError("Jev SDK 调用失败", kind="sdk") from error
parsed = self._parse_response(request, response)
record_decision(generation, parsed)
return parsed
@staticmethod
def _parse_response(