การสังเกตโอเพนซอร์ซสำหรับแอปพลิเคชัน LLM ของคุณ
OpenLlMetry เป็นชุดของส่วนขยายที่สร้างขึ้นบน OpentElemetry ที่ให้ความสามารถในการสังเกตที่สมบูรณ์เหนือแอปพลิเคชัน LLM ของคุณ เนื่องจากใช้ opentelemetry ภายใต้ประทุนจึงสามารถเชื่อมต่อกับโซลูชันการสังเกตที่มีอยู่ของคุณ - Datadog, Honeycomb และอื่น ๆ
มันถูกสร้างและดูแลโดย Traceloop ภายใต้ใบอนุญาต Apache 2.0
repo มีเครื่องมือ opentelemetry มาตรฐานสำหรับผู้ให้บริการ LLM และ DBS เวกเตอร์รวมถึง traceloop SDK ที่ทำให้ง่ายต่อการเริ่มต้นด้วย openllmetry ในขณะที่ยังคงส่งสัญญาณข้อมูล opentelemetry มาตรฐานที่สามารถเชื่อมต่อกับสแต็คการสังเกตของคุณ หากคุณมีเครื่องมือ OpentElemetry อยู่แล้วคุณสามารถเพิ่มเครื่องมือใด ๆ ของเราได้โดยตรง
วิธีที่ง่ายที่สุดในการเริ่มต้นคือใช้ SDK ของเรา สำหรับคำแนะนำที่สมบูรณ์ไปที่เอกสารของเรา
ติดตั้ง SDK:
go get github.com/traceloop/go-openllmetry/traceloop-sdkจากนั้นเริ่มต้น SDK ในรหัสของคุณ:
package main
import (
"context"
sdk "github.com/traceloop/go-openllmetry/traceloop-sdk"
)
func main () {
ctx := context . Background ()
traceloop := sdk . NewClient ( ctx , sdk. Config {
APIKey : os . Getenv ( "TRACELOOP_API_KEY" ),
})
defer func () { traceloop . Shutdown ( ctx ) }()
}แค่นั้นแค่นั้น ตอนนี้คุณกำลังติดตามรหัสของคุณด้วย openllmetry!
ตอนนี้คุณต้องตัดสินใจว่าจะส่งออกร่องรอยไปที่ใด
ดูเอกสารของเราสำหรับคำแนะนำเกี่ยวกับการเชื่อมต่อกับแต่ละเอกสาร
Openllmetry อยู่ในขั้นตอนการสำรวจอัลฟ่าและเรายังคงหาสิ่งที่จะใช้เครื่องมือ ตรงข้ามกับภาษาอื่น ๆ มีห้องสมุด LLM อย่างเป็นทางการไม่มากนัก (ยัง?) ดังนั้นตอนนี้คุณจะต้องบันทึกพรอมต์ด้วยตนเอง:
package main
import (
"context"
"fmt"
"os"
"github.com/sashabaranov/go-openai"
sdk "github.com/traceloop/go-openllmetry/traceloop-sdk"
)
func main () {
ctx := context . Background ()
// Initialize Traceloop
traceloop := sdk . NewClient ( ctx , config. Config {
APIKey : os . Getenv ( "TRACELOOP_API_KEY" ),
})
defer func () { traceloop . Shutdown ( ctx ) }()
// Call OpenAI like you normally would
resp , err := client . CreateChatCompletion (
context . Background (),
openai. ChatCompletionRequest {
Model : openai . GPT3Dot5Turbo ,
Messages : []openai. ChatCompletionMessage {
{
Role : openai . ChatMessageRoleUser ,
Content : "Tell me a joke about OpenTelemetry!" ,
},
},
},
)
var promptMsgs []sdk. Message
for i , message := range request . Messages {
promptMsgs = append ( promptMsgs , sdk. Message {
Index : i ,
Content : message . Content ,
Role : message . Role ,
})
}
// Log the request
llmSpan , err := traceloop . LogPrompt (
ctx ,
sdk. Prompt {
Vendor : "openai" ,
Mode : "chat" ,
Model : request . Model ,
Messages : promptMsgs ,
},
sdk. TraceloopAttributes {
WorkflowName : "example-workflow" ,
EntityName : "example-entity" ,
},
)
if err != nil {
fmt . Printf ( "LogPrompt error: %v n " , err )
return
}
client := openai . NewClient ( os . Getenv ( "OPENAI_API_KEY" ))
resp , err := client . CreateChatCompletion (
context . Background (),
* request ,
)
if err != nil {
fmt . Printf ( "ChatCompletion error: %v n " , err )
return
}
var completionMsgs []sdk. Message
for _ , choice := range resp . Choices {
completionMsgs = append ( completionMsgs , sdk. Message {
Index : choice . Index ,
Content : choice . Message . Content ,
Role : choice . Message . Role ,
})
}
// Log the response
llmSpan . LogCompletion ( ctx , sdk. Completion {
Model : resp . Model ,
Messages : completionMsgs ,
}, sdk. Usage {
TotalTokens : resp . Usage . TotalTokens ,
CompletionTokens : resp . Usage . CompletionTokens ,
PromptTokens : resp . Usage . PromptTokens ,
})
}ไม่ว่าจะเล็กหรือใหญ่เราชอบการมีส่วนร่วม❤ตรวจสอบคำแนะนำของเราเพื่อดูวิธีเริ่มต้น
ไม่แน่ใจว่าจะเริ่มต้นที่ไหน? คุณสามารถ:
ถึง @patrickdebois ผู้แนะนำชื่อที่ยอดเยี่ยมที่เราใช้สำหรับ repo นี้!