首页 > 其他分享 >基于Shiny的LLM对话框

基于Shiny的LLM对话框

时间:2024-09-04 20:50:20浏览次数:11  
标签:LLM 对话框 shiny ui chat input message Shiny

Shiny介绍    

   Shiny 最初是一个 R 语言的包,由 RStudio 开发,它的主要作用是允许用户创建交互式的 Web 应用程序而无需深入学习复杂的 Web 开发技术,我相信做R开发的同学基本都知道这个R包。以下是 Shiny 的一些具体作用:

  1. 简化 Web 开发:Shiny 提供了一种简便的方法来创建 Web 应用程序,这使得数据分析师和研究人员能够专注于他们的数据和分析,而不是 Web 开发的技术细节。
  2. 数据可视化:用户可以通过 Shiny 创建动态且交互式的图表和其他可视化元素,这些元素可以根据用户的输入实时更新。
  3. 数据探索:Shiny 可以帮助用户构建数据探索工具,允许用户通过筛选、排序等方式与数据互动,从而更好地理解数据集。
  4. 报告和展示:Shiny 可以用来制作交互式的报告和展示,使观众能够直接与数据分析的结果进行互动。
  5. 共享分析结果:通过 Shiny 所创建的应用程序可以部署到网上,这样就可以方便地与同事、客户或者公众分享数据分析的结果。
  6. 教育用途:教师可以利用 Shiny 制作教学工具,让学生通过实际操作来学习统计概念和方法。
  7. 商业智能:企业可以使用 Shiny 构建内部工具,以辅助决策过程,如销售预测、客户行为分析等。
  8. 科研合作:研究者之间可以通过 Shiny 共享数据处理和分析流程,提高科研效率和透明度。

        Shiny 是一种强大的工具,它让 用户能够轻松地将他们的分析成果转化为互动性强、易于理解和使用的 Web 应用程序。创建一个 Shiny 应用,开发者需要编写两个主要部分:UI 和 server 函数。UI 部分定义了应用程序的用户界面,包括各种控件和输出区域;而 server 部分则定义了应用程序的行为逻辑,决定了输入如何影响输出。

        但我们这里的主题是python,和R 有什么关系呢?没错,经官方的迭代,目前python也有shiny啦,也叫是pyshiny。下面是一个官方的 Shiny 仪表板,带有用于探索餐厅提示的视觉效果。

        下例是shiny的代码及界面的展示效果,代码非常简洁:

        相信大家经常百度到基于streamlit、Gradio、DASH等的与LLM(大模型语言)的对话框,那么本例是通过shiny开发一个与LLM的聊天对话框,以丰富LLM的对话方式。

基于Shiny的LLM对话框开发

        安装相关依赖包

!pip install shiny
!pip install openai

Shiny对话框代码

        将下列代码保存在一个chat_app.py文件中

from shiny import App, Inputs, Outputs, Session, render, ui
import os
import openai

app_ui = ui.page_sidebar(
    ui.sidebar(

        ui.input_select(
            "base_url",
            "Choose a base_url:",
            {
                'http://0.0.0.0:11434/v1': "Ollama",
                'http://0.0.0.0:4000': "Litellm",
            },
        ),
        ui.input_text("model_name","Model_Name" ,value='xxxx'),
        ui.input_password("api_key" ,"Api_Key" ,value='xxxx'),
    ),
    ui.chat_ui("chat"),
    fillable_mobile=True,
)

#input.base_url()
# Create a welcome message
welcome = ui.markdown(
    """
    Hi! This is a simple Shiny `Chat` UI. Enter a message below and I will
    simply repeat it back to you. For more examples, see this
    [folder of examples](https://github.com/posit-dev/py-shiny/tree/main/examples/chat).
    """
)


openai.default_headers = {"x-foo": "true"}

chat_messages=[]
def server(input, output, session):

    chat = ui.Chat(id="chat", messages=[welcome])
    # Define a callback to run when the user submits a message
    @chat.on_user_submit
    async def _():

        # Get the llm's config
        openai.api_key  =input.api_key()
        openai.base_url =input.base_url()
        model_name      =input.model_name()
        # Get the user's input
        user_answer_smg = chat.user_input()
        chat_messages.append({"role": "user", "content": user_answer_smg})
        # 使用OpenAI API生成回复
        response = openai.chat.completions.create(
            model=model_name,
            messages=chat_messages,
        )

        # 获取模型生成的消息
        assistant_message = response.choices[0].message.content
        #print(response.choices[0].message)


        chat_messages.append({"role": "assistant", "content": assistant_message})
        # 显示助手的回复
        #print(chat_messages)
        await chat.append_message(f"Assistant:\n{assistant_message}")

app = App(app_ui, server)
#shiny run chat_app.py

Shiny运行界面

        在终端执行Shiny运行命令:shiny run chat_app.py,在浏览器执行http://127.0.0.1:8000,可以看到运行的shiny对话框界面。

        左边是Openid的相关信息,国内的qwen、百川或者ollama的本地LLM都可以支持。填写完base_url、api_key、model_name完成后,我们句可以开始对话了。

        对话开始

标签:LLM,对话框,shiny,ui,chat,input,message,Shiny
From: https://blog.csdn.net/m0_38007743/article/details/141902933

相关文章

  • A-LLMRec论文阅读笔记
    LargeLanguageModelsmeetCollaborativeFiltering:AnEfficientAll-roundLLM-basedRecommenderSystem论文阅读笔记Abstract现存的问题:​ 最近的策略侧重于利用基于预训练模态编码器和大型语言模型(LLM)的用户/项目模态信息(如文本或图像)。尽管它们在冷场景下非常有效,但我......
  • 【大模型】使用 Xinference 部署本地模型,从GPU服务器到本地知识库搭建Dify【LLM大语言
    基本介绍基础信息GPU服务器获取基础安装基础信息安装显卡驱动配置显卡检查下载禁用nouveau系统自带驱动显卡驱动安装安装nvidia-docker下载配置验证Xinference部署docker部署官方文档模型下载glm-4-9b-chatEmbedding(向量)模型Rerank模型模型部署Embedding(向量)模型......
  • INSIDE: LLMS’ INTERNAL STATES RETAIN THE POWER OF HALLUCINATION DETECTION
    本文是LLM系列文章,针对《INSIDE:LLMS’INTERNALSTATESRETAINTHEPOWEROFHALLUCINATIONDETECTION》的翻译。INSIDE:LLMS的内部状态保留了幻觉检测的力量摘要1引言2幻觉检查的背景3方法4实验5相关工作6结论摘要知识幻觉引起了人们对部署的LLM的......
  • Monocle:一款基于LLM的二进制文件自然语言搜索工具
    关于MonocleMonocle是一款基于LLM的二进制文件自然语言搜索工具,该工具由LLM驱动,用于对已编译的目标二进制文件执行自然语言搜索,并查找加密代码、密码字符串和安全缺陷漏等。功能介绍Monocle是一款由大型语言模型支持的工具,用于对已编译的目标二进制文件执行自然语言搜索......
  • 九银十拿到大模型(LLM)offer,面试八股
    金九银十拿到大模型(LLM)offer,面试八股从事大模型的朋友在金J九银十拿到了一份不错的offer,面试十几家公司,通过了六家。好在分享了大佬总结的大模型方向面试的常见题目(含答案),短时间内过了一边,能针对的回答。有了面试框架更容易拿到offer,分享给大家,祝大家都能拿到自己心仪的o......
  • From "LLM" to "Agent"(从大语言模型到智能体)
    比尔·盖茨近期发表了一篇博客,其中谈到Agents将会是LLM的未来方向。LLM是一个Decoder,是Agent的大脑。LLM和Agent的区别,正如GPT-4和ChatGPT的区别。1Intro如图所示:Agents具有运用“Tools”的能力,可以调用外部api或沙盘来执行代码;Agents具有多种“Memory”的能力,短期记忆......
  • LLM-文心一言:线程窃取
    线程窃取,也称为工作窃取(Work-Stealing),是一种多线程和并行计算中的负载平衡策略。这种策略允许那些已经完成了自己任务的线程去“窃取”其他线程尚未完成的任务,从而尽可能均衡地利用所有可用的计算资源。以下是关于线程窃取(工作窃取)的详细解释:一、定义与原理定义:线程窃取是指当......
  • LLM大模型基础知识学习总结
    大家好,我是Edison。在这个已经被大模型包围的时代,不了解一点大模型的基础知识和相关概念,可能出去聊天都接不上话。刚好近期我也一直在用GPT和GitHubCopilot,也刚好对这些基础知识很感兴趣,于是学习了一下,做了如下的整理总结,分享与你!一句话描述GPTGPT:GenerativePre-TrainingTra......
  • 使用docker部署tensorrtllm推理大模型baichuan2-7b
    简介大模型的推理框架,我之前用过vllm和mindie。近期有项目要用tensorrtllm,这里将摸索的过程记录下,特别是遇到的问题。我的环境是Linux+rt3090准备docker环境本次使用docker镜像部署,需要从网上拉取:dockerpullnvcr.io/nvidia/tritonserver:24.08-trtllm-python-py3Th......
  • 【大模型论文】Seed-ASR:基于llm的语音识别理解不同的语音和上下文
    研究背景1.研究问题:这篇文章要解决的问题是如何在现代自动语音识别(ASR)模型中,利用大规模语言模型(LLM)来提高识别准确性,特别是在多领域、多语言、多口音和多种应用场景下。2.研究难点:该问题的研究难点包括:现有端到端模型在数据匹配场景下表现良好,但在处理复杂语境和多语言场景时逐渐接......