قابلية الملاحظة مفتوحة المصدر لتطبيق LLM الخاص بك
OpenLlMetry هي مجموعة من الامتدادات المصممة فوق قياس الأوبنتيل التي تمنحك إمكانية ملاحظتها كاملة على تطبيق LLM الخاص بك. نظرًا لأنه يستخدم قياس الأوبنتيلي تحت الغطاء ، يمكن توصيله بحلول الملاحظة الحالية - DataDog و Honeycomb وغيرها.
تم بناؤه وصيانته بواسطة Traceloop بموجب ترخيص Apache 2.0.
يحتوي REPO على أجهزة قياس أوبنتليميات قياسية لمقدمي LLM و DBS Vector ، بالإضافة إلى Traceloop SDK التي تجعل من السهل البدء في OpenLlmetry ، مع استمرار إخراج بيانات قياس الأوبنتيل القياسية التي يمكن توصيلها بمكدس قابلية الملاحظة. إذا كان لديك بالفعل أداة قياس الأوبنتيل ، فيمكنك فقط إضافة أي من أجهزةنا مباشرة.
أسهل طريقة للبدء هي استخدام 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 ، الذي اقترح الاسم العظيم الذي نستخدمه الآن لهذا الريبو!