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,他建议我们现在使用此仓库的名字!