微信扫码
添加专属顾问
随着LLM应用程序的不断发展和改进,实现强大的可观测性对于确保最佳性能和可靠性至关重要。然而,由于其复杂性和规模,跟踪和存储 LLM 应用程序的运行时事件是具有挑战性的。
为了应对这些挑战,我们很高兴发布 MyScale Telemetry,它与 LangChain Callbacks 集成。
MyScale Telemetry 无缝地捕获基于 LangChain 的 LLM 应用程序的跟踪数据,并将其存储在MyScale 中,使诊断问题、优化性能和理解模型行为变得容易。
你可以将 MyScale Telemetry 看作是 LangSmith 的开源替代品,它提供与 LangSmith 类似的功能,包括跟踪和评估 LLM 应用程序。MyScale Telemetry 通过使用多功能强大的 MyScale SQL向量数据库和广泛使用的 Grafana 仪表板,减少了系统复杂性并提高了数据安全性。此外,由于MyScaleDB 与 ClickHouse 兼容,MyScale Telemetry 可以直接与 ClickHouse 一起使用。
让我们在以下部分中详细查看 MyScale Telemetry 系统的工作原理和用法。
将 MyScale Telemetry 与 LangChain 集成是直接的。回调处理程序会自动为你的 LangChain 应用程序中的每个运行时事件创建一个嵌套跟踪,包括:
on_chain_starton_chain_endon_llm_starton_llm_endon_chat_model_starton_retriever_starton_retriever_endon_tool_starton_tool_endon_tool_erroron_chain_erroron_retriever_erroron_llm_error然后收集的运行时事件数据被组织成跟踪数据,类似于 OpenTelemetry 跟踪数据,并存储在MyScale 数据库中的专用跟踪数据表中。请参阅以下 SQL 脚本,了解此跟踪数据表结构和CREATE TABLE语句。
CREATE TABLE your_database_name.your_table_name
(
`TraceId` String CODEC(ZSTD(1)),
`SpanId` String CODEC(ZSTD(1)),
`ParentSpanId` String CODEC(ZSTD(1)),
`StartTime` DateTime64(9) CODEC(Delta(8), ZSTD(1)),
`EndTime` DateTime64(9) CODEC(Delta(8), ZSTD(1)),
`Duration` Int64 CODEC(ZSTD(1)),
`SpanName` LowCardinality(String) CODEC(ZSTD(1)),
`SpanKind` LowCardinality(String) CODEC(ZSTD(1)),
`ServiceName` LowCardinality(String) CODEC(ZSTD(1)),
`SpanAttributes` Map(LowCardinality(String), String) CODEC(ZSTD(1)),
`ResourceAttributes` Map(LowCardinality(String), String) CODEC(ZSTD(1)),
`StatusCode` LowCardinality(String) CODEC(ZSTD(1)),
`StatusMessage` String CODEC(ZSTD(1)),
INDEX idx_trace_id TraceId TYPE bloom_filter(0.001) GRANULARITY 1,
INDEX idx_res_attr_key mapKeys(ResourceAttributes) TYPE bloom_filter(0.01) GRANULARITY 1,
INDEX idx_res_attr_value mapValues(ResourceAttributes) TYPE bloom_filter(0.01) GRANULARITY 1,
INDEX idx_span_attr_key mapKeys(SpanAttributes) TYPE bloom_filter(0.01) GRANULARITY 1,
INDEX idx_span_attr_value mapValues(SpanAttributes) TYPE bloom_filter(0.01) GRANULARITY 1,
INDEX idx_duration Duration TYPE minmax GRANULARITY 1
)
ENGINE = MergeTree()
PARTITION BY toDate(StartTime)
ORDER BY (SpanName, toUnixTimestamp(StartTime), TraceId);
MyScale Telemetry 自动将用户与 LLM 应用程序交互生成的所有跟踪数据记录到 MyScale Cloud或 MyScaleDB 中。然后,开发人员可以在 Grafana 仪表板中可视化这些存储的跟踪数据,从而全面调试和分析 LLM 应用程序。这些跟踪数据还可以输入到像 Ragas 这样的评估框架中进行进一步分析,帮助优化应用程序。
因此,MyScale Telemetry 对开发人员来说是非常有价值的。它提供了一个强大的工具,可以以最小的性能影响调试和增强 LLM 应用程序。它提供了全面的可观测性洞察,允许开发人员深入理解他们的应用程序的行为和性能。
让我们通过考虑以下完整示例开始使用 MyScale Telemetry:设置 MyScaleDB 和 Grafana 仪表板(用于存储和监控跟踪数据)—使用Ragas评估这些数据。
按照以下步骤有效设置和使用 MyScale Telemetry:
首先,使用 Docker Compose 启动 MyScaleDB 和 Grafana 实例。你可以在此文件夹中找到docker-compose.yml文件。运行以下命令启动容器:
git clone https://github.com/myscale/myscale-telemetry.git
cd myscale-telemetry/deploy/
docker-compose up -d
或者,你可以在 MyScale Cloud 上启动一个托管的 MyScaleDB 实例。如果你选择此选项,请使用以下命令禁用本地 MyScaleDB 实例启动:
docker-compose up --scale myscaledb=0 -d
接下来,使用 pip 安装 MyScale Telemetry 包以及 LangChain,LangChain OpenAI 集成和Ragas:
pip install myscale-telemetry langchain_openai ragas
下一步是构建一个简单的 LangChain 链,并将其与MyScaleCallbackHandler集成以收集跟踪数据,如下所示:
import os
from myscale_telemetry.handler import MyScaleCallbackHandler
from operator import itemgetter
from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import ChatPromptTemplate
from langchain_openai import ChatOpenAI, OpenAIEmbeddings
from langchain_community.vectorstores import MyScale
from langchain_community.vectorstores.myscale import MyScaleSettings
from langchain_core.runnables import RunnableConfig
# set up the environment variables for OpenAI and MyScale Cloud/MyScaleDB:
os.environ["OPENAI_API_KEY"] = "YOUR_OPENAI_KEY"
os.environ["MYSCALE_HOST"] = "YOUR_MYSCALE_HOST"
os.environ["MYSCALE_PORT"] = "YOUR_MYSCALE_HOST"
os.environ["MYSCALE_USERNAME"] = "YOUR_MYSCALE_USERNAME"
os.environ["MYSCALE_PASSWORD"] = "YOUR_MYSCALE_PASSWORD"
# create a vector store and retriever using MyScale and OpenAI embeddings:
texts = [
"Harrison worked at Kensho.",
"Alice is a software engineer.",
"Bob enjoys hiking on weekends.",
"Claire is studying data science.",
"David works at a tech startup.",
"Eva loves playing the piano.",
"Frank is a graphic designer.",
"Grace is an artificial intelligence researcher.",
"Henry is a freelance writer.",
"Isabel is learning machine learning."
]
myscale_settings = MyScaleSettings()
myscale_settings.index_type = 'SCANN'
vectorstore = MyScale.from_texts(texts, embedding=OpenAIEmbeddings(), config=myscale_settings)
retriever = vectorstore.as_retriever()
# set up the llm and prompt template:
model = ChatOpenAI()
template = """Answer the question based only on the following context:
{context}
Question: {question}
"""
prompt = ChatPromptTemplate.from_template(template)
# create the chain
chain = (
{
"context": itemgetter("question") | retriever,
"question": itemgetter("question"),
}
| prompt
| model
| StrOutputParser()
)
# integrate MyScaleCallbackHandler to capture trace data during the chain execution:
chain.invoke({"question": "where did harrison work"}, config=RunnableConfig(
callbacks=[
MyScaleCallbackHandler()
]
))
成功运行后,你将在 MyScaleDB 中的otel.otel_traces表中找到相应的跟踪数据。
请参阅 MyScale Telemetry 自定义参数文档以自定义MyScaleCallbackHandler。
为了从 LLM 应用程序运行时轻松清晰地显示通过 MyScale Telemetry 收集的跟踪数据,我们还提供了 Grafana 跟踪仪表板。仪表板允许用户监控LLM应用程序的状态,类似于 LangSmith,使调试和改进其性能变得更加容易。Docker Compose 示例在 http://localhost:3000 启动了一个 Grafana 实例。使用用户名admin和密码admin登录。
在使用 MyScale Telemetry 处理程序收集跟踪数据后,请按照以下步骤在 Grafana中 设置 MyScale 跟踪仪表板:
myscaledb9000defaultdefaultMyScale 跟踪仪表板,类似于 LangSmith,提供了对 LLM 应用程序运行时行为的全面洞察。它显示了有助于调试、优化和理解应用程序性能的关键信息。
仪表板显示LangChain应用程序中每个函数的执行时间,帮助您识别性能瓶颈。
仪表板提供了链的总体输入和输出的详细视图,使跟踪应用程序中的数据流变得容易。
它显示数据库检索器返回的特定数据,允许您验证是否正在获取和使用正确的数据。
你可以查看生成并发送到 LLM 的确切提示,这对于确保所提出问题的准确性和相关性至关重要。
还显示了 ChatOpenAI 生成的输出,提供了LLM对提示的响应的清晰度。此外,显示了令牌使用详情,以帮助您监控和优化与LLM API调用相关的成本。
存储在 MyScaleDB 中的跨度数据可以用来分析和评估 RAG pipeline 与 Ragas,这是一个流行的开源 RAG 评估框架。
以下 Python 代码演示了如何通过评估检索的上下文和生成的答案来使用 Ragas 评分跟踪:
import os
from datasets import Dataset
from ragas import evaluate
from ragas.metrics import faithfulness, answer_relevancy, context_utilization
from clickhouse_connect import get_client
def score_with_ragas(query, chunks, answer):
test_dataset = Dataset.from_dict({"question": [query], "contexts": [chunks], "answer": [answer]})
result = evaluate(test_dataset, metrics=[faithfulness, answer_relevancy, context_utilization])
return result
def evaluate_trace(question, topk, client, database_name, table_name):
trace_id, answer = client.query(
f"SELECT TraceId, SpanAttributes['output'] as Answer FROM {database_name}.{table_name} WHERE SpanAttributes['question'] = '{question}' AND ParentSpanId = ''"
).result_rows[0]
span_dict = client.query(
f"SELECT SpanAttributes FROM {database_name}.{table_name} WHERE TraceId = '{trace_id}' AND SpanKind = 'retriever'"
).result_rows[0][0]
contexts = [span_dict.get(f"documents.{i}.content") for i in range(topk)]
print(score_with_ragas(question, contexts, answer))
test_question = "where did harrison work"
client = get_client(
host=os.getenv("MYSCALE_HOST"),
port=int(os.getenv("MYSCALE_PORT")),
username=os.getenv("MYSCALE_USERNAME"),
password=os.getenv("MYSCALE_PASSWORD"),
)
evaluate_trace(test_question, 4, client, "otel", "otel_traces")
运行示例后,你可以使用 Ragas 提供的分数评估你的 RAG pipeline 性能。
MyScale Telemetry 为改善 LLM 应用程序的可观测性和评估提供了一个强大、开源的解决方案。通过与 LangChain Callbacks 无缝集成,它捕获详细的跟踪数据并将其存储在 MyScaleDB 中,使诊断问题、优化性能和理解应用程序行为变得更加容易。
Grafana 中的 MyScale 跟踪仪表板提供了这些跟踪数据的清晰可视化,帮助您有效地监控和调试你的 LLM 应用程序。关键洞察包括函数执行时间、输入和输出跟踪、DB 检索器返回、提示信息、ChatOpenAI 输出和令牌使用情况。
此外,将 Ragas 与 MyScale Telemetry 集成允许全面评估 RAG pipeline。使用存储在 MyScaleDB 中的跟踪数据,Ragas 可以评估指标,如忠实度、答案相关性和上下文利用,确保高质量的结果和持续改进。
为什么不尝试使用 MyScale Telemetry 和 Grafana 仪表板,充分利用这些强大的工具呢?如果有任何问题或需要进一步的帮助,请随时联系我们的 MyScale Discord支持团队。
53AI,企业落地大模型首选服务商
产品:场景落地咨询+大模型应用平台+行业解决方案
承诺:免费POC验证,效果达标后再合作。零风险落地应用大模型,已交付160+中大型企业
2026-07-06
腾讯混元 Hy3,正式发布
2026-07-06
我拿到了微信Agent的灰测!!感觉又要被取代了
2026-07-06
循环工程:Karpathy方法——以及使其效率提升 5 倍的工作流程
2026-07-06
手机端 Agent 评测:从方法论到工程实践
2026-07-06
长上下文方案对比:一文讲清从 RAG、KV Cache 到百万上下文的工程取舍
2026-07-05
Hermes 的记忆层有 8 种实现,我为什么选了最反常识的那个
2026-07-05
Codex 负责人谈 AI 时代唯一值钱的能力
2026-07-05
复旦期末考「造反」了:51名学生联手围攻Claude、DeepSeek,谁能让AI交白卷谁就是学霸
2026-04-15
2026-04-07
2026-04-24
2026-04-17
2026-04-14
2026-04-24
2026-05-19
2026-04-22
2026-04-24
2026-04-24
欢迎您使用【53AI 官方网站】(以下简称“本网站”或“我们”)。本《会员服务协议》(以下简称“本协议”)是您(以下简称“会员”或“用户”)与【深圳市博思协创网络科技有限公司】之间关于注册、登录及使用本网站会员服务所订立的法律协议。
在您注册或登录前,请务必审慎阅读、充分理解各条款内容,特别是免除或限制责任的条款、知识产权条款、争议解决条款等。此类条款将以加粗形式提示您注意。 当您通过微信公众号授权、手机验证码验证或其他方式成功登录本网站时,即视为您已完全理解并同意接受本协议的全部内容。
一、 定义
本网站:指由【深圳市博思协创网络科技有限公司】运营的,域名为【53ai.com】的网站及相关移动端页面。
会员服务:指本网站向注册会员提供的知识库文章查阅、内容检索及其他相关增值服务。
知识库内容:指本网站发布的包括但不限于文字、图表、数据、研究报告、行业分析等数字化内容资源。
二、 账号注册与登录
登录方式:本网站支持以下登录方式,您可根据实际情况选择:
微信公众号授权登录:您同意将您的微信OpenID信息授权给本网站,用于创建或关联会员账号。
手机验证码登录:您需提供真实有效的手机号码,并通过短信验证码完成身份验证与登录/注册。
账号安全:您的账号仅限您本人使用,禁止赠与、借用、租用、转让或售卖。因您保管不善导致的账号被盗、密码泄露等损失,由您自行承担。
实名认证:根据相关法律法规要求,我们可能要求您在特定功能下完成实名认证。如您拒绝提供,可能无法使用部分或全部服务。
未成年人保护:若您未满18周岁,请在法定监护人的陪同下阅读本协议,并在征得监护人同意后使用本服务。
三、 服务内容与规范
知识库查阅权限:会员登录后,有权按照其会员等级对应的权限范围,在线浏览、检索本网站知识库中的相关文章及内容。
服务变更:我们有权根据业务发展需要,调整、变更或终止部分服务内容,并将以网站公告、公众号消息等方式提前通知。
禁止行为:您在使用服务时不得实施以下行为:
利用技术手段批量爬取、下载、转存知识库内容;
将知识库内容用于商业目的或未经授权地向第三方传播;
干扰本网站正常运行或侵犯其他用户合法权益;
发布违法违规信息或从事违反公序良俗的活动。
四、 知识产权声明
权利归属:本网站知识库中的排版设计、软件代码等内容的知识产权均归【公司全称】或原权利人所有,受《中华人民共和国著作权法》等法律保护。
有限许可:本网站授予会员一项非独占、不可转让、不可转授权的普通许可,仅限于个人学习、研究之目的在线查阅知识库内容。
侵权追责:未经书面许可,任何单位或个人不得以任何形式复制、转载、摘编、镜像、汇编或以其他方式使用上述内容。一经发现,我们保留追究其法律责任的权利。
五、 个人信息保护
我们重视对您个人信息的保护。关于我们如何收集、使用、存储和保护您的个人信息,请单独阅读 《隐私政策》。
您通过微信公众号授权或手机号验证所提供的信息,我们将严格按照《个人信息保护法》的规定处理,仅用于身份识别、服务提供及安全验证等必要用途。
您可以随时通过网站设置或联系客服行使查阅、更正、删除个人信息及撤回授权同意的权利。
六、 免责声明
内容准确性:知识库内容仅供参考,不构成专业建议。我们不对其完整性、准确性、时效性作任何明示或暗示的保证,您应自行判断并承担使用风险。
不可抗力:因自然灾害、政策法规变化、网络故障、第三方平台接口异常(如微信接口维护、运营商短信通道故障)等不可抗力导致的服务中断或延迟,我们不承担违约责任。
第三方链接:本网站可能包含指向第三方网站的链接,该等网站的内容和服务不受我们控制,请您自行甄别风险。
七、 违约责任
如您违反本协议约定,我们有权视情节采取警告、限制功能、暂停服务、注销账号等措施,并保留要求赔偿损失的权利。
如因您的违约行为导致我们遭受行政处罚、第三方索赔或商誉损失,您应承担全部赔偿责任(包括但不限于罚款、赔偿金、律师费、公证费等)。
八、 法律适用与争议解决
本协议的订立、执行和解释均适用中华人民共和国大陆地区法律。
因本协议产生的或与本协议有关的任何争议,双方应友好协商解决;协商不成的,任何一方均可向【公司所在地】有管辖权的人民法院提起诉讼。
九、 其他
本协议构成双方就本服务达成的完整协议,取代此前任何口头或书面约定。
本协议任一条款被认定为无效或不可执行的,不影响其他条款的效力。
我们对本协议享有最终解释权,并在法律允许的范围内保留随时修改的权利。修改后的协议一经公布即生效,继续使用服务即视为同意修订内容。