spring-ai集成langfuse

1、pom文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.4.3</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.langfuse</groupId><artifactId>spring-ai-demo</artifactId><version>0.0.1-SNAPSHOT</version><name>spring-ai-demo</name><description>Spring AI demo project for Spring Boot</description><url/><properties><java.version>21</java.version></properties><dependencyManagement><dependencies><dependency><groupId>io.opentelemetry.instrumentation</groupId><artifactId>opentelemetry-instrumentation-bom</artifactId><version>2.14.0</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-openai-spring-boot-starter</artifactId><version>1.0.0-M6</version><exclusions><exclusion><groupId>org.springframework.ai</groupId><artifactId>spring-ai-openai</artifactId></exclusion></exclusions></dependency><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-openai</artifactId><version>1.0.0-M6-XIN</version></dependency><dependency><groupId>com.squareup.okhttp3</groupId><artifactId>okhttp</artifactId><version>4.12.0</version></dependency><dependency><groupId>io.projectreactor.netty</groupId><artifactId>reactor-netty</artifactId><version>1.3.0-M1</version></dependency><!-- Spring AI needs a reactive web server to run for some reason--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>io.opentelemetry.instrumentation</groupId><artifactId>opentelemetry-spring-boot-starter</artifactId></dependency><!-- Spring Boot Actuator for observability support --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency><!-- Micrometer Observation -> OpenTelemetry bridge --><dependency><groupId>io.micrometer</groupId><artifactId>micrometer-tracing-bridge-otel</artifactId></dependency><!-- OpenTelemetry OTLP exporter for traces --><dependency><groupId>io.opentelemetry</groupId><artifactId>opentelemetry-exporter-otlp</artifactId></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build>
</project>

2、配置文件

spring:application:name: java-demoai:chat:observations:include-prompt: true       # Include prompt content in tracing (disabled by default for privacy)include-completion: true   # Include completion content in tracing (disabled by default)openai:api-key: "not empty"base-url: http://192.168.3.100:9997#  兼容其他OpenAI格式的大模型配置示例chat:options:# 模型ID,需要替换为实际的接入点IDmodel: qwen2-instructmanagement:tracing:sampling:probability: 1.0    # Sample 100% of requests for full tracing (adjust in production as needed)observations:annotations:enabled: true       # Enable @Observed (if you use observation annotations in code)# sk-lf-c8d2601e-xxxx-xxxx-b10f-9275c48878a7
# pk-lf-b23b07b2-oooo-oooo-a689-c658d36ab616
# http://192.168.3.100:33000
#  pk-lf-b23b07b2-oooo-oooo-a689-c658d36ab616:sk-lf-c8d2601e-xxxx-xxxx-b10f-9275c48878a7# sk-lf-29ac1c23-xxxx-xxxx-b5cb-606fcff3be92
# pk-lf-2efef304-oooo-oooo-9bb5-84147f8dce94
# pk-lf-2efef304-oooo-oooo-9bb5-84147f8dce94:sk-lf-29ac1c23-xxxx-xxxx-b5cb-606fcff3be92#  pk-lf-2cbd8bc2-xxxx-xxxx-bad8-9eab53553926
#  sk-lf-11e8581c-oooo-oooo-9b02-5d89cefff193# pk-lf-2cbd8bc2-xxxx-xxxx-bad8-9eab53553926:sk-lf-11e8581c-oooo-oooo-9b02-5d89cefff193otel:exporter:otlp:endpoint: http://117.xx.xxx.4:3000/api/public/otelheaders:Authorization: Basic cGstbGYtMmNiZDhiYzItMWMzYS00NmE3LWJhZDgtOWVhYjUzNTUzOTI2OnNrLWxmLTExZTg1ODFjLWYxM2MtNGZlMC05YjAyLTVkODljZWZmZjE5Mw==#   Authorization =  Basic 加空格 加 pk:sk的base64server:port: 58000

3、service代码

package com.langfuse.springai;import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.ai.chat.client.ChatClient;
import org.springframework.boot.context.event.ApplicationReadyEvent;
import org.springframework.context.event.EventListener;
import org.springframework.stereotype.Service;@Service
public class ChatService {static final Logger LOGGER = LoggerFactory.getLogger(ChatService.class);private final ChatClient chatClient;public ChatService(ChatClient.Builder builder) {chatClient = builder.build();}public String testAiCall() {LOGGER.info("Invoking LLM");String answer = chatClient.prompt("Reply with the word 'java'").call().content();LOGGER.info("AI answered: {}", answer);return answer;}
}

controller代码

package com.langfuse.springai;import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
@RequestMapping("/v1/chat")
public class ChatController {private final ChatService chatService;public ChatController(ChatService chatService) {this.chatService = chatService;}@GetMappingpublic String get() {return chatService.testAiCall();}
}

启动类

package com.langfuse.springai;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
public class SpringAiDemoApplication {public static void main(String[] args) {SpringApplication.run(SpringAiDemoApplication.class, args);}
}

4、访问地址

http://localhost:58000/v1/chat

5、langfuse地址

http://xxx.xxx.xx.4:3000/project/cma6p4ytt0005o207mv7dm6rw/traces

如下

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/81400.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PyTorch 与 TensorFlow:深度学习框架的深度剖析与实战对比

PyTorch 与 TensorFlow&#xff1a;深度学习框架的深度剖析与实战对比 摘要 &#xff1a;本文深入对比 PyTorch 与 TensorFlow 两大深度学习框架&#xff0c;从核心架构、优缺点、适用场景等多维度剖析&#xff0c;结合实例讲解&#xff0c;帮助开发者清晰理解两者特性&#x…

如何配置NGINX作为反向代理服务器来缓存后端服务的响应?

大家好&#xff0c;我是锋哥。今天分享关于【如何配置NGINX作为反向代理服务器来缓存后端服务的响应&#xff1f;】面试题。希望对大家有帮助&#xff1b; 如何配置NGINX作为反向代理服务器来缓存后端服务的响应&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java资源…

DiT:文档图像Transformer 的自监督预训练

摘要 图像transformer&#xff08;Image Transformer&#xff09;最近在自然图像理解方面取得了显著进展&#xff0c; 无论是使用监督&#xff08;ViT、DeiT等&#xff09;还是自监督&#xff08;BEiT、MAE等&#xff09;预训练技术。在本文中&#xff0c;我们提出了DiT&#…

51c嵌入式~电路~合集4

我自己的原文哦~ https://blog.51cto.com/whaosoft/11888986 一、电流检测电路 电流检测的应用 电路检测电路常用于&#xff1a;高压短路保护、电机控制、DC/DC换流器、系统功耗管理、二次电池的电流管理、蓄电池管理等电流检测等场景。电路专辑 对于大部分应用&#xff…

【Git】万字详解 Git 的原理与使用(上)

&#x1f970;&#x1f970;&#x1f970;来都来了&#xff0c;不妨点个关注叭&#xff01; &#x1f449;博客主页&#xff1a;欢迎各位大佬!&#x1f448; 文章目录 1. 初识 Git1.1 Git 是什么&#xff1f;1.2 为什么要有 Git 2. 安装 Git2.1 Linux-Ubuntu 安装 Git2.2 Windo…

【原创开发】无印去水印[特殊字符]短视频去水印工具[特殊字符]支持一键批量解析

支持&#xff1a;快手&#xff0c;抖音&#xff0c;小红书&#xff0c;哔哩哔哩&#xff0c;等多款应用去水印&#xff0c;支持图集解析下载 【应用名称】&#xff1a;无印 【应用版本】&#xff1a;1.3 【应用大小】&#xff1a;17M 【测试机型】&#xff1a;小米14 【下载链…

qemu(3) -- qemu-arm使用

1. 前言 qemu中有很多的特技&#xff0c;此处记录下qemu-arm的使用方式&#xff0c;简单来说qemu-system-xx用于虚拟整个设备&#xff0c;包括操作系统的运行环境&#xff0c;而qemu-xx仅虚拟Linux应用程序的环境&#xff0c;不涉及操作系统&#xff0c;应用程序的系统调用有宿…

Docker的简单使用(不全)

Docker Hello World Docker 允许在容器内运行应用程序&#xff0c;使用docker run命令来在容器内运行一个应用程序 输出Hello World runoobrunoob:~$ docker run ubuntu:15.10 /bin/echo "Hello world"Hello world docker&#xff1a;Docker的二进制执行文件 run…

SALOME源码分析: 命令系统

本文分析SALOME中命令系统&#xff0c;涉及的知识点包括&#xff0c; MDF框架数据对象模型 注1&#xff1a;限于研究水平&#xff0c;分析难免不当&#xff0c;欢迎批评指正。注2&#xff1a;文章内容会不定期更新。 一、命令对象 1.1 Class Hierarchy 1.2 SUIT_Operation #…

Bootstrap(自助法)​​:无需假设分布的统计推断工具

核心思想​​ Bootstrap 是一种​​重采样&#xff08;Resampling&#xff09;技术​​&#xff0c;通过在原始数据中​​有放回地重复抽样​​&#xff0c;生成大量新样本集&#xff0c;用于估计统计量&#xff08;如均值、方差&#xff09;的分布或模型性能的不确定性。 ​​…

沙箱逃逸(Python沙盒逃逸深度解析)

沙箱逃逸&#xff08;Python沙盒逃逸深度解析&#xff09; 一、沙盒逃逸的核心目标 执行系统命令 通过调用os.system、subprocess.Popen等函数执行Shell命令&#xff0c;例如读取文件或反弹Shell。 文件操作 读取敏感文件&#xff08;如/etc/passwd&#xff09;、写入后门文件…

融智学数学符号体系的系统解读(之一)

融智学数学符号体系的系统解读 一、道函数&#xff08;Dao Function&#xff09; 数学表达式&#xff1a; f(x,y,z)0&#xff08;狭义&#xff09; f(x,y,z,ict)0&#xff08;广义&#xff09; 符号解析&#xff1a; x: 形象思维坐标轴 数学意义: 表征基于感官输入的多模…

Java 中使用正则表达式

1. 引入包 在使用正则表达式之前,需要引入包: import java.util.regex.Matcher; import java.util.regex.Pattern; 2. 常用模式规则 元字符 :这些是正则表达式中的特殊字符,用于匹配特定的模式。 . :匹配任意单个字符(换行符除外)。例如,a.b 可以匹配 "acb&quo…

cat file.tar.gz | tar -xzf - -C /target/dir两个减号之间为什么有个空格?是写错了吗?(管道命令后续)

在 tar 命令的参数 -xzf - -C 中&#xff0c;两个减号&#xff08;-&#xff09;之间的空格是故意保留的语法&#xff0c;没有写错。具体原因如下&#xff1a; 1. -xzf - 的语法解析 -xzf 是 tar 命令的组合参数&#xff1a; x&#xff1a;表示解压&#xff08;extract&#x…

Linux中的系统延时任务和定时任务与时间同步服务和构建时间同步服务器

延时任务 在系统中我们的维护工作大多数时在服务器行对闲置时进行 我们需要用延迟任务来解决自动进行的一次性的维护 延迟任务时一次性的&#xff0c;不会重复执行 当延迟任务产生输出后&#xff0c;这些输出会以邮件的形式发送给延迟任务发起者 在RHEL9中默认系统中的所有普通…

C++之IO流

目录 一、C语言的输入与输出 二、流是什么 三、CIO流 3.1、C标准IO流 3.2、C文件IO流 四、stringstream的简单介绍 一、C语言的输入与输出 C语言中我们用到的最频繁的输入输出方式就是scanf ()与printf()。 scanf(): 从标准输入设备(键盘)读取数据&#xff0c;并将值存放…

Fedora升级Google Chrome出现GPG check FAILED问题解决办法

https://dl.google.com/linux/linux_signing_key.pub 的 GPG 公钥(0x7FAC5991)已安装 https://dl.google.com/linux/linux_signing_key.pub 的 GPG 公钥(0xD38B4796)已安装 仓库 "google-chrome" 的 GPG 公钥已安装&#xff0c;但是不适用于此软件包。 请检查此仓库的…

极光PDF编辑器:高效编辑,轻松管理PDF文档

在日常工作和学习中&#xff0c;PDF文件的使用越来越普遍。无论是学术论文、工作报告还是电子书籍&#xff0c;PDF格式因其稳定性和兼容性而被广泛采用。然而&#xff0c;编辑PDF文件往往比编辑Word文档更加复杂。今天&#xff0c;我们要介绍的 极光PDF编辑器&#xff0c;就是这…

MySQL进阶(一)

一、存储引擎 1. MySQL体系结构 连接层&#xff1a; 最上层是一些客户端和链接服务&#xff0c;主要完成一些类似于连接处理、授权认证、及相关的安全方案。服务器也会为安全接入的每个客户端验证它所具有的操作权限 服务层&#xff1a; 第二层架构主要完成大多数的核心服务…

OpenCV 图形API(67)图像与通道拼接函数-----水平拼接(横向连接)两个输入矩阵(GMat 类型)函数concatHor()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 该函数用于水平拼接两个 GMat 矩阵&#xff0c;要求输入矩阵的行数必须一致: GMat A { 1, 4,2, 5,3, 6 }; GMat B { 7, 10,8, 11,9, 12 }; GM…