• win10 Baichuan2-7B-Chat-4bits 上部署 百川2-7B-对话模型-4bits量化版


    搞了两天才搞清楚跑通 好难呢,个人电脑 win10 ,6GB显存

    个人感觉 生成速度很慢,数学能力不怎么行 没有ChatGLM2-6B 强,逻辑还行,

    要求: 

    我的部署流程

    1.下载模型

    ,下载所有文件 然后 放到新建的model目录

    https://huggingface.co/baichuan-inc/Baichuan2-7B-Chat-4bits/tree/main

    2.创建环境 安装依赖

    用conda创建一个新环境取名baichuan2

    安装 requirements.txt 模块依赖

    1. torch >=2.0.0
    2. deepspeed==0.9.2
    3. numpy==1.23.5
    4. sentencepiece==0.1.97
    5. xformers==0.0.19
    6. bitsandbytes==0.41.1
    7. accelerate
    8. colorama
    9. streamlit
    10. transformers_stream_generator
    11. cpm_kernels

    其他的.时间原因我都忘记了
    我的环境 的所有包如下你可以参考一下
     

    1. $ conda list
    2. # packages in environment at C:\Users\Administrator\.conda\envs\baichuan2:
    3. #
    4. # Name Version Build Channel
    5. absl-py 1.4.0 pypi_0 pypi
    6. accelerate 0.23.0 pypi_0 pypi
    7. addict 2.4.0 pypi_0 pypi
    8. aiofiles 23.1.0 pypi_0 pypi
    9. aiohttp 3.8.5 pypi_0 pypi
    10. aiosignal 1.3.1 pypi_0 pypi
    11. aliyun-python-sdk-core 2.13.36 pypi_0 pypi
    12. aliyun-python-sdk-kms 2.16.2 pypi_0 pypi
    13. altgraph 0.17.3 pypi_0 pypi
    14. appdirs 1.4.4 pypi_0 pypi
    15. async-timeout 4.0.2 pypi_0 pypi
    16. attrs 23.1.0 pypi_0 pypi
    17. bitsandbytes 0.41.1 pypi_0 pypi
    18. blas 1.0 mkl https://repo.anaconda.com/pkgs/main
    19. bzip2 1.0.8 h8ffe710_4 http://mirrors.ustc.edu.cn/anaconda/cloud/conda-forge
    20. ca-certificates 2023.01.10 haa95532_0 defaults
    21. cachetools 5.3.1 pypi_0 pypi
    22. certifi 2022.12.7 pypi_0 pypi
    23. cffi 1.15.1 pypi_0 pypi
    24. chardet 5.1.0 pypi_0 pypi
    25. charset-normalizer 3.1.0 pypi_0 pypi
    26. click 8.1.3 pypi_0 pypi
    27. colorama 0.4.6 pypi_0 pypi
    28. contourpy 1.1.0 pypi_0 pypi
    29. cpm-kernels 1.0.11 pypi_0 pypi
    30. crcmod 1.7 pypi_0 pypi
    31. cryptography 41.0.3 pypi_0 pypi
    32. cycler 0.11.0 pypi_0 pypi
    33. datasets 2.13.0 pypi_0 pypi
    34. diffusers 0.21.1 pypi_0 pypi
    35. dill 0.3.6 pypi_0 pypi
    36. einops 0.6.1 pypi_0 pypi
    37. exceptiongroup 1.1.1 pypi_0 pypi
    38. faker 8.8.1 pyhd3eb1b0_1 defaults
    39. ffmpy 0.3.0 pypi_0 pypi
    40. filelock 3.10.0 pypi_0 pypi
    41. fonttools 4.40.0 pypi_0 pypi
    42. frozenlist 1.3.3 pypi_0 pypi
    43. fsspec 2023.6.0 pypi_0 pypi
    44. gast 0.5.4 pypi_0 pypi
    45. google-auth 2.23.0 pypi_0 pypi
    46. google-auth-oauthlib 1.0.0 pypi_0 pypi
    47. grpcio 1.58.0 pypi_0 pypi
    48. h11 0.14.0 pypi_0 pypi
    49. huggingface-hub 0.17.1 pypi_0 pypi
    50. icetk 0.0.5 pypi_0 pypi
    51. idna 3.4 pypi_0 pypi
    52. importlib-metadata 6.8.0 pypi_0 pypi
    53. intel-openmp 2021.4.0 haa95532_3556 https://repo.anaconda.com/pkgs/main
    54. jieba 0.42.1 pypi_0 pypi
    55. jinja2 3.1.2 pypi_0 pypi
    56. jmespath 0.10.0 pypi_0 pypi
    57. jsonschema 4.17.3 pypi_0 pypi
    58. kiwisolver 1.4.4 pypi_0 pypi
    59. latex2mathml 3.76.0 pypi_0 pypi
    60. libffi 3.4.2 h8ffe710_5 http://mirrors.ustc.edu.cn/anaconda/cloud/conda-forge
    61. libsqlite 3.40.0 hcfcfb64_0 http://mirrors.ustc.edu.cn/anaconda/cloud/conda-forge
    62. libzlib 1.2.13 hcfcfb64_4 http://mirrors.ustc.edu.cn/anaconda/cloud/conda-forge
    63. linkify-it-py 2.0.2 pypi_0 pypi
    64. m2w64-gcc-libgfortran 5.3.0 6 https://repo.anaconda.com/pkgs/msys2
    65. m2w64-gcc-libs 5.3.0 7 https://repo.anaconda.com/pkgs/msys2
    66. m2w64-gcc-libs-core 5.3.0 7 https://repo.anaconda.com/pkgs/msys2
    67. m2w64-gmp 6.1.0 2 https://repo.anaconda.com/pkgs/msys2
    68. m2w64-libwinpthread-git 5.0.0.4634.697f757 2 https://repo.anaconda.com/pkgs/msys2
    69. markdown 3.4.3 pypi_0 pypi
    70. markdown-it-py 2.2.0 pypi_0 pypi
    71. markupsafe 2.1.2 pypi_0 pypi
    72. matplotlib 3.7.1 pypi_0 pypi
    73. mdtex2html 1.2.0 pypi_0 pypi
    74. mdurl 0.1.2 pypi_0 pypi
    75. mkl 2021.4.0 haa95532_640 https://repo.anaconda.com/pkgs/main
    76. mkl-service 2.4.0 py310h2bbff1b_0 https://repo.anaconda.com/pkgs/main
    77. mkl_fft 1.3.1 py310ha0764ea_0 https://repo.anaconda.com/pkgs/main
    78. mkl_random 1.2.2 py310h4ed8f06_0 https://repo.anaconda.com/pkgs/main
    79. modelscope 1.9.1 pypi_0 pypi
    80. mpmath 1.3.0 pypi_0 pypi
    81. ms-swift 1.0.0 pypi_0 pypi
    82. msys2-conda-epoch 20160418 1 https://repo.anaconda.com/pkgs/msys2
    83. multidict 6.0.4 pypi_0 pypi
    84. multiprocess 0.70.14 pypi_0 pypi
    85. mypy-extensions 1.0.0 pypi_0 pypi
    86. networkx 3.0 pypi_0 pypi
    87. numpy 1.24.2 pypi_0 pypi
    88. numpy-base 1.23.5 py310h04254f7_0 https://repo.anaconda.com/pkgs/main
    89. oauthlib 3.2.2 pypi_0 pypi
    90. openssl 3.1.0 hcfcfb64_0 http://mirrors.ustc.edu.cn/anaconda/cloud/conda-forge
    91. orjson 3.9.1 pypi_0 pypi
    92. oss2 2.18.1 pypi_0 pypi
    93. packaging 23.0 pypi_0 pypi
    94. pandas 2.0.3 pypi_0 pypi
    95. pefile 2023.2.7 pypi_0 pypi
    96. peft 0.5.0 pypi_0 pypi
    97. pillow 9.4.0 pypi_0 pypi
    98. pip 23.2.1 pypi_0 pypi
    99. platformdirs 3.10.0 pypi_0 pypi
    100. protobuf 4.24.3 pypi_0 pypi
    101. psutil 5.9.5 pypi_0 pypi
    102. pyarrow 13.0.0 pypi_0 pypi
    103. pyasn1 0.5.0 pypi_0 pypi
    104. pyasn1-modules 0.3.0 pypi_0 pypi
    105. pycparser 2.21 pypi_0 pypi
    106. pycryptodome 3.19.0 pypi_0 pypi
    107. pydantic 1.10.10 pypi_0 pypi
    108. pydub 0.25.1 pypi_0 pypi
    109. pygments 2.15.1 pypi_0 pypi
    110. pyinstaller 5.9.0 pypi_0 pypi
    111. pyinstaller-hooks-contrib 2023.1 pypi_0 pypi
    112. pyparsing 3.1.0 pypi_0 pypi
    113. pyre-extensions 0.0.29 pypi_0 pypi
    114. pyrsistent 0.19.3 pypi_0 pypi
    115. python 3.10.2 hcf16a7b_4_cpython http://mirrors.ustc.edu.cn/anaconda/cloud/conda-forge
    116. python-dateutil 2.8.2 pyhd3eb1b0_0 defaults
    117. python-multipart 0.0.6 pypi_0 pypi
    118. pytz 2023.3 pypi_0 pypi
    119. pywin32-ctypes 0.2.0 pypi_0 pypi
    120. pyyaml 6.0 pypi_0 pypi
    121. regex 2022.10.31 pypi_0 pypi
    122. requests 2.28.2 pypi_0 pypi
    123. requests-oauthlib 1.3.1 pypi_0 pypi
    124. rsa 4.9 pypi_0 pypi
    125. safetensors 0.3.3 pypi_0 pypi
    126. scipy 1.11.2 pypi_0 pypi
    127. semantic-version 2.10.0 pypi_0 pypi
    128. sentencepiece 0.1.97 pypi_0 pypi
    129. setuptools 68.2.2 pypi_0 pypi
    130. simplejson 3.19.1 pypi_0 pypi
    131. six 1.16.0 pyhd3eb1b0_1 https://repo.anaconda.com/pkgs/main
    132. sniffio 1.3.0 pypi_0 pypi
    133. sortedcontainers 2.4.0 pypi_0 pypi
    134. sqlite 3.40.0 hcfcfb64_0 http://mirrors.ustc.edu.cn/anaconda/cloud/conda-forge
    135. sympy 1.11.1 pypi_0 pypi
    136. tensorboard 2.14.0 pypi_0 pypi
    137. tensorboard-data-server 0.7.1 pypi_0 pypi
    138. text-unidecode 1.3 pyhd3eb1b0_0 defaults
    139. thulac 0.2.2 pypi_0 pypi
    140. tk 8.6.12 h8ffe710_0 http://mirrors.ustc.edu.cn/anaconda/cloud/conda-forge
    141. tokenizers 0.13.2 pypi_0 pypi
    142. tomli 2.0.1 pypi_0 pypi
    143. toolz 0.12.0 pypi_0 pypi
    144. torch 2.0.0+cu117 pypi_0 pypi
    145. torchvision 0.15.1 pypi_0 pypi
    146. tqdm 4.65.0 pypi_0 pypi
    147. transformers 4.33.2 pypi_0 pypi
    148. typing-extensions 4.7.0 pypi_0 pypi
    149. typing-inspect 0.9.0 pypi_0 pypi
    150. tzdata 2023.3 pypi_0 pypi
    151. uc-micro-py 1.0.2 pypi_0 pypi
    152. ucrt 10.0.22621.0 h57928b3_0 http://mirrors.ustc.edu.cn/anaconda/cloud/conda-forge
    153. unicodecsv 0.14.1 pypi_0 pypi
    154. unihan-etl 0.18.1 pypi_0 pypi
    155. urllib3 1.26.15 pypi_0 pypi
    156. uvicorn 0.22.0 pypi_0 pypi
    157. vc 14.3 hb6edc58_10 http://mirrors.ustc.edu.cn/anaconda/cloud/conda-forge
    158. vs2015_runtime 14.34.31931 h4c5c07a_10 http://mirrors.ustc.edu.cn/anaconda/cloud/conda-forge
    159. websockets 11.0.3 pypi_0 pypi
    160. werkzeug 2.3.7 pypi_0 pypi
    161. wheel 0.40.0 pyhd8ed1ab_0 http://mirrors.ustc.edu.cn/anaconda/cloud/conda-forge
    162. word2vec 0.9.4 py310h9909e9c_0 https://repo.anaconda.com/pkgs/main
    163. xformers 0.0.19 pypi_0 pypi
    164. xxhash 3.3.0 pypi_0 pypi
    165. xz 5.2.6 h8d14728_0 http://mirrors.ustc.edu.cn/anaconda/cloud/conda-forge
    166. yapf 0.40.1 pypi_0 pypi
    167. yarl 1.9.2 pypi_0 pypi
    168. zhon 1.1.5 pypi_0 pypi
    169. zipp 3.16.2 pypi_0 pypi

    3.运行代码

    下载代码包 解压 GitHub - baichuan-inc/Baichuan2: A series of large language models developed by Baichuan Intelligent Technology

    新建一个run.py文件,放到解压的源码文件夹,以及  model 目录也移到过去

    1. import torch
    2. from transformers import AutoModelForCausalLM, AutoTokenizer
    3. from transformers.generation.utils import GenerationConfig
    4. import os
    5. # 获取当前文件所在的目录路径
    6. current_dir = os.path.dirname(os.path.abspath(__file__))
    7. # 将当前目录和'model'连接起来,获得'model'文件夹的完整路径
    8. model_path = os.path.join(current_dir, 'model')
    9. print('model_path=', model_path)
    10. if __name__ == '__main__':
    11. tokenizer = AutoTokenizer.from_pretrained(model_path, use_fast=False, trust_remote_code=True)
    12. model = AutoModelForCausalLM.from_pretrained(model_path, device_map="auto", torch_dtype=torch.bfloat16, trust_remote_code=True)
    13. model.generation_config = GenerationConfig.from_pretrained(model_path)
    14. messages = []
    15. messages.append({"role": "user", "content": "解释一下“温故而知新”"})
    16. response = model.chat(tokenizer, messages)
    17. print(response)

    在创建一个run.bat文件

    1. call activate baichuan2
    2. python ./run.py
    3. pause

    双击run.bat 就运行模型了

    生成效果

    1. 你好
    2. AI:你好今天我能为您提供什么帮助?
    3. numbers由几个字母组成?
    4. AI:是由五个字母组成的单词。
    5. "numbers"这个字符串进行倒序输出:
    6. AI: 输出结果为:"dsna"
    7. 小明45元卖出一顶帽子,收到一张100元假钞,找零55元,帽子进货价15元一顶,如果小明不知道他收到的是一张假钞,请问小明亏了多少钱?
    8. AI: 首先,我们需要计算小明卖帽子的总收入。他收到了100元的假钞,所以实际上他收到的现金是90元(100 - 55 = 90)。然后,他以45元的价格卖出了这顶帽子,所以收入为45元。
    9. 现在我们来计算小明的亏损。他进货成本是一顶帽子的价格,即15元。他卖出的帽子收入是45元,进货成本也是15元,所以他实际亏损了(45 - 15)元,即30元。
    10. 改正语句:你到看的时一片精菜的说小,描了述小王在禛上遇道阿sir的故式。
    11. AI: 当你看到的时候,描述小王在桌子上遇到阿sir的情景。
    12. 51怎么计算得到6?
    13. AI: 你可以使用以下数学运算来从五个1中计算出6
    14. 1. 加法:将五个1相加,即 1 + 1 + 1 + 1 + 1 = 5。然后从结果中减去1(因为已经有一个1了),得到4。最后加上1,得到最终结果5 。所以,通过加法得到的答案是5
    15. 2. 减法:从六个数(6 = 5 + 1)中减去五个1,得到一个1。所以,通过减法得到的答案是1
    16. 3. 乘法:将五个1相乘,即 1 * 1 * 1 * 1 * 1 = 1。所以,通过乘法得到的答案是1
    17. 4. 除法:将六个数(6 = 5 + 1)除以五个1,得到一个1。所以,通过除法得到的答案是1
    18. 请注意,这些计算方法都得到了相同的答案:1。这意味着在五种情况下,你都可以通过将五个1相加或相乘来得到6
    19. 有一串彩珠,按23绿4黄的顺序依次排列,第600颗是什么颜色?
    20. AI:首先,我们需要找到这600个彩珠中的第600颗。因为每个周期有8个彩珠(23绿4黄),所以600个彩珠可以分为8个这样的周期。因此,我们只需将600除以8,得到75,即有75个完整的周期。
    21. 现在我们知道第600颗彩珠位于一个完整的周期中。这个周期的顺序是23绿4黄,所以我们可以通过以下步骤来确定第600颗彩珠的颜色 :
    22. 1. 首先,我们确定第600颗彩珠是否在红色区域。如果它在红色区域,那么它就是红色的;否则,它必须在绿色或黄色的区域。
    23. 2. 如果第600颗彩珠在红色区域,那么它是一个2红。由于我们有75个完整的周期,这意味着第600颗彩珠是这752红中的某一个。但是 ,我们不能直接确定它是第6002红,因为我们还需要知道每个周期内2红的顺序。
    24. 3. 为了确定第600颗彩珠是第几颗2红,我们需要计算752红在顺序上的位置。由于每个周期都有8个彩珠,所以每个2红占据了一个完整的周期的一半。因此,752红占据了75/2=37.5个完整周期。由于我们不能有半个周期,我们需要向上取整,这意味着实际上有38个完整周期包含2红。
    25. 4. 现在我们已经确定了第600颗彩珠是这382红中的某一个。要确定它是第几颗2红,我们需要计算382红在顺序上的位置。由于每个2红都占据了一个完整周期的半数,所以382红占据了38*2=76个完整周期的半数。由于每个周期有8个彩珠,所以382红占据了38/2=19 个完整周期的数量。
    26. 5. 最后,我们需要计算19个完整周期的顺序。由于每个周期都有8个彩珠,所以19个完整周期的数量等于19*8=152个彩珠。这意味着第600颗彩珠是这152个彩珠中的某一个。要确定它是第几颗彩珠,我们需要计算152个彩珠在顺序上的位置。由于每个彩珠都是一个单独的单 元,所以我们只需要计数即可。从0开始计数,第600颗彩珠的位置就是152
    27. 综上所述,第600颗彩珠是黄色。
    28. 列出最常见的20中水果名称
    29. AI:
    30. 1.苹果 (Apple)
    31. 2. 香蕉 (Banana)
    32. 3. 橙子 (Orange)
    33. 4. 葡萄 (Grape)
    34. 5. 西瓜 (Watermelon)
    35. 6. 柠檬 (Lemon)
    36. 7. 草莓 (Strawberry)
    37. 8. 菠萝 (Pineapple)
    38. 9. 樱桃 (Cherry)
    39. 10. 猕猴桃 (Kiwi)
    40. 11. 火龙果 (Dragon Fruit)
    41. 12. 柿子 (Fig)
    42. 13. 桃子 (Peach)
    43. 14. 李子 (Apricot)
    44. 15. 杏子 (Almond)
    45. 16. 石榴 (Pomegranate)
    46. 17. 木瓜 (Papaya)
    47. 18. 芒果 (Mango)
    48. 19. 蓝莓 (Blueberry)
    49. 20. 黑莓 (Blackberry)
    50. 用户:0 - 187
    51. 1 - 100
    52. 2 - 225
    53. 3 - 128
    54. 4 - 64
    55. 5 - 92
    56. 6 - 69
    57. 7 - 206
    58. 8 - 127
    59. 9 - 65
    60. 按次数从大到小排序
    61. ------------------------------------------------------------------------------
    62. AI:根据您提供的数据,我已经将它们按照次数从大到小排序:
    63. 1 - 100
    64. 2 - 225
    65. 3 - 128
    66. 4 - 64
    67. 5 - 92
    68. 6 - 69
    69. 7 - 206
    70. 8 - 127
    71. 9 - 65
    72. 0 - 187
    73. ==============================================================================
    74. 用户:7年前,妈妈的年龄是儿子的6倍,儿子今年12岁,妈妈今年几岁?
    75. ------------------------------------------------------------------------------
    76. AI:这是一个关于线性方程的问题。在这个问题中,我们需要找到一个方程来表示父母和孩子的年龄关系,然后通过给定的条件求解出母亲的年龄。
    77. 首先,我们知道儿子的年龄是12岁。7年前,他的年龄是5岁(因为7年前妈妈的年龄是他的6倍,所以那时她的年龄是 5 * 6 = 30岁)。现在,儿子已经12岁了,所以我们可以得出一个方程:
    78. 母亲的年龄 = 儿子的年龄 + 7
    79. ==============================================================================
    80. 用户:以“会心之乐”为题的600字作文
    81. ------------------------------------------------------------------------------
    82. AI:会心之乐
    83. 在这个快节奏的现代社会,人们往往被各种压力所困扰,生活的压力让我们忘记了如何去欣赏生活中的美好。然而,当我们学会去发现生活中的美好时,我们会发现一种叫做“会心之乐”的东西。它如同阳光般温暖人心,如同清泉般滋润心灵。
    84. 会心之乐,是一种发自内心的喜悦。它源于我们对生活的热爱,对自然的敬畏,对他人的关爱。当我们看到孩子天真烂漫的笑容时,我们会心一笑,这就是会心之乐;当我们看到一对恋人手牵手漫步在夕阳下时,我们会心一笑,这也是会心之乐。会心之乐,是一种简单而美好的情感,它让我们感受到生活的美好,让我们更加珍惜当下。
    85. 会心之乐,是一种心灵的慰藉。在这个纷繁复杂的世界里,我们往往会因为各种琐事而烦恼,但是当我们找到一种让自己放松的方式时,我们会心一笑,这就是会心之乐。无论是阅读一本好书,还是聆听一首美妙的歌曲,亦或是品尝一道美味的佳肴,都会让我们感受到会心之乐。这种快乐,让我们在面对困难时,更加坚定信心,让我们在疲惫时,更加热爱生活。
    86. 会心之乐,是一种成长的体验。成长的过程中,我们会遇到各种各样的挑战,但是当我们克服这些挑战时,我们会心一笑,这就是会心之乐。无论是学习一门新技能,还是完成一个艰巨的任务,我们都会在这个过程中感受到会心之乐。这种快乐,让我们更加珍惜每一个成长的时刻,让我们更加感激每一个陪伴我们的人。
    87. 会心之乐,是一种友谊的见证。在这个世界上,有一种感情叫做友谊,它如同阳光一般温暖人心。当我们与朋友分享喜悦,分担痛苦时,我们会心一笑,这就是会心之乐。这种快乐,让我们更加珍惜身边的朋友,让我们更加懂得彼此的陪伴。
    88. 总之,会心之乐是一种源自内心的喜悦,是一种心灵的慰藉,是一种成长的体验,是一种友谊的见证。它让我们更加热爱生活,更加珍惜当下,更加感激每一个陪伴我们的人。让我们学会去发现生活中的美好,去感受会心之乐,让我们的生活变得更加美好。

    GUI版本代码

    ,没有历史功能,懒得研究了

    1. import tkinter as tk
    2. import torch
    3. from transformers import AutoModelForCausalLM, AutoTokenizer
    4. from transformers.generation.utils import GenerationConfig
    5. import os
    6. # 获取当前文件所在的目录路径
    7. current_dir = os.path.dirname(os.path.abspath(__file__))
    8. # 将当前目录和'model'连接起来,获得'model'文件夹的完整路径
    9. model_path = os.path.join(current_dir, 'model')
    10. print('model_path=', model_path)
    11. tokenizer = AutoTokenizer.from_pretrained(model_path, use_fast=False, trust_remote_code=True)
    12. model = AutoModelForCausalLM.from_pretrained(model_path, device_map="auto", torch_dtype=torch.bfloat16, trust_remote_code=True)
    13. model.generation_config = GenerationConfig.from_pretrained(model_path)
    14. def write_file(text):
    15. with open(save_path, 'a', encoding='utf-8') as f:
    16. f.write(text + '\n')
    17. history=[]
    18. def answer(question):
    19. global history
    20. history=[]
    21. history.append({"role": "user", "content": question})
    22. response = model.chat(tokenizer, history)
    23. print(f"Response from model: {response}") # Add this line for debugging
    24. return response
    25. # 创建主窗口
    26. root = tk.Tk()
    27. root.title("Baichuan2")
    28. root.geometry("800x600+{}+{}".format(root.winfo_screenwidth() // 2 - 400, root.winfo_screenheight() // 2 - 350))
    29. # 创建输入框和滚动条
    30. input_frame = tk.Frame(root)
    31. clear_button = tk.Button(root, text="清空", width=6, height=3)
    32. def clear_output():
    33. global history
    34. output_text.delete("1.0", tk.END)
    35. history=[]
    36. clear_button.config(command=clear_output)
    37. clear_button.pack(side="right", padx=60)
    38. # 创建输出框和滚动条
    39. output_frame = tk.Frame(root)
    40. output_label = tk.Label(output_frame, text="AI:")
    41. output_text = tk.Text(output_frame, height=26, width=87, padx=6, pady=6)
    42. output_scrollbar = tk.Scrollbar(output_frame)
    43. output_text.config(yscrollcommand=output_scrollbar.set)
    44. output_scrollbar.config(command=output_text.yview)
    45. output_label.pack(side="left", pady=10)
    46. output_text.pack(side="left", pady=10)
    47. output_scrollbar.pack(side="right", fill="y")
    48. output_frame.pack()
    49. output_text.tag_config("user", foreground='green')
    50. output_text.tag_config("ai", background='orange', foreground='white')
    51. input_label = tk.Label(input_frame, text="用户:")
    52. input_text = tk.Text(input_frame, height=10, width=67, padx=6, pady=6)
    53. input_scrollbar = tk.Scrollbar(input_frame)
    54. input_text.config(yscrollcommand=input_scrollbar.set)
    55. input_scrollbar.config(command=input_text.yview)
    56. input_label.pack(side="left")
    57. input_text.pack(side="left", pady=10)
    58. input_scrollbar.pack(side="right", fill="y")
    59. input_frame.pack()
    60. def show_text():
    61. # 清空 Tkinter Text 组件中的文本
    62. # output_text.delete('1.0', 'end')
    63. question = input_text.get("1.0", "end-1c")
    64. result = answer(question)
    65. output_text.insert("end", "用户:" + question, "user")
    66. output_text.insert("end", "\n" + '-'*78)
    67. output_text.insert("end", "\nAI:" + result)
    68. output_text.insert("end", '\n'+"="*78)
    69. output_text.insert("end", "\n\n\n")
    70. # 滚动到最底部
    71. output_text.yview_moveto(1.0)
    72. input_text.delete('1.0', 'end')
    73. # 创建按钮
    74. button_frame = tk.Frame(root)
    75. button = tk.Button(button_frame, text="回答", command=show_text, width=6, height=3)
    76. # 响应回车键 绑定 事件
    77. root.bind("", lambda event: show_text())
    78. def copy():
    79. global text
    80. text.event_generate("<>")
    81. def cut():
    82. global text
    83. text.event_generate("<>")
    84. def paste():
    85. global text
    86. text.event_generate("<>")
    87. # 创建右键菜单
    88. menu = tk.Menu(root, tearoff=0)
    89. menu.add_command(label="复制", command=copy)
    90. menu.add_command(label="剪切", command=cut)
    91. menu.add_command(label="粘贴", command=paste)
    92. # 绑定鼠标右键(第一个文本框)
    93. def show_menu1(event):
    94. global text
    95. text = input_text
    96. menu.post(event.x_root, event.y_root)
    97. input_text.bind("", show_menu1)
    98. # 绑定鼠标右键(第二个文本框)
    99. def show_menu2(event):
    100. global text
    101. text = output_text
    102. menu.post(event.x_root, event.y_root)
    103. output_text.bind("", show_menu2)
    104. button.pack(side="right", padx=60)
    105. button_frame.pack()
    106. root.lift()
    107. # 运行主循环
    108. root.mainloop()

  • 相关阅读:
    极速接入,无损体验,FairGuard加固游戏包体实测
    Access注入---偏移注入 | Mysql注入---DNS注入 | MSSQL---反弹注入
    【MySQL库的操作】
    04 Vue属性配置
    怎么用excel管理固定资产
    【python】可视化
    让交互更加生动!有意思的鼠标跟随 3D 旋转动效
    mysql超级聚合with rollup
    汽车工业能效管理平台助力能源管理体系的建立和实施
    java毕业设计单车商城Mybatis+系统+数据库+调试部署
  • 原文地址:https://blog.csdn.net/u013628121/article/details/133148971