Agent 跑起来容易,跑得好难——Litefuse 用 EDD 闭环让效果可量化

2026-05-18 17 预计阅读时间:1 分钟
来源:my.oschina.net AI 摘要 原文链接

免责声明:本文为 AI 摘要整理,建议结合原文阅读。摘要可能省略上下文、版本差异或边界条件,不作为官方说明。

预计阅读时间:11 分钟

Agent 应用上线后最头疼的事:用户说"回答不对",你打开日志一看,几十步 tool call 链路交织,到底哪一步出了问题?是 prompt 没写清楚,还是工具选错了,又或者上下文窗口溢出了?没有结构化的追踪和量化指标,优化就像蒙眼调参。

Litefuse 刚发布,主打的就是这件事——让 Agent 的执行过程可追踪、问题可定位、效果可量化、优化可验证。它提出的核心方法论叫 EDD(Evaluation Driven Development),即"观测 → 评估 → 优化"闭环。同时官方宣称成本比 Langfuse 低 88%,对团队预算是个实际考量。

Agent 为什么需要"评估驱动"

传统软件开发有测试驱动(TDD):先写测试,再写实现,测试不过就不交付。Agent 开发目前普遍缺少这一环——大多数人写完 prompt 就上线,靠人工抽检判断质量。

EDD 把这个缺口补上,思路分三步:

  • 观测(Observe):记录 Agent 每一步的输入、输出、工具调用、耗时、token 消耗,形成完整 trace。
  • 评估(Evaluate):对 trace 打分——不是笼统的"好/不好",而是针对具体维度(准确率、合规性、响应时长、成本效率)量化。
  • 优化(Optimize):根据评估结果定向改 prompt、调工具选择策略、换模型,改完再跑评估验证效果。

关键区别在于:评估不是事后抽检,而是开发流程中的必经关卡。每次改动都要过评估,效果变差立刻可见。

Litefuse 的核心能力拆解

Trace 级别的全链路追踪

Litefuse 把一次 Agent 执行拆成 span 粒度——每个 LLM 调用、每个 tool execution、每个决策分支都是独立 span。你可以看到:

  • 哪一步耗时最长
  • 哪一步 token 消耗异常
  • 哪一步返回了空结果或错误
  • 整条链路的累积延迟和成本

这比只看"最终回答对不对"有用得多。一个 Agent 可能最终答案正确,但中间绕了 5 步冗余调用,成本翻倍,用户体感也慢。Trace 数据让这些问题暴露出来。

量化评估体系

Litefuse 支持多种评估方式:

  • LLM-as-judge:用另一个模型对输出打分(如 GPT-4 评判回答质量)
  • 规则匹配:正则、关键词、JSON schema 校验
  • 人工标注:对关键 trace 人工打分,建立 golden dataset

评估结果不是单一分数,而是按维度拆开——准确率、完整性、安全性、延迟、成本各一条曲线。你可以看到"准确率提升了,但成本也涨了 30%"这种 tradeoff,而不是一个模糊的"好像好了一点"。

成本对比

官方数据是比 Langfuse 低 88%。这个数字需要结合实际用量验证,但方向是明确的:Litefuse 做了存储和计算层的精简,trace 数据采用压缩存储,评估任务支持本地执行而非全量走云端。对于日均百万级 span 的团队,成本差异会非常直观。

实操:用 Litefuse 接入一个 Agent 并跑评估

下面用一个最小可运行的示例展示接入流程。假设你有一个简单的 RAG Agent,用 OpenAI API + 自定义检索工具。我们用 Litefuse 的 Python SDK 把 trace 和评估接进来。

注意:Litefuse SDK 的具体 API 可能随版本迭代变化,以下示例基于发布文档描述的接口风格,实际使用时请对照官方最新文档调整参数名。

# 安装依赖
# pip install litefuse openai

import os
from openai import OpenAI
from litefuse import LitefuseClient, EvaluationConfig

# 1. 初始化 Litefuse 客户端
lf = LitefuseClient(
    public_key=os.environ["LITEFUSE_PUBLIC_KEY"],
    secret_key=os.environ["LITEFUSE_SECRET_KEY"],
    # 可选:自托管地址,进一步降低成本
    # host="http://your-self-hosted-litefuse:3000"
)

# 2. 创建一个 trace,代表一次完整的 Agent 执行
trace = lf.trace(
    name="rag-agent-query",
    metadata={"user_id": "u-1234", "session_id": "s-5678"},
    tags=["production", "v1.2"]
)

# 3. 在 trace 内记录 LLM 调用(span)
client = OpenAI()

with trace.span(name="llm-generate", kind="llm") as llm_span:
    response = client.chat.completions.create(
        model="gpt-4o-mini",
        messages=[
            {"role": "system", "content": "你是一个知识助手,根据检索结果回答问题。"},
            {"role": "user", "content": "什么是 EDD?"}
        ],
        temperature=0.3
    )
    answer = response.choices[0].message.content

    # 把输入输出和 token 用量记录到 span
    llm_span.update(
        input={"messages": [
            {"role": "system", "content": "你是一个知识助手..."},
            {"role": "user", "content": "什么是 EDD?"}
        ]},
        output={"content": answer},
        usage={
            "prompt_tokens": response.usage.prompt_tokens,
            "completion_tokens": response.usage.completion_tokens,
            "total_tokens": response.usage.total_tokens
        }
    )

# 4. 记录工具调用 span(模拟检索)
with trace.span(name="tool-search", kind="tool") as tool_span:
    # 实际项目中这里调用你的向量数据库
    search_results = ["EDD 是评估驱动开发方法论..."]
    tool_span.update(
        input={"query": "什么是 EDD?", "top_k": 3},
        output={"results": search_results},
        status="success"
    )

# 5. 结束 trace
trace.update(output={"answer": answer})
trace.end()

# 6. 配置并运行评估
eval_config = EvaluationConfig(
    name="rag-quality-v1",
    # LLM-as-judge:用模型评判回答质量
    evaluations=[
        {
            "type": "llm_judge",
            "model": "gpt-4o-mini",
            "prompt": (
                "请评估以下回答的质量,按 1-5 分打分。\n"
                "维度:准确性、完整性、简洁性。\n"
                "问题:什么是 EDD?\n"
                "回答:{answer}\n"
                "请输出 JSON:{\"accuracy\": N, \"completeness\": N, \"conciseness\": N}"
            ),
            "input_mapping": {"answer": "$.trace.output.answer"}
        },
        # 规则评估:检查回答长度是否合理
        {
            "type": "rule",
            "rule": "len(answer) >= 50 and len(answer) <= 500",
            "input_mapping": {"answer": "$.trace.output.answer"}
        }
    ]
)

result = lf.evaluate(trace_id=trace.id, config=eval_config)
print(f"评估结果: {result.scores}")
# 示例输出: {"accuracy": 4, "completeness": 3, "conciseness": 4, "rule_length": True}

运行后,Litefuse 的 Web UI 上你能看到:

  • 这条 trace 的完整 span 链路图
  • 每个 span 的耗时和 token 消耗
  • 评估分数的维度拆解
  • 与历史 trace 的对比趋势

自托管进一步压成本

如果团队对数据出墙有顾虑,或者 span 量级大到云端计费仍然不便宜,Litefuse 支持自托管部署。用 Docker 一行拉起来:

# 拉取并启动 Litefuse 自托管服务
docker run -d \
  --name litefuse \
  -p 3000:3000 \
  -e DATABASE_URL=postgresql://postgres:password@pg-host:5432/litefuse \
  -e REDIS_URL=redis://redis-host:6379 \
  -v litefuse-data:/data \
  litefuse/litefuse:latest

# 验证服务可用
curl http://localhost:3000/api/health

自托管后 SDK 的 host 参数指向内网地址,trace 数据不出机房。评估任务也可以在本地跑 LLM-as-judge,用内部部署的模型,成本和隐私都可控。

什么时候值得切换

几个实际判断标准:

场景 建议
Agent 还在原型阶段,只有几十条测试对话 先用任何追踪工具把流程跑通,Litefuse 或 Langfuse 都行
Agent 已上线,日均 span > 10 万,成本开始敏感 认真评估 Litefuse 的成本优势,88% 的差距在这个量级很实在
团队需要量化评估驱动迭代,不只是"看日志" Litefuse 的 EDD 闭环是核心卖点,评估配置和 trace 绑定比手动抽检效率高很多
数据合规要求 trace 不能出墙 自托管是必选项,Litefuse 和 Langfuse 都支持,对比部署复杂度和存储成本

风险提示:Litefuse 刚发布,生态成熟度(社区插件、第三方集成)还不如 Langfuse。如果你的团队已经深度依赖 Langfuse 的特定功能(如 Prompt Playground、某些实验管理特性),切换需要逐项验证替代方案。建议先在非核心 Agent 上试点,确认评估流程和数据迁移无障碍后再全面切换。


Agent 的难点不在"跑起来",而在"跑得好且知道为什么好"。EDD 把评估从可选动作变成必经关卡,Litefuse 把这套关卡的工具成本压到了一个值得认真看的水平。如果你的 Agent 已经到了需要量化优化的阶段,值得一试。


相关推荐