Skip to content

动态的提示词

使用 nunjucks 可以动态更换提示词。

js
import nunjucks from "nunjucks";
const today = ref(new Date().toISOString().split("T")[0]);
const systemPrompt = ` 
今天的日期是 {{today}}

针对今天的日期、节日、节气等信息,整理出以下内容:

1. 今天的日期如果是特殊节日,介绍节日的文化和意义,以及节日的历史和背景。
2. 今天的日期如果是特殊节气,介绍节气的文化和意义,以及节气的历史和背景。
3. 今天的日期如果在历史上的重要事件中,介绍该事件的文化和意义,以及该事件的历史和背景。
` 

  const prompt = nunjucks.renderString(systemPrompt, {
    today: today.value,
  });


  const apiKey = import.meta.env.VITE_KIMI_API_KEY;
  const endpoint = 'https://api.moonshot.cn/v1/chat/completions';
  const model = 'moonshot-v1-8k';

  const headers = {
    'Content-Type': 'application/json',
    Authorization: `Bearer ${apiKey}`,
  };


  const response = await fetch(endpoint, {
    method: 'POST',
    headers: headers,
    body: JSON.stringify({
      model,
      messages: [
        { role:'system', content: prompt},
        { role: 'user', content: "介绍今天相关的知识" }
      ],
      stream: true,
    })
  });

  const reader = response.body?.getReader();
    const decoder = new TextDecoder();
    let done = false;
    let buffer = '';
    reply.value = '';

    while (!done) {
      const { value, done: doneReading } = await (reader?.read() as Promise<{ value: any; done: boolean }>);
      done = doneReading;
      const chunkValue = buffer + decoder.decode(value);

      const lines = chunkValue.split('\n').filter((line) => line.startsWith('data: '));

      for (const line of lines) {
        const incoming = line.slice(6);
        if(incoming === '[DONE]') {
          done = true;
          break;
        }
        try {
          const data = JSON.parse(incoming);
          const delta = data.choices[0].delta.content;
          if(delta) reply.value += delta;
        } catch(ex) {
          console.log(ex)
          buffer += incoming + '\n';
        }
      }
    }

可以让ai输出json格式,使用一个库优化输出格式

js
const systemPrompt = `
根据用户输入的主题,用**中文**输出以下JSON格式内容:

{
  "story_instruction": "",
  "the_whole_story_content": "",
  "the_whole_story_translate_to_en": "",
  "lessons": []
}
`;

Released under the MIT License.