和 TypeScript / Node 交互

和 TypeScript / Node 交互

AgentScript 的重点是描述 agent workflow 和模型上下文,而不是替代 JavaScript /

TypeScript 生态。遇到普通编程任务时,可以通过 import tool 调用显式授权的

Node 内置模块,或宿主项目里已经安装的 npm 包。

这篇教程使用 Node 内置模块,因此在当前仓库里不需要额外安装依赖就能运行。

完整源码:../../../tutorials/typescript-interop.as

1. Capability Registry

node:npm: import 默认拒绝。workspace 必须通过

agentscript.npm.json 显式授权:

json 复制代码
{

"allow": {

"node": ["crypto"],

"npm": {}

}

}

这份文件应该保持小而可审计。它表示当前 workspace 允许 AgentScript 程序调用

Node 的 crypto 模块,但还没有授权任何 npm 包。

2. 程序

创建 typescript-interop.as,或者直接打开仓库里的

tutorials/typescript-interop.as

ts 复制代码
import tool Crypto from "node:crypto"

  


main agent TypeScriptInterop {

role "Interop example"

description "Use a Node built-in module from AgentScript and return JSON-safe data."

  


main func(input {

label: string

payload: json

}) {

run_id = Crypto.randomUUID()

digest = Crypto.hash("sha256", input.label, "hex")

  


return {

label: input.label,

payload: input.payload,

run_id: run_id,

digest: digest

}

}

}

这里没有 generate。这是刻意的:交互能力在调用模型之前也有价值。你可以先

做数据标准化、生成 ID、读取文件,或者调用一个 JSON-friendly 的库,然后在后续

agent 中决定哪些结果要通过 use 进入模型上下文。

3. 运行

bash 复制代码
agentscript tutorials/typescript-interop.as --quiet --input '{"label":"release-notes","payload":{"version":"0.1.19","kind":"patch"}}'

输出会包含原始 JSON payload,以及 Node 生成的值:

json 复制代码
{

"label": "release-notes",

"payload": {

"version": "0.1.19",

"kind": "patch"

},

"run_id": "generated-uuid",

"digest": "sha256-hex-digest"

}

4. 这对 TypeScript 意味着什么

AgentScript 不直接执行 TypeScript source file。它通过 Node module loader

调用 JavaScript 模块。实际使用时,可以这样理解:

  • node:crypto 这类 Node 内置模块在授权后可以直接导入。

  • npm 包需要先由宿主项目安装,再写入 agentscript.npm.json

  • TypeScript 写的库需要先编译或发布为 JavaScript,之后就能按 npm 包调用。

  • 函数参数和返回值必须是 JSON-safe:string、number、boolean、null、数组、

plain object。

如果某个包暴露的是 class、stream、buffer、callback 或 builder object,建议在

TypeScript 侧写一层很薄的 JSON-friendly wrapper,编译成 JavaScript 后再由

AgentScript 导入。

5. 调用 npm 包

对于已经安装的 npm 包,写法一样:

ts 复制代码
import tool Yaml from "npm:yaml"

  


main agent ParseYaml {

main func(input {

text: string

}) {

doc = Yaml.parse(input.text)

  


return {

document: doc

}

}

}

宿主项目需要安装 yaml 并授权:

json 复制代码
{

"allow": {

"node": ["crypto"],

"npm": {

"yaml": { "version": "^2.0" }

}

}

}

下一步

完整边界和异常情况见:../npm-tools.md。然后继续阅读 ReAct

教程,看 tool result 如何进入模型上下文。

相关推荐
码农学院2 分钟前
零售电商GEO踩坑复盘:商品列表页懒加载让 AI 爬虫只抓到八分之一的商品,前端改造全程记录
人工智能·geo优化·ai优化aio
IT_陈寒2 分钟前
Java序列化坑了我三天,原来问题出在这个默认方法
前端·人工智能·后端
YOLO数据集集合19 分钟前
渔船船只检测数据集 | 船只检测 渔船识别 拖船检测 海事监管 目标检测 YOLO格式 深度学习数据集 计算机视觉9076期
人工智能·深度学习·yolo·目标检测·计算机视觉
stereohomology20 分钟前
一个可能有用的经验:api key在Workbuddy或Trae IDE上使用
人工智能·llm·薅羊毛
小刘快学习24 分钟前
企业提示词资产如何集中治理:AI网关的提示词管理能力
人工智能
刘天远26 分钟前
Agent最小权限实现:策略表、临时令牌与撤权回归
java·jvm·人工智能·sqlite
液态不合群36 分钟前
信通院认证实锤:信创低代码,撕开企业数字化转型的虚假繁荣
人工智能·低代码·数字化
71777741 分钟前
能源行业 DevOps 平台选型与 Gitee 企业版适配性梳理
人工智能·gitee
宁渡AI大模型3 小时前
河南宁渡科技有限公司|宁渡课堂 AI 全栈面试分享,RAG 项目面试深挖问题解析
人工智能·机器学习·rag
锋行天下9 小时前
LangGraph 1.2+ 新特性:set_node_defaults,批量统一节点策略
人工智能