langchain4j [功能]在SystemMessage中添加AiServices返回类型的格式说明,而不是UserMessage,

pw9qyyiw  于 3个月前  发布在  其他
关注(0)|答案(3)|浏览(42)

在LangChain4j版本0.30.0(Quarkus集成0.11.0)中,当让一个AiService返回特定类型时,例如List,将使LLM使用正确格式的指令添加到UserMessage中,而不是SystemMessage中,如下所示:

[{"role":"system",
"content":"将用户反馈分成处理相似主题的字面用户文本的连贯部分,然后分别处理。
如果用户在反馈的多个部分中对待同一个主题,请确保将它们放在一起。如果反馈只关于一个主题,请只返回一个项目。
"},
{"role":"user",
"content":"great food!**
You must put every item on a separate line.**"}]
(在这个例子中,我指定了SystemMessage,'**
You must put every item on a separate line.**'被LangChain4j添加了。
通过将此指令添加到UserMessage中,一半的时间,模型会返回两个反馈项而不是预期的一个:

  1. great food!
  2. You must put every item on a separate line.
    我认为这可以通过将指令作为SystemMessage的最后一部分来解决。
    我不确定这如何与内存相互作用,尽管我认为AiServices返回字符串之外的java对象的典型用例是它们没有内存,如果有的话,每个答案都将符合SystemMessage指令中指定的形式,所以我希望这能正常工作。
    对于返回POJOs的AiServices,它应该以JSON格式回答的也是附加到UserMessage上,而不是SystemMessage上。
nwnhqdif

nwnhqdif2#

你好,@LizeRaes !感谢你的回复!你是否测试过在系统消息中设置指令是否更好用?

shstlldc

shstlldc3#

刚刚使用与上述相同的示例进行了测试,但在SystemMessage(没有AiService)的末尾添加了“您必须将每个项目放在单独的一行”:
在多个项目的情况下,结果是正确的,模型返回例如:

  • 美食!
  • 尽管房间有点冷

在单个项目(UserMessage '美食!')的情况下,它完全表现得不正确,模型返回多次:
感谢您对食物的正面反馈!
我可能可以以某种方式提示它做正确的事情。我认为在SystemMessage的末尾添加“您必须将每个项目放在单独的一行”通常不会引起问题(但将其添加到UserMessage中会)。无论如何,如果可以在自动LangChain4j添加之前或之后覆盖或连接某些内容,那将是很棒的。
当接触#904的代码时,可能会相对容易解决。
相关地,我在我们的教程示例中测试了TextUtils summarise method,将n设置为1。它一直返回2到4个项目,但不是1个。我在实验室期间偶尔观察到类似的问题,它会返回2个项目点而不是3个(例外情况)。绝对gpt-3.5似乎在仅返回一个项目方面很挣扎。

相关问题