kopia lustrzana https://github.com/transitive-bullshit/chatgpt-api
125 wiersze
3.9 KiB
Plaintext
125 wiersze
3.9 KiB
Plaintext
![]() |
---
|
|||
|
title: Usage
|
|||
|
---
|
|||
|
|
|||
|
## 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>
|
|||
|
|
|||
|
## Tools
|
|||
|
|
|||
|
### 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.
|