phi-agent 0.2.6

phi-agent — General-purpose AI Agent framework (builder factory, renderer, config, session management)
Documentation
# 高级用法

Middleware、会话管理、事件日志等进阶功能。

## Middleware(中间件)

Middleware 在 LLM 调用前后介入 Agent 循环:

```rust
use agent_base::{TurnFactMiddleware, TurnToolLimitMiddleware};

let builder = base_agent_builder(llm_client)
    .system_prompt(system_prompt)
    .middleware(TurnFactMiddleware::new())
    .middleware(TurnToolLimitMiddleware::from_config(&safety));
```

内置中间件:
- `TurnFactMiddleware` — 在每轮开始时注入事实/上下文
- `TurnToolLimitMiddleware` — 强制执行 `max_tool_calls_per_turn` 限制

## 审批处理器

控制哪些工具调用需要人工确认:

```rust
// 全部自动批准(CI / 自动化场景)
use phi_agent::{AutoApprovalHandler, ApprovalMode};
builder = builder.approval_handler(Arc::new(
    AutoApprovalHandler::new(ApprovalMode::Auto)
));

// 全部拒绝(只读 / 预览模式)
builder = builder.approval_handler(Arc::new(
    AutoApprovalHandler::new(ApprovalMode::DenyAll)
));
```

交互式 CLI 审批参见 phi 二进制中的 `CliApprovalHandler`。

## 会话管理

会话用于持久化对话历史和工具调用结果:

```rust
use phi_agent::session::{resolve_session, cleanup_expired_sessions};

// 创建或复用会话
let ctx = resolve_session(Some("my-session"), &base_dir)?;
println!("Session: {} (new: {})", ctx.session_id, ctx.is_new_session);

// 清理过期会话(> 7 天)
let cleaned = cleanup_expired_sessions(&base_dir, 7)?;
println!("Cleaned {} expired sessions", cleaned);
```

会话目录结构:
```
~/.phi-agent/sessions/<id>/
├── session_id           # 会话 ID 标记
├── session.lock         # 独占文件锁
├── session_meta.json    # 创建时间、最后活跃时间
└── turn_001.jsonl       # 每轮事件日志(JSONL)
```

## 事件日志

每轮对话都以 JSONL 格式保存,方便回放和分析:

```rust
use phi_agent::{save_turn_log, event_to_jsonl};

// 保存本轮事件
save_turn_log(&session_ctx, 1, &events, "用户查询内容")?;

// 将单个事件转为 JSONL 行
let line = event_to_jsonl(&event);
```

日志中的事件类型:
- `thought_delta` — LLM 思维过程内容
- `text_delta` — 助手文本输出
- `tool_call_started` / `tool_call_finished` — 工具调用
- `approval_request` — 需要审批的工具调用
- `plan_updated` — 任务计划更新
- `turn_finished` — 轮次汇总(包含耗时和统计信息)

## 系统提示词

phi-agent 提供两种系统提示词变体:

```rust
use phi_agent::{build_system_prompt, build_system_prompt_cn};

// 默认(国际版)
let prompt = build_system_prompt();

// 中国网络环境适配版(优先国内服务,处理 GFW)
let prompt_cn = build_system_prompt_cn();
```

你也可以通过 `builder.system_prompt(...)` 传入完全自定义的提示词。

## 推理 / 思考

控制 LLM 的思维链行为:

```rust
use agent_base::{ReasoningConfig, ReasoningEffort};

// Builder 级别的默认值
builder = builder.reasoning(ReasoningConfig {
    effort: Some(ReasoningEffort::High),
    ..Default::default()
});

// 单轮覆盖
agent.set_reasoning_effort(ReasoningEffort::XHigh).await;
```

推理强度级别及适用场景:
- `Low` — 简单任务,快速响应
- `Medium` — 默认,平衡
- `High` — 复杂的多步骤任务
- `XHigh` — 最困难的问题,最长思考时间

## 编程式使用 Renderer

在 CLI 之外使用渲染器:

```rust
use phi_agent::{
    TerminalRenderer, JsonStreamRenderer, NullRenderer, EventRenderer,
};
use std::io;

// 终端渲染
let mut renderer = TerminalRenderer::new(true, true, true, Box::new(io::stdout()));

// JSON 流渲染(适用于 IDE 集成)
let mut renderer = JsonStreamRenderer::stdout();

// 静默渲染(适用于 Web 后端)
let mut renderer = NullRenderer;
```

## 错误恢复

phi-agent 默认配置了连续失败恢复机制:

```rust
use agent_base::ConsecutiveFailureRecovery;

// 连续 3 次失败 → 停止并说明原因
builder = builder.error_recovery(Arc::new(
    ConsecutiveFailureRecovery::new(3)
));
```