运行时智能体离线评估实践(流式)
本实践以中英翻译助手为例,演示流式输出运行时智能体从构建部署到离线评估的全流程,共包含五个步骤:
| 序号 | 流程环节 | 说明 |
|---|---|---|
| 1 | 将本地开发完成的翻译智能体通过SDK一键部署至运行时,生成可稳定批量调用的云端服务,为评估提供统一、可靠的调用入口。 | |
| 2 | 评测集是评估的“标准考卷”,包含输入字段(中文待翻译文本)和标准参考答案(期望的英文译文),用于批量校验智能体翻译效果。本步骤将明确输入字段与标准译文的对应关系,确保评估结果可量化、可对比。 | |
| 3 | 针对翻译场景语义精准的核心要求,选用平台预置的正确性评估器,以标准英文参考译文为基准,自动比对智能体输出,判断语义是否完整、准确、无漏译、无误译。无需自定义开发,直接选用即可实现自动化、标准化打分。 | |
| 4 | 将智能体、评测集和评估器关联,配置请求体、响应类型和字段映射,确保评测集数据正确注入并自动执行批量评估。 | |
| 5 | 查看多维度评估报告,通过总体得分和逐条评分理由,锁定得分较低的翻译结果,比对实际输出与参考答案,精准定位Prompt约束力不足、边界处理缺陷等问题,驱动针对性调优并回归验证。 |
前置条件
在开始之前,请确认以下准备工作已完成:
- 已开通AgentArts服务,并在“管理中心 > 授权管理”页面完成依赖云服务授权。
- 已获取模型API地址。
- 进入“西南-贵阳一”MaaS页面,选择“模型推理 > 在线推理”,找到deepseek-v4.1-flash模型,查看模型类型。 图1 获取模型信息1
- 单击“API调用 > 主推版本”,查看模型信息。 图2 获取模型信息2
- 进入“西南-贵阳一”MaaS页面,选择“模型推理 > 在线推理”,找到deepseek-v4.1-flash模型,查看模型类型。
步骤一:将翻译助手智能体托管至运行时
将本地开发完成的翻译智能体,打包为容器镜像并托管至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基础镜像地址”。
- 执行以下命令配置华为云凭证,获取华为云凭证请参考认证鉴权。
export HUAWEICLOUD_SDK_AK="your-access-key" export HUAWEICLOUD_SDK_SK="your-secret-key"
准备智能体
- 创建项目目录。
在终端执行以下命令,创建项目目录并进入:
mkdir my-first-agent && cd my-first-agent
- 配置环境变量。
在项目根目录下创建.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
- 执行如下命令安装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
- 编写流式输出Agent核心逻辑。
- 在项目根目录执行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() - 验证Agent逻辑是否正常。
在终端执行以下命令,直接调用agent.py进行快速验证,确认模型调用链路没有问题:
python3 -c "from agent import agent; print(agent.chat('今天天气怎么样?'))"
如果模型调用正常,终端会输出模型的回复内容。
如果此步骤报错,请优先排查以下问题:
- .env文件中的MODEL_API_KEY是否已替换为实际值。
- 当前网络环境是否可以访问api.modelarts-maas.com。
- 在项目根目录执行vi agent.py命令,写入以下内容并保存。
- 封装为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时都会触发此函数。
本地验证
在部署到云端之前,先在本地确认服务启动正常、接口响应符合预期。
- 启动本地服务。
在正式推送镜像之前,先在本地模拟云端HTTP调用环境,验证Agent的接口封装是否正确、通信是否正常,可以大幅降低因接口问题导致云端部署后才发现错误的调试成本。
执行python app.py启动http server,执行以下命令调用验证Agent的HTTP接口是否已经被正确封装且能正常通信。
执行python app.py回显效果如下。

- 验证健康检查接口。
打开一个新的终端窗口(保持原窗口运行),执行以下命令,验证/ping健康检查接口是否正常:
curl http://localhost:8080/ping
返回类似{"status": "Healthy"}内容说明服务已正常启动,平台的健康探查可以通过。
- 验证对话接口。
在新终端中执行以下命令,验证/invocations对话接口是否正常:
curl -X POST http://localhost:8080/invocations \ -H "Content-Type: application/json" \ -d '{"message": "今天天气很好"}'
收到模型回复后,说明Agent逻辑和HTTP封装均工作正常。
两项验证均通过后,返回第一个终端,按Ctrl+C停止本地服务,继续进行后续的部署操作。
通过SDK一键部署
SDK方式会自动完成镜像构建、推送SWR、部署运行时的全部操作,适合快速验证场景。
- 参考前置条件安装SDK,并配置华为云凭证。
- 准备依赖文件。
在项目根目录执行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
- 初始化部署配置。 执行如下命令配置智能体。
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中已存在的镜像仓库名称;若尚未创建仓库,请留空,切勿填写不存在的仓库名。

- 部署智能体。
agentarts launch
该命令会自动完成以下步骤:
- 本地构建Docker镜像。
- 将Docker镜像推送到华为云SWR镜像仓库。
- 部署到AgentArts运行时托管环境。
- 验证构建的镜像是否能正常响应。
agentarts invoke --agent translation-assistant-stream '{"message": "帮我翻译一下 什么是AgentArts?"}'
步骤二:构造评测集
评测集是离线评估的“标准考卷”,用于批量输入待翻译文本,校验智能体翻译效果。本步骤创建规范、可用的测试数据集,明确输入字段与标准译文,确保评估结果可量化、可对比。
- 在左侧导航栏中选择“观测与优化 > 评估”,在“评测集”页签单击“创建评测集”。
- 填写评测集基础信息。
- 评测集名称:中英翻译助手评测集。
- 描述:用于校验中英翻译助手翻译语义准确性,覆盖日常短句、办公常用语。
- 配置基础数据列。
- 配置input:这是智能体的输入参数描述(即用户输入的中文待翻译文本)。您可以为其选择合适的数据类型,并设置是否为“必填”。
- 配置reference_output:这是期望智能体给出的标准参考答案。您可以完善它的描述信息,帮助后续评估器更好地理解预期标准。
- 单击“确定”完成评测集的创建。
完成以上字段的配置后,您可以直接在平台上手动录入符合该格式的测试数据,或上传匹配该表头的CSV/Excel文件。保存后,一份完美契合业务场景与高阶评估器的“考卷”就诞生了,随时可以在“评估任务”中被调用。
- 填写评测集数据。
- 评测集创建成功后,会自动跳转至评测集详情页面,在该页面选择“添加数据 > 手动添加”。 图3 手动添加
- 按照页面提示,输入对应的测试数据文本。 图4 添加数据
- 评测集创建成功后,会自动跳转至评测集详情页面,在该页面选择“添加数据 > 手动添加”。
- 提交评测集。评测集只有提交后才会发布为正式版本,并供后续的评估任务使用。 图5 提交评测集
步骤三:选择评估器
针对中英翻译轻量化、高准确性的业务要求,单一评估维度无法全面保障质量。AgentArts平台已预置覆盖语义准确性的专业评估能力,无需自定义开发,直接选用即可实现自动化、标准化打分。
推荐使用正确性评估器:
正确性评估器:以评测集中的标准英文参考译文为基准,比对智能体输出,判断语义是否完整、准确、无漏译、无误译。业务价值:保证翻译“语义精准”,确保日常办公、学习场景翻译结果可靠可用。
具体配置操作请参考步骤四:创建评估任务。
步骤四:创建评估任务
在前面的步骤中,已经准备好了评测集和评估器,可以创建评估任务。在评估任务中需要特别留意字段映射环节,您必须准确地告诉系统:待翻译文本在哪一列?标准参考译文在哪一列?智能体输出结果又对应哪一列?如果字段映射错位,或者遗漏了核心的对照依据,整个评估任务将直接失效或产生毫无意义的分数。选择评估器后,平台会自动进行字段关系关联,但仍然需要进行一次核验。接下来,请按照以下步骤发起任务,并特别留意字段映射环节。
- 在左侧导航栏中选择“观测与优化 > 评估”,在“评估任务”页签单击“创建评估任务”。
- 填写评估任务名称和描述,可填写为“中英翻译助手智能体评估”。选择“离线评估”;执行类型选择立即执行并开启智能分析。
- 在评估对象区域单击“选择智能体”并切换至“智能体运行时”页签,找到步骤一中部署的智能体卡片,单击“去配置”完成运行信息配置,确保调用配置调试验证通过后方可作为评估对象被评估任务调用。 图6 配置评估对象
在“智能体运行时调用配置”弹框中完成以下参数配置:
- 在调用信息配置步骤,按照以下参数完成配置:
- 请求头(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 配置智能体输出信息
- 请求头(Header):默认请求头已包含会话标识字段:X-Hw-Agentarts-Session-Id: {{sessionID}}。在调测步骤中,需为该变量填写测试值,以模拟真实调用场景下的会话上下文。
- 配置完成后,单击“下一步”,进入配置调测步骤。
在调测步骤中,填写调测数据并验证智能体是否能正常响应:
- sessionID:用于关联智能体调用的请求与响应轨迹,确保评估时可完整还原会话上下文。测试时可自行填写任意值(如test_123456),多轮对话共享同一个sessionID。
- input:填写发送给智能体的输入信息,用于验证智能体响应是否符合预期。
图14 填写调测数据
图15 查看调测结果
- 确认调测结果符合预期后,单击“确定”,该智能体将可以被选为评估对象。
- 在调用信息配置步骤,按照以下参数完成配置:
- 选择步骤二中创建的评测集。选择平台精选中的“正确性”评估器。 图16 选择评测集和评估器
展开评测集和评估器的字段映射,参考下图检查评测集、评估器的字段映射关系是否正确,如果与图17 检查评测集字段映射和图18不一致,请进行修改。
- 评估任务配置完成后,单击“发起任务”。
任务执行后,会展示出当前在运行的具体任务。等待所有任务均运行“成功”后,即可进入步骤五:分析评估报告、人工复核评估数据。
图19 查看评估任务
步骤五:分析评估报告、人工复核评估数据
等待评估任务完成后,您将获取到一份多维度的评估报告。您可以通过查看评估器的打分数据,直观地了解智能体的水平。
- 通过总体得分和各维度评分数据,了解当前翻译智能助手的整体能力。
- 在“详情”数据和报告明细中,查看得分较低的数据、评分理由。将智能体的实际输出和参考答案进行比对,分析差异。 图20 查看评估报告
图21 查看评估详情
请注意:仅查看评估分数和比对输出文本,绝不是评估的终点。评估的真正价值在于,通过深度剖析评估器给出的评分理由,精准定位智能体底层执行链路中的缺陷(如知识库检索为空、Prompt约束力不足等),并通过持续的针对性调优,从根本上解决智能体的异常行为。
常见问题
- 调测智能体时出现"third-party agent returned status 401"。 图22 调试报错
原因分析:
部署智能体时,身份认证方式默认为IAM认证。当通过调测工具调用智能体接口时,IAM认证无法满足调测场景的鉴权要求,需要将身份认证切换为API Key认证。
解决方案:
- 修改身份认证配置文件。执行以下命令打开配置文件并按I键进入编辑模式。
nano .agentarts_config.yaml
- 将authorizer_type的值改为API_KEY,并将authorizer_configuration的值改为如下内容。修改完成后保存并退出文件。
修改时须严格按照JSON格式书写,缩进和标点符号不规范可能导致配置无法识别。
key_auth: api_keys: - api_key_name: api_key_for_evaluation图23 修改示例
- 在智能体运行时界面中,删除当前托管的智能体,并在虚拟机上重新执行agentarts launch命令进行部署。 图24 删除托管的智能体
- 修改身份认证配置文件。执行以下命令打开配置文件并按I键进入编辑模式。
- 修改智能体身份认证为API Key后调测仍报“third-party agent returned status 401”
如果按照上述方案修改身份认证后,调测仍然返回401错误,请按以下两种方案依次排查:
解决方案一:验证入站身份认证是否更新生效
重新部署后,智能体的入站身份认证可能未及时更新。请通过控制台确认:
- 在左侧导航栏选择“托管与运行 > 智能体运行时”,并单击部署的智能体名称进入详情页。
- 查看“权限与访问控制”下的“入站身份认证”是否已经更新为API Key认证。
- 未更新:在智能体运行时页签中删除该托管智能体,重新执行agentarts launch命令进行部署,然后再次验证。
- 已更新:请执行解决方案二进行处理。
解决方案二:设置调用接口所需的Bearer Token
修改为API Key认证后,调测调用智能体接口需要携带有效的API Key值。若未设置,虚拟机上会出现认证失败报错。
图25 报错信息






