8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

如何在Python-Flask中编码的LLM ChatBot分开多个用户的对话上下文

JNC 7月前

86 0
事先表示歉意,因为这可能很容易解决。 我仍然是对编程和学习的新手。 我正在使用Python Flask,Openai的LLM和Llama Index Libr ...

事先进行聊天机器人,因为这可能很容易解决。

我仍然是对编程和学习的新手。

我正在使用Python Flask,Openai的LLM和Llama Index Library进行聊天机器人。

目前正在托管AWS。

现在,使用它的每个人,无论设备如何共享相同的聊天历史记录。

因此,如果一个人说他们的名字叫鲍勃,任何人都可以问“我叫什么名字?” 机器人将回答“鲍勃”。 我想做到这一点,以便每个人都有与机器人的聊天历史记录,即使他们在设备之间切换。 这样,聊天机器人可以记住与单个用户的对话,而不是将每个人的聊天混合在一起。

我知道LLM是无状态的,因此每个API调用应该是一个新调用,我知道我正在使用Llama索引传递聊天历史记录,但我不知道如何为每个设备/用户启动新的会话。

我已经使用不同的浏览器在本地机器上对AWS进行了测试,因此我不认为其Nginx。

ive还尝试了烧瓶会话库,但没有任何运气。

是否有人做过这样的事情或有任何有关从哪里开始的技巧?

帖子版权声明 1、本帖标题: 如何在Python-Flask中编码的LLM ChatBot分开多个用户的对话上下文
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由JNC在本站《python》版块原创发布, 转载请注明出处!
最新回复 (0)
  • 我在MacOS上创建并激活了一个Python Virtualenv。 我还安装了我的需求中列出的模块列表.txt 删除的版本是以下内容: Python-dotenv = ...

    我在我的MacOS上创建并激活了 python virtualenv 。

    我还安装了我的 unignts.txt

    中列出的模块列表

    删除的版本是以下内容:

    python-dotenv==1.0.1
    

    这也是阀门:

    ▶ pip freeze | grep -i dotenv
    python-dotenv==1.0.1
    (.venv) 
    

    但是,当我尝试运行程序时,其中一部分具有以下代码

    from dotenv import find_dotenv, load_dotenv
    

    我得到:

    ModuleNotFoundError: No module named 'dotenv'
    

    我缺少什么?

  • 当您执行Python脚本时,您是否可能没有激活Virtualenv?
  • 我正在尝试使用Selenium以无头模式录制视频 /音频。 据我所知,Selenium没有一种对视频录制负责的方法,但是我们可以制作一堆Screensh ...

    我正在尝试在 < / code < / code>模式下录制视频 /音频使用

    据我所知, selenium 没有对视频录制负责的方法,但是我们可以制作大量屏幕截图,然后根据图像生成视频,不是吗? 我已经尝试了这种方法,但是该死的慢... 我不再考虑使用这种方法。 此外,我找不到任何在录音中负责的 selenium 方法。 我的目标是录制音频,该音频正在 浏览器 ...例如来自 YouTube Video的音频(即使,当语音来自其他选项卡时),等等。

    我想暑假我已经尝试过的东西:

    selenium + pyautogui + pyaudio (我在不同的线程中运行它们) - 我真的很喜欢这种组合(结果足够好,只有在 模式),但是 pyautogui 无法记录 selenium

    另一件事,我认为使用是 playwright

    我确实相信, playwright 都能同时录制视频/音频(我录制了视频,但没有音频)。

    这里有人解决了这个问题吗?

    我需要一些提示。
  • 我有一个使用Flow_from_dataframe和Placs365 TensorFlow-version网络训练了224x224x3图像,用于二进制分类,这些网络合并以创建新模型。 当我必须

    时,我有一个 vgg19 使用 flow_from_dataframe ploces 365 tensorflow-version网络,用224x224x3图像进行二进制分类训练二进制分类。合并创建新模型。

    当我必须评估这个新模型时,我认为我需要一个 imagedatagenerator a flow_from_dataframe 才能访问 .csv 文件(总计400张图像),但是我有以下错误:

    ValueError: Exception encountered when calling layer 'vgg19' (type Functional).
    Input 0 of layer "block1_conv1" is incompatible with the layer: expected min_ndim=4, found ndim=2. Full shape received: (None, None)
    

    vgg19 正在接收与训练时相同的图像格式,所以我真的不明白为什么会发生这种情况。

    ploces365 模型的类:

    from __future__ import division, print_function
    import os
    import pickle
    import warnings
    import numpy as np
    
    from keras import backend as K
    from keras.layers import Input
    from keras.layers import Activation, Dense, Flatten
    from keras.layers import MaxPooling2D
    from keras.models import Model
    from keras.layers import Conv2D
    from keras.regularizers import l2
    from keras.layers import Dropout
    from keras.layers import GlobalAveragePooling2D
    from keras.layers import GlobalMaxPooling2D
    from keras.utils import get_source_inputs
    from keras.utils import get_file
    
    from keras.preprocessing import image
    from keras.applications.imagenet_utils import preprocess_input
    
    WEIGHTS_PATH = 'https://github.com/GKalliatakis/Keras-VGG16-places365/releases/download/v1.0/vgg16-places365_weights_tf_dim_ordering_tf_kernels.h5'
    WEIGHTS_PATH_NO_TOP = 'https://github.com/GKalliatakis/Keras-VGG16-places365/releases/download/v1.0/vgg16-places365_weights_tf_dim_ordering_tf_kernels_notop.h5'
    
    
    def VGG16_Places365(weights='places', 
                        input_shape=None,
                        pooling=None,
                        classes=365):
    
    
        img_input = Input(shape=input_shape)
    
    
        # Block 1
        x = Conv2D(filters=64, kernel_size=3, strides=(1, 1), padding='same',
                   kernel_regularizer=l2(0.0002),
                   activation='relu', name='block1_conv1_365')(img_input)
    
        x = Conv2D(filters=64, kernel_size=3, strides=(1, 1), padding='same',
                   kernel_regularizer=l2(0.0002),
                   activation='relu', name='block1_conv2_365')(x)
    
        x = MaxPooling2D(pool_size=(2, 2), strides=(2, 2), name="block1_pool_365", padding='valid')(x)
    
        # Block 2
        x = Conv2D(filters=128, kernel_size=3, strides=(1, 1), padding='same',
                   kernel_regularizer=l2(0.0002),
                   activation='relu', name='block2_conv1_365')(x)
    
        x = Conv2D(filters=128, kernel_size=3, strides=(1, 1), padding='same',
                   kernel_regularizer=l2(0.0002),
                   activation='relu', name='block2_conv2_365')(x)
    
        x = MaxPooling2D(pool_size=(2, 2), strides=(2, 2), name="block2_pool_365", padding='valid')(x)
    
        # Block 3
        x = Conv2D(filters=256, kernel_size=3, strides=(1, 1), padding='same',
                   kernel_regularizer=l2(0.0002),
                   activation='relu', name='block3_conv1_365')(x)
    
        x = Conv2D(filters=256, kernel_size=3, strides=(1, 1), padding='same',
                   kernel_regularizer=l2(0.0002),
                   activation='relu', name='block3_conv2_365')(x)
    
        x = Conv2D(filters=256, kernel_size=3, strides=(1, 1), padding='same',
                   kernel_regularizer=l2(0.0002),
                   activation='relu', name='block3_conv3_365')(x)
    
        x = MaxPooling2D(pool_size=(2, 2), strides=(2, 2), name="block3_pool_365", padding='valid')(x)
    
        # Block 4
        x = Conv2D(filters=512, kernel_size=3, strides=(1, 1), padding='same',
                   kernel_regularizer=l2(0.0002),
                   activation='relu', name='block4_conv1_365')(x)
    
        x = Conv2D(filters=512, kernel_size=3, strides=(1, 1), padding='same',
                   kernel_regularizer=l2(0.0002),
                   activation='relu', name='block4_conv2_365')(x)
    
        x = Conv2D(filters=512, kernel_size=3, strides=(1, 1), padding='same',
                   kernel_regularizer=l2(0.0002),
                   activation='relu', name='block4_conv3_365')(x)
    
        x = MaxPooling2D(pool_size=(2, 2), strides=(2, 2), name="block4_pool_365", padding='valid')(x)
    
        # Block 5
        x = Conv2D(filters=512, kernel_size=3, strides=(1, 1), padding='same',
                   kernel_regularizer=l2(0.0002),
                   activation='relu', name='block5_conv1_365')(x)
    
        x = Conv2D(filters=512, kernel_size=3, strides=(1, 1), padding='same',
                   kernel_regularizer=l2(0.0002),
                   activation='relu', name='block5_conv2_365')(x)
    
        x = Conv2D(filters=512, kernel_size=3, strides=(1, 1), padding='same',
                   kernel_regularizer=l2(0.0002),
                   activation='relu', name='block5_conv3_365')(x)
    
        x = MaxPooling2D(pool_size=(2, 2), strides=(2, 2), name="block5_pool_365", padding='valid')(x)
    
    
        inputs = img_input
    
        # Create model.
        model = Model(inputs, x, name='vgg16-places365')
    
        # load weights
        weights_path = get_file('vgg16-places365_weights_tf_dim_ordering_tf_kernels_notop.h5',
                                    WEIGHTS_PATH_NO_TOP,
                                    cache_subdir='models')
    
        model.load_weights(weights_path)
    
        return model
    
    

    预先训练的模型加载和其他方法:

    import pandas as pd
    from tensorflow.keras.preprocessing.image import ImageDataGenerator
    from tensorflow.keras.models import load_model
    from tensorflow.keras.optimizers import Adam
    from keras.metrics import Precision, Recall
    from tensorflow.keras import losses
    
    model_vgg16_places365 = VGG16_Places365(weights='places', input_shape=(224, 224, 3))
    
    def valid_generator(target_image_size, valid_dataset, valid_images_location):
     valid_data_gen = ImageDataGenerator(rescale=1./255)
     batch_size = 32
     valid_generator_1 = valid_data_gen.flow_from_dataframe(
           target_size=target_image_size,
           dataframe=valid_dataset,
           directory=valid_images_location,
           x_col="id",
           y_col="T1",
           batch_size=batch_size
       )
    
     valid_generator_2 = valid_data_gen.flow_from_dataframe(
           target_size=target_image_size,
           dataframe=valid_dataset,
           directory=valid_images_location,
           x_col="id",
           y_col="T1",
           batch_size=batch_size
       )
    
     custom_generator = zip(valid_generator_1, valid_generator_2)
    
     return custom_generator
    
    vgg19_model_location = 'vgg19_trained.keras'
    vgg19_model = load_model(vgg19_model_location)
    
    combined_model = Model(inputs=[model_vgg16_places365.input, vgg19_model.input], outputs=vgg19_model.output)
    
    combined_model.compile(loss=losses.BinaryCrossentropy(),
                    optimizer=Adam(learning_rate=0.0001),
                    metrics=
                     ['accuracy',
                      Precision(),
                      Recall()])
    
    valid_dataset = pd.read_csv('valset.csv')
    valid_images_location = 'val-images/'
    target_image_size = (224,224)
    evaluation = combined_model.evaluate(valid_generator(target_image_size, valid_dataset, valid_images_location))
    
  • 下面的代码有两个类,我正在尝试更新Child1类的父类变量。 班级父母: def __init __(自我): self.shared_variable =“我是共享

    下面的代码有两个类,我正在尝试从 child> child1 类更新父类变量。

    class Parent:
        def __init__(self):
            self.shared_variable = "I am a shared variable"
    
    class Child1(Parent):
        def __init__(self):
            super().__init__()
    
        def change_variable(self, new_value):
            self.shared_variable = new_value
    
    class Child2(Parent):
        def __init__(self):
            super().__init__()
    
    # Example usage:
    child1_instance = Child1()
    child2_instance = Child2()
    
    print(child1_instance.shared_variable)  # Initial value
    
    child1_instance.change_variable("New value from Child1")
    
    print(child2_instance.shared_variable)  # Updated value accessed by Child2
    

    但是,在使用 child> child1_instance 更新 shared_variable 的值之后, child> Child2_instance 显示的输出仍然相同。

    我该如何纠正这个?

    所需的输出为:

    I am a shared variable
    New value from Child1
    
  • 仅以变量的名称“共享”并不能使它共享! 这是一个普通的实例属性,为每个实例分别存储
  • @Jasonharper:您能提供一个例子吗
  • 您想这样做是什么? 在我的头顶上,我想不出任何理由从子班上修改父班。 当心
  • Vika 7月前 0 只看Ta
    引用 10
    这似乎是一个
  • 引用 11
    一个使用的变量
  • 谢谢您的回答。 您能提供完整的代码吗
  • @prateekdaniels这个答案确切地说明了什么问题以及如何修复它。 您有澄清的问题吗?
  • @prateek我们没有完整的解决方案,因为目前尚不清楚您要完成的工作。 查看我对您的问题以及Hai Vu的评论。 并注意Blckknght写道:“我怀疑[这是您所追求的。”
  • 引用 15
    值得一提
返回
作者最近主题: