• DeepSeek引领潮流:低成本为团队打造定制化AI平台(上篇)

    近期,随着大模型的快速发展,DeepSeek等大模型成为了AI领域的热门话题。如今,团队可以通过本地部署一套AI框架,结合远程调用大模型的官方API,而无需配备大量服务器或高性能显卡,便可轻松实现大模型的使用。这种方式不仅降低了硬件成本,也让AI技术的应用变得更加灵活和高效。

    在人工智能(AI)领域,其实不仅仅有大模型,还有框架算法等核心概念,它们之间有着密切的关系。理解它们的区别和联系对于深入学习和应用AI技术至关重要。以下是对它们的详细解释和相互关系:

    AI模型(Model)

    AI模型是经过训练,能够处理和学习数据的数学结构。模型的核心作用是根据输入数据进行预测、分类、生成等任务。AI模型通常是通过机器学习深度学习算法构建的,经过大量的训练数据来调整其内部参数。

    AI框架(Framework)

    AI框架是一组用于开发和训练AI模型的工具和库,它提供了处理和构建AI模型的基础设施。框架包含了各种工具、API和预构建的模块,可以帮助开发者更高效地构建、训练和部署AI模型。AI框架通常是开源的,它们封装了许多复杂的实现细节,使得AI开发者能够专注于算法设计和业务逻辑。

    AI算法(Algorithm)

    AI算法是指执行特定任务的数学方法和规则。它们是创建AI模型的基础,定义了模型如何从数据中学习、更新其参数和做出预测。不同的算法适用于不同类型的任务和数据。AI算法的目的是通过分析和优化输入数据,使得模型能够根据这些数据作出合理的判断。

    AI框架推荐

    框架作为实现算法和模型的工具,本期主要对定制化AI系统框架和工作原理进行介绍,首先推荐几款开源的框架:

    FastGPT

    使用简单,无需代码开发,开箱即用,但是功能有限扩展性不高。比较适合简单使用和低代码开发的场景.

    MetaGPT

    Metagpt是一款Multi-Agent框架(多智能体),专为应用开发者打造。使大模型以软件公司的形式工作,协作处理更复杂的任务

    1. MetaGPT输入一句话的老板需求,输出用户故事 / 竞品分析 / 需求 / 数据结构 / APIs / 文件等
    2. MetaGPT内部包括产品经理 / 架构师 / 项目经理 / 工程师,它提供了一个软件公司的全过程与精心调配的SOP

    同样作为多智能体编程框架,AgentScope对于React框架更加友好,是阿里通义千问团队开源的AI框架,适配多种大模型,Dashscope,OpenAI等。也是新钛团队最终选择使用的框架。

    Agenscope

    同样作为多智能体编程框架,AgentScope对于React框架更加友好,是阿里通义千问团队开源的AI框架,适配多种大模型,Dashscope,OpenAI等。也是新钛团队最终选择使用的框架。

    为什么需要引入智能运维?

    传统运维工作通常面临高度重复、低效和响应慢的问题,尤其是在高频告警和夜间告警情况下。运维人员需要逐一分析和定位故障,且故障恢复时间往往较长,容易受到人为疲劳和处理能力的限制。

    此外,日常巡检、工单处理,问题处理等任务消耗大量时间和人力,运维人员不得不手动完成这些繁琐的操作,导致效率低下。

    智能运维的优势

    引入智能运维平台,通过自动化和智能化手段解决这些问题,使运维工作更加高效、准确。

    1.快速响应与自动化处理

    对于告警,响应时间可以缩短至 2-5分钟,系统自动识别问题并执行处理,避免人工延迟。

    2.自动故障诊断与处理

    对于系统故障,智能平台能够自动诊断并提供解决方案,减少人工干预,帮助运维人员快速定位和修复问题。

    3.降低服务不可用时间

    通过自动诊断和故障修复,显著减少服务停机时间,确保业务持续稳定运行。

    4.减轻运维人员负担

    智能运维平台承担日常巡检、告警处理,报表生成等重复性任务,让运维人员专注于更高优先级的工作,同时实时监控和报表生成帮助团队优化决策。

    5.提升系统智能与自学习能力

    平台通过自我学习,不断优化故障诊断和自动修复流程,提高处理新问题的能力和精准度。

    6.风险预测

    系统通过数据分析预测潜在风险,帮助团队制定前瞻性决策,从而提升整体运营效率。

    通过智能运维平台,企业可以大幅提升运维效率、减少人为错误,并确保系统的稳定性与业务连续性,让运维团队能够更高效地应对挑战,支持业务的可持续发展。

    功能介绍

    如上图所示,智能运维系统通过多个功能专一的 Agent 组合而成,例如 日志Agent、数据库Agent、云监控Agent 等。每个Agent负责处理特定领域的任务,并能够独立运行或协作完成更复杂的运维任务。通过这种 模块化 的设计,系统能够根据实际需求灵活组合不同的Agent,提供高效、精确的解决方案。

    功能展示

    01故障处理

    接口错误处理

    当接口发生错误时,系统能够自动根据告警中的信息,获取该接口当时的调用链ID,具体的调用链详情和相关日志信息,进行详细分析并给出初步的诊断结果,同时生成故障报告。智能运维平台能够减少人工干预,并迅速提供解决方案,帮助运维人员迅速定位问题并修复。

    工作逻辑展示

    1. 告警转接到ReactAgent

    2. 模型理解问题,并从知识库中寻找排查步骤作为参考

    3. 根据整理好的排查步骤分步进行信息收集

    获取导致接口故障的调用链ID

    获取调用链详情

    自动生成查询语句获取日志

    4. 整合信息进行分析并生成报告

    报告展示

    OOM应急处理

    针对OOM(Out of Memory)告警,系统可以自动响应,进行日志收集、内存使用情况分析、服务JVM配置分析,判断FullGC情况进行分析。根据收集的信息得出合适的处理规则,扩容副本,JVM配置调整,服务重启等操作,并发送钉钉通知。

    极大的缩减了因服务宕机导致的各种功能不可用,网页打不开等风险。

    02日程巡检

    系统支持定时执行全面的巡检任务,并生成详细的报告,确保各项运维工作及时跟进。

    03信息查询

    异常IP查询

    针对流量激增或异常访问,平台能够快速提供流量突增的服务和接口信息,精准剖析出来源IP及其访问的具体内容,帮助运维人员高效定位问题。

    CPU,内存等使用率查询

    支持对服务器、容器、中间件等资源的CPU、内存、磁盘等使用详情进行实时查询,帮助运维人员全面掌握系统资源的使用情况,及时发现潜在问题。

    前端展示

    AgentScope 自带的前端页面,详细记录了框架和模型交互的过程,以及最终结果展示。

    但是这样的页面并不适合作为直接面向用户的交互界面。为了提供更友好的用户体验,我们使用 Gradio 创建了定制化的前端页面。

    系统架构和工作原理

    系统入口

    系统通过三个主要入口进行操作:钉钉机器人交互、Web页面和告警接口。这三个入口分别接收用户的需求、问题或告警信息。通过 UserAgent 智能体将这些信息转化为简洁的“老板需求”,以便于进一步处理。所有的信息最终都汇总为一个统一的请求,并被传递到 AgentScope 环境中。

    知识库

    在 AgentScope 环境中,React智能体 根据请求调用 RAG(Retrieval-Augmented Generation) 知识库,检索相关文档和信息。这一过程结合了检索和生成的优势,可以快速、精准地为复杂问题提供解决方案。对于需要额外处理的任务,系统会调用已有的工具包,以便在多步骤的操作中自动化处理复杂问题。

    持续学习

    经过详细分析和处理后,系统生成最终的响应,并通过三个入口中的任一方式返回给用户。为了不断提升系统的智能性,响应结果 会被记录和存储,且 知识库 会随着每次反馈进行更新和完善,从而实现系统的自我学习和进步。

    这种设计方式不仅能够实时处理告警和问题,还通过智能体和工具包的有效配合,持续优化和提高决策和响应效率,使得每次交互都能带来更高效、准确的服务。

    代码展示

    以 接口问题处理 为例,我们在知识库中定义了该类问题的标准排查流程。大模型会根据这些定义好的排查思路,自动生成具体的执行步骤,并根据实时获取的信息进行汇总分析。最终,系统会结合这些数据生成解决方案,帮助快速定位并解决问题。

    对接大模型

    YOUR_MODEL_CONFIGURATION_NAME = "qwen_config"
    YOUR_MODEL_CONFIGURATION = {
        "model_type": "dashscope_chat",
        "config_name": "qwen_config",
        "model_name": "qwen-max-latest",
        "api_key": "xxxxx",
        "verbose": False,
        "max_tokens": 100000000,
        "enable_search": True
        # ...
    }
    
    agentscope.init(
        model_configs=YOUR_MODEL_CONFIGURATION,
        project="Conversation with ReActAgent",
        save_api_invoke=True,
    )
    
    user = UserAgent(name="User")
    
      
    react_agent = ReActAgent(
        name="运维AI",
        model_config_name=YOUR_MODEL_CONFIGURATION_NAME,
        verbose=True,
        service_toolkit=service_toolkit,
        sys_prompt="你是一个非常专业的运维工程师,专业友好地与用户沟通交流。"
    )

    知识库

    定义复杂问题处理思路,大模型会理解并生成对应处理步骤

    
    [
      {
        "metadata": {
          "alertId": "5xx_error",
          "alertType": "服务接口故障",
          "tags": {
            "metricName": "Ingress响应码-5xx告警",
            "metricProject": "acs_ingress"
          },
          "solutionSteps": [
            {
              "step": 1,
              "description": "根据告警url获取失败的traceID",
            },
            {
              "step": 2,
              "description": "查询上述获取的traceID的完整调用链信息"
            },
            {
              "step": 3,
              "description": "通过知识库获得基于traceID查询错误日志的SLS查询语句及其所需参数",
            },
            {
              "step": 4,
              "description": "获取该traceID的错误日志",
            },
            {
              "step": 5,
              "description": "最近统一进行分析,然后生成故障报告",
            }
          ]
        },
        "text": "用于在服务接口响应 5xx 错误时进行排查。它包含了详细的步骤,可以有效识别和解决接口问题。"
      }
    ]

    工具篇举例

    查询阿里云sls日志工具

    
    def get_sls_logs(target: str) -> ServiceResponse:
        """
        查询存储在阿里云SLS中的日志。
        Args:
            target (str): 自然语言描述的查询需求,例如:
                         - "查询prodapp-java这个logstore的日志,时间在2025-01-06 15:13:37"
        """
        
        rag_file = "aliyun_sls_log-get_sls_logs.json"
        # 提供给大模型的信息
        params_description = {
            "project": "str类型,project名称,必选",
            "logstore": "str类型,logstore名称,必选",
            "fromTime": "int/str类型,开始时间,可以是时间戳或'%Y-%m-%d %H:%M:%S'格式的字符串,可选,默认None",
            "toTime": "int/str类型,结束时间,可以是时间戳或'%Y-%m-%d %H:%M:%S'格式的字符串,可选,默认None",
            "topic": "str类型,日志主题名称,可选,默认None",
            "query": "str类型,阿里云SLS查询语句,可选,默认None",
            "line": "int类型,返回日志的最大行数,可选,默认100",
            "offset": "int类型,返回日志的起始偏移行,可选,默认0",
            "reverse": "bool类型,是否按时间倒序返回日志,可选,默认False",
            "power_sql": "bool类型,是否使用增强SQL模式,可选,默认False",
            "scan": "bool类型,是否使用扫描模式,可选,默认False",
            "forward": "bool类型,仅用于扫描查询,true表示获取下一页,false表示获取上一页,可选,默认True",
            "accurate_query": "bool类型,是否使用全局有序时间模式,可选,默认True",
            "from_time_nano_part": "int类型,查询开始时间的纳秒部分,可选,默认0",
            "to_time_nano_part": "int类型,查询结束时间的纳秒部分,可选,默认0"
        }
        # 从知识库获取参数
        kb_response = knowledge_base(target=target, rag_file=rag_file, params_description=params_description)
        if not kb_response:
            return ServiceResponse(ServiceExecStatus.ERROR, "无法理解查询意图")
        params = json.loads(params_match.group())
        project = params.get('project')
        logstore = params.get('logstore')
        query = params.get('query')
        # SLS相关信息
        endpoint = 'cn-shanghai.log.aliyuncs.com'
        # 获取到SLS日志库信息和SQL。具体执行步骤省略
        ...
        # 最终返回ServiceResponse
        return ServiceResponse(status, output)

    查询prometheus指示数据

    def get_prometheus_metrics(target: str) -> ServiceResponse:
        """
        从prometheus查询监控数据。
        
        Args:
            target (str): 自然语言描述的查询需求
            
        Returns:
            ServiceResponse: 包含查询结果或错误信息的响应对象
        """
        rag_file = "prometheus.json"
        
        params_description: Dict = {
            "PromQL": "从知识库获取的Prometheus查询语句,只能传入一个。需要先移除SQL中的转义符。",
            "prometheus_cluster": "从知识库获取的Prometheus集群,只能传入一个。"
        }
        
        # 从utils导入通用的知识库参数获取函数
        from services.utils.rag_utils import get_rag_params
        
        # 获取知识库参数
        params = get_rag_params(target, rag_file, params_description)
        # 如果params是ServiceResponse,则直接返回
        if isinstance(params, ServiceResponse):
            return params
        
        promql = params.get('PromQL')
        prometheus_cluster = params.get('prometheus_cluster')
    
        if not promql or not prometheus_cluster:
            return ServiceResponse(ServiceExecStatus.ERROR, "缺少必要的查询参数")
    
        # 获取到PromQL和集群账密后,获取监控数据
        ... 
       return ServiceResponse(ServiceExecStatus.SUCCESS, str([result]))
    
    

    总 结

    通过智能运维平台的构建和应用,我们能够有效提升运维团队的工作效率,减少人为干预,快速响应和解决各种问题。从传统的告警处理、故障诊断到资源使用监控,智能运维平台的自动化和智能化使得运维管理更加高效、精准。

    利用如DeepSeek等大模型以及API远程调用的能力,不仅可以降低硬件需求,还能通过灵活的框架设计满足不同运维需求。通过不同的AI框架,如MetaGPT、AgentScope等,我们可以针对具体的运维场景定制化开发解决方案,实现高度自动化和高效运维。

    总的来说,智能运维平台不仅提升了团队的效率,还能通过持续的自学习和知识库的更新,保持系统的灵活性和适应性,从而在未来的运维工作中为企业带来更加智能、快速、精确的服务。这不仅是运维领域的一次技术创新,更是企业数字化转型过程中的重要一步。

    如有相关问题,请在文章后面给小编留言,小编安排作者第一时间和您联系,为您答疑解惑。

    «
以专业成就每一位客户,让企业IT只为效果和安全买单

以专业成就每一位客户,让企业IT只为效果和安全买单