langchain4j [BUG]assistant.chat(question)在Android上因DefaultPromptTemplateFactory中的正则表达式错误而失败,

flseospp  于 3个月前  发布在  Android
关注(0)|答案(3)|浏览(53)

描述bug

我正在使用Kotlin与助手一起工作。使用以下简单的代码:
`

val model: ChatLanguageModel = OpenAiChatModel.builder()
   . apiKey(API_KEY)
.logRequests(true)
.build()

    val assistant: Assistant = AiServices.builder(Assistant::class.java)
        .chatLanguageModel(model)
        .build()

    val question = "Tell me a joke"
    val answer = assistant.chat(question)
    println(answer)

`
当我在Kotlin的主方法中运行它时,它按预期工作,但是如果我在Android应用程序上运行完全相同的代码,我得到以下日志:

日志和堆栈跟踪

Process: com.example.myapplication, PID: 19711 java.lang.ExceptionInInitializerError at dev.langchain4j.model.input.DefaultPromptTemplateFactory.create(DefaultPromptTemplateFactory.java:18) at dev.langchain4j.model.input.DefaultPromptTemplateFactory.create(DefaultPromptTemplateFactory.java:14) at dev.langchain4j.model.input.PromptTemplate.<init>(PromptTemplate.java:62) at dev.langchain4j.model.input.PromptTemplate.<init>(PromptTemplate.java:51) at dev.langchain4j.model.input.PromptTemplate.from(PromptTemplate.java:126) at dev.langchain4j.service.DefaultAiServices.prepareUserMessage(DefaultAiServices.java:288) at dev.langchain4j.service.DefaultAiServices.access$200(DefaultAiServices.java:33) at dev.langchain4j.service.DefaultAiServices$1.invoke(DefaultAiServices.java:95) at java.lang.reflect.Proxy.invoke(Proxy.java:1006) at $Proxy3.chat(Unknown Source) at com.example.myapplication.MainActivity.onCreate(MainActivity.kt:51) at android.app.Activity.performCreate(Activity.java:8767) at android.app.Activity.performCreate(Activity.java:8745) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1519) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3928) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:4126) at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:108) at android.app.servertransaction.TransactionExecutor.executeNonLifecycleItem(TransactionExecutor.java:195) at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:157) at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:90) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2544) at android.os.Handler.dispatchMessage(Handler.java:107) at android.os.Looper.loopOnce(Looper.java:232) at android.os.Looper.loop(Looper.java:317) at android.app.ActivityThread.main(ActivityThread.java:8501) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:552) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:878) Caused by: java.util.regex.PatternSyntaxException: Syntax error in regexp pattern near index 10 \{\{(.+?)}} ^ at com.android.icu.util.regex.PatternNative.compileImpl(Native Method) at com.android.icu.util.regex.PatternNative.<init>(PatternNative.java:53) at com.android.icu.util.regex.PatternNative.create(PatternNative.java:49) at java.util.regex.Pattern.compile(Pattern.java:3533) at java.util.regex.Pattern.<init>(Pattern.java:1419) at java.util.regex.Pattern.compile(Pattern.java:921) at dev.langchain4j.model.input.DefaultPromptTemplateFactory$DefaultTemplate.<clinit>(DefaultPromptTemplateFactory.java:23) ... 28 more

重现问题
预期行为
请完成以下信息:

  • LangChain4j版本:0.31.0
  • 使用的LLM(s):ChatGPT
  • Java版本:8
  • Spring Boot版本(如适用):
    其他上下文

根据ChatGPT本身的说法:在独立Java应用程序(如主方法)中运行代码与在Android环境中运行代码之间的行为差异可能是由于底层正则表达式库及其对模式的处理之间的差异。
在Android中,正则表达式库可能比桌面或服务器环境中的标准Java正则表达式库更严格或具有不同的实现细节。这可能导致在一个环境中有效的模式在另一个环境中失败。
为了确保跨两个环境的兼容性,重要的是使用完全转义的模式并遵循正则表达式的使用最佳实践。修正后的模式应该是\\{\\{(.+?)\\}\\},而不是\{\{(.+?)}}

e4eetjau

e4eetjau1#

@garciaraul85 谢谢你!
这是一个重复的问题,请在PR中修复它。

vdzxcuhz

vdzxcuhz2#

PR 在哪一个分支上?

qoefvg9y

qoefvg9y3#

你可以通过fork这个仓库并使用任何分支(主分支或功能分支)来实现。

相关问题