项目介绍:JS Agent
JS Agent 是一个面向 JavaScript 和 TypeScript 的可组合、可扩展的框架,专为创建 AI 代理而设计。尽管 JS Agent 已停止积极开发,但它提供了坚实的构建模块和工具,帮助开发者更快地构建可靠的 AI 代理。
主要特性
JS Agent 提供了一系列功能强大的特性,使用户可以定义和执行代理任务:
- 代理定义与执行:用户可以配置代理运行属性,监控代理运行,并记录所有的大语言模型(LLM)调用,计算调用和运行的成本。
- 代理 HTTP 服务器:通过 HTTP API 启动、停止和观察代理运行,并可同时托管多个代理。
- 支持的 LLM 模型和 API:包括 OpenAI 的文本生成和聊天模型等。
- 操作与工具:可以读取和写入文件、运行命令行命令、使用可编程搜索引擎等。
- 代理循环:如任务更新规划循环、生成下一步循环。
- 提示模板:内建模板可快速启动。
- 文本功能:如信息提取、文本分割。
- 数据源:支持网页和文件。
- 数据转换器:如将 HTML 转换为文本。
- 通用工具:如 LLM 呼叫重试机制。
设计原则
JS Agent 的设计基于几项核心原则:
- 类型化支持:提供尽可能多的类型支持以帮助发现并确保安全性。
- 直接函数调用:所有的实用函数都能直接调用,而不需要中介代理。
- 可组合性:各个模块具有良好的关注点分离,易于组合。
- 可扩展性:用户可以方便地添加自己的工具和步骤。
- 功能编程:使用功能编程创建不可变对象,面向对象技术仅用于可变对象。
- 渐进式精细化:代理的规格易于书写,默认设置有效,且能轻松覆盖以满足特定需求。
- 生产支持:提供一流的日志记录和成本追踪支持。
示例应用
JS Agent 提供了多个示例应用程序,展示了其广泛的功能和使用场景:
- Wikipedia 问答代理:能使用维基百科搜索引擎来回答问题。
- JavaScript/TypeScript 开发者代理:在 Docker 容器中运行,可用于代码文件操作和自动化开发任务。
- BabyAGI:BabyAGI 的 JS Agent 实现版本。
- 从 PDF 到 Twitter 线程:根据主题从 PDF 提取信息并创建 Twitter 线程。
- 拆分与嵌入文本:将文本拆分为小块并生成嵌入。
快速安装
通过 npm 安装 JS Agent:
npm install js-agent
示例代码
以下是一个运行维基百科代理的示例代码,展示了如何创建一个能使用维基百科内容回答问题的代理:
import * as $ from "js-agent";
const openai = $.provider.openai;
export async function runWikipediaAgent({
wikipediaSearchKey,
wikipediaSearchCx,
openAiApiKey,
task,
}: {
openAiApiKey: string;
wikipediaSearchKey: string;
wikipediaSearchCx: string;
task: string;
}) {
// 定义搜索和阅读维基百科的动作
const searchWikipediaAction = $.tool.programmableGoogleSearchEngineAction({
id: "search-wikipedia",
description: "使用搜索词搜索维基百科,并返回页面列表。",
execute: $.tool.executeProgrammableGoogleSearchEngineAction({
key: wikipediaSearchKey,
cx: wikipediaSearchCx,
}),
});
const readWikipediaArticleAction = $.tool.extractInformationFromWebpage({
id: "read-wikipedia-article",
description: "阅读维基百科文章并结合查询进行总结。",
inputExample: {
url: "https://en.wikipedia.org/wiki/Artificial_intelligence",
topic: "{query that you are answering}",
},
execute: $.tool.executeExtractInformationFromWebpage({
extract: $.text.extractRecursively.asExtractFunction({
split: $.text.splitRecursivelyAtToken.asSplitFunction({
tokenizer: openai.tokenizer.forModel({
model: "gpt-3.5-turbo",
}),
maxChunkSize: 2048,
}),
extract: $.text.generateText.asFunction({
prompt: $.prompt.extractChatPrompt(),
model: openai.chatModel({
apiKey: openAiApiKey,
model: "gpt-3.5-turbo",
}),
}),
}),
}),
});
// 运行代理
return $.runAgent<{ task: string }>({
properties: { task },
agent: $.step.generateNextStepLoop({
actions: [searchWikipediaAction, readWikipediaArticleAction],
actionFormat: $.action.format.flexibleJson(),
prompt: $.prompt.concatChatPrompts(
async ({ runState: { task } }) => [
{
role: "system",
content: `## ROLE
You are an knowledge worker that answers questions using Wikipedia content. You speak perfect JSON.
## CONSTRAINTS
All facts for your answer must be from Wikipedia articles that you have read.
## TASK
${task}`,
},
],
$.prompt.availableActionsChatPrompt(),
$.prompt.recentStepsChatPrompt({ maxSteps: 6 })
),
model: openai.chatModel({
apiKey: openAiApiKey,
model: "gpt-3.5-turbo",
}),
}),
controller: $.agent.controller.maxSteps(20),
observer: $.agent.observer.showRunInConsole({ name: "Wikipedia Agent" }),
});
}
JS Agent 为创建可靠的 AI 代理提供了广泛的功能和灵活性,是开发者探索 AI 应用的有力工具。尽管已不再积极开发,但其为构建 AI 代理所提供的基础知识和实践仍然非常有益。