langfuse部署相关

发布时间:2026/10/17 10:47:26
langfuse部署相关 一、docker镜像无法下载时如果无法访问docker官方镜像源 https://registry-1.docker.io那么需要替换国内镜像源root用户执行vi /etc/docker/daemon.json添加“registry-mirrors” :[“https://docker.domys.cc”,“https://hub.domys.cc”,“https://docker.m.daocloud.io”,“https://docker.xuanyuan.me”,“https://docker.1ms.run”]重启Docker服务sudo systemctl daemon-reloadsudo systemctl restart docker二、demo#!/usr/bin/env python # -*- coding: utf-8 -*- LangGraph LangFuse 集成演示 LangFuse 基于 OpenTelemetry 架构提供两种追踪方式 方式1推荐observe 装饰器 - 最简洁直接修饰函数 - 自动追踪函数内的所有 LLM 调用 - 支持嵌套被装饰的函数互相调用时自动形成父子 span 方式2observe OTEL span 属性 - 适用于需要动态传入 user_id / session_id / tags 的场景 - 通过 OpenTelemetry span 属性注入用户上下文 环境变量配置Windows PowerShell $env:OPENAI_API_KEYsk-xxx $env:OPENAI_BASE_URLhttps://api.openai.com/v1 $env:LANGFUSE_PUBLIC_KEYpk-lf-xxx $env:LANGFUSE_SECRET_KEYsk-lf-xxx $env:LANGFUSE_BASE_URLhttp://172.31.234.9:3000 import os import uuid import logging from typing import TypedDict, Optional import warnings warnings.filterwarnings(ignore) # 修复 langchain 版本兼容性 import langchain for attr in (verbose, debug, llm_cache): if not hasattr(langchain, attr): setattr(langchain, attr, False if attr ! llm_cache else None) # 替换为 langchain_openai from langchain_openai import ChatOpenAI from langchain_core.prompts import ChatPromptTemplate from langchain_core.output_parsers import StrOutputParser from langgraph.graph import StateGraph, END # LangFuse 导入 from langfuse import observe, get_client os.environ[LANGFUSE_PUBLIC_KEY] pk-lf-xxx os.environ[LANGFUSE_SECRET_KEY] sk-lf-xxx os.environ[LANGFUSE_BASE_URL] http://ip:3000 # 抑制 OpenTelemetry 网络超时日志 logging.getLogger(opentelemetry).setLevel(logging.CRITICAL) # 全局配置 LANGFUSE_ENABLED bool( os.getenv(LANGFUSE_PUBLIC_KEY) and os.getenv(LANGFUSE_SECRET_KEY) ) # 使用 ChatOpenAI可兼容 OpenAI / 通义 / DeepSeek 等 OpenAI‑兼容接口 llm ChatOpenAI( modelqwen3.8-27b, api_keysk-xxxxx, base_urlhttps://dashscope.aliyuncs.com/compatible-mode/v1, temperature0, ) # 方式1observe 装饰器推荐 observe(as_typegeneration) def call_llm(prompt_text: str, model_name: str gpt-3.5-turbo) - str: prompt ChatPromptTemplate.from_template({text}) chain prompt | llm | StrOutputParser() result chain.invoke({text: prompt_text}) get_client().update_current_generation( modelmodel_name, inputprompt_text, outputresult, ) return result observe() def translate(text: str) - str: return call_llm(f请将以下内容翻译成英文只返回译文\n{text}) observe() def summarize(text: str) - str: return call_llm(f请用一句话总结以下内容\n{text}) observe() def qa(question: str) - str: return call_llm(f请用一句话回答{question}) observe(namemulti_tool_agent) def agent_entry(user_input: str): answer qa(user_input) summary summarize(answer) translated translate(summary) return {answer: answer, summary: summary, translated: translated} # 方式2observe 动态设置 trace 属性 class State(TypedDict): question: str answer: Optional[str] def chat_node(state: State) - dict: answer call_llm(f请用一句话回答{state[question]}) return {answer: answer} def build_graph(): graph StateGraph(State) graph.add_node(chat, chat_node) graph.set_entry_point(chat) graph.add_edge(chat, END) return graph.compile() observe(as_typechain) def traced_graph_invoke(question, user_id, session_id, tagsNone, metadataNone): from opentelemetry import trace as otel_trace span otel_trace.get_current_span() if span.is_recording(): span.set_attribute(langfuse.user.id, user_id) span.set_attribute(langfuse.session.id, session_id) if tags: span.set_attribute(langfuse.tags, tags) if metadata: get_client().update_current_span(metadatametadata) app build_graph() return app.invoke({question: question}) # 运行演示 def demo_observe_decorator(): print(\n * 60) print(方式1observe 装饰器) print( * 60) result agent_entry(什么是大语言模型) print(f 回答: {result[answer]}) print(f 摘要: {result[summary]}) print(f 译文: {result[translated]}) def demo_observe_with_context(): print(\n * 60) print(方式2observe 动态上下文) print( * 60) session_id fsession-{uuid.uuid4().hex[:8]} questions [ (user_001, 什么是 Python), (user_001, 它和 Java 有什么区别), (user_002, 推荐一个入门编程语言), ] for user_id, question in questions: print(f\n [{user_id}] {question}) result traced_graph_invoke( questionquestion, user_iduser_id, session_idsession_id, tags[langgraph, multi-turn], metadata{app_version: 1.0.0}, ) print(f 助手: {result[answer]}) if LANGFUSE_ENABLED: get_client().flush() if __name__ __main__: print(fLangFuse: {已启用 if LANGFUSE_ENABLED else 未配置跳过追踪}) demo_observe_decorator() demo_observe_with_context() if LANGFUSE_ENABLED: get_client().flush() print(\n运行完毕。在 LangFuse 控制台可查看追踪数据。)参考资料1.https://blog.csdn.net/leonhongliang806/article/details/148711169

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询