与任何LLM和TypeScript AI SDK一起使用的AI代理标准库。
代理
介绍
Agentic 是一个AI函数/工具的标准库,它针对普通的TS使用和基于LLM的使用都进行了优化。Agentic 适用于所有主要的TS AI SDK(LangChain、LlamaIndex、Vercel AI SDK、OpenAI SDK 等)。
像WeatherClient
这样的Agentic客户端可以像普通的TS类一样使用:
import { WeatherClient } from '@agentic/stdlib'
// 需要`process.env.WEATHER_API_KEY`(来自weatherapi.com)
const weather = new WeatherClient()
const result = await weather.getCurrentWeather({
q: 'San Francisco'
})
console.log(result)
或者您可以将这些客户端用作基于LLM的工具,让LLM决定何时以及如何调用底层功能。
通过适配器,这在所有主要的AI SDK中都适用。这里是一个使用Vercel的AI SDK的例子:
// SDK特定的导入
import { openai } from '@ai-sdk/openai'
import { generateText } from 'ai'
import { createAISDKTools } from '@agentic/ai-sdk'
// SDK无关的导入
import { WeatherClient } from '@agentic/stdlib'
const weather = new WeatherClient()
const result = await generateText({
model: openai('gpt-4o-mini'),
// 这行代码是使用`@agentic/ai-sdk`适配器的关键
tools: createAISDKTools(weather),
toolChoice: 'required',
prompt: 'San Francisco的天气如何?'
})
console.log(result.toolResults[0])
您可以将我们经过充分测试的AI函数标准库与您喜欢的AI SDK一起使用——无需编写任何粘合代码!
这里是一个稍微复杂一些的例子,使用多个客户端并使用AIFunctionSet.pick
方法选择它们的一部分函数:
// SDK特定的导入
import { ChatModel, createAIRunner } from '@dexaai/dexter'
import { createDexterFunctions } from '@agentic/dexter'
// SDK无关的导入
import { PerigonClient, SerperClient } from '@agentic/stdlib'
async function main() {
// Perigon是一个新闻API,Serper是一个Google搜索API
const perigon = new PerigonClient()
const serper = new SerperClient()
const runner = createAIRunner({
chatModel: new ChatModel({
params: { model: 'gpt-4o-mini', temperature: 0 }
}),
functions: createDexterFunctions(
perigon.functions.pick('search_news_stories'),
serper
),
systemMessage: '您是一位乐于助人的助手。尽可能简洁。'
})
const result = await runner(
'总结最新的关于即将到来的美国大选的新闻故事。'
)
console.log(result)
}
在这里,我们将PerigonClient.searchStories
方法中的search_news_stories
和SerperClient.search
方法中的serper_google_search
这两个函数暴露给了LLM。
所有的SDK适配器如createDexterFunctions
都接受非常灵活的AIFunctionLike
对象,其中包括:
AIFunctionSet
- AI函数集合(如perigon.functions.pick('search_news_stories')
或perigon.functions
或serper.functions
)AIFunctionsProvider
- 通过.functions
属性暴露AIFunctionSet
的客户端类(如perigon
或serper
)AIFunction
- 单个函数(如perigon.functions.get('search_news_stories')
或serper.functions.get('serper_google_search')
或直接通过createAIFunction
实用函数创建的 AI 函数)
您可以传递尽可能多的 AIFunctionLike
对象,并且可以通过 .pick
、.omit
、.get
、.map
等方法将其作为 AIFunctionSet
集合进行操作。
安装
npm install @agentic/stdlib @agentic/core zod
@agentic/core
- 导出核心AI工具和@aiFunction
装饰器@agentic/stdlib
- 导出所有内置的AI工具(个别工具包的便利包装;如果您更愿意直接导入个别包,请参见 优化导入 部分)zod
- 用于模式验证
[!注意] 该包是 仅ESM,需要
Node.js >= 18
或等效环境(bun,deno,CF workers等)。
优化导入
@agentic/stdlib
只是一个便利包,它重新导出所有内置的AI工具包。如果您想优化导入,可以用您希望的特定AI工具包替换 @agentic/stdlib
。例如:
npm install @agentic/weather @agentic/core zod
import { WeatherClient } from '@agentic/weather'
[!注意] 使用
@agentic/stdlib
与直接使用个别包在功能上没有差别。唯一的区别是如果您想优化安装体积(例如在无服务器函数上运行),那么直接安装和使用个别包会更有效率。默认示例使用@agentic/stdlib
是因为它提供了更简单的DX。
AI SDKs
要与支持的AI SDK一起使用Agentic,您还需要安装其(非常轻量级的)适配器包。
Vercel AI SDK
安装
npm install @agentic/ai-sdk ai
import { createAISDKTools } from '@agentic/ai-sdk'
请参阅 examples/ai-sdk 获取完整示例。
LangChain
安装
npm install @agentic/langchain @langchain/core langchain
import { createLangChainTools } from '@agentic/langchain'
请参阅 examples/langchain 获取完整示例。
LlamaIndex
安装
npm install @agentic/llamaindex llamaindex
import { createLlamaIndexTools } from '@agentic/llamaindex'
请参阅 examples/llamaindex 获取完整示例。
Firebase Genkit
安装
npm install @agentic/genkit @genkit-ai/ai @genkit-ai/core
import { createGenkitTools } from '@agentic/genkit'
请参阅 examples/genkit 获取完整示例。
Dexa Dexter
安装
npm install @agentic/dexter @dexaai/dexter
import { createDexterFunctions } from '@agentic/dexter'
请参阅 examples/dexter 获取完整示例。
OpenAI SDK
安装
npm install openai
使用OpenAI SDK不需要适配器,因为所有的agency工具默认与OpenAI兼容。您可以使用AIFunctionSet.specs
进行函数调用或AIFunctionSet.toolSpecs
进行并行工具调用。
import { WeatherClient } from '@agentic/stdlib'
import OpenAI from 'openai'
const weather = new WeatherClient()
const openai = new OpenAI()
const messages: OpenAI.ChatCompletionMessageParam[] = [
{
role: 'system',
content: '您是一位乐于助人的助手。尽可能简洁。'
},
{ role: 'user', content: 'San Francisco的天气如何?' }
]
const res = await openai.chat.completions.create({
messages,
model: 'gpt-4o-mini',
temperature: 0,
tools: weather.functions.toolSpecs,
tool_choice: 'required'
})
const message = res.choices[0]?.message!
console.log(JSON.stringify(message, null, 2))
assert(message.tool_calls?.[0]?.function?.name === 'get_current_weather')
const fn = weather.functions.get('get_current_weather')!
const toolParams = message.tool_calls[0].function.arguments
const toolResult = await fn(toolParams)
console.log(JSON.stringify(toolResult, null, 2))
请参阅 examples/openai 获取完整示例。
服务
| 服务 | 包名 | 命名导出 | 描述 |
| ----------------------------------------------------------------------------------- | ------------------------- | -------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| [必应](https://www.microsoft.com/en-us/bing/apis/bing-web-search-api) | `@agentic/bing` | `BingClient` | 必应网络搜索。 |
| [计算器](https://github.com/josdejong/mathjs) | `@agentic/calculator` | `calculator` | 用于简单数学表达式的基本计算器。 |
| [Clearbit](https://dashboard.clearbit.com/docs) | `@agentic/clearbit` | `ClearbitClient` | 解析和丰富人物和公司数据。 |
| [Dexa](https://dexa.ai) | `@agentic/dexa` | `DexaClient` | 回答世界上最佳播客主持人的问题。 |
| [Diffbot](https://docs.diffbot.com) | `@agentic/diffbot` | `DiffbotClient` | 网页分类和抓取;人物和公司数据丰富。 |
| [E2B](https://e2b.dev) | `@agentic/e2b` | `e2b` | 托管的Python代码解释器沙盒,非常适合数据分析、灵活的代码执行和即时高级推理。(_peer dep_ `@e2b/code-interpreter`) |
| [Exa](https://docs.exa.ai) | `@agentic/exa` | `ExaClient` | 为LLMs量身定制的网页搜索。 |
| [Firecrawl](https://www.firecrawl.dev) | `@agentic/firecrawl` | `FirecrawlClient` | 网站抓取和清理。 |
| [HackerNews](https://github.com/HackerNews/API) | `@agentic/hacker-news` | `HackerNewsClient` | 官方的HackerNews API。 |
| [Hunter](https://hunter.io) | `@agentic/hunter` | `HunterClient` | 电子邮件查找、验证和丰富。 |
| [Jina](https://jina.ai/reader) | `@agentic/jina` | `JinaClient` | 清洁URL阅读器和网页搜索+URL顶级结果阅读,提供慷慨的免费层。 |
| [Midjourney](https://www.imagineapi.dev) | `@agentic/midjourney` | `MidjourneyClient` | 非官方的Midjourney客户端生成图像。 |
| [Novu](https://novu.co) | `@agentic/novu` | `NovuClient` | 发送通知(电子邮件、短信、应用内通知、推送等)。 |
| [People Data Labs](https://www.peopledatalabs.com) | `@agentic/people-data-labs` | `PeopleDataLabsClient` | 人物和公司数据(WIP)。 |
| [Perigon](https://www.goperigon.com/products/news-api) | `@agentic/perigon` | `PerigonClient` | 实时新闻API和来自140,000+来源的网络内容数据。AI结构化和丰富,适用于LLMs。 |
| [Polygon](https://polygon.io) | `@agentic/polygon` | `PolygonClient` | 股市和公司财务数据。 |
| [PredictLeads](https://predictleads.com) | `@agentic/predict-leads` | `PredictLeadsClient` | 深入的公司数据,包括募资事件、招聘新闻、产品发布、使用的技术等信号。 |
| [Proxycurl](https://nubela.co/proxycurl) | `@agentic/proxycurl` | `ProxycurlClient` | 来自LinkedIn和Crunchbase的人员和公司数据。 |
| [Searxng](https://docs.searxng.org) | `@agentic/searxng` | `SearxngClient` | 开源元搜索引擎,可以搜索像Reddit、Google、Brave、Arxiv、Genius、IMDB、烂番茄、Wikidata、Wolfram Alpha、YouTube、GitHub等众多提供商。[等](https://docs.searxng.org/user/configured_engines.html#configured-engines) |
| [SerpAPI](https://serpapi.com/search-api) | `@agentic/serpapi` | `SerpAPIClient` | 围绕SerpAPI进行轻量化封装的Google搜索。 |
| [Serper](https://serper.dev) | `@agentic/serper` | `SerperClient` | 围绕Serper进行轻量化封装的Google搜索。 |
| [Slack](https://api.slack.com/docs) | `@agentic/slack` | `SlackClient` | 发送和接收Slack消息。 |
| [SocialData](https://socialdata.tools) | `@agentic/social-data` | `SocialDataClient` | 非官方的Twitter / X客户端(只读),比官方的Twitter API便宜得多。 |
| [Tavily](https://tavily.com) | `@agentic/tavily` | `TavilyClient` | 为LLMs量身定做的网页搜索API。 |
| [Twilio](https://www.twilio.com/docs/conversations/api) | `@agentic/twilio` | `TwilioClient` | Twilio会话API,用于发送和接收短信。 |
| [Twitter](https://developer.x.com/en/docs/twitter-api) | `@agentic/twitter` | `TwitterClient` | 基本的Twitter API方法,用于获取用户、推文和搜索最新推文。包括对计划感知的速率限制的支持。使用[Nango](https://www.nango.dev)进行OAuth支持。 |
| [天气](https://www.weatherapi.com) | `@agentic/weather` | `WeatherClient` | 基于位置的当前天气数据的基本访问。 |
| [Wikidata](https://www.wikidata.org/wiki/Wikidata:Data_access) | `@agentic/wikidata` | `WikidataClient` | 基本的Wikidata客户端。 |
| [维基百科](https://www.mediawiki.org/wiki/API) | `@agentic/wikipedia` | `WikipediaClient` | 维基百科页面搜索和摘要。 |
| [沃尔夫拉姆阿尔法](https://products.wolframalpha.com/llm-api/documentation) | `@agentic/wolfram-alpha` | `WolframAlphaClient` | 沃尔夫拉姆阿尔法LLM API客户端,用于回答计算、数学和科学问题。 |
请注意,您可以从`@agentic/stdlib`或它们的单独软件包中导入任何这些人工智能工具。 安装和导入它们的单独软件包更高效,但由于不那么方便,因此默认情况下不是这样的。
## 客户端设计理念
- 客户端应尽可能简洁
- 客户端应尽可能使用`ky`和`zod`
- 客户端应有一个强类型的TS DX
- 客户端应通过`@aiFunction(...)`装饰器公开选择方法
- `inputSchema` zod模式应尽可能简洁,其描述特意为使用LLMs而设计
- 客户端和AIFunctions应可以通过`AIFunctionSet`组装
- 客户端应支持所有主流TS AI SDK
## 待办事项
- 服务
- browserbase
- [brave search](https://brave.com/search/api/)
- [phantombuster](https://phantombuster.com)
- [apify](https://apify.com/store)
- perplexity
- valtown
- replicate
- huggingface
- 从[clay](https://www.clay.com/integrations)中拉取
- 从[langchain](https://github.com/langchain-ai/langchainjs/tree/main/langchain)中拉取
- 提供langchain `DynamicStructuredTool` 的转换器
- 从[nango](https://docs.nango.dev/integrations/overview)中拉取
- 从[activepieces](https://github.com/activepieces/activepieces/tree/main/packages/pieces/community)中拉取
- 类似[workgpt](https://github.com/team-openpm/workgpt)的通用openapi支持
- 组合工具/链/流程/runnables
- market maps
- 调查[autotool](https://github.com/run-llama/LlamaIndexTS/tree/main/packages/autotool)
- 调查[替代搜索引擎](https://seirdy.one/posts/2021/03/10/search-engines-with-own-indexes/)
- 调查[数据连接器](https://github.com/mendableai/data-connectors)
- 为单个提供者添加单元测试
## 贡献者
- [Travis Fischer](https://x.com/transitive_bs)
- [David Zhang](https://x.com/dzhng)
- [Philipp Burckhardt](https://x.com/burckhap)
- 以及所有[了不起的OSS贡献者](https://github.com/transitive-bullshit/agentic/graphs/contributors)!
## 许可证
MIT © [Travis Fischer](https://x.com/transitive_bs)
要保持最新或了解更多信息,请在Twitter上关注[@transitive_bs](https://x.com/transitive_bs)。