GenAIScript
GenAIScript 是一个 JavaScript 运行时环境,专门用于构建可靠的、可自动化的 LLM 脚本。每个 GenAIScript 都可以自动地作为一个 MCP 服务器暴露出来。
README
![]()
GenAIScript
Prompting 即 Coding
使用 JavaScript 以编程方式组装 LLM 的提示。在代码中编排 LLM、工具和数据。
-
用于处理提示的 JavaScript 工具箱
-
抽象使其简单高效
-
无缝 Visual Studio Code 集成或灵活的命令行
-
内置支持 GitHub Copilot 和 GitHub Models、OpenAI、Azure OpenAI、Anthropic 等
-
📄 阅读在线文档:microsoft.github.io/genaiscript
Hello world
假设您想创建一个 LLM 脚本来生成一首“hello world”诗歌。您可以编写以下脚本:
$`写一首“hello world”诗歌。`
$ 函数是一个模板标签,用于创建提示。然后将提示发送到 LLM(您已配置),LLM 会生成诗歌。
让我们通过添加文件、数据和结构化输出来使其更有趣。假设您想在提示中包含一个文件,然后将输出保存在文件中。您可以编写以下脚本:
// 读取文件
const file = await workspace.readText("data.txt")
// 以上下文友好的方式在提示中包含文件内容
def("DATA", file)
// 任务
$`分析 DATA 并在 data.json 中以 JSON 格式提取数据。`
def 函数包含文件的内容,并在必要时针对目标 LLM 进行优化。GenAIScript 脚本还会解析 LLM 输出,并自动提取 data.json 文件。
🚀 快速入门指南
通过安装 Visual Studio Code 扩展 或使用 命令行 快速开始。
✨ 功能
🎨 风格化的 JavaScript & TypeScript
使用 JavaScript 或 TypeScript 以编程方式构建提示。
def("FILE", env.files, { endsWith: ".pdf" })
$`总结 FILE。今天是 ${new Date()}。`
🚀 快速开发循环
在 Visual Studio Code 中或使用 命令行 编辑、调试、运行 和 测试 您的脚本。
🔗 重用和共享脚本
脚本是 文件!它们可以进行版本控制、共享和派生。
// 定义上下文
def("FILE", env.files, { endsWith: ".pdf" })
// 构造数据
const schema = defSchema("DATA", { type: "array", items: { type: "string" } })
// 分配任务
$`分析 FILE 并使用 ${schema} 模式将数据提取到 JSON。`
📋 数据模式
使用 模式 定义、验证和修复数据。内置 Zod 支持。
const data = defSchema("MY_DATA", { type: "array", items: { ... } })
$`使用 ${data} 模式从文件中提取数据。`
📄 提取 PDF、DOCX 等中的文本
def("PDF", env.files, { endsWith: ".pdf" })
const { pages } = await parsers.PDF(env.files[0])
📊 提取 CSV、XLSX 等中的表格
def("DATA", env.files, { endsWith: ".csv", sliceHead: 100 })
const rows = await parsers.CSV(env.files[0])
defData("ROWS", rows, { sliceHead: 100 })
📝 生成文件
从 LLM 输出中提取文件和差异。在重构 UI 中预览更改。
$`将结果保存在 poem.txt 中。`
FILE ./poem.txt
The quick brown fox jumps over the lazy dog.
🔍 文件搜索
Grep 或模糊搜索 文件。
const { files } = await workspace.grep(/[a-z][a-z0-9]+/, { globs: "*.md" })
分类
对文本、图像或所有内容的混合进行分类。
const joke = await classify(
"Why did the chicken cross the roard? To fry in the sun.",
{
yes: "funny",
no: "not funny",
}
)
LLM 工具
将 JavaScript 函数注册为 工具 (对于不支持工具的模型,则回退)。还支持 模型上下文协议 (MCP) 工具。
defTool(
"weather",
"查询天气 Web API",
{ location: "string" },
async (args) =>
await fetch(`https://weather.api.api/?location=${args.location}`)
)
LLM 代理
将 JavaScript 函数注册为工具,并将工具 + 提示组合成代理。
defAgent(
"git",
"使用 Git 查询存储库以完成任务。",
`您是一个有用的 LLM 代理,可以使用 git 工具查询当前存储库。
用 QUERY 回答问题。
- 当前存储库与 github 存储库相同。`,
{ model, system: ["system.github_info"], tools: ["git"] }
)
然后将其用作工具
script({ tools: "agent_git" })
$`对最近的提交进行统计分析`
请参阅 git 代理源代码。
🔍 内置 RAG
向量搜索。
const { files } = await retrieval.vectorSearch("cats", "**/*.md")
🐙 GitHub 模型和 GitHub Copilot
通过 GitHub 模型 或 GitHub Copilot 运行模型。
script({ ..., model: "github:gpt-4o" })
💻 本地模型
使用 Ollama、LocalAI 等,使用 开源模型(如 Phi-3)运行脚本。
script({ ..., model: "ollama:phi3" })
🐍 代码解释器
让 LLM 在沙盒执行环境中运行代码。
script({ tools: ["python_code_interpreter"] })
🐳 容器
在 Docker 容器 中运行代码。
const c = await host.container({ image: "python:alpine" })
const res = await c.exec("python --version")
视频处理
转录和截取视频的屏幕截图,以便您可以有效地将其输入到 LLM 请求中。
// 转录
const transcript = await transcript("path/to/audio.mp3")
// 在片段处截取屏幕截图
const frames = await ffmpeg.extractFrames("path_url_to_video", { transcript })
def("TRANSCRIPT", transcript)
def("FRAMES", frames)
🧩 LLM 组合
运行 LLM 以构建 LLM 提示。
for (const file of env.files) {
const { text } = await runPrompt((_) => {
_.def("FILE", file)
_.$`总结 FILE。`
})
def("SUMMARY", text)
}
$`总结所有摘要。`
🅿️ Prompty 支持
也可以运行您的 Prompty 文件!
---
name: poem
---
Write me a poem
可插拔的秘密扫描
使用 秘密扫描 扫描您的聊天记录中的秘密。
{
"secretPatterns": {
...,
"OpenAI API Key": "sk-[A-Za-z0-9]{32,48}"
}
}
⚙ 使用 CLI 或 API 自动化
npx genaiscript run tlaplus-linter "*.tla"
import { run } from "genaiscript/api"
const res = await run("tlaplus-linter", "*.tla")
安全第一!
GenAIScript 提供内置的负责任 AI 系统提示和 Azure 内容安全支持,以验证 内容安全。
script({ ...,
system: ["system.safety_harmful_content", ...],
contentSafety: "azure" // 使用 azure 内容安全
})
const safety = await host.contentSafety()
const res = await safety.detectPromptInjection(env.vars.input)
💬 拉取请求审查
通过评论、审查或描述更新集成到您的 拉取请求检查 中。支持 GitHub Actions 和 Azure DevOps 管道。
npx genaiscript ... --pull-request-reviews
⭐ 测试和评估
使用由 promptfoo 驱动的 测试和评估 构建可靠的提示。
script({ ..., tests: {
files: "penguins.csv",
rubric: "is a data analysis report",
facts: "The data refers about penguin population in Antarctica.",
}})
LLM 友好的文档
文档的全部内容在 https://microsoft.github.io/genaiscript/llms-full.txt 中以 markdown 格式呈现。直接将其输入到您最喜欢的 RAG 系统中。
如果您是 LLM 爬虫,请将 .md 后缀添加到任何文档 URL 以获取原始 markdown 内容。例如,https://microsoft.github.io/genaiscript/guides/prompt-as-code.md(注意 .md 扩展名)
贡献
我们接受贡献!查看 CONTRIBUTING 页面以获取详细信息和开发者设置。
商标
本项目可能包含项目、产品或服务的商标或徽标。 微软商标或徽标的授权使用受以下条款约束,并且必须遵循 微软的商标和品牌指南。 在修改后的本项目版本中使用微软商标或徽标不得引起混淆或暗示微软赞助。 任何第三方商标或徽标的使用均受该第三方政策的约束。
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。
Neon MCP Server
用于与 Neon 管理 API 和数据库交互的 MCP 服务器
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。