博客感知规控征程6工具链OE Agent天工使用指南:AI辅助代码生成与调试

征程6工具链OE Agent天工使用指南:AI辅助代码生成与调试

默认265282026-08-30
51
0

地平线官方最近推出了OE Agent"天工",一个基于大模型的AI助手,能辅助写代码、查文档、排错。我试用了一段时间,发现对新手很友好,老手也能省不少查文档的时间。这篇把天工的安装、使用场景和实际体验记下来,后面想用的同学可以参考。

一、天工是什么

天工是地平线基于大模型开发的AI Agent,专门面向征程系列芯片的开发者。主要功能:

1. 代码生成:根据自然语言描述生成征程6相关的代码(如UCP调用、模型推理、ISP配置)

2. 文档查询:直接问问题,天工从官方文档里找答案

3. 错误诊断:把报错信息贴给天工,它会分析可能的原因和解决方案

4. API解释:解释某个API的参数、返回值和使用示例

二、安装与配置

天工有两个版本:云端版和本地部署版。

云端版(推荐新手)

直接用浏览器访问地平线开发者社区,在右下角有AI助手入口。不用安装,注册账号就能用。

本地部署版(推荐老手/隐私敏感场景)

```bash

# 克隆OE-Skills仓库

git clone https://github.com/HorizonRobotics/OE-Skills.git

cd OE-Skills

# 安装依赖

pip install -r requirements.txt

# 配置API Key(需要地平线开发者账号)

export HORIZON_API_KEY="your_api_key"

# 启动本地服务

python server.py --port 8080

```

本地部署的好处是数据不上传云端,适合处理敏感代码。但需要自己的API Key,而且模型能力受限于服务器配置。

三、实际使用场景

场景1:快速生成UCP代码

以前写UCP代码要翻半天文档,现在直接问天工:

```

用户:写一个征程6的UCP图像分类代码,输入640x640 RGB

天工输出:

#include "hb_ucp.h"

#include "hb_dnn.h"

int main() {

// 初始化UCP

hbUCPHandle_t ucp_handle;

hbUCPInit(&ucp_handle, "nash-e");

// 加载模型

hbDNNHandle_t model;

hbDNNLoadFromFile("model.hbm", &model);

// 准备输入

hbUCPImage_t input;

input.data = rgb_buffer;

input.width = 640;

input.height = 640;

input.format = HB_UCP_IMAGE_RGB;

// 推理

hbDNNTaskHandle_t task;

hbDNNInfer(&task, model, &input, 1);

hbDNNWait(task);

// 获取输出

float* output;

hbDNNGetOutput(task, 0, (void**)&output);

// 清理

hbDNNReleaseTask(task);

hbDNNUnload(model);

hbUCPDeinit(ucp_handle);

return 0;

}

```

代码框架基本正确,但细节(如错误处理、内存分配)需要人工补充。省了不少查API文档的时间。

场景2:报错诊断

编译时遇到HB_DNN_LAYOUT_MISMATCH报错,把完整报错贴给天工:

```

用户:hb_mapper编译通过,但板端加载报HB_DNN_LAYOUT_MISMATCH,怎么排查?

天工输出:

HB_DNN_LAYOUT_MISMATCH通常由以下原因导致:

1. hb_mapper版本和板端OE版本不匹配

- 检查:hb_mapper --version 和 cat /opt/horizon/version

- 解决:确保两者版本一致

2. march参数错误

- 检查:hb_mapper配置里的march是否为"nash-e"

- 解决:征程6用nash-e,不是bernoulli2

3. 输入layout不匹配

- 检查:模型编译时的input_layout和板端代码里的实际layout是否一致

- 解决:统一用NCHW或NHWC

```

诊断思路基本正确,但第3条在我的案例里不是根因。实际原因是第1条(版本不匹配)。天工给了一个排查checklist,帮我快速定位了问题。

场景3:API用法查询

忘记hbDNNGetOutput的参数顺序,直接问天工:

```

用户:hbDNNGetOutput的参数是什么?

天工输出:

hbDNNGetOutput(hbDNNTaskHandle_t task_handle, int output_index, void** output_data);

参数说明:

- task_handle: DNN任务句柄,由hbDNNInfer生成

- output_index: 输出索引,从0开始

- output_data: 输出数据指针的指针,函数会把输出数据地址写入这里

返回值:

- 0: 成功

- 非0: 错误码,可用hbDNNGetErrorString查询

示例:

float* output;

int ret = hbDNNGetOutput(task, 0, (void**)&output);

if (ret != 0) {

printf("GetOutput failed: %s\n", hbDNNGetErrorString(ret));

}

```

比翻PDF文档快多了。

四、天工的局限性

用了这段时间,也发现几个不足:

1. 代码不完整:生成的代码是框架级别的,缺少错误处理、内存管理、多线程等工程化细节

2. 版本滞后:天工的知识库更新有延迟,OE 3.5.0+的新特性可能还没收录

3. 复杂问题诊断能力有限:对于跨模块的复杂bug(如VIN+ISP+BPU协同问题),天工给的排查建议比较笼统

4. 代码隐私:云端版会把代码上传到地平线服务器,处理敏感代码时建议用本地部署版

五、使用建议

场景 推荐用法 注意事项

快速查API 云端版 简单问题直接问

生成代码框架 本地版 生成后人工review补充

报错排查 云端版 结合官方文档交叉验证

学习新特性 官方文档+天工 天工做引导,文档做细节

六、顺便提一嘴

· 天工的本地部署版需要Node.js >= v22(参考社区经验:Node.js v18跑不起来,要手动升级到v22)。

· 天工不是万能的,它更像一个"智能文档助手",帮你快速找到答案,但最终的代码质量和工程化还是要靠开发者自己把控。

· 地平线社区正在持续优化天工,建议定期更新OE-Skills仓库,获取最新能力。

数据来源:本文OE Agent天工使用体验参考地平线开发者社区官方OE-Skills仓库(https://github.com/HorizonRobotics/OE-Skills)及社区博客《OE Agent天工|赋能地平线征程系列》。

感知规控
社区征文征程6
评论0
0/600