资讯动态

Langfuse实战:构建智能体可观测性与评估平台

发布时间:2026/9/6 8:30:00 来源:尧图企业网站定制
最近在落地智能体项目时很多同学问我同一个问题智能体上线之后到底怎么追踪它的思考过程怎么判断一次回答好不好多个子智能体协作时出了问题又该怎么定位这些问题靠传统日志很难解决。大型语言模型应用的输出是不确定的一次调用里既有 Prompt、模型参数、上下文窗口又有工具调用和中间结果。如果只记录“调用了哪个接口”根本没法复盘智能体的完整行为链。这背后需要的是一套面向 LLM 应用的可观测性与评估基础设施。本文围绕 Langfuse 展开先讲清楚它的核心模型再结合 Harness 架构设计一个财务分析智能体最后带你搭建一套企业级评估平台。无论你是刚接触 Langfuse 的初学者还是已经在开发智能体的工程师都能从里面找到可以直接落地的思路与代码。1. 背景与核心概念1.1 Langfuse 是什么Langfuse 是一个开源的 LLM 可观测性与评估平台主要面向基于大语言模型的应用、智能体和数据管道。你可以把它理解成 LLM 应用领域的“日志系统 链路追踪 评估中心”三合一平台。在没有 Langfuse 这类工具之前我们追踪 LLM 应用常见的方式是打印日志记录请求参数、返回结果、耗时。但这种方式有两个很明显的问题链路不完整一个智能体可能先调用大模型做意图识别再调用工具查询数据再调用大模型生成答案整个过程跨了多个服务、多个函数分散在日志里的片段很难串联。无法评估质量日志只能告诉你“调用了什么”不能告诉你“回答得好不好”。而大模型输出的质量恰恰是应用是否可用的关键。Langfuse 把一次完整的智能体任务抽象为Trace追踪把任务里的每个步骤抽象为Span跨度与Generation生成并通过Score评分对每次输出做质量评估。有了这套模型你可以看到智能体每一步的输入输出、耗时、Token 消耗也可以给某次回答打上“正确”“错误”“有毒”等标签甚至通过内置的评估器自动打分。1.2 Harness 架构是指什么Harness 这个词在智能体开发中可以理解为“智能体运行的工程骨架”。一个完整的智能体 Harness 会包含以下能力任务拆解与规划工具注册与调用上下文管理模型路由与回退策略外部记忆与状态管理可观测性与评估接口简单说Harness 就是智能体工程化的“底座”。它不关心你的智能体具体是财务分析还是客服机器人而是关心智能体如何稳定地执行、被追踪、被评估。Langfuse 在这个架构里承担的就是可观测性与评估的职责。1.3 为什么财务分析智能体需要 Langfuse财务分析场景有一个特点结果可解释性要求极高。比如智能体回答“该企业流动比率为 1.8短期偿债能力良好”你必须能回溯出流动比率是哪个模型计算出来的数据来自哪张报表模型有没有调用计算工具“偿债能力良好”这个结论有没有经过规则校验如果智能体在中间某个环节调用了错误的报表数据或者模型少算了某个科目最终答案就是错的。Langfuse 能把这个过程中的每一步都记录下来方便财务人员或开发者在出问题时逐层排查。1.4 Langfuse 与其他工具的区别很多同学会拿 Langfuse 和 Arize Phoenix、Promptfoo、Deepeval 做对比。简单归纳一下Langfuse强调端到端的可观测性同时具备评估、Prompt 管理、数据集管理等能力功能更全面社区活跃度高。Arize Phoenix同样做 LLM 可观测性在实验对比和嵌入可视化方面有优势。Promptfoo主要面向 Prompt 批量测试与回归评估像一个单元测试框架。Deepeval偏评估环节提供多种评估指标常与测试框架集成。如果你需要的是一个“从开发调试到生产监控再到持续评估”的统一平台Langfuse 的集成成本和维护成本会低很多。这也是本文选择它作为主线的理由。2. 环境准备与版本说明在开始之前我们先准备环境。由于 Langfuse 版本迭代较快本文不会把某个版本号写死你在实际操作时建议使用当前的最新稳定版。2.1 运行环境建议项目建议配置操作系统Linux / macOS / WindowsWSL2 更佳Python3.10 及以上Docker20.10 及以上Node.js18 及以上若自托管 Langfuse 需要数据库PostgreSQL自托管时使用如果你的机器上已经安装了 Python 和 Docker那么可以跳过一部分准备工作。2.2 安装 Langfuse Python SDKLangfuse 提供了 Python SDK是我们在智能体开发中最主要的集成方式。命令如下pip install langfuse如果你的项目还用到 LangChain可以安装对应集成包pip install langchain langchain-openai安装完成后可以检查版本pip show langfuse2.3 注册并获取 API 密钥Langfuse 提供了两种使用方式云版Langfuse Cloud直接到官网注册账号创建项目后拿到三个关键值公钥Public Key、私钥Secret Key、项目地址Host。自托管使用 Docker 部署一套自己的 Langfuse 服务适合对数据安全有要求的场景。对于财务数据这类敏感数据更推荐使用自托管部署。官方提供了现成的 Docker Compose 文件部署方式大致如下git clone https://github.com/langfuse/langfuse.git cd langfuse cp .env.example .env # 编辑 .env配置数据库信息并设置加密密钥 docker compose up -d部署完成后访问http://localhost:3000即可打开 Langfuse 控制台。需要提醒的是不同版本的部署方式和环境变量可能不同请以官方仓库里的 README 为准。2.4 配置环境变量在项目根目录创建.env文件LANGFUSE_PUBLIC_KEYpk-xxx LANGFUSE_SECRET_KEYsk-xxx LANGFUSE_HOSThttps://cloud.langfuse.com如果你是自托管部署把LANGFUSE_HOST改成你的服务器地址例如LANGFUSE_HOSThttp://localhost:30002.5 初始化 Langfuse 客户端新建一个配置文件langfuse_config.pyimport os from langfuse import Langfuse from dotenv import load_dotenv load_dotenv() langfuse Langfuse( public_keyos.getenv(LANGFUSE_PUBLIC_KEY), secret_keyos.getenv(LANGFUSE_SECRET_KEY), hostos.getenv(LANGFUSE_HOST, https://cloud.langfuse.com) )这段代码的作用是创建一个全局可用的 Langfuse 客户端。后续不管是手动上报 Trace还是使用装饰器自动追踪都会复用这个客户端。3. 核心原理拆解Trace、Span、Generation 与 Score在使用 Langfuse 之前必须先理解它的数据模型。很多同学说“不懂 Langfuse 怎么看”其实就是对这些概念不熟悉。3.1 Trace一次完整任务的链路Trace 是 Langfuse 中最顶层的概念代表一次完整的任务。比如一次财务分析智能体的对话或者一次批量处理任务都可以封装成一个 Trace。Trace 的属性包括name任务名称比如“财务分析智能体调用”。user_id关联的用户标识。session_id关联的会话标识。metadata自定义元数据比如报告期、企业 ID 等。input任务的输入。output任务的输出。在 UI 中一个 Trace 会以时间线的形式展开你可以看到每个步骤的执行顺序和耗时。3.2 Span功能模块的执行单元Span 是 Trace 下的子单元表示一个具体的操作。比如“查询数据库”“调用计算引擎”“格式化输出”都可以是 Span。一个 Trace 可以有多个 SpanSpan之间可以有嵌套关系。例如“财务分析”这个 Span 里可以继续嵌套“计算流动比率”“计算资产负债率”等子 Span。3.3 Generation针对大模型的调用Generation 是一种特殊类型的 Span专门用来记录对 LLM 的调用。它会额外记录以下信息模型名称如gpt-4o、deepseek-chat模型参数temperature、max_tokens 等Prompt 内容Completion 内容Token 使用量输入、输出、总 token延迟Generation 是 Langfuse 可观测性里最有价值的部分因为它直接对应成本和质量。3.4 Score对输出结果的质量评估Score 是 Langfuse 的评估模型。你可以给一个 Trace、Span 或 Generation 打分数分数类型包括数值分数例如 0 到 1 之间的相似度。布尔分数例如正确/错误、通过/不通过。分类标签例如“无风险”“低风险”“高风险”。Score 的来源也很多样人工标注在 UI 中手动打分。代码上报在业务逻辑中调用 SDK 上报。自动评估器使用 LLM-as-a-judge。有了 ScoreLangfuse 就不只是“看链路”的工具还是一个“评估质量”的平台。3.5 在代码中手动上报 Trace下面是一个最小示例演示如何手动创建一个带有 Generation 的 Tracefrom langfuse import Langfuse import time langfuse Langfuse() # 创建 trace trace langfuse.trace( name财务分析示例, input{query: 计算流动比率}, user_iduser_001, metadata{company: 示例公司, period: 2024-Q4} ) # 创建 generation generation trace.generation( namellm-计算逻辑生成, modeldeepseek-chat, model_parameters{temperature: 0.2}, input{messages: [{role: user, content: 根据流动比率公式生成计算步骤}]} ) # 模拟 LLM 输出 time.sleep(1) output 流动比率 流动资产 / 流动负债 generation.end( outputoutput, usage{input: 30, output: 10, total: 40} ) # 给这个 generation 打分 generation.score( name相关性, value0.95, comment输出与预期一致 ) # 结束 trace trace.end(output{result: output})这段代码会创建一个名为“财务分析示例”的 Trace并在其下记录一次 LLM 调用和一次评分。打开 Langfuse UI 可以看到完整的链路信息。3.6 使用装饰器自动追踪如果每次调用都手动创建 Trace 和 Span代码会非常啰嗦。Langfuse 提供了装饰器方式适合集成到已有的业务函数中。from langfuse.decorators import observe observe() def calculate_current_ratio(current_assets, current_liabilities): if current_liabilities 0: raise ValueError(流动负债不能为 0) return current_assets / current_liabilities observe() def analyze_financial_report(report_data): result calculate_current_ratio( report_data[流动资产], report_data[流动负债] ) return {流动比率: result} analyze_financial_report({流动资产: 500000, 流动负债: 250000})这里observe()会自动完成以下工作创建 Trace 或 Span记录函数的入参捕获函数的返回值在函数异常时记录错误信息这种方式对业务代码的侵入性很低。需要说明的是observe装饰器默认会把每次调用都作为 trace 上报如果你的应用中已经有一个顶层 trace可以通过传递参数或修改装饰器配置让子函数作为 span 挂到上层 trace 下具体操作方式会随 SDK 版本有所不同建议参考该版本的使用文档。4. 基于 Harness 架构实现财务分析智能体接下来进入实战环节。我们设计一个基于 Harness 架构的财务分析智能体这个智能体能够根据上传的财务数据自动计算关键财务指标并生成简单的分析报告。4.1 Harness 架构设计整体架构分为三层控制器层Harness Core负责任务接收、任务拆解、流程编排、状态管理。技能层Skills/Tools提供具体的工具能力比如指标计算、数据查询、报告生成。可观测与评估层Observability Evaluation基于 Langfuse 实现链路追踪与结果评估。用示意图表示如下用户输入 ↓ Harness Core任务拆解 流程编排 ├── 工具 1数据解析 ├── 工具 2指标计算 ├── 工具 3报告生成 └── Langfuse 可观测性上报4.2 创建项目结构financial-agent/ ├── .env ├── requirements.txt ├── main.py ├── langfuse_config.py ├── harness/ │ ├── __init__.py │ ├── core.py │ └── tools.py └── evaluation/ ├── __init__.py └── judge.py4.3 编写基础配置在requirements.txt中langfuse2.0 langchain0.1 langchain-openai0.1 openai1.0 python-dotenv1.0 pandas2.04.4 实现工具层工具层是我们智能体的“手”。先实现财务指标计算工具。文件路径harness/tools.pyimport pandas as pd from langfuse.decorators import observe observe() def parse_financial_data(raw_data: dict) - dict: 解析财务数据转换成统一结构 # 统一字段名避免大小写和中文差异 mapping { 流动资产: current_assets, 流动负债: current_liabilities, 存货: inventory, 营业收入: revenue, 净利润: net_profit, 总资产: total_assets, 总负债: total_liabilities } normalized {} for key, value in raw_data.items(): normalized_key mapping.get(key, key) normalized[normalized_key] float(value) return normalized observe() def calculate_current_ratio(current_assets: float, current_liabilities: float) - float: 计算流动比率 流动资产 / 流动负债 if current_liabilities 0: raise ValueError(流动负债必须大于 0) return round(current_assets / current_liabilities, 2) observe() def calculate_debt_to_asset_ratio(total_liabilities: float, total_assets: float) - float: 计算资产负债率 总负债 / 总资产 if total_assets 0: raise ValueError(总资产必须大于 0) return round(total_liabilities / total_assets * 100, 2) # 百分比形式 observe() def calculate_net_margin(net_profit: float, revenue: float) - float: 计算净利率 净利润 / 营业收入 if revenue 0: raise ValueError(营业收入必须大于 0) return round(net_profit / revenue * 100, 2) # 百分比形式这些函数都加了observe()Langfuse 会自动记录每个函数的入参和结果。这样当结果异常时我们就能判断是哪一个计算步骤出了问题。4.5 实现 Harness Core 编排逻辑Harness Core 是整个智能体的调度中心。它负责把用户请求拆分成多个步骤依次调用工具最后汇总结果。文件路径harness/core.pyfrom langfuse.decorators import observe from tools import ( parse_financial_data, calculate_current_ratio, calculate_debt_to_asset_ratio, calculate_net_margin ) observe() def run_financial_analysis(raw_data: dict) - dict: 财务分析智能体主流程 1. 解析数据 2. 计算流动比率 3. 计算资产负债率 4. 计算净利率 5. 汇总结果 # 步骤 1数据解析 data parse_financial_data(raw_data) # 步骤 2计算流动比率 current_ratio calculate_current_ratio( data[current_assets], data[current_liabilities] ) # 步骤 3计算资产负债率 debt_ratio calculate_debt_to_asset_ratio( data[total_liabilities], data[total_assets] ) # 步骤 4计算净利率 net_margin calculate_net_margin( data[net_profit], data[revenue] ) # 步骤 5汇总结果 result { 流动比率: current_ratio, 资产负债率: f{debt_ratio}%, 净利率: f{net_margin}% } return result这里的run_financial_analysis就是 Harness 的核心入口。通过observe()它成为整个链路的根节点所有子函数调用都会挂在这条 Trace 下面。4.6 加入 LLM 报告生成只有指标计算还不够我们还需要一个能生成自然语言报告的模块。这里用 LangChain 来调用 OpenAI 兼容接口。文件路径harness/report.pyfrom langfuse.decorators import observe from langchain_openai import ChatOpenAI from langchain_core.messages import HumanMessage, SystemMessage observe() def generate_report(analysis_result: dict) - str: 根据指标结果生成自然语言报告 llm ChatOpenAI( modeldeepseek-chat, # 也可以替换成其他模型 temperature0.3, openai_api_key你的 API Key, openai_api_basehttps://api.deepseek.com/v1 ) prompt f 你是财务分析师请根据以下财务指标生成一份简要分析报告 - 流动比率{analysis_result[流动比率]} - 资产负债率{analysis_result[资产负债率]} - 净利率{analysis_result[净利率]} 要求 1. 解释每个指标的含义 2. 判断企业的偿债能力和盈利能力 3. 给出改进建议 messages [ SystemMessage(content你是一名专业财务分析师。), HumanMessage(contentprompt) ] response llm.invoke(messages) return response.content这里需要着重提醒真实生产环境中API Key 不能硬编码在代码里而应该放在环境变量或密钥管理系统中。本文为了示例简洁才直接写在代码里。4.7 更新 Harness Core 接入报告生成文件路径harness/core.pyfrom langfuse.decorators import observe from tools import ( parse_financial_data, calculate_current_ratio, calculate_debt_to_asset_ratio, calculate_net_margin ) from report import generate_report observe() def run_financial_analysis(raw_data: dict, with_report: bool True) - dict: 财务分析智能体主流程 data parse_financial_data(raw_data) current_ratio calculate_current_ratio( data[current_assets], data[current_liabilities] ) debt_ratio calculate_debt_to_asset_ratio( data[total_liabilities], data[total_assets] ) net_margin calculate_net_margin( data[net_profit], data[revenue] ) analysis_result { 流动比率: current_ratio, 资产负债率: f{debt_ratio}%, 净利率: f{net_margin}% } if with_report: report generate_report(analysis_result) analysis_result[报告] report return analysis_result4.8 编写主入口并运行文件路径main.pyfrom langfuse_config import langfuse from harness.core import run_financial_analysis from langfuse.decorators import langfuse_context def main(): sample_data { 流动资产: 500000, 流动负债: 250000, 存货: 100000, 营业收入: 1200000, 净利润: 150000, 总资产: 2000000, 总负债: 800000 } result run_financial_analysis(sample_data) print(分析结果) for key, value in result.items(): print(f{key}: {value}) # 关联用户信息 langfuse_context.update_current_trace( user_idfinance_user_001, session_idsession_20250201 ) # 手动刷新确保数据上报 langfuse.flush() if __name__ __main__: main()运行命令python main.py预期输出类似分析结果 流动比率: 2.0 资产负债率: 40.0% 净利率: 12.5% 报告: 根据分析该企业流动比率为2.0说明短期偿债能力较强……4.9 在 Langfuse UI 中查看结果打开 Langfuse 控制台进入 Traces 页面你会看到刚才运行的 Trace。点击进入后可以看到顶层run_financial_analysis的执行总耗时子函数parse_financial_data、calculate_current_ratio等各自的耗时LLM 生成的 Prompt 和 Completion 内容Token 用量和成本估算这就是 Langfuse 最基础也最核心的使用场景把一次智能体任务“拆开”来看。5. 搭建企业级评估平台有了链路追踪你已经能回答“智能体做了什么”。但企业级平台还需要回答另一个问题“智能体做得好不好”。这就引入了评估环节。这一节会完成两件事通过 Langfuse 的 Score 功能实现人工评估。通过 LLM-as-a-judge 实现自动化评估。5.1 为什么需要企业级评估平台财务分析智能体的输出直接影响业务判断。如果模型输出错误轻则产生错误报告重则导致错误决策。因此在生产环境中我们不能只看“调用成功”还要持续监控输出质量。企业级评估平台的组成通常包括数据集管理统一管理测试样例。批量评估在数据集上跑智能体自动评分。效果对比对比不同 Prompt 或不同模型版本的效果。回归测试每次修改 Prompt 后自动验证历史用例没有退化。Langfuse 提供了 Dataset、Prompt 管理、Score 等功能可以支撑上述流程。5.2 创建评估数据集Langfuse 允许你手动或在代码中创建数据集。下面用代码演示。from langfuse import Langfuse langfuse Langfuse() # 创建数据集如果不存在 dataset langfuse.create_dataset( namefinancial-analysis-test, description财务分析智能体回归测试数据集 ) # 添加样本 dataset.add_item( input{流动资产: 500000, 流动负债: 250000}, expected_output{流动比率: 2.0} ) dataset.add_item( input{流动资产: 800000, 流动负债: 200000}, expected_output{流动比率: 4.0} )之后你可以定期在 UI 中给这些数据集的运行结果打分形成人工评估结果。5.3 基于 LLM-as-a-judge 的自动评估人工打分虽然准确但成本高、速度慢。对于高频的智能体调用我们通常会用一个大模型来评估另一个模型的输出这种模式叫 LLM-as-a-judge。下面是一个简化的评估器实现。文件路径evaluation/judge.pyfrom langfuse.decorators import observe from langchain_openai import ChatOpenAI from langchain_core.messages import HumanMessage, SystemMessage observe() def llm_judge(question: str, answer: str, expected_answer: str) - dict: 使用 LLM 评估回答质量 llm ChatOpenAI( modeldeepseek-chat, temperature0.0, openai_api_key你的 API Key, openai_api_basehttps://api.deepseek.com/v1 ) prompt f 你是一个严谨的评分员。请根据以下标准判断智能体的回答是否准确。 问题{question} 标准答案{expected_answer} 智能体回答{answer} 评分标准 1. 如果智能体回答与标准答案一致或更详细输出 1 分 2. 如果智能体回答部分正确但不完整输出 0.5 分 3. 如果智能体回答错误输出 0 分 请以 JSON 格式返回 {{ score: 0 或 0.5 或 1, reason: 你的理由 }} messages [ SystemMessage(content你是一个严格的评分员。), HumanMessage(contentprompt) ] response llm.invoke(messages) # 实际使用时应做 JSON 解析和异常处理 import json result json.loads(response.content.replace(json, ).replace(, ).strip()) return result5.4 将评估结果上报到 Langfuse有了评分结果后我们需要把它跟原始的 Trace 关联起来。方式有两种在智能体执行代码里直接调用score()API。在评估任务中通过关联 trace_id 上报。下面演示第二种方式。假设你从 SQL 或其他地方拿到了一批待评估的 Trace IDfrom langfuse import Langfuse langfuse Langfuse() # 假设 trace_id 是 Langfuse 页面中看到的 trace 标识 trace langfuse.get_trace(trace_id你的 trace id) trace.score( name答案准确性, value0.5, comment计算正确但未解释流动比率含义 )这样原始 Trace 和评分数据就关联起来了。5.5 Prompt 管理与版本控制企业级评估平台还离不开 Prompt 管理。Langfuse 提供了 Prompt 管理能力可以把 Prompt 存在平台上通过 SDK 拉取并且支持版本管理和发布回滚。创建 Prompt 的代码示例langfuse.create_prompt( namefinancial-analysis-prompt, typetext, prompt你是财务分析师请分析以下指标{{metrics}}, config{ temperature: 0.3, model: deepseek-chat } )在业务代码中加载 Promptfrom langfuse import Langfuse langfuse Langfuse() prompt langfuse.get_prompt(financial-analysis-prompt, version2) compiled_prompt prompt.compile(metrics{流动比率: 2.0}) print(compiled_prompt)这样Prompt 的变更可以被追踪、对比、回滚。对于模型应用来说这相当于拥有了“代码版本管理”能力。6. 常见问题与排查思路在实际使用 Langfuse 和开发智能体的过程中你可能会遇到各种问题。下面整理了一些高频问题和排查思路。问题现象常见原因解决思路认证失败返回 401Public Key / Secret Key 配置错误检查.env中的密钥是否与 Langfuse 项目一致Trace 未出现在 UI 中SDK 未正确初始化或数据未 flush程序退出前调用langfuse.flush()或检查LANGFUSE_HOST是否可达装饰器函数重复创建 Trace每个装饰器默认是独立 trace通过参数传递上层 trace 或调整装饰器配置让子函数作为 span 挂载LLM 调用延迟高网络问题或模型服务波动检查模型 API 状态配合重试机制Score 数据显示在错误 Trace 下未关联正确的 trace_id核对从 UI 中复制的 trace id确保调用trace.score()的对象正确Token 用量统计为 0部分模型接入方式未返回 usage 信息检查模型 provider 是否返回 token 使用量必要时手动传入 usage 数据自托管部署后无法访问数据库启动失败或端口被占用查看 Docker 容器日志确认 PostgreSQL 和 Web 服务都正常启动数据集无法创建名称重复或权限不足更换数据集名称或检查 API 密钥是否有写权限下面重点讲两个最常见的问题。6.1 排查“1 个函数 1 个 Trace”的问题很多同学第一次用observe()时会发现在 Langfuse UI 中生成了很多 Trace而不是一个 Trace 下面挂多个 Span。这通常是因为 SDK 的自动追踪机制在没有显式 Trace 上下文时会把每个被装饰的调用作为独立 Trace 上报。解决方式是你需要在外层显式创建 Trace并把上下文传递下去。不同版本的 Langfuse SDK 支持方式不同常见思路是使用langfuse_context或通过observe的参数指定父级对象。建议优先阅读当前版本 SDK 的官方文档了解上下文传播机制。6.2 排查数据丢失问题如果发现 UI 中只能看到部分 Trace而代码中也没有报错需要检查以下几点调用链是否发生过异常异常时 SDK 是否仍然上报了错误 Trace。异步函数中是否正确等待了 flush 或 shutdown。有没有在进程退出前调用langfuse.flush()。在长驻服务如 Web 服务中数据上报是异步进行的进程突然被 kill 可能导致数据丢失。你可以为 SDK 配置更短的刷新时间或者在工作结束时强制 flush。7. 最佳实践与工程建议结合前面的实战最后给出一些工程化建议。这些建议来自实际项目中反复踩坑后得到的经验希望能帮助你少走弯路。7.1 密钥与配置管理API Key、Secret Key 一律放在环境变量或密钥管理服务中不进代码仓库。自托管 Langfuse 时数据库密码、加密密钥也要单独管理。多环境隔离开发、测试、生产分别使用独立的 Langfuse 项目。7.2 命名规范Trace 名称使用“模块名 动作”格式例如financial-analysis-run。Span 名称与函数名保持一致。Score 名称统一使用业务术语例如“答案准确性”“格式规范性”。Metadata 中统一存放业务主键比如company_id、period方便后续检索。7.3 数据隐私与安全财务数据高度敏感上报到 Langfuse 前应做脱敏处理。在 Langfuse 配置中设置数据保留时间定期清理过期数据。使用自托管部署时需要限制网络访问范围默认账号密码要在部署后立即修改。涉及生产环境变更时先在测试环境验证再灰度发布并保留回滚方案。7.4 评估体系分层不要只依赖 LLM-as-a-judge建议分层评估第一层规则校验。比如计算指标是否在合理区间输出是否包含必填字段。第二层LLM 评估。用于判断语义正确性和表达质量。第三层人工抽检。定期抽样审计修正自动评估的偏差。7.5 成本控制在 Generation 中记录 usage建立 Token 成本监控。对高频调用设置缓存避免重复请求相同上下文。评估任务尽量使用价格较低的模型主任务使用精度更高的模型。7.6 Prompt 变更流程所有 Prompt 一律通过 Langfuse Prompt 管理维护。修改 Prompt 后先在数据集上跑一遍回归评估。对比新旧版本效果后再发布到生产环境。部署后持续观察线上评估分数必要时回滚 Prompt 版本。8. 总结与下一步方向本文从 Langfuse 的核心数据模型出发讲解了 Trace、Span、Generation、Score 四个核心概念并结合 Harness 架构从零实现了一个财务分析智能体。这个过程覆盖了数据解析、指标计算、LLM 报告生成、Langfuse 链路追踪等关键环节。随后我们又基于 Langfuse 的 Dataset、Score、Prompt 管理能力搭建了企业级评估平台的雏形解决了“智能体做得好不好”的问题。如果你准备在实际项目中落地建议优先关注以下几点先把 Trace 埋点做好做到每个核心函数都能在 Langfuse 中完整回溯。建立一份基础的测试数据集每次修改 Prompt 或模型后都跑一遍回归评估。从成本、延迟、正确性三个维度持续观察线上表现用数据指导优化。Langfuse 只是一个工具真正重要的是建立起“可观测 可评估 可持续迭代”的智能体工程思维。后续你可以继续研究 LangGraph 或 Dify 等智能体编排框架把这些能力与 Langfuse 深度集成也可以探索多智能体协作场景下的评估方案。让我看到你动手跑通第一个 Trace 的结果。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价