You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Palantir Foundry中使用ngraph.path的aStar算法遇兼容性问题

问题解决:Palantir Foundry中使用ngraph.path的aStar时出现"(0 , a.default) is not a function"错误

错误原因分析

这个错误核心是ES模块与CommonJS模块导入不兼容导致的:ngraph.path本质是CommonJS模块,在Foundry的TypeScript运行环境中,直接用import * as ngraph from 'ngraph.path'会导致导出结构解析异常,无法正确获取aStar函数。

同时你的代码还有两个潜在问题:

  • Objects.search().nodes().all()和Objects.search().edges().all()是异步方法,未加await会导致获取到的是Promise而非实际数据
  • 未处理Foundry本体节点ID与图中节点ID的类型匹配问题

解决方案

1. 修正ngraph.path的导入方式

将原导入语句替换为以下两种方式之一:

方式一:默认导入+解构

import ngraphPath from 'ngraph.path';
const { aStar } = ngraphPath;

调用时直接使用:

const pathFinder = aStar(graph);

方式二:CommonJS风格导入

const ngraphPath = require('ngraph.path');

调用时:

const pathFinder = ngraphPath.aStar(graph);

2. 修复异步数据获取

给节点、边的查询添加await,确保拿到实际数据:

const nodes_data: Nodes[] = await Objects.search().nodes().all();
const edges_data: Edges[] = await Objects.search().edges().all();

3. 节点ID类型兼容处理

如果Foundry本体中nodeId是数字类型,需将传入的字符串ID转换为数字,避免路径查找失败:

const optimal_path = pathFinder.find(Number(start_node_id), Number(end_node_id));

修正后的完整代码

import { Function } from "@foundry/functions-api";
import { Objects, Nodes, Edges} from "@foundry/ontology-api";
import createGraph from 'ngraph.graph';
import ngraphPath from 'ngraph.path';

const { aStar } = ngraphPath;

export class MyFunctions {

    @Function()
    public async Optimum_Path(start_node_id: string, end_node_id: string): Promise<string> {

        const graph = createGraph();

        const nodes_data: Nodes[] = await Objects.search().nodes().all();
        const edges_data: Edges[] = await Objects.search().edges().all();

        nodes_data.forEach((node: Nodes) => {
            graph.addNode(Number(node.nodeId), { lat: node.latitude, lon: node.longitude });
        });

        edges_data.forEach((edge: Edges) => {
            if (typeof edge.endNodeId !== 'undefined') {
                graph.addLink(Number(edge.startNodeId), Number(edge.endNodeId), { length: edge.distance });
            }
        });

        const pathFinder = aStar(graph);
        const optimal_path = pathFinder.find(Number(start_node_id), Number(end_node_id));

        return `Optimal path from ${start_node_id} to ${end_node_id}: ${JSON.stringify(optimal_path)}`;
    }
}

额外注意事项

  • 确认Foundry Functions项目已正确安装ngraph.graph和ngraph.path依赖(在package.json中添加后同步依赖)
  • 若仍存在兼容性问题,可尝试使用Foundry内置的地理空间/路径规划能力替代第三方库,减少环境适配成本

内容的提问来源于stack exchange,提问作者Rowan Barua

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 07:55:27