PentestGPT V2源码研究之langfuse模型记录模块
PentestGPT V2源码研究之langfuse模型记录模块。 Langfuse 是一个专为由大型语言模型(LLM)驱动的应用而设计的开源的可观测性和分析平台。它提供了一系列功能,如跟踪、评估、测试、调试和集成,帮助开发人员和组织构建并改进 LLM 应用程序。
·
文章目录
- PentestGPT V2 gitee镜像仓库地址
- Langfuse 是一个专为由大型语言模型(LLM)驱动的应用而设计的开源的可观测性和分析平台。它提供了一系列功能,如跟踪、评估、测试、调试和集成,帮助开发人员和组织构建并改进 LLM 应用程序。
一 全局变量
- 变量详细说明表
| 变量名 | 类型 | 说明 | 生命周期 |
|---|---|---|---|
_langfuse_client |
Any |
Langfuse SDK v3 客户端实例 | 初始化后 → shutdown |
_current_span |
Any |
顶层 span(相当于 trace) | 首次工具执行时创建 → session 结束时结束 |
_user_id |
str | None |
持久化用户 ID(~/.excalibur/user_id) | 初始化后永久存在 |
_session_target |
str | None |
当前会话目标(IP/URL) | 每次 session 期间有效 |
_pending_session |
dict[str, Any] | None |
等待首次工具执行的会话数据 | running → 首次工具执行时创建 span |
_tool_executed |
bool |
跟踪当前会话是否已执行任何工具 | 每次 session 期间有效 |
二 函数调用关系图
三 函数详细说明表
3.1 初始化函数
init_langfuse(disabled: bool = False) -> bool102
职责: Langfuse 客户端的主入口,负责完整初始化流程。
3.2 事件处理函数(4 个 Handler)
3.2.1 _handle_state(event: Event) -> None
_handle_state(event: Event) -> None167
职责: 处理状态变更事件,管理 session span 的延迟创建和终结。
3.2.2 _handle_message(event: Event) -> None
_handle_message(event: Event) -> None228
职责: 将代理消息作为嵌套 span 处理。
3.2.3 _handle_tool(event: Event) -> None
_handle_tool(event: Event) -> None255
职责: 将工具执行作为嵌套 span 处理,首次工具执行时创建 session span。
3.2.4 _handle_flag(event: Event) -> None
_handle_flag(event: Event) -> None317
职责: 将 flag 检测作为嵌套 span 处理。
3.3 辅助函数
3.3.1 _silence_langfuse_loggers()
_silence_langfuse_loggers() -> None
职责: 静默嘈杂的日志记录器,防止输出污染。
3.3.2 _get_or_create_user_id() -> str
_get_or_create_user_id() -> str
职责: 获取或创建持久化用户 ID。
3.3.3 _subscribe_to_events() -> None
_subscribe_to_events() -> None151
职责: 订阅 EventBus 事件处理器。
3.3.4 shutdown_langfuse() -> None
shutdown_langfuse() -> None346
职责: 刷新并关闭 Langfuse 客户端。
四 完整执行流程时序图
五 Span 层次结构图
- Span 属性说明
| Span 类型 | name 格式 | input | output | metadata |
|---|---|---|---|---|
| Session | excalibur:{target} |
{target, task, status} |
{final_state, target} |
{target, task, version, user_id, session_id} |
| Tool | tool-{name} |
{args} |
- | {tool_name} |
| Message | agent-message |
{message_type} |
{text} |
- |
| Flag | flag-found |
{context} |
{flag} |
{flag, context} |
六 关键设计模式总结
6.1 延迟Span创建(Deferred Span Creation)
- 问题: 避免记录空会话(用户启动但未执行工具就退出)
- 方案:
running状态只存储_pending_session,首次工具执行时才创建 session span - 代码位置:
_handle_state():167 +_handle_tool():255
6.2 静默失败(Silent Failure)
- 问题: 遥测错误不应影响主输出
- 方案: 所有关键操作使用
contextlib.suppress(Exception) - 代码位置: 所有 handler 函数中
6.3 单例模式(Singleton Pattern)
- 问题: 确保全局只有一个 EventBus 实例
- 方案:
_instance+_lock双重检查锁定 - 代码位置:
EventBus.get():72
6.4 观察者模式(Observer Pattern)
- 问题: 解耦事件发布者和订阅者
- 方案: EventBus 作为中心枢纽,handler 函数作为观察者
- 代码位置:
_subscribe_to_events():151
更多推荐
所有评论(0)