网站交接需要哪些,跨境电商发展现状如何,.net和php那个做网站好,桂林seo哪家好作者#xff1a;来自 Elastic Adrian Cole Elastic 很自豪地在我们的 Python、Node.js 和 Java EDOT SDK 中引入了 OpenAI 支持。它们为使用 OpenAI 兼容服务的应用程序添加日志、指标和跟踪#xff0c;而无需任何代码更改。 介绍
去年#xff0c;我们宣布了 OpenTelemetry…作者来自 Elastic Adrian Cole Elastic 很自豪地在我们的 Python、Node.js 和 Java EDOT SDK 中引入了 OpenAI 支持。它们为使用 OpenAI 兼容服务的应用程序添加日志、指标和跟踪而无需任何代码更改。 介绍
去年我们宣布了 OpenTelemetry又名 Elastic Distribution of OpenTelemetry - EDOT语言 SDK 的 Elastic 分发它可以从应用程序收集日志、跟踪和指标。当宣布这一消息时我们还不支持 OpenAI 等大型语言模型 (LLM) 提供商。这限制了开发人员对生成式人工智能 (GenAI) 应用程序的洞察力。
在之前的文章中我们回顾了 LLM 可观察性的重点例如 token 使用情况、聊天延迟以及了解你的应用程序使用哪些工具如 DuckDuckGo。通过正确的日志、跟踪和指标开发人员可以回答诸如 “Which version of a model generated this response? - 哪个版本的模型生成了此响应”之类的问题。或 “What was the exact chat prompt created by my RAG application? - 我的 RAG 应用程序创建的聊天提示的具体是什么”
在过去的六个月中Elastic 与 OpenTelemetry 社区的其他成员一起投入了大量精力来共享这些领域的规范包括收集 LLM 相关日志、指标和跟踪的代码。我们的目标是扩展 EDOT 为 GenAI 用例带来的零代码代理方法。
今天我们宣布了 EDOT 语言 SDK 中的第一个 GenAI 仪器功能OpenAI。下面你将看到如何使用我们的 Python、Node.js 和 Java EDOT SDK 观察 GenAI 应用程序。 示例应用程序
我们中的许多人可能熟悉 ChatGPT它是 OpenAI GPT 模型系列的前端。使用这个你可以提出一个问题助手可能会根据你问的问题和 LLM 所训练的文本正确地回答。
以下是 ChatGPT 回答的一个深奥问题的示例 我们的示例应用程序将简单地询问这个预定义的问题并打印结果。我们将使用三种语言编写它Python、JavaScript 和 Java。
我们将采用“零代码”代理方法执行每个操作以便在配置了 Kibana 和 APM 服务器的 Elastic Stack 中捕获和查看日志、指标和跟踪。如果你尚未运行堆栈请使用 ElasticSearch Labs 的说明进行设置。
无论编程语言是什么都需要三个变量OpenAI API 密钥、Elastic APM 服务器的位置以及应用程序的服务名称。你将把这些写入名为 .env 的文件中。
OPENAI_API_KEYsk-YOUR_API_KEY
OTEL_EXPORTER_OTLP_ENDPOINThttp://localhost:8200
OTEL_SERVICE_NAMEopenai-example每次应用程序运行时它都会将日志、跟踪和指标发送到 APM 服务器你可以通过像这样查询 Kibana 来找到应用程序 “openai-example”
http://localhost:5601/app/apm/services/openai-example/transactions
当你选择一个跟踪时你将看到 OpenAI SDK 发出的 LLM 请求以及由此引起的 HTTP 流量 选择 logs 选项卡来查看对 OpenAI 的确切请求和响应。这些数据对于问答和评估用例至关重要。 你还可以转到 Metrics Explorer 并在运行应用程序的所有时间内绘制 “gen_ai.client.token.usage” 或 “gen_ai.client.operation.duration” 的图表
http://localhost:5601/app/metrics/explorer 继续查看该应用程序在 Python、Java 和 Node.js 中的具体外观和运行方式。那些已经使用我们的 EDOT 语言 SDK 的人将会熟悉它的工作原理。 Python
假设你已经安装了 python那么第一件事就是设置一个虚拟环境并安装所需的软件包OpenAI 客户端、用于读取 .env 文件的辅助工具和我们的 EDOT Python 包
python3 -m venv .venv
source .venv/bin/activate
pip install openai python-dotenv[cli] elastic-opentelemetry接下来运行 edot-bootstrap它将分析代码以安装任何可用的相关工具
edot-bootstrap —-actioninstall现在创建你的 .env 文件如本文前面所述以及 chat.py 中的以下源代码
import osimport openaiCHAT_MODEL os.environ.get(CHAT_MODEL, gpt-4o-mini)def main():client openai.Client()messages [{role: user,content: Answer in up to 3 words: Which ocean contains Bouvet Island?,}]chat_completion client.chat.completions.create(modelCHAT_MODEL, messagesmessages)print(chat_completion.choices[0].message.content)if __name__ __main__:main()现在你可以使用以下命令运行所有内容
dotenv run -- opentelemetry-instrument python chat.py最后在 Kibana 中查找名为 “openai-example” 的服务的跟踪。你应该会看到一个名为 “chat gpt-4o-mini” 的交易。
你无需复制/粘贴上述内容而是可以在此处的 Python EDOT 存储库中找到此示例的工作副本以及说明。
最后如果你想尝试更全面的示例请查看使用 OpenAI 和 ElasticSearch 的 Elser 检索模型的 chatbot-rag-app。 Java
初始化 Java 项目有几种流行的方法。由于我们使用的是 OpenAI第一步是配置依赖项 com.openai:openai-java 并将以下源代码写为 Chat.java。
package openai.example;import com.openai.client.OpenAIClient;
import com.openai.client.okhttp.OpenAIOkHttpClient;
import com.openai.models.*;final class Chat {public static void main(String[] args) {String chatModel System.getenv().getOrDefault(CHAT_MODEL, gpt-4o-mini);OpenAIClient client OpenAIOkHttpClient.fromEnv();String message Answer in up to 3 words: Which ocean contains Bouvet Island?;ChatCompletionCreateParams params ChatCompletionCreateParams.builder().addMessage(ChatCompletionUserMessageParam.builder().content(message).build()).model(chatModel).build();ChatCompletion chatCompletion client.chat().completions().create(params);System.out.println(chatCompletion.choices().get(0).message().content().get());}
}构建项目使得所有依赖项都在一个 jar 中。例如如果使用 Gradle你将使用 com.gradleup.shadow 插件。
接下来如前所述创建 .env 文件并下载我们将用来加载它的 shdotenv。
curl -O -L https://github.com/ko1nksm/shdotenv/releases/download/v0.14.0/shdotenv
chmod x ./shdotenv此时你有一个 jar 和配置可以用来运行 OpenAI 示例。下一步是下载 EDOT Java javaagent 二进制文件。这是记录和导出日志、指标和跟踪的部分。
curl -o elastic-otel-javaagent.jar -L https://oss.sonatype.org/service/local/artifact/maven/redirect?rsnapshotsgco.elastic.otelaelastic-otel-javaagentvLATEST假设你组装了一个名为 openai-example-all.jar 的文件请使用 EDOT 运行它如下所示
./shdotenv java -javaagent:elastic-otel-javaagent.jar -jar openai-example-all.jar最后在 Kibana 中查找名为 “openai-example” 的服务的跟踪。你应该会看到一个名为 “chat gpt-4o-mini” 的交易。
你无需复制/粘贴上述内容而是可以在此处的 EDOT Java 源代码存储库中找到此示例的工作副本。 Node.js
假设你已经安装并配置了 npm请运行以下命令来初始化示例项目。这包括 openai 包和 elastic/opentelemetry-node (EDOT Node.js)
npm init -y
npm install openai elastic/opentelemetry-node接下来创建 .env 文件如本文前面所述以及 index.js 中的以下源代码
const {OpenAI} require(openai);let chatModel process.env.CHAT_MODEL ?? gpt-4o-mini;async function main() {const client new OpenAI();const completion await client.chat.completions.create({model: chatModel,messages: [{role: user,content: Answer in up to 3 words: Which ocean contains Bouvet Island?,},],});console.log(completion.choices[0].message.content);
}main();有了这个使用 EDOT 运行上述源如下所示
node --env-file .env --require elastic/opentelemetry-node index.js最后在 Kibana 中查找名为 “openai-example” 的服务的跟踪。你应该会看到一个名为 “chat gpt-4o-mini” 的交易。
你无需复制/粘贴上述内容就可以在此处的 EDOT Node.js 源存储库中找到此示例的工作副本。
最后如果你想尝试一个更全面的示例请查看 openai-embeddings它使用 OpenAI 和 Elasticsearch 作为向量数据库 结束语
以上你已经了解了如何使用 OpenTelemetry 的弹性分布 (EDOT) 以三种不同的语言观察官方 OpenAI SDK。
值得注意的是一些 OpenAI SDK 以及围绕生成式 AI 的 OpenTelemetry 规范都是实验性的。如果你发现这对你有帮助或者发现故障请加入我们的 Slack 并让我们知道。
通过设置 OPENAI_BASE_URL 并选择相关模型多个 LLM 平台可以接受来自 OpenAI 客户端 SDK 的请求。在开发过程中我们测试了 Azure OpenAI 服务并使用 Ollama 进行集成测试。事实上我们将代码贡献给 Ollama 以改进其 OpenAI 支持。无论你选择哪种 OpenAI 兼容平台我们都希望这个新工具可以帮助你了解 LLM 的使用情况。
最后虽然第一个搭载 EDOT 的生成式 AI SDK 是 OpenAI但你很快就会看到更多。我们已经在 Bedrock 上开展工作并与 OpenTelemetry 社区的其他人合作开发其他平台。请继续关注此博客以获取令人兴奋的更新。 原文Instrumenting your OpenAI-powered Python, Node.js, and Java Applications with EDOT — Elastic Observability Labs