You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Firebase Genkit:如何在JS代码中直接定义多轮对话历史并解决报错

在Firebase Genkit中直接用JS代码实现多轮对话历史

问题描述

我正在使用Firebase Genkit,单轮生成功能可正常运行:

import { generate } from '@genkit-ai/ai';

generate({
  model: 'googleai/gemini-1.5-flash-latest',
  prompt: 'You are a helpful AI assistant named Walt. Say hello.',
});

但尝试实现多轮对话历史时遇到问题。参考文档使用dotprompt编写代码后,出现TypeError: multiTurnPrompt.generate is not a function报错;按照建议改用promptRef后,又出现GenkitError: dotprompt: NOT_FOUND: Could not find 'nameOfPrompt.prompt' in the prompts folder.报错。我希望直接在JS代码中定义对话历史,而非使用外部prompt文件,请问该如何解决?

解决方案

无需依赖外部dotprompt文件,直接在generate函数中通过messages参数定义对话历史即可,这是Genkit原生支持的多轮对话实现方式:

import { generate } from '@genkit-ai/ai';

async function runMultiTurnConversation() {
  // 定义完整对话历史,按交互顺序排列
  const conversationHistory = [
    {
      role: 'system',
      content: 'You are a helpful AI assistant named Walt.',
    },
    {
      role: 'user',
      content: 'Hello, Walt!',
    },
    {
      role: 'assistant',
      content: 'Hello there! How can I assist you today?',
    },
    {
      role: 'user',
      content: 'What\'s the best way to start learning Firebase?',
    },
  ];

  const result = await generate({
    model: 'googleai/gemini-1.5-flash-latest',
    messages: conversationHistory, // 传入对话历史数组
  });

  console.log(result.text());
}

runMultiTurnConversation();

核心要点

  • 用messages参数替代单轮场景的prompt参数,数组元素需包含role和content字段
  • role可选值:system(设置助手身份/规则)、user(用户提问)、assistant(助手历史回复)
  • 对话历史需按实际交互顺序排列,模型会基于完整上下文生成下一轮回复
  • generate是异步函数,需用await获取结果

内容的提问来源于stack exchange,提问作者toto_tata

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 22:58:16