agentic 介绍
了解项目的详细信息和使用方法
介绍
这个项目的目标是创建一套标准的AI函数/工具,这些工具不仅适用于普通的TS使用,还能优化用于LLM应用,并且可以兼容所有主流的AI SDK(如LangChain、LlamaIndex、Vercel AI SDK、OpenAI SDK等)。
例如,像WeatherClient
这样的标准库客户端可以作为普通的TS类使用:
ts1import { WeatherClient } from '@agentic/stdlib' 2 3const weather = new WeatherClient() // 需要设置`WEATHER_API_KEY`环境变量 4 5const result = await weather.getCurrentWeather({ 6 q: 'San Francisco' 7}) 8console.log(result)
或者你可以将这些客户端用作基于LLM的工具,在这种情况下,LLM会决定何时以及如何调用底层函数。
通过适配器,这可以在所有主要的AI SDK上使用。以下是使用Vercel的AI SDK的示例:
ts1// sdk特定的导入 2import { openai } from '@ai-sdk/openai' 3import { generateText } from 'ai' 4import { createAISDKTools } from '@agentic/stdlib/ai-sdk' 5 6// sdk无关的导入 7import { WeatherClient } from '@agentic/stdlib' 8 9const weather = new WeatherClient() 10 11const result = await generateText({ 12 model: openai('gpt-4o'), 13 // 这是使用`@agentic/stdlib/ai-sdk`适配器的关键行 14 tools: createAISDKTools(weather), 15 toolChoice: 'required', 16 prompt: 'What is the weather in San Francisco?' 17}) 18 19console.log(result.toolResults[0])
你可以使用我们经过彻底测试的标准AI函数库与你喜欢的AI SDK,而无需编写任何胶水代码!
这是一个稍微复杂的示例,它使用了多个客户端并使用AIFunctionSet.pick
方法选择它们的部分功能:
ts1// sdk特定的导入 2import { ChatModel, createAIRunner } from '@dexaai/dexter' 3import { createDexterFunctions } from '@agentic/stdlib/dexter' 4 5// sdk无关的导入 6import { PerigonClient, SerperClient } from '@agentic/stdlib' 7 8async function main() { 9 // Perigon是一个新闻API,Serper是一个Google搜索API 10 const perigon = new PerigonClient() 11 const serper = new SerperClient() 12 13 const runner = createAIRunner({ 14 chatModel: new ChatModel({ 15 params: { model: 'gpt-4o', temperature: 0 } 16 }), 17 functions: createDexterFunctions( 18 perigon.functions.pick('search_news_stories'), 19 serper 20 ), 21 systemMessage: `你是一个有帮助的助手。请尽量简洁。` 22 }) 23 24 const result = await runner( 25 '总结最新的关于即将到来的美国大选的新闻。' 26 ) 27 console.log(result) 28}
在这里,我们向LLM暴露了两个功能,search_news_stories
(来自PerigonClient.searchStories
方法)和serper_google_search
(隐式来自SerperClient.search
方法)。
所有的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
集合进行操作。
安装
sh1npm install @agentic/stdlib
此包是仅ESM并且需要Node.js >= 18
或等效的环境(如bun、deno、CF workers等)。
[!注意] 所有重第三方导入都被隔离为可选对等依赖项,以使主
@agentic/stdlib
包尽可能轻量。
根据你要使用的AI SDK和工具,你还需要安装所需的对等依赖项。
服务
服务 | 客户端 | 描述 |
---|---|---|
Bing | BingClient | Bing网页搜索。 |
Calculator | calculator | 用于简单数学表达式的基本计算器。 |
Clearbit | ClearbitClient | 解析和丰富个人和公司数据。 |
Dexa | DexaClient | 回答 |
来自世界顶级播客的问题。 |
| Diffbot | DiffbotClient
| 网页分类和抓取;个人和公司数据丰富。 |
| E2B | e2b
| 托管的Python代码解释器沙盒,非常适合数据分析、灵活的代码执行和即时高级推理。 |
| Exa | ExaClient
| 针对LLM的网页搜索。 |
| Firecrawl | FirecrawlClient
| 网站抓取和清理。 |
| HackerNews | HackerNewsClient
| 官方的HackerNews API。 |
| Hunter | HunterClient
| 电子邮件查找器、验证器和丰富工具。 |
| Jina | JinaClient
| 干净的URL阅读器和网页搜索+URL顶级结果读取,提供慷慨的免费配额。 |
| Midjourney | MidjourneyClient
| 非官方的Midjourney生成图像客户端。 |
| Novu | NovuClient
| 发送通知(电子邮件、短信、应用内、推送等)。 |
| People Data Labs | PeopleDataLabsClient
| 个人和公司数据(开发中)。 |
| Perigon | PerigonClient
| 来自140,000多个来源的实时新闻API和网络内容数据。由AI结构化和丰富,为LLM优化。 |
| Polygon | PolygonClient
| 股票市场和公司财务数据。 |
| PredictLeads | PredictLeadsClient
| 深入的公司数据,包括筹资事件、招聘新闻、产品发布、使用的技术等信号。 |
| Proxycurl | ProxycurlClient
| 来自LinkedIn和Crunchbase的个人和公司数据。 |
| Scraper | ScraperClient
| 将URL抓取为干净的html/markdown/text内容(TODO:目前为封闭测试版)。 |
| Searxng | SearxngClient
| 开源元搜索引擎,能够跨多个提供者进行搜索,如Reddit、Google、Brave、Arxiv、Genius、IMDB、烂番茄、维基数据、Wolfram Alpha、YouTube、GitHub,等。 |
| SerpAPI | SerpAPIClient
| SerpAPI的Google搜索轻量级包装器。 |
| Serper | SerperClient
| Serper的Google搜索轻量级包装器。 |
| Slack | SlackClient
| 发送和接收Slack消息。 |
| SocialData | SocialDataClient
| 非官方的Twitter / X客户端(只读),比官方Twitter API便宜得多。 |
| Tavily | TavilyClient
| 针对LLM优化的网页搜索API。 |
| Twilio | TwilioClient
| Twilio对话API,用于发送和接收短信。 |
| Twitter | TwitterClient
| 获取用户、推文和搜索最近推文的基本Twitter API方法。支持计划感知的速率限制。使用Nango进行OAuth支持。 |
| WeatherAPI | WeatherClient
| 基于位置的当前天气数据。 |
| Wikipedia | WikipediaClient
| 维基百科页面搜索和摘要。 |
| Wolfram Alpha | WolframAlphaClient
| Wolfram Alpha LLM API客户端,用于回答计算、数学和科学问题。 |
请注意,许多这些客户端暴露了多个AI功能。
复合工具
SearchAndCrawl
AI SDK
- OpenAI SDK
- 不需要适配器;使用
AIFunctionSet.specs
或AIFunctionSet.toolSpecs
- 不需要适配器;使用
- Vercel AI SDK
import { createAISDKTools } from '@agentic/stdlib/ai-sdk'
- LangChain
import { createLangChainTools } from '@agentic/stdlib/langchain'
- LlamaIndex
import { createLlamaIndexTools } from '@agentic/stdlib/llamaindex'
- Firebase Genkit
import { createGenkitTools } from '@agentic/stdlib/genkit'
- Dexa Dexter
import { createDexterFunctions } from '@agentic/stdlib/dexter'
参见示例目录,了解如何使用每个这些适配器的示例。
客户端目标
- 客户端应尽量简洁
- 客户端应尽可能使用
ky
和zod
- 客户端应具有强类型TS DX
- 客户端应通过
@aiFunction(...)
装饰器暴露选择的方法inputSchema
zod schema应尽量简洁,描述专为LLM使用而设计
- 客户端和AIFunction应可通过
AIFunctionSet
组合 - 客户端应支持所有主要的TS AI SDK
- SDK适配器应尽量轻量,并作为
@agentic/stdlib
的可选对等依赖项
- SDK适配器应尽量轻量,并作为