• 阿斯蒂芬
    2023-10-20 来自广东
    笔记mark: 1.疑似纠错: 第二个代码示例后写道:【compute 函数开始执行。当它遇到 await asyncio.sleep(2) 时,它会暂停】 但是代码中是 await asyncio.sleep(0.5),休眠时长会影响最终程序的打印输出顺序; 后面花卉部分 【在 MyFlowerShopAsyncHandler 中,我们使用了 await asyncio.sleep(0.3) 】也与代码中的 await asyncio.sleep(0.5) 不一致; 如果属实,还是建议修改下,否则容易造成困惑 2. 自定义回调函数 代码报错问题 一开始直接使用老师的代码,未能获得流式响应的打印,出现报错: Retrying langchain.chat_models.openai.acompletion_with_retry.<locals>._completion_with_retry in 4.0 seconds as it raised APIConnectionError: Error communicating with OpenAI. 但是此时非流式的响应,是能够正常完成的; 折腾许久,定位到是openai代理的问题,但是流式响应是通过SSE协议,此时vpn似乎被绕过了,将vpn代理显示添加到 OPENAI_PROXY 环境变量后解决 3. 最后的 additional_interactions() 示例中,可以将 asynio.gather 的返回结果打印出来,能够看到每个任务使用的token数量,与最终的总数是一致的
    展开
    
    
  • 阿斯蒂芬
    2023-10-20 来自广东
    来交作业了: 思考题1: 在确保效果相同的三轮交互中,使用了其他记忆机制,并记录令牌使用情况(分别测试三次取范围值) ConversationBufferMemory: 1000 ~ 1500 ConversationBufferWindowMemory(k=2): 1200 ~ 1600 ConversationSummaryMemory: 2000 ~ 2500 ConversationSummaryBufferMemory(max_token_limt=300): 1000~1500 大致看也符合估算示意图第一阶段 0-5 interacitions 的走势,ConversationSummaryMemory 增长较快,其他几个增长速率较为一致 思考题2: 使用LLMChain的 run 方法也可以传递callback class MyCallBackHandler(BaseCallbackHandler): def on_llm_new_token(self, token: str, **kwargs) -> None: print(f"recv token: {token}") llm = ChatOpenAI(streaming=True) prompt = PromptTemplate.from_template("1 + {number} = ") chain = LLMChain(llm=llm, prompt=prompt) chain.run(number=2, callbacks=[MyCallBackHandler()]) 其实这个示例就是从老师的延伸阅读中“拿来”的,不知答对没
    展开
    
    