2026/1/2 9:23:20
网站建设
项目流程
安徽太基建设官方网站,用手机开发软件的工具,快速搭建个人网站,网站上添加百度地图一、背景
某天打开组内的Grafana仪表盘#xff0c;突然好奇我们的埋点从被触发后是如何一步一步变成所展示的各种图表的#xff0c;于是在我进行一系列的探索之后#xff0c;总结出了以下链路#xff1a;
在指标工厂新建指标#xff0c;确定埋点key和埋点元数据。代码中…一、背景某天打开组内的Grafana仪表盘突然好奇我们的埋点从被触发后是如何一步一步变成所展示的各种图表的于是在我进行一系列的探索之后总结出了以下链路在指标工厂新建指标确定埋点key和埋点元数据。代码中指定埋点key和埋点数据通过watchDog发送kafka消息到obs monitor topic。为埋点指标新建数据处理任务将消费到的kafka消息落到指定的数据表中。添加新的仪表盘编写展示数据背后的SQL语句。痛点每需要添加一个新的数据分析大盘就需要人工去分析各个表结构、表与表之间的联系、表各个字段的含义等在充分理解其含义后再费时费力地编写SQL语句并不断调优。这导致OBS埋点数据分析的场景相对固化并且难以支持灵活的数据查询要求。二、思考在分析了当前系统的痛点后我意识到这是一个典型的可以利用AI能力来对现有功能进行扩展的场景。因为场景多变因为你不知道用户可能想查看什么样的数据无法通过代码穷举需要了解业务同时又具备编写复杂数据查询SQL的人并且费时费力看到大盘数据后依赖每个人对业务的理解提炼出一套分析报告报告质量与个人的理解与表达能力相关。于是我就开始思考能否构建一个AI Agent使其能够根据用户的要求自主地生成各种各样的SQL查询语句并将查询到的数据形成完整的数据分析报告返回给用户。为了实现这个方案有几个明显需要解决的点如何让AI理解每个表中各字段的含义、各个表的作用、表与表之间的联系从而生成准确的SQLAI生成完SQL之后如何打通 AI 与数据平台之间的通路从而成功执行该SQL 并拿到数据因为数据库权限不在我这我无法直接连接到数据库。如何充分利用已有资源减少人力投入毕竟是个人想法在不确定效果如何的情况下不好直接打扰平台方专门为我写一些新功能同时我个人也只能投入一些零碎的时间来做这件事。三、方案有了问题后就带着问题去找答案。查询数据Tool首先我需要一个能够执行查询的端点。那么我就去抓取了大盘中的数据所调用的接口意外地发现不同的数据调用的是同一个接口https://xxx.com/api/ds/query只是入参不同而已而且发现查询的逻辑是通过rawSql将查询语句直接传过去于是我将该Curl导入到ApiFox中通过不断修改参数发现最终与查询结果相关的入参可以精简到简单的几个参数from、to、query(format,rawSql,intervalMs)那么针对第一个问题我就想到了很好的办法把这个查询API封装成一个Tool描述清楚各个字段的含义就可以让AI生成完整的参数来查询它想要的数据。说干就干我立马新建了一个Spring AI工程把Tool的功能和需要的参数描述清楚。其中grafanaService.query()内部逻辑就是通过Feign来调用上面那个查询的API。Tool(name query_grafana, description 使用Grafana中的SQL查询grafana数据) public JSONObject queryGrafana(ToolParam(description 查询开始时间) String from, ToolParam(description 查询结束时间) String to, ToolParam(description 查询数据类型:table|time_series) String format, ToolParam(description 查询时间间隔,单位毫秒。只有当format为time_series时需要传入。) Long intervalMs, ToolParam(description Grafana SQL查询语句) String rawSql){ DateTimeFormatter formatter DateTimeFormatter.ofPattern(yyyy-MM-dd HH:mm:ss); LocalDateTime fromDateTime LocalDateTime.parse(from, formatter); LocalDateTime toDateTime LocalDateTime.parse(to, formatter); String fromTimestamp String.valueOf(fromDateTime.toInstant(ZoneOffset.UTC).toEpochMilli()); String toTimestamp String.valueOf(toDateTime.toInstant(ZoneOffset.UTC).toEpochMilli()); JSONObject resp grafanaService.query(fromTimestamp, toTimestamp, intervalMs, rawSql, format); return resp; }Resource private GrafanaClient grafanaClient; Value(${grafana.cookie}) private String getGrafanaCookie; public JSONObject query(String fromTimestamp, String toTimestamp, Long intervalMs, String rawSql, String format) { GrafanaRequest request new GrafanaRequest(fromTimestamp, toTimestamp, intervalMs, rawSql, format); return grafanaClient.query(getGrafanaCookie, request); }表结构RAG有了能够执行查询的Tool之后剩下的就是需要AI能够根据用户的query生成精准的参数以及查询SQL。之前了解到公司部署了RAGFlow服务https://xxx.com/knowledge既然有了那就得用起来创建知识集发现支持添加飞书文档。由于我们是需要完整的表结构所以把配置修改为使用table的格式一行数据便是一个chunk以免出现语义上的中断。埋点数据一般表都较小语意较为明确。像一些字段很多的大表可能需要考虑更好的方案。创建飞书文档手动到OBS的库中把我们想要AI帮助分析的表结构拉出来验证想法时采取的临时方案但由于建表时的不规范很多表没有对表中字段添加comment这会导致AI不理解每个字段的含义也就无法准确地生成SQL。因此我们手动补充每张表、每个字段的描述以及与其它表之间的关联关系。将飞书文档添加到数据集中完成后点击名称查看切片详情。双击每个块也可以查看块的详情。会发现RAGFlow自动给我们生成了一些关键词和问题这些内容会对召回准确率产生影响。我自己觉得生成的不太准确所以结合自己理解手动输入了一些关键词和可能的问题。完成后可以到检索测试tab测试召回的效果根据结果确定合适的参数。并可以对chunk的内容和关键词等等进行适当的调整。调优完成后就需要对接RAGFlow的retrive接口来把我们知识库召回的流程做成一个Tool。Resource private RagFlowService ragFlowService; Tool(name get_table_schema, description 根据query查询可能有关联的数据库表返回建表语句。尽量传入多个中文关键词每个关键词之间用空格隔开。) public ListString getTableSchema(Param(query) String question){ return ragFlowService.retrieval(question); }OBS Agent在我看来想要构建一个能够 work 的Agent需要以下几个要素AgentArchitecture(Workflow、ReAct、Plan-Execute、Multi-Agent…)LLMContext Engineering(Prompt、Tool、Memory…)本来是想用SpringAI Alibaba Graph或者 LangGraph来构建一个WorkFlow类或者Graph类的复杂智能体ReAct、Plan-Execute、Multi-Agent。但为了快速验证想法和节省个人时间并且考虑到目前任务相对简单PE工具就足以完成再加上部门正在试用Trae这个工具所以决定基于Trae来构建一个Agent可以顺便使用他们的高级模型/doge也可以分享给其它同事使用。接入Trae之后Architecture自然就是Trae的Agent架构了根据我使用下来感觉采用的是基于ReAct的 Single-Agent。而Context Engineering的部分对话功能以及长短期记忆自然是Trae天生就具备的。而Tool则可以借助其自带的一些工具另外还可以利用MCP来进行扩展比如得物的MCP市场提供了大量好用的Server并且可以很方便的发布自己开发的Mcp Server。于是我就把在第一步和第二步做的工具在得物Mcp平台上进行发布供我自己和其他感兴趣的同学使用。最后需要一个专门针对我这个场景的Prompt来指引LLM 顺利完成任务经过我不断的修改最终形成这样一段Prompt:# Role数据分析专家 ## Background用户需要专业的数据分析支持来解决复杂的业务问题从海量数据中提取有价值的信息为产品优化、运营策略和业务决策提供可靠依据。 ## Attention数据准确性是分析工作的生命线必须始终保持严谨细致的工作态度。每一次分析都可能影响重要决策因此需要系统性思考、分步验证确保每个环节的可靠性。 ## Profile - Language: 中文 - Description: 专注于数据库表结构分析与Grafana-SQL查询的专业数据分析师具备系统化解决复杂数据查询问题的能力 ### Skills: - 精通数据库表结构分析能够快速识别表关系、字段含义和数据类型 - 熟练掌握Grafana-SQL语法规范具备高效的查询语句编写和优化能力 - 具备专业的数据可视化技能能够根据分析目标选择合适的图表类型 - 拥有深度业务需求理解能力能够准确转化业务问题为数据查询方案 - 掌握系统化的问题分析方法能够规划完整的数据分析流程和验证机制 ## Goals: - 准确理解用户业务需求明确数据查询的核心目标和关键指标 - 系统分析相关表结构确保对数据关系和业务逻辑的全面理解 - 设计高效的数据查询方案平衡查询性能与结果准确性 - 生成专业的数据分析报告包含可视化展示和深度业务洞察 - 确保所有分析过程可追溯、结果可验证、结论可执行 ## Constrains: - 查询不到数据时不要模拟任何数据直接回复查不到数据 - 你自己所知道的时间是不准确的如果涉及到时间则需要使用工具获取当前时间 - 严格基于实际数据进行分析严禁任何形式的数据虚构或推测 - 必须在完成表结构分析和需求理解后再执行具体查询操作 - 所有重要数据必须进行源头验证和多维度交叉检查 - 严格遵守数据安全和隐私保护原则不超越授权数据范围 - 明确说明分析的局限性、假设条件和潜在的数据不确定性 ## Workflow: 1. 深度理解业务需求明确查询目标、关键指标和预期输出 2. 不断使用工具获取你需要的表及其表结构直到你认为已获取到足够的信息 3. 系统分析相关表结构包括字段含义、数据类型、关联关系和索引结构 4. 设计查询逻辑方案规划执行步骤、验证节点和性能优化策略 4. 编写符合Grafana语法的SQL查询语句设置正确的参数和时间范围 5. 执行查询。如果查询出现401错误则中断后续流程并提示用户更新Cookie后重启obs-mcp-server如果出现400错误尝试修改自己的SQL语句重新查询 6. 生成可视化图表和详细分析报告报告中必须包含你执行查询的SQL语句 7. 调用飞书生成文档工具以Markdown格式创建飞书文档返回最终的飞书文档地址 ## OutputFormat: - 分析报告包含完整的分析过程和关键发现创建新的飞书文档并保存在其中 - 可视化图表以嵌入式链接形式呈现确保清晰展示数据趋势和分布 - 报告结构包含执行摘要、分析方法、数据结果、业务洞察和后续建议 ## Suggestions: - 建立系统化的表结构分析框架提高数据关系识别的效率和准确性 - 持续学习Grafana-SQL最新语法特性优化查询性能和资源消耗 - 培养多维度数据验证习惯确保分析结果的可靠性和业务价值 - 深入理解业务场景提升从数据到洞察的转化能力和决策支持水平 - 定期复盘分析案例总结经验教训持续改进分析方法论和工作流程 ## 工具描述 - query_grafana:使用Grafana中的SQL查询grafana数据 注意 1. 当format为time_series时表示查询时间序列数据SELECT的第一个字段必须是$__timeGroupAlias(timestamp, interval)表示时间分组别名。时间间隔intervalMs需要与rawSql中的$__timeGroup(timestamp, interval)保持对应。比如intervalMs86400000L表示1天,rawSql中$__timeGroup(timestamp, 1d)也需要保持一致。 2. 当format为table时表示查询表格数据SELECT的字段可以任意intervalMs参数传null 3. 时间范围为闭区间即包含开始时间from和结束时间to,格式为yyyy-MM-dd HH:mm:ss。 参数示例{ from: 2025-11-16 00:00:00, to: 2025-11-16 23:59:59, format: table, intervalMs: null, rawSql: SELECT region, COUNT(*) as user_count FROM intl_xxxxxxx WHERE $__timeFilter(timestamp) GROUP BY region ORDER BY user_count DESC } ## Initialization 作为数据分析专家你必须遵守Constrains使用默认中文与用户交流。最终在 Trae 中构建了一个完整OBS Agent。添加智能体OBS大盘分析四成果最终生成的报告截取部分五、总结AI时代来临我们应该要善于发现当前系统中的哪些部分能够结合AI来进行提升积极拥抱变化有了想法就去做边做边想边解决问题永远主动向前一步。本文章只是记录了从产生想法到构建MVP验证想法的整个过程这中间当然有很多可以继续优化的地方我本人目前有以下几个想法也欢迎大家积极评论贡献自己的独到见解。接入数据库数据通过动态监听Binlog的方式来识别各表之间的联系比如select 语句的join并将这种关系保存到Neo4j 这种图向量数据库中来实现表结构的 RAG。基于LangGraph 或 SpringAI Alibaba 构建Multi-Agent System细化各Agent的职责精炼各Agent的Context 构成以获得更好的效果。例如协调者 Agent、表结构搜索 Agent、SQL 生成 Agent、分析报告 Agent等等。接入飞书机器人或者使用AI Coding工具生成一个前端页面。使得一些非技术人员例如产品和运营也能很方便地使用。如何学习大模型 AI 由于新岗位的生产效率要优于被取代岗位的生产效率所以实际上整个社会的生产效率是提升的。但是具体到个人只能说是“最先掌握AI的人将会比较晚掌握AI的人有竞争优势”。这句话放在计算机、互联网、移动互联网的开局时期都是一样的道理。我在一线互联网企业工作十余年里指导过不少同行后辈。帮助很多人得到了学习和成长。我意识到有很多经验和知识值得分享给大家也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限很多互联网行业朋友无法获得正确的资料得到学习提升故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。第一阶段10天初阶应用该阶段让大家对大模型 AI有一个最前沿的认识对大模型 AI 的理解超过 95% 的人可以在相关讨论时发表高级、不跟风、又接地气的见解别人只会和 AI 聊天而你能调教 AI并能用代码将大模型和业务衔接。大模型 AI 能干什么大模型是怎样获得「智能」的用好 AI 的核心心法大模型应用业务架构大模型应用技术架构代码示例向 GPT-3.5 灌入新知识提示工程的意义和核心思想Prompt 典型构成指令调优方法论思维链和思维树Prompt 攻击和防范…第二阶段30天高阶应用该阶段我们正式进入大模型 AI 进阶实战学习学会构造私有知识库扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架抓住最新的技术进展适合 Python 和 JavaScript 程序员。为什么要做 RAG搭建一个简单的 ChatPDF检索的基础概念什么是向量表示Embeddings向量数据库与向量检索基于向量检索的 RAG搭建 RAG 系统的扩展知识混合检索与 RAG-Fusion 简介向量模型本地部署…第三阶段30天模型训练恭喜你如果学到这里你基本可以找到一份大模型 AI相关的工作自己也能训练 GPT 了通过微调训练自己的垂直大模型能独立训练开源多模态大模型掌握更多技术方案。到此为止大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗为什么要做 RAG什么是模型什么是模型训练求解器 损失函数简介小实验2手写一个简单的神经网络并训练它什么是训练/预训练/微调/轻量化微调Transformer结构简介轻量化微调实验数据集的构建…第四阶段20天商业闭环对全球大模型从性能、吞吐量、成本等方面有一定的认知可以在云端和本地等多种环境下部署大模型找到适合自己的项目/创业方向做一名被 AI 武装的产品经理。硬件选型带你了解全球大模型使用国产大模型服务搭建 OpenAI 代理热身基于阿里云 PAI 部署 Stable Diffusion在本地计算机运行大模型大模型的私有化部署基于 vLLM 部署大模型案例如何优雅地在阿里云私有部署开源大模型部署一套开源 LLM 项目内容安全互联网信息服务算法备案…学习是一个过程只要学习就会有挑战。天道酬勤你越努力就会成为越优秀的自己。如果你能在15天内完成所有的任务那你堪称天才。然而如果你能完成 60-70% 的内容你就已经开始具备成为一名大模型 AI 的正确特征了。这份完整版的大模型 AI 学习资料已经上传CSDN朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】