基于Shiny的LLM对话框

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 仪表板,带有用于探索餐厅提示的视觉效果。

 
1d3ce7d1c17848edb056e17a50007356.png

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

9e9c349869874e999967edbd5dee47ef.png

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

基于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对话框界面。

6444ad332cba4ff69e0f42dffef79182.png

1c260b2a50d44ac5b570fc66289294b0.png

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

        对话开始

b23f95b066bc4425bb02a11c30c2ca9e.png

 

 

 

 

 

 

  • 19
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值