HamaWhiteGG / langchain-java

Java version of LangChain, while empowering LLM for Big Data.
Apache License 2.0
551 stars 107 forks source link

ChatGLMExample 测试报错 #125

Closed already closed 11 months ago

already commented 1 year ago

实际是两个问题: ··· 模型使用的是 ChatGLM2 使用的case 为:ChatGLMExample 1.withHistory(true),报错。

以下是postman 调试ChatGLM2 api.py post: {"prompt": "咖啡怎么样?","history": [

]}

response { "response": "咖啡是一种受欢迎的饮料,由于其香味和提神的效果而备受青睐。咖啡可以在不同的地方种植,每种地方的咖啡味道也不同,这使得咖啡成为一种有趣的饮品。总的来说,咖啡是一种好喝的饮料,但也要适量饮用,因为过量摄入咖啡因可能会导致不良影响。", "history": [ [ "咖啡怎么样?", "咖啡是一种受欢迎的饮料,由于其香味和提神的效果而备受青睐。咖啡可以在不同的地方种植,每种地方的咖啡味道也不同,这使得咖啡成为一种有趣的饮品。总的来说,咖啡是一种好喝的饮料,但也要适量饮用,因为过量摄入咖啡因可能会导致不良影响。" ] ], "status": 200, "time": "2023-10-12 19:42:16" }

ChatGlm2 api.py里 针对history 类型 是 List[Tuple[str, str]] def chat(self, tokenizer, query: str, history: List[Tuple[str, str]] = None, max_length: int = 8192, num_beams=1, do_sample=True, top_p=0.8, temperature=0.8, logits_processor=None, **kwargs): java 版本的 model处理history 回传数据应该是 [[,][,][,]] ···

  1. 在 python transformers 套件里,history参数在多轮对话场景下用于提供语言模型对话上下文。java ChatGLM 的history 是不是可以开个口子,灵活处理(适当的时候,做一下上下文的条数裁剪),一个session 多轮对话后,会不会因为history 过多而爆掉?
already commented 1 year ago

报错代码。 var llm = ChatGLM.builder() .endpointUrl("http://127.0.0.1:8000/") .temperature(0.95f).withHistory(true) .build() .init();

    var result1 = llm.predict("你好。");
    println(result1);

    var result2 = llm.predict("有点郁闷");
    println(result2);
already commented 1 year ago

官方的ChatGLM2 webui 里,每次对话请求,上下文都是用history 数组回传的。这个java 版本的代码ConversationChain 的example里上次对话全部都缝合在prompt 里了。这个有什么区别吗? 我最近在研究框架源代码,望加以下微信:zhouqinvv。自愿测试。:》

HamaWhiteGG commented 1 year ago

实际是两个问题:

··· 模型使用的是 ChatGLM2 使用的case 为:ChatGLMExample 1.withHistory(true),报错。 以下是postman 调试ChatGLM2 api.py post: {"prompt": "咖啡怎么样?","history": [

]}

response { "response": "咖啡是一种受欢迎的饮料,由于其香味和提神的效果而备受青睐。咖啡可以在不同的地方种植,每种地方的咖啡味道也不同,这使得咖啡成为一种有趣的饮品。总的来说,咖啡是一种好喝的饮料,但也要适量饮用,因为过量摄入咖啡因可能会导致不良影响。", "history": [ [ "咖啡怎么样?", "咖啡是一种受欢迎的饮料,由于其香味和提神的效果而备受青睐。咖啡可以在不同的地方种植,每种地方的咖啡味道也不同,这使得咖啡成为一种有趣的饮品。总的来说,咖啡是一种好喝的饮料,但也要适量饮用,因为过量摄入咖啡因可能会导致不良影响。" ] ], "status": 200, "time": "2023-10-12 19:42:16" }

ChatGlm2 api.py里 针对history 类型 是 List[Tuple[str, str]] def chat(self, tokenizer, query: str, history: List[Tuple[str, str]] = None, max_length: int = 8192, num_beams=1, do_sample=True, top_p=0.8, temperature=0.8, logits_processor=None, **kwargs): java 版本的 model处理history 回传数据应该是 [[,][,][,]] ··· 2. 在 python transformers 套件里,history参数在多轮对话场景下用于提供语言模型对话上下文。java ChatGLM 的history 是不是可以开个口子,灵活处理(适当的时候,做一下上下文的条数裁剪),一个session 多轮对话后,会不会因为history 过多而爆掉?

Great suggestion, I think it will definitely work (although I haven't tested it). There should be a size limit.

HamaWhiteGG commented 1 year ago

官方的ChatGLM2 webui 里,每次对话请求,上下文都是用history 数组回传的。这个java 版本的代码ConversationChain 的example里上次对话全部都缝合在prompt 里了。这个有什么区别吗? 我最近在研究框架源代码,望加以下微信:zhouqinvv。自愿测试。:》

I believe ChatGLM2 supports the history array parameter, and the ConversationChain in Langchain is stored in its own memory, making it more versatile and compatible with all large models.

HamaWhiteGG commented 1 year ago

@already I will add you on WeChat, looking forward to seeing your contributions.