使用kagent快速构建一个问答Agent

本文介绍如何使用kagent部署一个简单的智能体。该智能体使用的模型为阿里云百炼提供的qwen3-coder-plus,使用的MCP服务为fetch(根据URL获取网页内容)。该智能体可以完成实时获取网页内容并进行总结的任务。

准备工作

  1. ACK集群中新建kagent命名空间。

  2. 使用ACK应用市场或者ACK集群应用 > Helm,在kagent命名空间中安装kagent-crdskagent应用。

  3. 开通阿里云百炼服务,并第一步:获取 API Key

步骤一:创建ModelConfig

  1. 获取集群KubeConfig并通过kubectl工具连接集群

  2. 在环境变量中注册百炼的API Key,并通过Secret来保存和使用。

    export PROVIDER_API_KEY=${你的百炼APIKey}
    kubectl create secret generic bailian-apikey -n kagent --from-literal credential="$PROVIDER_API_KEY"
  3. 创建ModelConfig。

    kubectl -n kagent apply -f - <<EOF
    apiVersion: kagent.dev/v1alpha2
    kind: ModelConfig
    metadata:
      name: bailian-provider-config
    spec:
      model: qwen3-coder-plus
      apiKeySecret: bailian-apikey
      apiKeySecretKey: credential
      openAI:
        baseUrl: https://dashscope.aliyuncs.com/compatible-mode/v1
      provider: OpenAI
    EOF

步骤二:部署fetch MCP Server

  1. ACK集群中部署fetch MCP Server。

    kubectl -n kagent apply -f - <<EOF
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: streamablehttp-fetch-deployment
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: streamablehttp-fetch
      template:
        metadata:
          labels:
            app: streamablehttp-fetch
        spec:
          containers:
          - name: streamablehttp-fetch-container
            image: registry-cn-hangzhou.ack.aliyuncs.com/dev/streamablehttp-fetch:latest
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: streamablehttp-fetch-service
    spec:
      selector:
        app: streamablehttp-fetch
      ports:
        - protocol: TCP
          port: 3000
          targetPort: 3000
      type: ClusterIP
    EOF

步骤三:注册MCPServer

  1. 创建RemoteMCPServer资源。

    kubectl -n kagent apply -f - <<EOF
    apiVersion: kagent.dev/v1alpha2
    kind: RemoteMCPServer
    metadata:
      name: streamablehttp-fetch
    spec:
      description: A Model Context Protocol server that provides web content fetching capabilities. This server enables LLMs to retrieve and process content from web pages, converting HTML to markdown for easier consumption.
      protocol: STREAMABLE_HTTP
      sseReadTimeout: 5m0s
      terminateOnClose: true
      timeout: 30s
      url: http://streamablehttp-fetch-service:3000/
    EOF
  2. 确认RemoteMCPServer创建状态。

    kubectl get RemoteMCPServer -n kagent

    预期输出:

    NAME                   PROTOCOL          URL                                         ACCEPTED
    streamablehttp-fetch   STREAMABLE_HTTP   http://streamablehttp-fetch-service:3000/   True

步骤四:创建agent

  1. 创建问答agent。

    kubectl -n kagent apply -f - <<EOF
    apiVersion: kagent.dev/v1alpha2
    kind: Agent
    metadata:
      name: gateway-api-professor
      namespace: kagent
    spec:
      declarative:
        modelConfig: bailian-provider-config
        stream: true
        systemMessage: |-
          你是一个友好且乐于助人的代理,使用 streamablehttp-fetch 工具从以下地址获取GatewayAPI 信息来回答用户关于GatewayAPI的问题。
          
          # 链接
          - intro: https://gateway-api.sigs.k8s.io/
          - api-overview: https://gateway-api.sigs.k8s.io/concepts/api-overview/
          - use-case: https://gateway-api.sigs.k8s.io/concepts/use-cases/
          - servicemesh: https://gateway-api.sigs.k8s.io/mesh/
          - implementations: https://gateway-api.sigs.k8s.io/implementations/
          - 1.4版本支持概况:https://gateway-api.sigs.k8s.io/implementations/v1.4/
          - 完整spec,页面比较大:https://gateway-api.sigs.k8s.io/reference/spec/
    
          # Instructions
    
          - 如果用户问题不清楚,在运行任何工具之前先请求澄清
          - 对用户回答要友好,热情
          - 如果你不知道如何回答问题,不要编造答案
            回答 "抱歉,我不知道如何回答这个问题" 并请用户进一步澄清问题
          - 如果用户的问题是总结、概述类型的,请确保通读全文后再回答。
    
          # Response format
          - 总是以Markdown格式进行回复。
          - 你的回复需要包含你所执行的操作的总结以及对于结果的解释。
        tools:
        - type: McpServer
          mcpServer:
            apiGroup: kagent.dev
            kind: RemoteMCPServer
            name: streamablehttp-fetch
            toolNames:
            - fetch
      description: 这个智能体主要回答和GatewayAPI Spec相关的问题。
      type: Declarative
    EOF
  2. 确认agent创建状态。

    kubectl get pod -n kagent

    预期输出:

    NAME                                               READY   STATUS    RESTARTS   AGE
    gateway-api-professor-7cb6496b9d-l7nlj             1/1     Running   0          3m1s
    kagent-controller-794fc765df-hqswt                 1/1     Running   0          45m
    kagent-ui-569cb875c6-h55mg                         1/1     Running   0          45m
    streamablehttp-fetch-deployment-75d5cd86cf-h9rvp   1/1     Running   0          4m3s

步骤五:访问agent

kagent默认提供了Web UI可以直接与agent进行交互。

  1. kagent-ui服务通过端口转发至本地。

    kubectl port-forward -n kagent service/kagent-ui 8082:8080
  2. 在浏览器中通过localhost:8082访问agent。

    1. 问答示例一:Gateway API中有哪些API?

      image

      image

    2. 问答示例二:现在哪个实现支持的Gateway API功能最全面?

      image

      image