Firebase Genkit 为使用 LLM 生成内容提供了一个简单的接口。
模型
Firebase Genkit 中的模型是库和抽象,可让您访问各种 Google 和非 Google LLM。
模型针对可观测性进行了全面插桩,并附带 Genkit 开发者界面提供的工具集成,您可以使用模型运行程序试用任何模型。
在 Genkit 中使用模型时,首先需要配置 希望合作模型配置由插件系统执行。在 在此示例中,您要配置 Vertex AI 插件,该插件可为 Gemini 提供 模型。
import { configureGenkit } from '@genkit-ai/core';
import { firebase } from '@genkit-ai/firebase';
import { vertexAI } from '@genkit-ai/vertexai';
configureGenkit({
plugins: [vertexAI()],
});
要使用插件提供的模型,您可以通过名称(例如
'vertexai/gemini-1.5-flash'
)或某些插件会导出模型引用对象,
提供有关模型功能和选项的额外类型信息。
import { gemini15Flash } from '@genkit-ai/vertexai';
支持的模型
Genkit 通过其插件系统提供模型支持。以下插件 获得正式支持:
插件 | 模型 |
---|---|
Google 生成式 AI | Gemini Pro、Gemini Pro Vision |
Google Vertex AI | Gemini Pro、Gemini Pro Vision、Gemini 1.5 Flash、Gemini 1.5 Pro、Imagen2 |
Ollama | 许多本地模特,包括 Gemma、Llama 2、Mistral 等 |
如需了解设置和使用信息,请参阅各个插件的文档。此外,还有
提供了各种由社区支持的模型,您可以通过
在 npmjs.org 上搜索以 genkitx-
开头的软件包。
如何生成内容
generate
是用于处理模型的辅助函数。
如需仅调用模型,请使用以下代码:
import { generate } from '@genkit-ai/ai';
import { gemini15Flash } from '@genkit-ai/vertexai';
(async () => {
const llmResponse = await generate({
model: gemini15Flash,
prompt: 'Tell me a joke.',
});
console.log(await llmResponse.text());
})();
您可以为该模型传入各种模型选项,包括指定 自定义模型。
const response = await generate({
model: gemini15Flash,
prompt,
config: {
temperature: 1,
stopSequences: ['abc'],
},
});
如果模型支持多模态输入,您可以将图片作为输入传入:
const result = await generate({
model: gemini15Flash,
prompt: [
{ text: 'describe the following image:' },
{ media: { url: imageUrl, contentType: 'image/jpeg' } },
],
});
或者通过本地文件:
const result = await generate({
model: gemini15Flash,
prompt: [
{ text: 'describe the following image:' },
{
data: {
url: fs.readFileSync(__dirname + '/image.jpeg', {
encoding: 'base64',
flag: 'r',
}),
contentType: 'image/jpeg',
},
},
],
});
工具和函数调用
Model
还支持工具和函数调用。工具支持取决于
特定模型。
const myTool = action(
{
name: 'myJoke',
description: 'useful when you need a joke to tell.',
inputSchema: z.object({ subject: z.string() }),
outputSchema: z.string(),
},
async (input) => 'haha Just kidding no joke! got you'
);
const llmResponse = await generate({
model: gemini15Flash,
prompt: 'Tell me a joke.',
tools: [myTool],
config: {
temperature: 0.5,
},
});
这将自动调用工具,以便执行用户提示。
您可以指定 returnToolRequests: true
来手动控制工具调用。
const llmResponse = await generate({
model: gemini15Flash,
prompt: 'Tell me a joke.',
tools: [myTool],
returnToolRequests: true,
config: {
temperature: 0.5,
},
});
添加检索器上下文
检索器中的文档可以直接传递到 generate
以提供
依据背景:
const docs = await companyPolicyRetriever({ query: question });
await generate({
model: gemini15Flash,
prompt: `Answer using the available context from company policy: ${question}`,
context: docs,
});
文档上下文会自动附加到提示内容中 发送给模型。
消息历史记录
Genkit 模型支持维护发送到模型的消息及其回答的历史记录,您可以使用该历史记录来打造互动式体验,例如聊天机器人。
如需根据模型响应生成消息历史记录,请调用 toHistory()
方法:
let response = await generate({
model: gemini15Flash,
prompt: "How do you say 'dog' in French?",
});
let history = response.toHistory();
您可以将此历史记录序列化并将其保存在数据库或会话存储空间中。
然后,在将来调用 generate()
时传递历史记录和提示:
response = await generate({
model: gemini15Flash,
prompt: 'How about in Spanish?',
history,
});
history = response.toHistory();
如果您使用的模型支持 system
角色,则可以使用初始
history 设置系统消息:
let history: MessageData[] = [
{ role: 'system', content: [{ text: 'Talk like a pirate.' }] },
];
let response = await generate({
model: gemini15Flash,
prompt: "How do you say 'dog' in French?",
history,
});
history = response.toHistory();
流式响应
Genkit 支持通过 generateStream()
方法对模型响应进行分块流式传输:
// import { generateStream } from '@genkit-ai/ai';
const { response, stream } = await generateStream({
model: gemini15Flash,
prompt: 'Tell a long story about robots and ninjas.',
});
for await (const chunk of stream()) {
console.log(chunk.text());
}
// you can also await the full response
console.log((await response()).text());