import {createOpenAI} from "@ai-sdk/openai"; import {Agent} from "@mastra/core/agent"; import {z} from "zod";
const llmProvider = createOpenAI({ apiKey: process.env.OPENAI_API_KEY, baseURL: process.env.OPENAI_BASE_URL, })
const llm = llmProvider('gpt-4o-2024-11-20')
export type Image = { alt_description: string urls: { regular: string raw: string } user: { first_name: string links: { html: string } } }
export type ImageResponse<T, K> = | { ok: true data: T } | { ok: false error: K }
const getRandomImage = async ({ query }: {query: string}) : Promise<ImageResponse<Image, string>> => { const page = Math.floor(Math.random() * 20) const order_by = Math.random() < 0.5 ? "relevant" : "latest"
try { const res = await fetch( `https://api.unsplash.com/search/photos?query=${query}&page=${page}&order_by=${order_by}`, { method: 'GET', headers: { Authorization: `Client-ID ${process.env.UNSPLASH_ACCESS_KEY}`, 'Accept-Version': 'v1' }, cache: 'no-store' } )
if (!res.ok) { return { ok: false, error: 'Failed to fetch image' } }
const data = (await res.json()) as { results: Array<Image> }
const randomNo = Math.floor(Math.random() * data.results.length)
return { ok: true, data: data.results[randomNo] as Image } }catch (err) { return { ok: false, error: "Error fetching image" } } }
const instructions = ` 你可以查看图像并确定它是否是一只鸟。 你也可以弄清楚这只鸟的种类和照片是在哪里拍的。 `
export const birdCheckerAgent = new Agent({ name: 'Bird Checker', instructions, model: llm })
const queries: string[] = ["wildlife", "feathers", "flying", "birds"] const randomQuery = queries[Math.floor(Math.random() * queries.length)]
const imageResponse = await getRandomImage({ query: randomQuery })
if (!imageResponse.ok) { console.log("Error fetching image", imageResponse.error) process.exit(1) }
console.log("Image URL:", imageResponse.data.urls.regular)
const response = await birdCheckerAgent.generate( [ { role: "user", content: [ { type: "image", image: new URL(imageResponse.data.urls.regular) }, { type: "text", text: "查看这张图片,让我知道它是否是一只鸟,以及这只鸟的学名,不需要任何解释。也可以用一两个高中生可以理解的短句来总结这张照片的位置" } ] } ], { output: z.object({ bird: z.boolean(), species: z.string(), location: z.string() }) } )
console.log('Result', response)
|