agentic

作者头像
项目作者transitive-bullshit

AI agent stdlib that works with any LLM and TypeScript AI SDK.

agentic 预览图

agentic 介绍

了解项目的详细信息和使用方法

介绍

这个项目的目标是创建一套标准的AI函数/工具,这些工具不仅适用于普通的TS使用,还能优化用于LLM应用,并且可以兼容所有主流的AI SDK(如LangChain、LlamaIndex、Vercel AI SDK、OpenAI SDK等)。

例如,像WeatherClient这样的标准库客户端可以作为普通的TS类使用:

ts
1import { 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的示例:

ts
1// 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方法选择它们的部分功能:

ts
1// 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.functionsserper.functions
  • AIFunctionsProvider - 通过.functions属性暴露AIFunctionSet的客户端类(如perigonserper
  • AIFunction - 单个函数(如perigon.functions.get('search_news_stories')serper.functions.get('serper_google_search')或通过createAIFunction实用函数直接创建的AI函数)

你可以传递任意数量的AIFunctionLike对象,并可以通过.pick.omit.get.map等方法将它们作为AIFunctionSet集合进行操作。

安装

sh
1npm install @agentic/stdlib

此包是仅ESM并且需要Node.js >= 18或等效的环境(如bun、deno、CF workers等)。

[!注意] 所有重第三方导入都被隔离为可选对等依赖项,以使主@agentic/stdlib包尽可能轻量。

根据你要使用的AI SDK和工具,你还需要安装所需的对等依赖项。

服务

服务客户端描述
BingBingClientBing网页搜索。
Calculatorcalculator用于简单数学表达式的基本计算器。
ClearbitClearbitClient解析和丰富个人和公司数据。
DexaDexaClient回答

来自世界顶级播客的问题。 | | 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.specsAIFunctionSet.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'

参见示例目录,了解如何使用每个这些适配器的示例。

客户端目标

  • 客户端应尽量简洁
  • 客户端应尽可能使用kyzod
  • 客户端应具有强类型TS DX
  • 客户端应通过@aiFunction(...)装饰器暴露选择的方法
    • inputSchema zod schema应尽量简洁,描述专为LLM使用而设计
  • 客户端和AIFunction应可通过AIFunctionSet组合
  • 客户端应支持所有主要的TS AI SDK
    • SDK适配器应尽量轻量,并作为@agentic/stdlib的可选对等依赖项
Stars
16.9k
Forks
2.2k
Watch
141
版本 7.2.0
MIT License
更新于 2024年11月21日
agents, ai, llms, openai
免责声明:本站大资源来自网络收集整理,小部分资源来自原创,如有侵权等,请联系处理。