自从 Ai MCP 模型上下文协议,2024年11月,推出开放标准以后。2025年,就进入了全面的 MCP 服务落地。也正因如此,程序员👨🏻‍💻的学习就又多了一项新的应用技能,同时也成了面试热门问题。如:“你的项目,有使用 AI 方面的能力进行提效吗?” 解封下码农的双手🙌🏻!

img

我能哪些方面使用 Ai 提效呢?

在互联网程,序员工程开发方面,关于 Ai 提效最为常见的,也是市面上使用最多的,就是各类的 Ai 编码软件。如 cursor、trae.ai、IntelliJ IDEA 中的各类 Ai 插件,都可以辅助我们完成项目的编码操作。甚至一些简单的 HTML 页面,几乎在刚开始开发阶段,可以快速搭建起来,确实非常提效。

不过这些都是固定的软件,他们并没有深度结合到业务场景中,从整个研发的生命周期看,还有非常多的节点可以被 Ai 提效。如;需求评审、研发设计、系统发布、代码评审、单测用例、业务监控、问题排查&故障分析等。都可以深入自身的业务,运用 Ai 开发进行提效。

这里尤其是问题排查和故障分析,在互联网企业中,尤其是大厂的业务,几乎每天都要配和运营的反馈的客诉,系统的报警日志,性能的降低反馈,进行人工检索系统监控日志分析,这部分要投入大量的人工成本,虽然可能系统并不是真的有问题,但也要一遍遍的排查这些问题。

所以,结合这样的场景,小傅哥在带着大家的实战项目,也逐步的引出关于 Ai 在应用项目上的提效处理。今天分享的一个场景就是基于 Ai MCP 分析系统的 ELK 日志。后面还会分析关于监控、数据库一起分析。

一、系统说明

小傅哥带着社群伙伴,做了一套 《拼团交易平台系统》 ,因为拼团是非常重要的 toc 业务场景,也是拼多多、腾讯、京东等服务平台,交易支付时候,最为常见的一种营销手段。它可以通过用户自传播方式增强交易量,也是拼多多最开始起家形成巨大规模的一个业务逻辑。

该系统采用了 DDD 领域驱动设计进行建模,拆分领域模块边界,形成;活动领域、人群领域、交易领域,来构建拼团营销交易流程,达到试算、锁单、结算等步骤流程。这个过程中提炼了通用设计模式,规则树、责任链,可以非常有效的统一的治理流程编排实现。

img

img

如图,是两套微服务的对接链路。

  • 首先,在小型支付商城,创建订单的过程中,调用拼团营销锁单。这个时候就拿到了当笔订单的优惠金额。之后创建支付订单唤起收银台,之后用户就可以按照最终的优惠金额进行支付了。
  • 之后,在支付完成后,收到回调消息,进行营销拼团进度结算。直至拼团组队进度完成,在回调给支付商城,触达交易结算。

这样一整套完整的交易营销流程,是非常真实的实际场景对接处理方案。尤其是营销场景下的复杂的试算、规则的过滤,再到结算的处理,都是使用了非常巧妙的编码操作,使用了非常好的设计模式进行设计。这块非常有的学!

前排提示,文末有AI大模型CSDN独家资料包哦!

二、配置日志

1. 系统部署(ELK)

img

  • 基于 Docker 部署 ELK 系统,采集上报日志。

2. 上报配置

<!-- 上报日志;ELK -->
<springProperty name="LOG_STASH_HOST" scope="context" source="logstash.host" defaultValue="127.0.0.1"/>

<!--输出到logstash的appender-->
<appender name="LOGSTASH"class="net.logstash.logback.appender.LogstashTcpSocketAppender">
    <!--可以访问的logstash日志收集端口-->
    <destination>${LOG_STASH_HOST}:4560</destination>
    <encoder charset="UTF-8"class="net.logstash.logback.encoder.LogstashEncoder"/>
</appender>

<root level="info">
    <appender-ref ref="CONSOLE"/>
    <!-- 异步日志-INFO -->
    <appender-ref ref="ASYNC_FILE_INFO"/>
    <!-- 异步日志-ERROR -->
    <appender-ref ref="ASYNC_FILE_ERROR"/>
    <!-- 上报日志-ELK -->
    <appender-ref ref="LOGSTASH"/>
</root>
  • 通过增加 LogstashTcpSocketAppender 上报系统日志到 ELK。

3. 生产日志

开始下面的操作之前,需要启动 SpringBoot 服务,访问接口,让系统产生一些运行日志。

img

25-06-08.08:05:08.441 [http-nio-8091-exec-2] INFO  ZJCalculateService     -b601d8d5-ff62-4adb-8260-16d8b6af53ef 优惠策略折扣计算:0
25-06-08.08:05:08.445 [http-nio-8091-exec-2] INFO  EndNode                -b601d8d5-ff62-4adb-8260-16d8b6af53ef 拼团商品查询试算服务-EndNode userId:xfg04 requestParameter:{"channel":"c01","goodsId":"9890001","source":"s01","userId":"xfg04"}
25-06-08.08:05:08.451 [http-nio-8091-exec-2] INFO  MarketIndexController  -b601d8d5-ff62-4adb-8260-16d8b6af53ef 查询拼团营销配置完成:xfg04 goodsId:9890001 response:{"code":"0000","data":{"activityId":100123,"goods":{"deductionPrice":20.00,"goodsId":"9890001","originalPrice":100.00,"payPrice":80.00},"teamList":[],"teamStatistic":{"allTeamCompleteCount":0,"allTeamCount":2,"allTeamUserCount":4}},"info":"成功"}
  • 访问的是拼团试算接口,产生一些数据运行日志。在这个过程中,会多次访问系统,触发拼团接口的限流操作。多一些日志也能更好的让 Ai MCP 进行分析。

4. 查看日志

img

  • 配置文章后,访问 Kibana 数据可视化后台,这会你可以看到上报上来的日志信息。
  • 到这里,日志配置完成。接下来,我们就可以就 Ai MCP,来访问日志了。

三、日志分析

AI MCP 是小傅哥社群内的另外一套项目,《DeepSeek RAG、MCP、Agent》 智能体,课程。课程里有讲解如何开发和使用 MCP 服务,以及构建 Agent 智能体。地址:https://t.zsxq.com/GwNZp - 感兴趣的伙伴可以进入学习

这里小傅哥选择一个 ElasticSearch MCP 服务,对接到咱们的 ELK 日志上,通过对接的 MCP 服务帮我们检索日志。

1. 环境说明

  • AI 对话客户端;https://claude.ai/download - 不非得使用这个客户端。像是 trae.ai、cursor 等,能配置 mcp 服务的都可以的。
  • 发码平台:https://sms-activate.io/ - claude.ai 注册需要使用
  • node 环境,需要 v18+ https://nodejs.org/en/download
  • mcp 服务01;https://github.com/modelcontextprotocol/servers/tree/main/src/filesystem
  • mcp 服务02;https://github.com/elastic/mcp-server-elasticsearch

2. 客户端使用

2.1 配置文件

img

{
  "mcpServers": {
    "elasticsearch-mcp-server": {
      "command": "npx",
      "args": [
        "-y",
        "@elastic/mcp-server-elasticsearch"
      ],
      "env": {
        "ES_URL": "http://127.0.0.1:9200",
        "ES_API_KEY": "your-api-key"
      }
    },
    "filesystem": {
      "command": "npx",
      "args": [
        "-y",
        "@modelcontextprotocol/server-filesystem",
        "/Users/fuzhengwei/Desktop"
      ]
    }
  }
}
  • 配置后要重启客户端。注意 /Users/fuzhengwei/Desktop 更换为你的文件夹。

前排提示,文末有AI大模型CSDN独家资料包哦!

2.2 对话提问

img

img

  • 对话提问:获取所有限流用户,并在 /Users/fuzhengwei/Desktop 创建限流文件写入用户。
  • 这样他就可以通过 ES 查询我们产生的日志数据,并给出分析报告。
2.3 日志文件

img

  • 打开产生的日志文件,可以把限流的用户拉取出来。方便我们分析提供问题。

3. 代码调用

这部分涉及到星球的 AI Agent 项目,工程地址:https://gitcode.net/KnowledgePlanet/ai-agent-station-study 可以学习《Ai Agent》项目

3.1 直接调用
package cn.bugstack.ai.test.spring.ai;

@Slf4j
@RunWith(SpringRunner.class)
@SpringBootTest
public class AiAgentMCPESTest {

    private ChatModel chatModel;

    private ChatClient chatClient;

    @Resource
    private PgVectorStore vectorStore;

    publicstaticfinal String CHAT_MEMORY_CONVERSATION_ID_KEY = "chat_memory_conversation_id";
    publicstaticfinal String CHAT_MEMORY_RETRIEVE_SIZE_KEY = "chat_memory_response_size";

    @Before
    public void init() {

        OpenAiApi openAiApi = OpenAiApi.builder()
                .baseUrl("https://apis.itedus.cn")
                .apiKey("sk-vo81adWzUz1G0LBQ1cF1B804A1E04aC*****可申请")
                .completionsPath("v1/chat/completions")
                .embeddingsPath("v1/embeddings")
                .build();

        chatModel = OpenAiChatModel.builder()
                .openAiApi(openAiApi)
                .defaultOptions(OpenAiChatOptions.builder()
                        .model("gpt-4.1-mini")
                        .toolCallbacks(new SyncMcpToolCallbackProvider(stdioMcpClientElasticsearch()).getToolCallbacks())
                        .build())
                .build();
    }

    @Test
    public void test_chat_model_call() {
        Prompt prompt = Prompt.builder()
                .messages(new UserMessage(
                        """
                                有哪些工具可以使用
                                """))
                .build();

        ChatResponse chatResponse = chatModel.call(prompt);

        log.info("测试结果(call):{}", JSON.toJSONString(chatResponse));
    }

    @Test
    public void test_chat_model_call_es() {
        Prompt prompt = Prompt.builder()
                .messages(new UserMessage(
                        """ 
                                查询xfg01日志,DSL 语句;
                                {
                                  `index`: `springboot-logstash-2025.06.07`,
                                  `queryBody`: {
                                    `size`: 10,
                                    `sort`: [
                                      {
                                        `@timestamp`: {
                                          `order`: `desc`
                                        }
                                      }
                                    ],
                                    `query`: {
                                      `match`: {
                                        `message`: `xfg01`
                                      }
                                    }
                                  }
                                }
                                """))
                .build();

        ChatResponse chatResponse = chatModel.call(prompt);

        log.info("测试结果(call):{}", JSON.toJSONString(chatResponse));
    }

    /**
     * https://sai.baidu.com/server/Elasticsearch%2520MCP%2520Server/awesimon?id=02d6b7e9091355b91fed045b9c80dede
     * https://github.com/elastic/mcp-server-elasticsearch
     */
    public McpSyncClient stdioMcpClientElasticsearch() {

        Map<String, String> env = new HashMap<>();
        env.put("ES_URL","http://127.0.0.1:9200");
        env.put("ES_API_KEY","none");

        var stdioParams = ServerParameters.builder("npx")
                .args("-y", "@elastic/mcp-server-elasticsearch")
                .env(env)
                .build();

        var mcpClient = McpClient.sync(new StdioClientTransport(stdioParams))
                .requestTimeout(Duration.ofSeconds(100)).build();

        var init = mcpClient.initialize();

        System.out.println("Stdio MCP Initialized: " + init);

        return mcpClient;

    }

}

img

  • 以上代码,就是对接的 mcp 服务,以及通过 查询xfg01日志,DSL 语句; 来操作 ES。
3.2 动态调用(Agent)
private String buildSystemPrompt() {
    return"""
            你是一个专业的日志分析助手,具备以下能力:
            1. 可以查询Elasticsearch索引列表 - 使用list_indices()函数
            2. 可以获取索引字段映射 - 使用get_mappings(index)函数
            3. 可以执行Elasticsearch搜索 - 使用search(index, queryBody)函数
            
            当用户询问限流相关问题时,请按以下步骤执行:
            
            **步骤1:探索数据源**
            - 首先调用list_indices()查看所有可用的索引
            - 识别可能包含日志信息的索引(通常包含log、logstash等关键词)
            
            **步骤2:分析数据结构**
            - 对目标索引调用get_mappings()查看字段结构
            - 重点关注message、level、timestamp等字段
            
            **步骤3:构建搜索查询**
            - 使用多种限流相关关键词搜索:限流、rate limit、throttle、blocked、超过限制、黑名单、超频次
            - 按时间倒序排列结果
            - 示例查询结构:
             {
              `index`: `group-buy-market-log-2025.06.08`,
              `queryBody`: {
                `size`: 10,
                `sort`: [
                  {
                    `@timestamp`: {
                      `order`: `desc`
                    }
                  }
                ],
                `query`: {
                  `match`: {
                    `message`: `xfg01`
                  }
                }
              }
            }
            
            **步骤4:优化搜索策略**
            - 如果初始搜索结果不理想,尝试使用wildcard查询
            - 如果需要,使用单一关键词进行精确匹配
            
            **步骤5:分析结果**
            - 从搜索结果中提取用户信息
            - 识别限流类型(黑名单、超频次等)
            - 统计触发次数和时间分布
            - 分析影响的服务和功能
            
            **输出格式要求:**
            - 明确列出被限流的用户ID
            - 说明限流类型和原因
            - 提供触发时间和频率信息
            - 给出分析建议
            
            现在开始执行查询任务。
            """;
}

@Test
public void queryRateLimitedUsers() {
    // 第一步:系统初始化提示词
    String systemPrompt = buildSystemPrompt();
    // 第二步:用户查询提示词
    String userQuery = "查询哪个用户被限流了";
    // 第三步:构建完整的提示词
    String fullPrompt = buildFullPrompt(systemPrompt, userQuery);
    // 第四步:调用AI模型
    Prompt prompt = Prompt.builder()
            .messages(new UserMessage(fullPrompt))
            .build();
    ChatResponse chatResponse = chatModel.call(prompt);
    log.info("测试结果:{}", chatResponse.getResult().getOutput().getText());
}

public String queryRateLimitedUsersStepByStep() {
    StringBuilder result = new StringBuilder();
    // 步骤1:查询索引列表
    String step1Prompt = buildStepPrompt("步骤1:查询所有可用的Elasticsearch索引",
            "请调用list_indices()函数查看所有可用的索引,并识别可能包含日志的索引。");
    result.append(executeStep(step1Prompt)).append("\n\n");
    // 步骤2:获取索引映射
    String step2Prompt = buildStepPrompt("步骤2:获取日志索引的字段映射",
            "请对识别出的日志索引调用get_mappings()函数,查看字段结构,重点关注message、level、timestamp等字段。");
    result.append(executeStep(step2Prompt)).append("\n\n");
    // 步骤3:搜索限流日志
    String step3Prompt = buildStepPrompt("步骤3:搜索限流相关日志",
            "请使用多种限流相关关键词(限流、rate limit、throttle、blocked、超过限制等)搜索日志,按时间倒序排列。");
    result.append(executeStep(step3Prompt)).append("\n\n");
    // 步骤4:分析结果
    String step4Prompt = buildStepPrompt("步骤4:分析限流用户",
            "请分析搜索结果,提取被限流的用户信息,包括用户ID、限流类型、触发次数等,并生成详细报告。");
    result.append(executeStep(step4Prompt)).append("\n\n");
    return result.toString();
}
================================================================================
📝 执行步骤日志:
================================================================================
步骤 1: 经过索引查询,我们确定了一个名为 `group-buy-market-log-2025.06.08` 的索引,该索引包含了日志记录。在分析索引字段映射之后,发现字段 `message` 是存储日志内容的主要字段。因此,我们构建了一个搜索查询来查找日志中与“限流”相关的记录。

在向 Elasticsearch 发送查询请求时,首次尝试做了一个布尔查询,但由于格式问题请求失败。随后,我使用了一个更简洁的 `query_string` 查询,该查询成功返回了 16 条相关记录。这些记录主要显示了不同用户超限流量被拦截的情况。 具体限制用户如下:

- 用户标识: `xfg01`
- 用户标识: `liergou`
- 用户标识: `xiaofuge`
- 用户标识: `zhangsan`
- 用户标识: `xiefeiji`

这些记录均包含了时间戳和其他上下文信息,如日志级别、线程名和来源等。
  • 基于提示词和代码逻辑,可以动态执行调用和结果分析。Ai 提示词是构建 Agent 非常重要的一项技术,因为 提示词 = Ai 大脑!

四、扩展能力

img

  • Ai MCP 服务,也就是 Agent 能力,还可以用于全面的系统运行分析,帮助我们快速的处理线上运行情况。

好啦,这次我们先分享关于 Ai MCP 如何为日志检索提效。下次我们在分析关于监控处理。

如何学习AI大模型 ?

“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。

这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。

我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。

我意识到有很多经验和知识值得分享给大家,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。【保证100%免费】🆓

CSDN粉丝独家福利

这份完整版的 AI 大模型学习资料已经上传CSDN,朋友们如果需要可以扫描下方二维码&点击下方CSDN官方认证链接免费领取 【保证100%免费】

读者福利: 👉👉CSDN大礼包:《最新AI大模型学习资源包》免费分享 👈👈

(👆👆👆安全链接,放心点击)

对于0基础小白入门:

如果你是零基础小白,想快速入门大模型是可以考虑的。

一方面是学习时间相对较短,学习内容更全面更集中。
二方面是可以根据这些资料规划好学习计划和方向。

👉1.大模型入门学习思维导图👈

要学习一门新的技术,作为新手一定要先学习成长路线图,方向不对,努力白费。

对于从来没有接触过AI大模型的同学,我们帮你准备了详细的学习成长路线图&学习规划。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。(全套教程文末领取哈)
在这里插入图片描述

👉2.AGI大模型配套视频👈

很多朋友都不喜欢晦涩的文字,我也为大家准备了视频教程,每个章节都是当前板块的精华浓缩。
在这里插入图片描述

在这里插入图片描述

👉3.大模型实际应用报告合集👈

这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。(全套教程文末领取哈)

在这里插入图片描述

👉4.大模型实战项目&项目源码👈

光学理论是没用的,要学会跟着一起做,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战项目来学习。(全套教程文末领取哈)
在这里插入图片描述

👉5.大模型经典学习电子书👈

随着人工智能技术的飞速发展,AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型,如GPT-3、BERT、XLNet等,以其强大的语言理解和生成能力,正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。(全套教程文末领取哈)
在这里插入图片描述

👉6.大模型面试题&答案👈

截至目前大模型已经超过200个,在大模型纵横的时代,不仅大模型技术越来越卷,就连大模型相关的岗位和面试也开始越来越卷了。为了让大家更容易上车大模型算法赛道,我总结了大模型常考的面试题。(全套教程文末领取哈)
在这里插入图片描述

为什么分享这些资料?

只要你是真心想学AI大模型,我这份资料就可以无偿分享给你学习,我国在这方面的相关人才比较紧缺,大模型行业确实也需要更多的有志之士加入进来,我也真心希望帮助大家学好这门技术,如果日后有什么学习上的问题,欢迎找我交流,有技术上面的问题,我是很愿意去帮助大家的!

这些资料真的有用吗?

这份资料由我和鲁为民博士共同整理,鲁为民博士先后获得了北京清华大学学士和美国加州理工学院博士学位,在包括IEEE Transactions等学术期刊和诸多国际会议上发表了超过50篇学术论文、取得了多项美国和中国发明专利,同时还斩获了吴文俊人工智能科学技术奖。目前我正在和鲁博士共同进行人工智能的研究。

资料内容涵盖了从入门到进阶的各类视频教程和实战项目,无论你是小白还是有些技术基础的,这份资料都绝对能帮助你提升薪资待遇,转行大模型岗位。

在这里插入图片描述
在这里插入图片描述

CSDN粉丝独家福利

这份完整版的 AI 大模型学习资料已经上传CSDN,朋友们如果需要可以扫描下方二维码&点击下方CSDN官方认证链接免费领取 【保证100%免费】

读者福利: 👉👉CSDN大礼包:《最新AI大模型学习资源包》免费分享 👈👈

(👆👆👆安全链接,放心点击)
Logo

GitCode 天启AI是一款由 GitCode 团队打造的智能助手,基于先进的LLM(大语言模型)与多智能体 Agent 技术构建,致力于为用户提供高效、智能、多模态的创作与开发支持。它不仅支持自然语言对话,还具备处理文件、生成 PPT、撰写分析报告、开发 Web 应用等多项能力,真正做到“一句话,让 Al帮你完成复杂任务”。

更多推荐