软件说明

  1. 这个软件本人是从零开始实现的聊天机器人。基于Ollama(PythonApi )+ Pyside,实现了聊天机器的基本功能,还有一些个性化的功能比如模型管理,敏感词过滤,个性化主题设置,头像设置等功能。在此开源出来与大家一起学期。
  2. 这个软件适合想开发私有LLM聊天机器人的用户,可以基于此软件方便的进行二次开发。也适合想体验如何从零开始实现一个LLM聊天机器人的用户。

软件demo演示

llm_chat_robot_release_v_1_0_0

llm_chat_robot_v1.0.0版本发布说明

  1. Ollama + 本地LLM + Pyside6,从零开始的实现本地LLM聊天机器人,
  2. 支持多轮对话,支持上下文记忆,Ollama模型管理等功能(模型的增删查改/运行/停止全部APP内完成)
    目前已经测试模型有:
    deepseek-r1:1.5b/deepseek-r1:7b/deepseek-r1:8b/llama3.2:3b/qwen2.5-coder:3b/phi4-mini:3.8b/mistral:7b
    针对不同的需求可以自由切换模型,比如要进行代码编写qwen2.5-coder:3b这种模型效果就会更好
    可以自由添加更多Ollama支持的模型
  3. 支持模型回复Markdown文本渲染/代码渲染/支持结果部分复制/全部复制
  4. 敏感词过滤,支持自定义敏感词库,支持敏感词替换
  5. 系统信息实时显示,Token速率实时显示, CPU/内存/GPU/模型信息实时显示
  6. UI个性化设置,多种主题设置/头像自定义/APP图标自定义
  7. 开放模型模型参数,可以自由修改测试不同模型参数,体验不同的效果,目前已经开放了以下参数:
options_chat:
     控制生成文本随机性的参数,也被称为“温度”参数。
     取值范围通常在 0 到 1 之间,部分模型支持更大范围。
     当值接近 0 时,模型倾向于选择概率最高的输出,结果更稳定、保守,回复更常规、准确。
     当值接近 1 或更大时,模型输出更具随机性和创造性,但可能会出现不太符合常理的内容。
    "temperature": 0.7,

     核采样概率,也叫“top - p 采样”。
     它是一个浮点数,取值范围一般在 0 到 1 之间。
     模型生成下一个词时,会根据词汇概率分布,筛选出概率累计和达到该值的最小词集,
     然后从这个词集中随机选一个词作为输出。这样可避免选择概率极低的词,同时保留一定随机性。
    "top_p": 0.9,

     设定模型生成文本的最大标记(token)数量。
     token 是自然语言处理中对文本进行切分后的基本单元,这个参数可控制回复的长度。
     如果设置得太小,回复可能不完整;设置得太大,可能会导致生成过长且不必要的内容。
    "num_predict": 200,

     重复惩罚参数,是一个大于 0 的浮点数。
     用于控制模型避免重复使用相同词汇或短语的程度。
     当值大于 1 时,模型会更努力避免重复;值越大,对重复的惩罚力度越强。
     若值接近 1,则模型对重复的限制相对较小。
    "repeat_penalty": 1.1,

     存在惩罚参数,为浮点数。
     它影响模型引入新话题或概念的倾向。
     值越高,模型越倾向于引入新的信息和话题,使回复更具扩展性;
     值越低,模型更专注于已有的话题,回复会更围绕当前讨论内容展开。
    "presence_penalty": 0.5,

     频率惩罚参数,是一个浮点数。
     与 repeat_penalty 类似,但更侧重于惩罚高频出现的词汇。
     它促使模型使用更多不同的词汇,让输出更加多样化,避免过度使用常见词汇。
    "frequency_penalty": 0.2,

     用于启用 Mirostat 自适应采样算法,该算法可控制模型输出的质量和连贯性。
     可设置为 1 或 2 来启用不同模式的 Mirostat 算法,不同模式在平衡输出质量和多样性上有不同策略。
    "mirostat": 2,

     Mirostat 算法中的学习率参数,是一个较小的浮点数。
     它决定了 Mirostat 算法调整输出质量的速度。
     值越大,算法调整速度越快,可能会使输出在质量和多样性上变化更剧烈;
     值越小,调整越缓慢、平稳。
    "mirostat_eta": 0.1,

     Mirostat 算法中的目标熵参数,为浮点数。
     熵可衡量输出的不确定性和多样性,该参数用于控制输出的多样性和质量的平衡。
     较高的值会使输出更具多样性,但可能牺牲一定的质量和连贯性;
     较低的值会使输出更稳定、连贯,但可能较为单一。
    "mirostat_tau": 5.0,

     随机数种子,是一个整数值。
     当设置了固定的 seed 值后,相同的输入在多次运行模型时会得到相同的输出结果。
     这对于调试和对比不同参数设置下的模型表现非常有用,可保证结果的可重复性。
    "seed": 42,

     停止条件列表,是一个字符串数组。
     当模型生成的内容中包含列表里的任意一个字符串时,模型会停止继续生成文本。
     可用于明确指定回复的结束标志,避免模型生成过长或不必要的内容。
    "stop": ["<|EndOfText|>", "###"],

     上下文窗口大小,是一个整数。
     它定义了模型在生成回复时能够考虑的最大标记(token)数量。
     较大的值能让模型考虑更多前文信息,有助于生成更连贯、有上下文感知的回复,但会增加计算资源消耗;
     较小的值则限制了模型可参考的信息范围。
    "n_ctx": 2048,

     指定用于推理的线程数量,是一个整数。
     增加线程数量可以并行处理计算任务,提高模型推理速度。
     但线程数量受机器 CPU 核心数限制,过多设置可能会导致系统资源竞争,反而降低性能。
    "num_thread": 4

options_context:
    response_mode 回应模式只能为chat或者generate
    chat模式:模型会根据用户输入历史上下文生成一个完整的回复,并返回给用户,聊天助手类应用
    generate模式:模型会根据用户当前输入上下文生成一个片段,并返回给用户,一问一答,简单回答些问题
    "response_mode": "chat",

    stream_on 是否开启流式输出,默认为false
    开启后,模型会逐个生成回复的token,并实时返回给用户,聊天助手类应用
    关闭后,模型会一次性生成完整的回复,并返回给用户,问答类应用
    "stream_on": true,

    save_context 是否保存上下文,默认为false
    开启后,模型会保存用户输入的历史上下文,并在后续的回复中考虑这些上下文信息
    关闭后,模型不会保存用户输入的历史上下文,每次回复都是独立的
    "save_context": true,

    save_context_length 保存上下文的长度,默认为-1不限制上下文长度,>0时限制上历史聊天上下文记录次数
    "save_context_length": -1,
    
    keep_alive 参数可以接受不同类型的值,具体含义可能因实现而异:
    浮点数:表示连接保持的时间(以秒为单位)。例如,设置为 600.0 意味着连接将保持活跃 600 秒,在这 600 秒内如果没有新的请求,连接会被关闭;若有新请求,连接会继续保持活跃。
    "keep_alive": 600,

    system_role 系统角色,默认值一个通用问答助手,你可以确定一个角色
    比如 "是一个幽默风趣的电影推荐师,喜欢用俏皮的语言交流。","我们现在讨论的是科幻电影,主要关注硬科幻题材。"
    "system_role_desc": "你是一个知识渊博的助手,能回答各种问题。"

源码下载链接

llm-chat-robot完整Python工程

软件的使用文档

在上面压缩包中的llm_chat_robot_v_1_0_0_使用说明.pdf,里面详细介绍了软件的使用方法及python代码如何运行。

大家有相关的问题,欢迎在评论留言,期待你们的反馈~

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐