文档首页/ 智果(AgentArts)智能体平台/ 最佳实践/ 评估实践/ 运行时智能体离线评估实践(流式)
更新时间:2026-11-06 GMT+08:00
分享

运行时智能体离线评估实践(流式)

本实践以中英翻译助手为例,演示流式输出运行时智能体从构建部署到离线评估的全流程,共包含五个步骤:

表1 创建智能体和评估流程

序号

流程环节

说明

1

步骤一:将翻译助手智能体托管至运行时

将本地开发完成的翻译智能体通过SDK一键部署至运行时,生成可稳定批量调用的云端服务,为评估提供统一、可靠的调用入口。

2

步骤二:构造评测集

评测集是评估的“标准考卷”,包含输入字段(中文待翻译文本)和标准参考答案(期望的英文译文),用于批量校验智能体翻译效果。本步骤将明确输入字段与标准译文的对应关系,确保评估结果可量化、可对比。

3

步骤三:选择评估器

针对翻译场景语义精准的核心要求,选用平台预置的正确性评估器,以标准英文参考译文为基准,自动比对智能体输出,判断语义是否完整、准确、无漏译、无误译。无需自定义开发,直接选用即可实现自动化、标准化打分。

4

步骤四:创建评估任务

将智能体、评测集和评估器关联,配置请求体、响应类型和字段映射,确保评测集数据正确注入并自动执行批量评估。

5

步骤五:分析评估报告、人工复核评估数据

查看多维度评估报告,通过总体得分和逐条评分理由,锁定得分较低的翻译结果,比对实际输出与参考答案,精准定位Prompt约束力不足、边界处理缺陷等问题,驱动针对性调优并回归验证。

前置条件

在开始之前,请确认以下准备工作已完成:

  • 已开通AgentArts服务,并在“管理中心 > 授权管理”页面完成依赖云服务授权。
  • 已获取模型API地址。
    1. 进入“西南-贵阳一”MaaS页面,选择“模型推理 > 在线推理”,找到deepseek-v4.1-flash模型,查看模型类型。
      图1 获取模型信息1
    2. 单击“API调用 > 主推版本”,查看模型信息。
      图2 获取模型信息2

步骤一:将翻译助手智能体托管至运行时

将本地开发完成的翻译智能体,打包为容器镜像并托管至AgentArts智能体运行时,生成可稳定批量调用的云端服务,为后续评估提供统一、可靠的调用入口。采用SDK一键部署模式,操作简洁、效率更高。

准备环境

本地环境:

  • 操作系统:推荐使用Linux Ubuntu 22.04 ARM64,服务器可访问公网。

    本文命令如无特殊说明,均以Ubuntu为例。为保证镜像构建与云端部署的兼容性,建议使用Ubuntu系统。

    因此,为了减少部署失败和额外排查成本,建议直接使用Ubuntu 22.04 ARM64制作AgentArts镜像。

    若使用CentOS、EulerOS等非Ubuntu系统,请将以下命令中的apt替换为yum或dnf,并自行确认Docker 18.06+、Python 3.10+;本文不逐条展开各发行版安装差异。

    需使用ARM64系统制作的Agent镜像,使用X86系统制作的镜像在调用智能体运行时会调用失败。

    可以使用华为云ECS服务购买服务器,购买时需要选择鲲鹏架构(ARM64),系统选择Ubuntu。

  • 安装Python:请确保Python 3.10及以上版本已安装。

    大多数Linux发行版(如Ubuntu)都预装了Python,您可以先通过python3 --version检查。如未安装,可以使用如下命令安装:

    sudo apt update
    sudo apt install python3

    非Ubuntu/Debian系统请使用yum或dnf安装Python 3.10+及pip。

  • 安装Docker:请确保Docker 18.06及以上版本已安装。如未安装,可以使用如下命令安装:
    # 查询 Docker 版本
    docker --version
    
    # 安装Docker
    sudo apt update
    sudo apt install docker.io

    安装完成后,建议立即配置国内镜像加速器。在后续执行agentarts launch构建镜像时,Docker需要拉取python:3.10-slim基础镜像,默认从docker.io官方仓库下载,可能超时失败。提前配置加速器可避免此问题。

    执行以下命令创建Docker配置目录:

    sudo mkdir -p /etc/docker

    执行以下命令配置国内镜像源(直接复制并回车执行):

    sudo tee /etc/docker/daemon.json <<-'EOF'
    {
      "registry-mirrors":[
        "https://docker.m.daocloud.net",
        "https://dockerproxy.net",
        "https://mirror.baidubce.com"
      ]
    }
    EOF

    依次执行以下命令重启Docker服务,使配置生效:

    sudo systemctl daemon-reload
    sudo systemctl restart docker

    华为云SWR基础版不支持OCI镜像格式。如果您使用的是Docker 27及以上版本,由于该版本默认使用OCI镜像格式推送到SWR时会报错,可以通过设置以下环境变量来关闭OCI支持。

    export DOCKER_BUILDKIT=0
    # 或者
    export BUILDKIT_USE_OCI_MEDIA_TYPES=0
  • 执行以下命令安装运行时SDK(建议在Python虚拟环境中安装,以避免与系统包产生冲突)。
    # 安装依赖包
    apt install python3.12-venv
    
    # 创建并激活虚拟环境 (linux) 
    python3 -m venv venv
    source venv/bin/activate
    
    # 安装sdk
    pip install agentarts-sdk

    若配置镜像加速器,后续在执行agentarts launch命令时,仍无法拉取 python:3.10-slim,可参考本文结尾的“常见问题”中的“直接修改Dockerfile基础镜像地址”。

    • 执行pip install agentarts-sdk命令下载缓慢、超时可以更改为使用如下命令
      pip install agentarts-sdk -i https://repo.huaweicloud.com/repository/pypi/simple --trusted-host repo.huaweicloud.com
    • 如果系统缺少python3-venv包,导致无法创建虚拟环境,请按照命令回显提示安装python3-venv包。

  • 执行以下命令配置华为云凭证,获取华为云凭证请参考认证鉴权。
    export HUAWEICLOUD_SDK_AK="your-access-key"
    export HUAWEICLOUD_SDK_SK="your-secret-key"

准备智能体

  1. 创建项目目录。

    在终端执行以下命令,创建项目目录并进入:

    mkdir my-first-agent && cd my-first-agent

  2. 配置环境变量。

    在项目根目录下创建.env文件,用于存放模型调用所需的配置信息。

    执行vi .env命令创建.env文件,写入以下内容,并将model_api_key替换为您实际的模型API Key。

    # .env
    
    # 必填,您的华为云 MaaS API 密钥
    MODEL_API_KEY=model_api_key
    
    # 模型名称
    MODEL_NAME=deepseek-v4.1-flash
    
    # 模型服务地址
    MODEL_URL=https://api.modelarts-maas.com/openai/v1
    
    # Agent 服务监听端口(可选,默认 8080)
    AGENT_RUN_PORT=8080

  3. 执行如下命令安装langchain、langgraph、langchain-openai。

    pip install -U langchain langgraph langchain-openai -i https://pypi.tuna.tsinghua.edu.cn/simple --trusted-host pypi.tuna.tsinghua.edu.cn

  4. 编写流式输出Agent核心逻辑。

    1. 在项目根目录执行vi agent.py命令,写入以下内容并保存。
      # agent.py
      import os
      from dotenv import load_dotenv
      from langchain_openai import ChatOpenAI
      from langchain_core.messages import HumanMessage, SystemMessage
      
      # 加载 .env 文件中的环境变量
      load_dotenv()
      
      class MyAgent:
          """基础对话智能体,同时支持普通调用 + 同步流式 + 异步流式"""
      
          def __init__(self):
              self.llm = ChatOpenAI(
                  model=os.getenv("MODEL_NAME", "deepseek-v4.1-flash"),
                  openai_api_key=os.getenv("MODEL_API_KEY"),
                  openai_api_base=os.getenv(
                      "MODEL_URL", "https://api.modelarts-maas.com/openai/v1"
                  ),
                  streaming=True,
              )
              self.system_prompt = (
                  "您是轻量化中英翻译助手,专注日常办公、学习交流场景,仅提供中英文精准翻译服务。"
              )
      
          def chat(self, message: str) -> str:
              """接收用户消息,调用大模型,返回回复内容"""
              messages = [
                  SystemMessage(content=self.system_prompt),
                  HumanMessage(content=message),
              ]
              response = self.llm.invoke(messages)
              return response.content
      
          def chat_stream(self, message: str):
              """同步流式对话生成器"""
              messages = [
                  SystemMessage(content=self.system_prompt),
                  HumanMessage(content=message),
              ]
              for chunk in self.llm.stream(messages):
                  if chunk.content:
                      yield chunk.content
      
          async def achat_stream(self, message: str):
              """异步流式对话生成器,专门给AgentArts异步handler使用"""
              messages = [
                  SystemMessage(content=self.system_prompt),
                  HumanMessage(content=message),
              ]
              async for chunk in self.llm.astream(messages):
                  if chunk.content:
                      yield chunk.content
      
      # 创建 Agent 单例,供 app.py 引用
      agent = MyAgent()
    2. 验证Agent逻辑是否正常。

      在终端执行以下命令,直接调用agent.py进行快速验证,确认模型调用链路没有问题:

      python3 -c "from agent import agent; print(agent.chat('今天天气怎么样?'))"

      如果模型调用正常,终端会输出模型的回复内容。

      如果此步骤报错,请优先排查以下问题:

      • .env文件中的MODEL_API_KEY是否已替换为实际值。
      • 当前网络环境是否可以访问api.modelarts-maas.com。

  5. 封装为HTTP服务。

    AgentArts运行时通过标准HTTP接口与您的Agent通信。本步骤使用AgentArts运行时SDK将Agent逻辑封装为符合平台规范的HTTP服务。

    在项目根目录执行vi app.py命令,写入以下内容并保存。

    # app.py
    import os
    from typing import Dict, Any, AsyncGenerator
    from dotenv import load_dotenv
    from agentarts.sdk import AgentArtsRuntimeApp, RequestContext
    from agent import agent
    
    load_dotenv()
    
    app = AgentArtsRuntimeApp()
    
    @app.entrypoint
    async def handler(payload: Dict[str, Any], context: RequestContext = None) -> AsyncGenerator[Dict[str, Any], None]:
        """AgentArts高代码 异步流式入口,支持yield分片"""
        message = payload.get("message", "")
        if not message:
            yield {"response": "请求体中缺少 message 字段", "status": "error"}
            return
    
        try:
            async for chunk_text in agent.achat_stream(message):
                yield {
                    "response": chunk_text,
                    "status": "streaming"
                }
            # 结束标记
            yield {"response": "", "status": "done"}
        except Exception as e:
            yield {"response": f"执行出错: {str(e)}", "status": "error"}
    
    
    if __name__ == "__main__":
        port = int(os.getenv("AGENT_RUN_PORT", 8080))
        app.run(host="0.0.0.0", port=port)
    • AgentArtsRuntimeApp是AgentArts SDK提供的运行时封装类,负责处理平台与Agent之间的通信协议,以及健康检查接口的注册。
    • @app.entrypoint装饰器将handler函数注册为平台的HTTP调用入口,平台每次调用Agent时都会触发此函数。

本地验证

在部署到云端之前,先在本地确认服务启动正常、接口响应符合预期。

  1. 启动本地服务。

    在正式推送镜像之前,先在本地模拟云端HTTP调用环境,验证Agent的接口封装是否正确、通信是否正常,可以大幅降低因接口问题导致云端部署后才发现错误的调试成本。

    执行python app.py启动http server,执行以下命令调用验证Agent的HTTP接口是否已经被正确封装且能正常通信。

    执行python app.py回显效果如下。

  2. 验证健康检查接口。

    打开一个新的终端窗口(保持原窗口运行),执行以下命令,验证/ping健康检查接口是否正常:

    curl http://localhost:8080/ping

    返回类似{"status": "Healthy"}内容说明服务已正常启动,平台的健康探查可以通过。

  3. 验证对话接口。

    在新终端中执行以下命令,验证/invocations对话接口是否正常:

    curl -X POST http://localhost:8080/invocations \
      -H "Content-Type: application/json" \
      -d '{"message": "今天天气很好"}'

    收到模型回复后,说明Agent逻辑和HTTP封装均工作正常。

    两项验证均通过后,返回第一个终端,按Ctrl+C停止本地服务,继续进行后续的部署操作。

通过SDK一键部署

SDK方式会自动完成镜像构建、推送SWR、部署运行时的全部操作,适合快速验证场景。

  1. 参考前置条件安装SDK,并配置华为云凭证。
  2. 准备依赖文件。

    在项目根目录执行vi requirements.txt命令,写入以下内容并保存。

    # ================================================================================
    # 指定国内 PyPI 镜像源,加速镜像构建时的依赖下载
    # ================================================================================
    --index-url https://repo.huaweicloud.com/repository/pypi/simple
    --trusted-host repo.huaweicloud.com
    
    # ================================================================================
    # 核心依赖
    # ================================================================================
    
    # LangChain:LLM 应用开发工具链
    langchain>=0.3.0
    langchain-core>=0.3.0
    langchain-openai>=0.2.0
    
    # 环境变量加载
    python-dotenv>=1.0.0
    
    # AgentArts SDK:运行时封装与 HTTP 服务标准化
    agentarts-sdk

  3. 初始化部署配置。

    执行如下命令配置智能体。
    agentarts configure --entrypoint app:app

    执行后按照操作指引进行配置。

    表2 配置参数

    参数

    说明

    Agent name

    智能体名称。

    以小写字母开头,以小写字母或数字结尾,可以包含小写字母、数字和中划线。

    Region

    服务部署区域。

    cn-southwest-2,仅支持此区域。

    Dependency file

    依赖文件默认为requirements.txt。

    SWR Organization

    镜像组织名称(建议自定义的镜像组织名,可以在SWR服务控制台贵阳一region创建)。

    SWR Repository

    不填写(推荐)。

    SWR Repository项直接回车留空,工具会自动生成仓库名称,部署agentarts launch时自动创建镜像仓库,避免仓库不存在报错。

    如需手动指定,请填写SWR中已存在的镜像仓库名称;若尚未创建仓库,请留空,切勿填写不存在的仓库名。

  4. 部署智能体。

    agentarts launch

    该命令会自动完成以下步骤:

    1. 本地构建Docker镜像。
    2. 将Docker镜像推送到华为云SWR镜像仓库。
    3. 部署到AgentArts运行时托管环境。

  5. 验证构建的镜像是否能正常响应。

    agentarts invoke --agent translation-assistant-stream '{"message": "帮我翻译一下 什么是AgentArts?"}'

步骤二:构造评测集

评测集是离线评估的“标准考卷”,用于批量输入待翻译文本,校验智能体翻译效果。本步骤创建规范、可用的测试数据集,明确输入字段与标准译文,确保评估结果可量化、可对比。

  1. 在左侧导航栏中选择“观测与优化 > 评估”,在“评测集”页签单击“创建评测集”。
  2. 填写评测集基础信息。

    • 评测集名称:中英翻译助手评测集。
    • 描述:用于校验中英翻译助手翻译语义准确性,覆盖日常短句、办公常用语。

  3. 配置基础数据列。

    • 配置input:这是智能体的输入参数描述(即用户输入的中文待翻译文本)。您可以为其选择合适的数据类型,并设置是否为“必填”。
    • 配置reference_output:这是期望智能体给出的标准参考答案。您可以完善它的描述信息,帮助后续评估器更好地理解预期标准。

  4. 单击“确定”完成评测集的创建。

    完成以上字段的配置后,您可以直接在平台上手动录入符合该格式的测试数据,或上传匹配该表头的CSV/Excel文件。保存后,一份完美契合业务场景与高阶评估器的“考卷”就诞生了,随时可以在“评估任务”中被调用。

  5. 填写评测集数据。

    1. 评测集创建成功后,会自动跳转至评测集详情页面,在该页面选择“添加数据 > 手动添加”。
      图3 手动添加
    2. 按照页面提示,输入对应的测试数据文本。
      图4 添加数据

  6. 提交评测集。评测集只有提交后才会发布为正式版本,并供后续的评估任务使用。

    图5 提交评测集

步骤三:选择评估器

针对中英翻译轻量化、高准确性的业务要求,单一评估维度无法全面保障质量。AgentArts平台已预置覆盖语义准确性的专业评估能力,无需自定义开发,直接选用即可实现自动化、标准化打分。

推荐使用正确性评估器:

正确性评估器:以评测集中的标准英文参考译文为基准,比对智能体输出,判断语义是否完整、准确、无漏译、无误译。业务价值:保证翻译“语义精准”,确保日常办公、学习场景翻译结果可靠可用。

具体配置操作请参考步骤四:创建评估任务。

步骤四:创建评估任务

在前面的步骤中,已经准备好了评测集和评估器,可以创建评估任务。在评估任务中需要特别留意字段映射环节,您必须准确地告诉系统:待翻译文本在哪一列?标准参考译文在哪一列?智能体输出结果又对应哪一列?如果字段映射错位,或者遗漏了核心的对照依据,整个评估任务将直接失效或产生毫无意义的分数。选择评估器后,平台会自动进行字段关系关联,但仍然需要进行一次核验。接下来,请按照以下步骤发起任务,并特别留意字段映射环节。

  1. 在左侧导航栏中选择“观测与优化 > 评估”,在“评估任务”页签单击“创建评估任务”。
  2. 填写评估任务名称和描述,可填写为“中英翻译助手智能体评估”。选择“离线评估”;执行类型选择立即执行并开启智能分析。
  3. 在评估对象区域单击“选择智能体”并切换至“智能体运行时”页签,找到步骤一中部署的智能体卡片,单击“去配置”完成运行信息配置,确保调用配置调试验证通过后方可作为评估对象被评估任务调用。

    图6 配置评估对象

    在“智能体运行时调用配置”弹框中完成以下参数配置:

    1. 在调用信息配置步骤,按照以下参数完成配置:
      • 请求头(Header):默认请求头已包含会话标识字段:X-Hw-Agentarts-Session-Id: {{sessionID}}。在调测步骤中,需为该变量填写测试值,以模拟真实调用场景下的会话上下文。
        • Content-Type:默认值为application/json,用于标识请求体为JSON格式,确保运行时智能体正确解析请求内容。
        • X-Hw-Agentarts-Session-Id:默认值为{{sessionID}},作为会话标识用于维持多轮对话的上下文关联,该变量值在调测时需手动填写。
      • 请求体(Body):填写向运行时智能体发送请求的内容,并将其中的静态文本替换为变量(如{{input}}),以便评测集数据可自动注入。
        图7 获取请求体(Body)配置信息
        图8 配置请求体(Body)

        在运行时场景下,查询参数(Query)不支持自定义配置。

      • 响应类型:本示例中智能体已配置流式输出,因此选择流式输出。
        图9 获取事件类型
        图10 配置事件类型
        如需修改流式事件类型,在app.py中进行修改,完成后重新部署智能体使修改生效。
        图11 修改事件类型
      • 智能体输出:填写智能体真实的响应参数名称。本示例中智能体响应参数为response,因此此处填写response。
        图12 获取智能体输出配置信息
        图13 配置智能体输出信息
    2. 配置完成后,单击“下一步”,进入配置调测步骤。

      在调测步骤中,填写调测数据并验证智能体是否能正常响应:

      • sessionID:用于关联智能体调用的请求与响应轨迹,确保评估时可完整还原会话上下文。测试时可自行填写任意值(如test_123456),多轮对话共享同一个sessionID。
      • input:填写发送给智能体的输入信息,用于验证智能体响应是否符合预期。
      图14 填写调测数据
      图15 查看调测结果
    3. 确认调测结果符合预期后,单击“确定”,该智能体将可以被选为评估对象。

  4. 选择步骤二中创建的评测集。选择平台精选中的“正确性”评估器。

    图16 选择评测集和评估器

    展开评测集和评估器的字段映射,参考下图检查评测集、评估器的字段映射关系是否正确,如果与图17 检查评测集字段映射和图18不一致,请进行修改。

    图17 检查评测集字段映射
    图18 检查评估器字段映射

  5. 评估任务配置完成后,单击“发起任务”。

    任务执行后,会展示出当前在运行的具体任务。等待所有任务均运行“成功”后,即可进入步骤五:分析评估报告、人工复核评估数据。

    图19 查看评估任务

步骤五:分析评估报告、人工复核评估数据

等待评估任务完成后,您将获取到一份多维度的评估报告。您可以通过查看评估器的打分数据,直观地了解智能体的水平。

  • 通过总体得分和各维度评分数据,了解当前翻译智能助手的整体能力。
  • 在“详情”数据和报告明细中,查看得分较低的数据、评分理由。将智能体的实际输出和参考答案进行比对,分析差异。
    图20 查看评估报告
    图21 查看评估详情

请注意:仅查看评估分数和比对输出文本,绝不是评估的终点。评估的真正价值在于,通过深度剖析评估器给出的评分理由,精准定位智能体底层执行链路中的缺陷(如知识库检索为空、Prompt约束力不足等),并通过持续的针对性调优,从根本上解决智能体的异常行为。

常见问题

  • 调测智能体时出现"third-party agent returned status 401"。
    图22 调试报错

    原因分析:

    部署智能体时,身份认证方式默认为IAM认证。当通过调测工具调用智能体接口时,IAM认证无法满足调测场景的鉴权要求,需要将身份认证切换为API Key认证。

    解决方案:

    1. 修改身份认证配置文件。执行以下命令打开配置文件并按I键进入编辑模式。
      nano .agentarts_config.yaml
    2. 将authorizer_type的值改为API_KEY,并将authorizer_configuration的值改为如下内容。修改完成后保存并退出文件。

      修改时须严格按照JSON格式书写,缩进和标点符号不规范可能导致配置无法识别。

      key_auth:
        api_keys:
           - api_key_name: api_key_for_evaluation
      图23 修改示例
    3. 在智能体运行时界面中,删除当前托管的智能体,并在虚拟机上重新执行agentarts launch命令进行部署。
      图24 删除托管的智能体
  • 修改智能体身份认证为API Key后调测仍报“third-party agent returned status 401”

    如果按照上述方案修改身份认证后,调测仍然返回401错误,请按以下两种方案依次排查:

    解决方案一:验证入站身份认证是否更新生效

    重新部署后,智能体的入站身份认证可能未及时更新。请通过控制台确认:

    1. 在左侧导航栏选择“托管与运行 > 智能体运行时”,并单击部署的智能体名称进入详情页。

    2. 查看“权限与访问控制”下的“入站身份认证”是否已经更新为API Key认证。
      • 未更新:在智能体运行时页签中删除该托管智能体,重新执行agentarts launch命令进行部署,然后再次验证。
      • 已更新:请执行解决方案二进行处理。

    解决方案二:设置调用接口所需的Bearer Token

    修改为API Key认证后,调测调用智能体接口需要携带有效的API Key值。若未设置,虚拟机上会出现认证失败报错。

    图25 报错信息
    1. 在左侧导航栏选择“托管与运行 > 智能体运行时”,并单击部署的智能体名称进入详情页。

    2. 单击“权限与访问控制”下的“URN”。

    3. 复制API Key的值,并在虚拟机上执行以下命令,设置BEARER_TOKEN环境变量。
      export BEARER_TOKEN="<您的API Key值>"

    4. 重新执行调测操作,确认401错误已消除。

相关文档