我试图让这个
示例应用程序
输出格式化的数学方程。闪亮的聊天教程
此处
建议自定义响应显示,但我无法获得建议
@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()
这段代码所做的更改:
-
包含 MathJax:
它将 MathJax 库添加到
ui.tags.head
中的 HTML 头部。这将使浏览器能够呈现使用 LaTeX 语法编写的数学方程。 -
使用
markdown.extensions.extra
: 它使用markdown.extensions.extra
选项调用ui.markdown
。此扩展允许ui.markdown
呈现基本 LaTeX 语法,如使用$...$
进行内联数学和使用$$...$$
进行显示数学。
通过这些更改,的 Shiny 聊天应用程序现在应该能够呈现格式化的数学方程。例如,如果向助手发送消息“什么是爱因斯坦的著名方程式?”,它应该以 LaTeX 语法返回
$$E=mc^2$$
,该语法将在浏览器中呈现为格式化的方程式。