首页 > 编程问答 >如何获得 Shiny Chat 的响应来显示格式化的数学方程?

如何获得 Shiny Chat 的响应来显示格式化的数学方程?

时间:2024-07-30 09:24:12浏览次数:12  
标签:python shiny chatbot equation py-shiny

我试图让这个 示例应用程序 输出格式化的数学方程。闪亮的聊天教程 此处 建议自定义响应显示,但我无法获得建议 @chat.transform_assistant_response 修改格式。 我按原样使用下面的代码:

@chat.transform_assistant_response
def _(content: str) -> ui.HTML:
    return ui.markdown(content)

添加 transform_assistant=True chat.messages() 但我没有看到响应的格式发生变化。 我需要帮助获得响应的格式化数学方程。 感谢您的帮助。


你需要使用可以将 LaTeX 数学符号渲染成 HTML 的库。MathJax 是一个流行的选择。以下是如何在使用 ui.markdown 的同时将 MathJax 集成到 Shiny 聊天示例应用程序中以呈现格式化数学方程的方法:

import shiny as sh
import shiny.experimental as x
from shiny import ui, render, session
import os
import openai

# 不要忘记安装 openai 库:"pip install openai"
# 将的 OpenAI API 密钥导出为环境变量
openai.api_key = os.getenv("OPENAI_API_KEY")


app_ui = ui.page_fluid(
    ui.tags.head(
        ui.tags.script(
            src="https://polyfill.io/v3/polyfill.min.js?features=es6",
        ),
        ui.tags.script(
            src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js",
            async=True,
        ),
    ),
    x.chat_stream(
        id="chat",
        placeholder="使用 GPT-3 聊天...(例如,要求其编写代码)",
    ),
)


def server(input, output, session):
    @session.open
    def on_session_started():
        x.chat_send(
            ui.chat_message(
                "assistant",
                "好!我是由 GPT-3 支持的助手。问我任何问题。",
            ),
            stream="chat",
        )

    @x.chat_input("chat")
    def on_message(message):
        response = openai.ChatCompletion.create(
            model="gpt-3.5-turbo",
            messages=[
                {"role": "system", "content": "你是友好的 AI 助手。"},
                {"role": "user", "content": message},
            ],
        )
        x.chat_send(
            ui.chat_message(
                "assistant", response.choices[0].message.content
            ),
            stream="chat",
        )


@sh.chat.transform_assistant_response
def _(content: str) -> ui.HTML:
    return ui.markdown(content, extensions=["markdown.extensions.extra"])


app = sh.App(app_ui, server, debug=True)

if __name__ == "__main__":
    app.run()

这段代码所做的更改:

  1. 包含 MathJax: 它将 MathJax 库添加到 ui.tags.head 中的 HTML 头部。这将使浏览器能够呈现使用 LaTeX 语法编写的数学方程。
  2. 使用 markdown.extensions.extra 它使用 markdown.extensions.extra 选项调用 ui.markdown 。此扩展允许 ui.markdown 呈现基本 LaTeX 语法,如使用 $...$ 进行内联数学和使用 $$...$$ 进行显示数学。

通过这些更改,的 Shiny 聊天应用程序现在应该能够呈现格式化的数学方程。例如,如果向助手发送消息“什么是爱因斯坦的著名方程式?”,它应该以 LaTeX 语法返回 $$E=mc^2$$ ,该语法将在浏览器中呈现为格式化的方程式。

标签:python,shiny,chatbot,equation,py-shiny
From: 78809458

相关文章

  • python性能分析器:cProfile
    代码:(1)importcProfileimportrecProfile.run('re.compile("foo|bar")')运行结果:(2)importcProfiledefrunRe():importrecProfile.runctx('re.compile("foo|bar")',None,locals())runRe()运行结果:(3)i......
  • 基于Python网络招聘数据可视化分析系统的设计与实现
    基于Python网络招聘数据可视化分析系统的设计与实现DesignandImplementationofPython-basedNetworkRecruitmentDataVisualizationAnalysisSystem完整下载链接:基于Python网络招聘数据可视化分析系统的设计与实现文章目录基于Python网络招聘数据可视化分析系......
  • 即使使用 docker run -dit 命令,python-Docker 容器也会在运行两秒后退出
    我想从此处使用Dockerfile测试自定义kubernetes调度程序:FROMpython:3.7RUNpipinstallkubernetesCOPYscheduler.py/scheduler.pyCMDpython/scheduler.py一旦创建了映像和容器:dockerbuild-tapp.dockercontainerrun-d-it--namemy-sched......
  • Python多重处理,如何避免创建具有百万个对象的元组
    python多处理新手。我有一项任务,涉及访问网络服务数百万次并将响应保存在文件中(每个请求都有单独的文件)。我已经得到了高级工作代码,但对一些事情没有感到困惑。以下两种语法有什么区别?pool=Pool(processes=4)pool.starmap(task,listOfInputParametersTu......
  • Python OpenCV - 显示坏像素检查测试
    我想找到显示器中存在的每个坏像素。坏像素可能是颜色不正确的像素,或者像素只是黑色。显示屏的尺寸为160x320像素。所以如果显示效果好的话,必须有160*320=51200像素。如果显示器没有51200像素,那就是坏的。另外,我想知道每个坏像素的位置。一旦拍摄的图像太大,我将共享一个......
  • 在python日志输出的每一行前面添加变量缩进
    我正在将日志记录构建到一个Python应用程序中,我希望它是人类可读的。目前,调试日志记录了调用的每个函数以及参数和返回值。这意味着,实际上,嵌套函数调用的调试日志可能如下所示:2024-07-2916:52:26,641:DEBUG:MainController.initialize_componentscalledwithargs<control......
  • 使用 DQN 实现 pong,使用 python 中的特征向量而不是像素。我的 DQNA 实现代码正确吗,因
    我正在致力于使用OpenAI的Gym为Pong游戏实现强化学习(RL)环境。目标是训练人工智能代理通过控制球拍来打乒乓球。代理收到太多负面奖励,即使它看起来移动正确。具体来说,奖励函数会惩罚远离球的智能体,但这种情况发生得太频繁,即使球朝球拍移动时似乎也会发生。观察......
  • Python CDLL 无法加载两次
    我正在尝试用python创建一个密码管理器,但遇到了一个问题,一旦加载了一种类型的dll,我就无法加载不同的dll,在这个示例中,我加载了一个dll,并尝试解密加密的密码数据,它工作正常,直到我加载另一个不同的nss3.dll文件,此时它给我一个错误:“过程入口点HeapAlloc无法位于动态链......
  • 你能将 HTTPS 功能添加到 python Flask Web 服务器吗?
    我正在尝试构建一个Web界面来模拟网络设备上的静态接口,该网络设备使用摘要式身份验证和HTTPS。我想出了如何将摘要式身份验证集成到Web服务器中,但我似乎无法找到如何使用FLASK获取https,如果您可以向我展示如何实现,请评论我需要使用下面的代码做什么来实现这一点。from......
  • Python:比较 csv 文件并打印相似之处
    我需要比较两个csv文件并打印出它们的相似之处。第一个文件有名称和浓度,第二个文件就像只有名称的“最佳”列表,我需要绘制相似性图表。例如,这就是我的列表的样子:file1-old_file.csvname_id,conc_test1,conc_test2name1,####,####name2,###......