Langfuse可观测性实战:用Harness架构构建财务分析智能体
实际做 LLM 应用开发尤其是智能体Agent类项目时早期最容易被忽视、后期最让人头疼的问题往往不是模型能力而是可观测性。模型返回结果不可控、工具调用链路不透明、评估数据分散在日志里无法对比这些问题在没有统一追踪平台时会严重拖慢迭代速度。Langfuse 正是用来解决这一组问题的开源可观测性与评估平台。本文将以一个财务分析智能体为例完整演示如何基于 Harness 架构搭建应用并接入 Langfuse 完成链路追踪、指标采集与评估闭环。正文会覆盖部署方式、SDK 接入、关键代码、评估脚本、常见故障排查和生产落地建议适合已经能跑通简单 LLM 应用、想往工程化方向走的开发者。1. 先理解 Langfuse 到底解决什么问题1.1 LLM 项目为什么比传统项目更需要可观测性在传统后端项目里一次请求的处理链路相对固定接口收到参数、调用服务、访问数据库、返回结果。排查问题时看日志、看链路追踪、看指标基本就能定位。但 LLM 应用不是这样。一次用户请求可能经历多次模型调用、多次工具调用、多次上下文拼接最终结果还带有概率性。同一个问题换一种措辞答案可能不同同一个模型在不同温度下输出也可能不同。这种不确定性让“看日志猜原因”变得非常困难。财务分析场景尤其明显。用户问“对比今年和去年的毛利率变化”智能体内部可能做了三件事先判断需要哪些财务数据字段再查询数据库或财务接口最后调用模型生成对比结论。如果最终回答里毛利率算错了到底是数据查错了、公式用错了还是模型理解错了没有链路数据这个问题的排查成本极高。Langfuse 把一次完整请求从用户输入到最后输出的全过程记录下来包括每一次模型调用、传入参数、返回结果、耗时、token 消耗等相当于给 LLM 应用装上了全流程回放能力。1.2 Langfuse 的核心对象和术语Langfuse 的核心概念并不复杂搞清楚四个对象就能看懂绝大部分功能Trace一条完整的请求链对应一次用户会话或一次任务执行。一个 Trace 包含若干 Span。SpanTrace 内部的一个阶段例如“调用 SQL 工具”“调用财务计算函数”“调用 LLM 生成结论”。Span 可以嵌套。GenerationSpan 的一种特殊类型专门记录对 LLM 的调用。包含模型名称、请求参数、返回内容、token 统计。Observation以上所有可观测对象的统称。在代码层面所有被追踪的节点都可以视为 Observation。一个典型的财务分析智能体 Trace 结构如下Trace 根节点对应整个分析任务子 Span 包括“工具调用查询利润表”“工具调用计算毛利率”“Generation生成对比分析”。1.3 与 LangSmith、Arize Phoenix 等平台的差异Langfuse 不是唯一的选择。LangSmith 是 LangChain 生态的官方可观测平台但部分功能需要付费Arize Phoenix 在数据科学场景表现不错Promptfoo 更偏向提示词评测DeepEval 则是一个评估框架。Langfuse 的优势在于开源可自托管、部署成本低、追踪和评估功能结合得比较紧社区在 RAG 和 Agent 场景下的实践也较丰富。对于需要私有化部署、数据不出内网的财务类项目自托管 Langfuse 是一个现实可选的方案。平台开源协议自托管追踪评估适用场景LangfuseMIT核心支持完整支持通用 LLM 与 Agent 项目LangSmith闭源不支持完整支持LangChain 深度绑定项目Arize Phoenix开源支持完整偏实验数据科学与 ML 团队Promptfoo开源支持有限偏 Prompt提示词评测与回归DeepEval开源支持无框架级评估流水线集成这些平台并非互斥但新手从 Langfuse 入手学习成本和部署成本都相对友好。2. Harness 架构与财务分析智能体的整体设计2.1 什么是 Harness 架构Harness 这个词在 AI Agent 领域没有唯一标准定义但在工程实践中通常指智能体的运行“套件”或“核心编排层”。它负责把模型、工具、记忆、安全策略组织起来形成一个可控的执行环境。Harness 架构的核心思路是把智能体的能力拆解成若干模块由编排引擎统一调度而不是把所有逻辑塞进一个巨大的 prompt。一个基础的 Harness 架构通常包含以下模块Planner负责拆解任务决定完成用户目标需要哪些步骤。Executor按计划执行步骤调用工具、解析结果、判断是否继续。Tool Registry工具注册中心。所有可被智能体调用的函数、API、数据库查询都注册在这里。Memory会话记忆和短期工作区保存中间结果。Observer观察与日志模块向 Langfuse 上报可观测数据。Evaluator评估模块对智能体的输出进行自动评测。财务分析智能体按这个思路拆解就能把一个复杂的“分析报表”需求变成可管理、可观测、可评估的多个步骤。2.2 财务分析场景需要哪些能力财务分析是一个非常适合 Agent 落地的业务方向因为它的输入结构化程度高、计算规则明确、输出有固定格式。一个面向企业内部的财务分析智能体至少需要四类能力报表数据查询能从财务系统或数据库中读取资产负债表、利润表、现金流量表。财务指标计算能根据公式计算毛利率、净利率、ROE、资产负债率等指标。对比与趋势分析能将当期数据与上期、去年同期、行业均值对比。自然语言报告生成把数据计算结论组织成便于财务人员阅读的分析报告。这些能力单独拆开都不复杂但组合在一起就有很多状态要管理。用户可能问“为什么今年净利率下降了 2 个百分点”也可能问“当前现金流量是否支撑未来三个月的扩产计划”。不同问题需要的工具链完全不同。2.3 为什么财务分析智能体必须接入评估平台财务分析的错误不像闲聊那样无伤大雅。毛利率算错一个百分点可能影响一项投资决策。因此评估必须有据可依。传统做法是准备一组测试问题人工查看模型回答。但随着问题数量增加人工评估的成本越来越高。Langfuse 的价值在于它把评估过程标准化先通过 Trace 把每次执行的数据留存下来再通过评估脚本或人工打标对结果进行评分最后在平台上对比不同版本、不同模型的表现。这样就能在迭代模型或修改 Prompt 后快速发现回归。3. 环境准备与 Langfuse 部署3.1 学习环境和生产环境的版本要求Langfuse 依赖 Node.js、PostgreSQL、Redis 和 Docker。学习环境建议直接用 Docker Compose 起全套服务避免手动安装多个依赖时出现版本错位。生产环境则至少要考虑数据持久化、备份、访问控制和日志采集。部署前先确认本机环境Docker 20.10 及以上Docker Compose v2 及以上。至少 4GB 可用内存。Langfuse 自身占用不高但加上 PostgreSQL 和 Redis建议留足资源。用于测试的客户端环境Python 3.9 及以上建议 Python 3.11。财务数据样例准备 2 到 3 个年度的利润表和资产负债表数据CSV 或 SQLite 均可。如果原始项目没有提供明确的 Langfuse 版本号落地前要先到官方仓库确认最新稳定版本的 Compose 文件。不同版本的数据库迁移脚本和环境变量可能存在差异不要直接复用网上几个月前的配置。3.2 使用 Docker Compose 快速部署 Langfuse下面是一份最小可用的docker-compose.yml包含 Langfuse 服务、PostgreSQL 和 Redis。这里只保留核心配置用于说明思路。实际项目中要根据自己的域名、端口、持久化路径和版本号调整。version: 3.9 services: langfuse: image: langfuse/langfuse:2 restart: unless-stopped depends_on: - db - redis ports: - 3000:3000 environment: DATABASE_URL: postgresql://langfuse:langfusedb:5432/langfuse REDIS_URL: redis://redis:6379 NEXTAUTH_URL: http://localhost:3000 NEXTAUTH_SECRET: my-secret-change-me SALT: my-salt-change-me ENCRYPTION_KEY: my-encryption-key-change-me db: image: postgres:15 restart: unless-stopped environment: POSTGRES_USER: langfuse POSTGRES_PASSWORD: langfuse POSTGRES_DB: langfuse volumes: - langfuse-db-data:/var/lib/postgresql/data redis: image: redis:7 restart: unless-stopped volumes: langfuse-db-data:启动命令docker compose up -d等待服务就绪后访问http://localhost:3000使用注册页面创建第一个账号。首次进入会看到空的项目列表创建一个新项目后项目页面会显示Host URL、Public Key和Secret Key这三个值稍后在 Python SDK 配置中要用到。3.3 关键配置项说明Langfuse 的环境变量并不复杂但有四个值必须认真对待环境变量作用注意事项DATABASE_URLPostgreSQL 连接串生产环境建议使用独立数据库账号不直接用超级用户NEXTAUTH_SECRET登录会话签名密钥必须改为随机长字符串SALT密码哈希盐部署后不要随意改动否则已有用户可能无法登录ENCRYPTION_KEY敏感数据加密密钥需要固定长度丢失后历史敏感数据无法解密这里最容易踩的坑是直接复制网上配置而忘记修改密钥。如果ENCRYPTION_KEY格式不对Langfuse 在启动或读取历史数据时会出现异常。生成一个合规密钥可以用openssl rand -base64 32生产环境还要为 Langfuse 配置 HTTPS 反向代理例如 Nginx并把NEXTAUTH_URL改为实际访问地址否则有可能会影响到认证回调。4. 搭建财务分析智能体项目结构与核心代码4.1 项目结构规划以一个 Python 项目为例按 Harness 架构模块化组织代码。下面的目录结构用于说明思路实际项目可以按团队规范调整。financial_agent/ ├── app/ │ ├── main.py # FastAPI 应用入口接收用户请求 │ ├── harness/ │ │ ├── orchestrator.py # 编排引擎串联各模块 │ │ ├── planner.py # 任务拆解 │ │ ├── executor.py # 执行器 │ │ └── tool_registry.py # 工具注册中心 │ ├── tools/ │ │ ├── financial_data.py # 财务数据查询 │ │ ├── indicators.py # 财务指标计算 │ │ └── report.py # 报告生成辅助 │ ├── llm/ │ │ ├── client.py # LLM 客户端封装 │ │ └── prompts.py # 提示词管理 │ └── telemetry/ │ └── langfuse_setup.py # Langfuse 初始化与追踪配置 ├── data/ │ ├── income_statement.csv │ └── balance_sheet.csv ├── tests/ │ ├── test_indicators.py │ └── test_eval_dataset.py ├── pyproject.toml └── README.md工具注册中心和编排引擎是 Harness 架构的核心。工具不是散落在各个文件里的普通函数而是注册到统一中心供 Planner 和 Executor 按名称调用。这样做的优势是新增一个工具只影响注册表不需要修改 Planner 和 Executor 的主流程。4.2 使用 Langfuse SDK 初始化并创建追踪上下文接入 Langfuse 前先安装依赖pip install langfuse langchain-openai fastapi uvicorn pandas这里使用langfusePython SDK。初始化时需要项目页面提供的三个参数。# app/telemetry/langfuse_setup.py from langfuse import Langfuse langfuse Langfuse( host_urlhttp://localhost:3000, public_keypk-..., secret_keysk-..., debugFalse ) def get_langfuse(): return langfusedebugTrue适合在本机排查 SDK 是否成功上报数据生产环境建议关闭避免日志刷屏。初始化成功后Langfuse 项目控制台会开始出现客户端上报的事件。对于追踪方式推荐使用langfuse.trace()和langfuse.span()装饰器它们能把函数的调用关系自动映射为 Trace 和 Span 的层级结构。from langfuse.decorators import langfuse_context, observe observe(namefinancial-analysis-agent) def run_analysis(user_query: str): # 这里写编排逻辑 result orchestrator.execute(user_query) # 把用户问题写入当前 trace langfuse_context.update_current_trace( inputuser_query, outputresult, metadata{project: financial-agent} ) return resultobserve装饰后函数内部产生的所有 LLM 调用、工具调用会自动挂在当前 Trace 之下不需要手工创建 span。这比手动埋点更直观也不容易漏掉上下文。4.3 财务数据工具与指标计算工具先实现一个读取 CSV 财务数据的工具。这里刻意使用无状态函数便于后续测试和追踪。# app/tools/financial_data.py import pandas as pd from pathlib import Path DATA_DIR Path(__file__).resolve().parents[2] / data def load_income_statement(): df pd.read_csv(DATA_DIR / income_statement.csv) return df.to_dict(orientrecords) def load_balance_sheet(): df pd.read_csv(DATA_DIR / balance_sheet.csv) return df.to_dict(orientrecords)指标计算工具负责把财务数据转换为业务指标。这里要特别强调财务指标的计算公式不能交给模型自由发挥而要用确定性的 Python 函数计算模型只负责选择计算哪个指标和解释结果。# app/tools/indicators.py from decimal import Decimal, ROUND_HALF_UP def calc_gross_margin(revenue, cost_of_goods_sold): if not revenue: raise ValueError(revenue must not be empty) gross_profit Decimal(str(revenue)) - Decimal(str(cost_of_goods_sold)) margin gross_profit / Decimal(str(revenue)) return margin.quantize(Decimal(0.0001), roundingROUND_HALF_UP) def calc_net_margin(net_profit, revenue): if not revenue: raise ValueError(revenue must not be empty) margin Decimal(str(net_profit)) / Decimal(str(revenue)) return margin.quantize(Decimal(0.0001), roundingROUND_HALF_UP) def calc_roe(net_profit, equity): if not equity: raise ValueError(equity must not be empty) roe Decimal(str(net_profit)) / Decimal(str(equity)) return roe.quantize(Decimal(0.0001), roundingROUND_HALF_UP)这里使用Decimal而不是浮点数原因很简单金额类数据对精度敏感浮点运算容易出现 0.1 0.2 不等于 0.3 的问题。财务计算结果如果出现小数位误差在真实业务场景中是很难解释的。4.4 工具注册中心与编排器工具注册中心是一个简单的注册表让智能体知道有哪些工具可用。# app/harness/tool_registry.py from app.tools import financial_data, indicators TOOL_REGISTRY { load_income_statement: { description: 加载利润表数据返回营业收入、营业成本、净利润等字段, function: financial_data.load_income_statement, parameters: [] }, calc_gross_margin: { description: 计算毛利率, function: indicators.calc_gross_margin, parameters: [revenue, cost_of_goods_sold] }, calc_net_margin: { description: 计算净利率, function: indicators.calc_net_margin, parameters: [net_profit, revenue] }, calc_roe: { description: 计算净资产收益率, function: indicators.calc_roe, parameters: [net_profit, equity] } }编排器负责把一次任务分成“理解需求、选择工具、执行计算、生成报告”四个阶段。为控制篇幅下面给出一个简化版本重点展示如何在每一步建立可观测 span。# app/harness/orchestrator.py from langfuse.decorators import observe from app.tools.financial_data import load_income_statement from app.tools.indicators import calc_gross_margin from app.llm.client import llm_generate observe(nameorchestrator.execute) def execute(user_query: str): # 阶段1加载财务数据 income_statement load_income_statement() # 阶段2调用 LLM 决定计算哪些指标 plan llm_generate( system_prompt你是财务分析助手。根据用户问题确定需要计算哪些指标。, user_promptuser_query, modelgpt-4o-mini ) # 阶段3按计划执行确定性计算 # 这里简化处理固定计算最近两年毛利率 current_year income_statement[-1] previous_year income_statement[-2] current_margin calc_gross_margin( current_year[revenue], current_year[cost_of_goods_sold] ) previous_margin calc_gross_margin( previous_year[revenue], previous_year[cost_of_goods_sold] ) # 阶段4生成最终分析报告 report llm_generate( system_prompt基于数据计算结果输出专业、简洁的财务分析报告。, user_promptf本年度毛利率: {current_margin}上年度毛利率: {previous_margin}。, modelgpt-4o-mini ) return report这个实现已经具备了一个最小 Agent 的特征有工具、有计算、有模型生成。但它还不是 Harness 架构的完整形态因为 Planner、Executor、Memory 是揉在一起的。生产项目里建议按模块进一步拆分让 Planner 只输出执行计划Executor 只按计划调用工具每一步都通过观察层上报 Langfuse。4.5 LLM 客户端封装LLM 客户端封装的核心作用是统一模型调用入口让所有模型请求都能自动被 Langfuse 追踪。# app/llm/client.py from openai import OpenAI from langfuse.openai import openai as langfuse_openai client langfuse_openai.OpenAI() def llm_generate(system_prompt: str, user_prompt: str, model: str gpt-4o-mini, temperature: float 0.2) - str: response client.chat.completions.create( modelmodel, temperaturetemperature, messages[ {role: system, content: system_prompt}, {role: user, content: user_prompt} ] ) return response.choices[0].message.content使用langfuse.openai包后OpenAI 原生调用会被自动包装模型名、参数、token 数都会上报。不要在高频路径里手动创建多个 Langfuse 实例一个项目对应一个全局实例即可。4.6 运行一次完整分析创建一个简单的 Python 入口脚本# run_agent.py from app.harness.orchestrator import execute from app.telemetry.langfuse_setup import langfuse if __name__ __main__: user_query 对比分析公司2023年和2024年的毛利率变化并给出原因推断 result execute(user_query) print(result) langfuse.flush()运行后在 Langfuse 控制台刷新页面应该能看到一条名为financial-analysis-agent的 Trace。点开后可以按时间顺序查看编排器的每个阶段。若代码执行正确还会在堆栈中看到两次Generation节点分别对应阶段 2 和阶段 4 的模型调用。5. 企业级评估平台的设计从追踪数据到质量打分5.1 为什么不能只看 Trace 就认为系统可用Trace 能回答“发生了什么”但回答不了“结果好不好”。一个智能体可能完整执行了每一步最终却给出了错误结论。比如模型在阶段 2 明明只需要“选择指标”却把指标的值也猜了进去导致最终报告中的数字和实际计算结果不一致。这类问题只有在评估环节才能暴露。企业级评估平台至少要做三件事准备带标准答案的评测数据集、自动运行评测用例、将评测结果回写 Langfuse 形成可对比的指标报表。5.2 设计评测数据集评测数据集不需要一开始就很大但覆盖的业务场景要全。财务分析场景建议先覆盖五类用例用例类型示例问题期望结果单指标计算2024 年毛利率是多少正确数字多指标对比比较 2023 和 2024 年净利率两个正确数字及变化方向报表查询2024 年营业收入是多少正确数字趋势判断公司近两年盈利趋势如何基于数据的定性结论边界问题2020 年没有数据怎么办明确说明缺失不编造评测用例保存为 JSON 文件[ { id: tc_gross_margin_2024, question: 公司2024年的毛利率是多少, expected_metrics: { gross_margin_2024: 0.4125 }, category: single_metric }, { id: tc_trend_net_margin, question: 对比2023年和2024年的净利率并判断趋势, expected_metrics: { net_margin_2023: 0.1210, net_margin_2024: 0.1502, trend: up }, category: trend } ]不建议一开始就追求“完全自动评估”。可以先做半自动脚本负责计算指标、对比期望值、生成结构化评分最终由财务专家复核高风险的分类。5.3 编写评估脚本并根据结果打标Langfuse Python SDK 支持把评估结果上报到具体 Trace 或 Generation。下面是一个评估脚本的最小示例。# tests/test_eval_dataset.py import json from app.harness.orchestrator import execute from app.telemetry.langfuse_setup import langfuse from langfuse.decorators import langfuse_context def run_evaluation(dataset_path: str): with open(dataset_path, r, encodingutf-8) as f: cases json.load(f) for case in cases: result execute(case[question]) # 这里只做简单的指标匹配实际应根据任务设计更细的评分逻辑 score 1.0 if case[expected_metrics][gross_margin_2024] in result else 0.0 langfuse_context.update_current_trace( nameeval- case[id], metadata{category: case[category]}, scores{ correctness: score, completeness: 0.0 } ) langfuse.flush() if __name__ __main__: run_evaluation(tests/dataset.json)执行评估后Langfuse 控制台的 Trace 列表里会看到带评分标记的记录。使用控制台的过滤和聚合功能可以按评分、模型、日期查看结果。后续接入 CI 时还可以增加阈值判断比如“本次评测正确率低于 80% 则构建失败”。5.4 Langfuse 控制台里的评估查看方式评估结果回写后Langfuse 的Scores页面会展示每项评分的分布。可以按项目维度比较模型版本、Prompt 版本之间的差异。具体操作方式为在项目页面的左侧菜单进入Scores然后选择评分类型、时间范围和时间粒度。观察点有三个平均分变化、低分 Trace 的比例、是否存在特定分类问题持续失分。企业级平台还要把评估结果和实际业务指标连接起来例如“评估分数高的版本是否对应着更少的客服转人工率”。这一步需要团队自行打通业务系统Langfuse 在这里扮演的是数据底座不是最终决策系统。6. 从 Trace 出发的排查链路财务智能体典型故障6.1 排查顺序当财务分析智能体给出错误答案时不要先怀疑模型。排查顺序应该从下往上输入数据是否有误。CSV 或数据库中的财务数据是否完整、年份是否正确。工具调用是否成功。查询报表时是否加载到了最新数据。计算函数是否正确。毛利率公式中分子分母是否传反。模型是否按照正确的数据生成报告。最终回答中的数字和计算环节的数字是否一致。Prompt 是否引入了错误的约束。例如要求模型“根据数据给出结论”和“直接复述数据”会得到不同风格的结果。Langfuse 的作用是帮助你快速定位到上述第 2 到第 4 步。打开一条错误 Trace逐个展开 Span就能看到具体是哪一步出现了偏差。6.2 常见现象与处理方案下面整理财务 Agent 场景下最常见的几类问题问题现象可能原因检查方式处理建议最终答案中的数字与计算结果不一致模型在生成阶段改写或猜测了数字对比 Trace 中指标计算 Span 与 Final Report Generation 的输入输出在 Prompt 中强调“只能引用给定数据不得自行计算或隐去结果”Trace 缺失或看不到工具调用工具函数未加observe或 SDK 初始化顺序错误检查工具函数是否有装饰器查看日志是否有上报错误统一在langfuse_setup.py初始化 SDK再导入其他模块多次调用同一工具耗时过高Executor 重复加载数据查看 Trace 中同一 Span 是否出现多次增加缓存会话级只加载一次报表数据评估结果全部为 0 分评分规则或字符串匹配过严打印评测输出和期望值进行对比改用指标抽取后数值比较不要依赖完整句子匹配连接 Langfuse 超时自托管实例所在服务器网络不通检查 3000 端口连通性、反向代理配置使用内网地址并给 SDK 配置超时参数6.3 一个正确的排错示例假设用户反馈“公司 2024 年毛利率应该是 40%系统却说是 35%”。打开 Langfuse 找到对应 Trace按以下顺序展开第一步查看load_income_statementSpan确认 2024 年数据中的营业收入和营业成本是否分别为 10000 万和 6000 万。如果数据本身是错的问题在数据源与模型无关。第二步查看calc_gross_marginSpan确认函数入参顺序。如果传入的是(cost_of_goods_sold, revenue)分子分母传反计算结果自然错误。这种错误在代码审查中很难发现但在 Trace 中一眼就能看出来。第三步查看最终报告生成 Span 的输入。如果输入中已经是“毛利率 35%”说明模型没有引用计算环节的结果而是自己生成了另一套数字。这时需要修改 Prompt 或增加后处理校验。第四步如果前三步都正常再检查是不是模型幻觉或上下文截断。7. 生产环境落地 Langfuse 的最佳实践7.1 学习环境与生产环境的差异学习机或单机测试时Langfuse 可以以最简单的方式启动API 密钥也可以直连。但生产环境至少要补齐以下能力使用独立 PostgreSQL 实例并定期备份。使用独立 Redis配置持久化策略。为 Langfuse 配置 HTTPS 和统一身份认证。控制 SDK 上报数据的采样比例避免高频业务产生海量 Trace 导致存储成本不可控。配置日志分级与告警当 SDK 上报失败时要有感知。如果团队已有 Grafana 或 Prometheus可以把 Langfuse 的基础指标同步到统一监控看板但不要把 Langfuse 当作唯一监控源。它应专注于 LLM 链路追踪和评估基础设施监控仍由专业组件负责。7.2 埋点规范命名、metadata 与敏感数据埋点不规范的后果是平台里充满难以检索的 Trace。建议从第一天就定下命名规范Trace 名称统一格式业务域-模块-动作例如financial-agent-analyze-margin。所有 Trace 通过metadata写入业务字段包括用户角色、数据源、指标名称。不在 Trace 中记录原始登录密码、身份证号、银行卡号等敏感字段。财务项目中的关键数字可以记录但也要按公司数据安全要求脱敏。模型输入和输出默认保存。如果业务合规要求更严格可以配置关闭 content 存储只保留元数据。这些规范会让后续的检索和评估效率显著提高。7.3 版本管理与回归Langfuse 支持在 SDK 上报时附加release和tags信息。建议每次发版时写入版本号例如release: v1.4.0。这样当模型、Prompt、工具代码发生变化时评估分数可以直接按版本对比。langfuse_context.update_current_trace( releasev1.4.0, tags[prod, gpt-4o-mini, v2-prompt] )在 CI 中增加一个评估任务每次提交代码后自动运行评测数据集并把结果上报到一个独立的评估项目。这样可以从时间线上观察哪次提交导致了正确率下降。7.4 团队协作与知识沉淀Langfuse 控制台里的 Trace 和评估结果应该成为团队日常讨论的事实依据。出现问题时先截取 Trace 编号再开会比口头描述“模型答错了”要高效得多。复盘时可以整理“财务 Agent 的失败案例集”按问题类型分类形成团队的私有知识库。例如“模型篡改数字”“工具参数传反”“数据源年份缺失”。这些案例集也是后续改进 Prompt 和工具设计最宝贵的输入。一个推荐做法是每周抽出几小时由团队成员轮流挑选 3 到 5 条低分 Trace分析根因并给出改进建议。这个习惯能把可观测平台从“看日志工具”升级为“质量改进引擎”。8. 三个最容易踩的坑基于真实项目经验的提醒8.1 坑一先写业务代码后接入可观测性很多项目在初期只关注智能体能不能回答完全忽略埋点。等出了问题发现历史执行过程没有记录无法复盘。正确做法是项目启动第一天就初始化 Langfuse哪怕只追踪一个简单的 LLM 调用。后续增加功能和工具时埋点能力已经就位不需要回头改造。8.2 坑二在追踪数据里直接记录原始财务数字忽略脱敏财务数据本身是敏感信息。把营业收入、成本、利润等数字原样写入 Langfuse 数据库虽然方便调试但会放大数据泄露风险。正确做法是区分环境测试环境可以写入脱敏或虚拟数据生产环境按合规要求决定是否存储 content。也可以配置 Langfuse 只保存元数据和指标名不保存具体数值。8.3 坑三过度依赖模型进行数值计算有些实现把所有计算交给模型Prompt 里写“请计算毛利率”期望模型输出正确数字。这种做法在演示环境中偶尔能跑通但不可依赖。模型出现算术错误时开发人员很难从 Trace 中判断是公式问题还是模型问题。正确的分工是llm负责理解需求和生成报告确定性代码负责查数和计算。这也是 Harness 架构强调工具注册中心的原因。9. 扩展方向从财务智能体走向通用 Agent 评估平台财务分析智能体只是 Harness 架构和 Langfuse 的一个应用样例。这套“工具注册 编排 可观测 评估”的模型可以复制到其他企业场景销售智能体、客服工单处理、合同审查、数据分析报表助手等等。变化的是工具集和评估指标不变的是追踪和评估的机制。后续可以扩展的方向包括引入 RAG 评估指标在 Langfuse 中记录检索到的文档列表评估检索相关性。接入多模型对比同一评测数据集跑多个模型在 Langfuse 中按模型维度聚合分数。接入工作流平台把 Langfuse 生成的评估结果同步到项目管理工具实现质量问题闭环。构建自动化回归机制在 CI 中固定运行评测集将平均分和关键指标作为质量门禁。从学习角度看建议先不要着急搭完整平台。先用现有项目跑通一条 Trace观察每一步的输入输出然后手工给几个典型用例打标体会评估过程。等建立了“追踪的是什么、评估依据是什么”的直观感受后再逐步扩展模块和服务。这样积累的经验比照着教程写一堆代码更扎实也更容易在实际项目中形成可复用的能力。
上一篇/下一篇内容由系统自动关联
返回资讯列表 →