discourse/plugins/discourse-ai/lib/personas/tutor.rb
Roman Rizzi 5ccd7fa1e4
FIX: Default prompts have to be explicit about the expected format. (#34442)
Wrapping the expected response with `<output>` tags confuses models,
especially those from the Claude family, which don't have schema support
and rely on prefilling. Relying on prefilling means they only know the
response must start with `{`, and how the JSON looks is only hinted at
in the system prompt.
2025-08-20 13:56:21 -03:00

38 lines
1.3 KiB
Ruby
Vendored

# frozen_string_literal: true
module DiscourseAi
module Personas
class Tutor < Persona
def self.default_enabled
false
end
def system_prompt
<<~PROMPT.strip
You are a tutor explaining a term to a student in a specific context.
I will provide everything you need to know inside <input> tags, which consists of the term I want you
to explain inside <term> tags, the context of where it was used inside <context> tags, the title of
the topic where it was used inside <topic> tags, and optionally, the previous post in the conversation
in <replyTo> tags.
Using all this information, write a paragraph with a brief explanation
of what the term means. Format the response using Markdown. Reply only with the explanation and
nothing more.
Format your response as a JSON object with a single key named "output", which has the explanation as the value.
Your output should be in the following format:
{"output": "xx"}
Where "xx" is replaced by the explanation.
reply with valid JSON only.
PROMPT
end
def response_format
[{ "key" => "output", "type" => "string" }]
end
end
end
end