kopia lustrzana https://github.com/transitive-bullshit/chatgpt-api
123 wiersze
3.9 KiB
Markdown
123 wiersze
3.9 KiB
Markdown
---
|
||
title: Usage
|
||
---
|
||
|
||
## TS Tool Usage
|
||
|
||
Agentic clients like `WeatherClient` can be used as normal TS classes:
|
||
|
||
```ts
|
||
import { WeatherClient } from '@agentic/stdlib'
|
||
|
||
// Requires `process.env.WEATHER_API_KEY` (free from weatherapi.com)
|
||
const weather = new WeatherClient()
|
||
|
||
const result = await weather.getCurrentWeather({
|
||
q: 'San Francisco'
|
||
})
|
||
console.log(result)
|
||
```
|
||
|
||
## LLM Tool Usage
|
||
|
||
Or you can use these clients as **LLM-based tools** where the LLM decides when and how to invoke the underlying functions for you.
|
||
|
||
This works across all of the major AI SDKs via adapters. Here's an example using [Vercel's AI SDK](https://github.com/vercel/ai):
|
||
|
||
```ts
|
||
// sdk-specific imports
|
||
import { openai } from '@ai-sdk/openai'
|
||
import { generateText } from 'ai'
|
||
import { createAISDKTools } from '@agentic/ai-sdk'
|
||
|
||
// sdk-agnostic imports
|
||
import { WeatherClient } from '@agentic/stdlib'
|
||
|
||
const weather = new WeatherClient()
|
||
|
||
const result = await generateText({
|
||
model: openai('gpt-4o-mini'),
|
||
// this is the key line which uses the `@agentic/ai-sdk` adapter
|
||
tools: createAISDKTools(weather),
|
||
toolChoice: 'required',
|
||
prompt: 'What is the weather in San Francisco?'
|
||
})
|
||
|
||
console.log(result.toolResults[0])
|
||
```
|
||
|
||
You can use our standard library of thoroughly tested AI functions with your favorite AI SDK – without having to write any glue code!
|
||
|
||
### Multiple Tool Usage via AIFunctionLike
|
||
|
||
Here's a slightly more complex example which uses multiple clients and selects a subset of their functions using the `AIFunctionSet.pick` method:
|
||
|
||
```ts
|
||
// sdk-specific imports
|
||
import { ChatModel, createAIRunner } from '@dexaai/dexter'
|
||
import { createDexterFunctions } from '@agentic/dexter'
|
||
|
||
// sdk-agnostic imports
|
||
import { PerigonClient, SerperClient } from '@agentic/stdlib'
|
||
|
||
async function main() {
|
||
// Perigon is a news API and Serper is a Google search 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: 'You are a helpful assistant. Be as concise as possible.'
|
||
})
|
||
|
||
const result = await runner(
|
||
'Summarize the latest news stories about the upcoming US election.'
|
||
)
|
||
console.log(result)
|
||
}
|
||
```
|
||
|
||
Here we've exposed 2 functions to the LLM, `search_news_stories` (which comes from the `PerigonClient.searchStories` method) and `serper_google_search` (which implicitly comes from the `SerperClient.search` method).
|
||
|
||
All of the SDK adapters like `createDexterFunctions` accept very flexible `AIFunctionLike` objects, which include:
|
||
|
||
- `AIFunctionSet` - Sets of AI functions (like `perigon.functions.pick('search_news_stories')` or `perigon.functions` or `serper.functions`)
|
||
- `AIFunctionsProvider` - Client classes which expose an `AIFunctionSet` via the `.functions` property (like `perigon` or `serper`)
|
||
- `AIFunction` - Individual functions (like `perigon.functions.get('search_news_stories')` or `serper.functions.get('serper_google_search')` or AI functions created directly via the `createAIFunction` utility function)
|
||
|
||
You can pass as many of these `AIFunctionLike` objects as you'd like and you can manipulate them as `AIFunctionSet` sets via `.pick`, `.omit`, `.get`, `.map`, etc.
|
||
|
||
## AI SDKs
|
||
|
||
<CardGroup cols={2}>
|
||
<Card title='Vercel AI SDK' href='/sdks/ai-sdk'>
|
||
Using Agentic with the Vercel AI SDK.
|
||
</Card>
|
||
|
||
<Card title='LangChain' href='/sdks/langchain'>
|
||
Using Agentic with LangChain.
|
||
</Card>
|
||
|
||
<Card title='LlamaIndex' href='/sdks/llamaindex'>
|
||
Using Agentic with LlamaIndex.
|
||
</Card>
|
||
|
||
<Card title='Firebase Genkit' href='/sdks/genkit'>
|
||
Using Agentic with Genkit.
|
||
</Card>
|
||
|
||
<Card title='Dexa Dexter' href='/sdks/dexter'>
|
||
Using Agentic with Dexter.
|
||
</Card>
|
||
|
||
<Card title='OpenAI' href='/sdks/openai'>
|
||
Using Agentic with OpenAI directly.
|
||
</Card>
|
||
</CardGroup>
|