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.pswp.cn/diannao/81400.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/81400.shtml
英文地址,請注明出處:http://en.pswp.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…