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>
 |