go openllmetry
v0.0.3
LLM應用程序的開源可觀察性
OpenLlmetry是一組在OpentElemetry頂部建立的擴展,可為您提供有關LLM應用程序的完整可觀察性。由於它在引擎蓋下使用opentemetry,因此可以連接到您現有的可觀察性解決方案-Datadog,Honeycomb等。
它是由Traceloop在Apache 2.0許可下建造和維護的。
該存儲庫包含用於LLM提供商和矢量DBS的標準OpenTelemetry儀器,以及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跟踪代碼!
現在,您需要決定在何處導出跟踪。
有關連接到每個文檔的說明,請參見我們的文檔。
Optlllmetry處於早期α探索階段,我們仍在弄清楚什麼樂器。與其他語言相反的是,沒有太多官方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,他建議我們現在使用此倉庫的名字!