MyTools / pages /Translate.py
Aye10032
修改提示词
060411c
import os
import httpx
import streamlit as st
import yaml
from langchain_core.messages import SystemMessage, HumanMessage, AIMessage
from langchain_core.prompts import ChatPromptTemplate
from langchain_openai import ChatOpenAI
from loguru import logger
from ui.Component import side_bar_links
st.set_page_config(
page_title='工具箱',
page_icon='🔨',
layout='wide',
)
st.title("一键生成翻译总结")
with st.sidebar:
side_bar_links()
st.toggle('去除换行', key='trans_reformat')
st.toggle('总结', key='trans_conclusion')
st.toggle('输出格式', key='trans_text_mode')
if st.session_state.get('trans_text_mode'):
st.caption('markdown')
else:
st.caption('latex')
st.toggle('双语输出', key='trans_en_output')
def get_translate_and_conclude(question: str, step: int):
if step == 0:
_prompt = ChatPromptTemplate.from_messages(
[
SystemMessage("You are an AI academic assistant and should answer user questions rigorously."),
("human",
"你将收到一个论文的片段。首先,将这段文本以学术风格**翻译为中文**,保证语句通顺但不要漏句。对于所有的特殊符号和latex代码,请保持原样不要改变。"
"对于文中一些显得与上下文突兀的数字,很大可能是引用文献,请使用latex语法将它们表示为一个上标,并使用美元符号包围,如$^2$。这是你要翻译的文献片段:\n{question}"),
]
)
elif step == 1:
_prompt = ChatPromptTemplate.from_messages(
[
SystemMessage(content="You are an AI academic assistant and should answer user questions rigorously."),
HumanMessage(
content=f"""首先,将这段文本**翻译为中文**,不要漏句。对于所有的特殊符号和latex代码,请保持原样不要改变:
{st.session_state.translate_messages[-3]}"""
),
AIMessage(content=str(st.session_state.translate_messages[-2])),
HumanMessage(content=question),
]
)
else:
raise Exception("Wrong step value")
llm = ChatOpenAI(
model_name="gpt-4o-mini",
temperature=0,
openai_api_key=st.secrets['gpt_key'],
streaming=True
)
chain = _prompt | llm
if step == 0:
llm_result = chain.stream({"question": question})
else:
llm_result = chain.stream({"question": question})
return llm_result
col1, col2 = st.columns([1, 1], gap="medium")
if 'translate_messages' not in st.session_state:
st.session_state.translate_messages = []
if 'markdown_text' not in st.session_state:
st.session_state.markdown_text = ''
chat_container = col1.container(height=610, border=False)
with chat_container:
for message in st.session_state.translate_messages:
icon = 'logo.png' if message['role'] != 'user' else None
with st.chat_message(message['role']):
st.markdown(message['content'])
with col2:
if st.session_state.markdown_text != '':
with st.container(height=520, border=True):
st.markdown(st.session_state.markdown_text)
if st.session_state.get('trans_text_mode'):
st.code(st.session_state.markdown_text, language='markdown')
else:
st.code(st.session_state.markdown_text, language='latex')
if prompt := st.chat_input():
st.session_state.translate_messages = []
if st.session_state.get('trans_reformat'):
prompt = prompt.replace("\n", " ").replace("\r", "")
logger.info(f'[translate]: {prompt}')
prompt = prompt.replace('$', r'\$')
chat_container.chat_message("human").write(prompt)
st.session_state.translate_messages.append({'role': 'user', 'content': prompt})
response = get_translate_and_conclude(prompt, 0)
translate_result = chat_container.chat_message("ai").write_stream(response)
st.session_state.translate_messages.append({'role': 'assistant', 'content': translate_result})
if st.session_state.get('trans_en_output'):
markdown_text = f"""{prompt}\t\n\n"""
else:
markdown_text = ""
if st.session_state.get('trans_conclusion'):
query = "接下来,请用两到四句话总结一下这段文本的内容"
chat_container.chat_message("human").write(query)
st.session_state.translate_messages.append({'role': 'user', 'content': query})
response = get_translate_and_conclude(query, 1)
conclusion_result = chat_container.chat_message("ai").write_stream(response)
logger.info(f"(conclude): {conclusion_result}")
st.session_state.translate_messages.append({'role': 'assistant', 'content': conclusion_result})
if st.session_state.get('trans_text_mode'):
markdown_text += f"""{translate_result}\t\r\n> {conclusion_result}"""
else:
markdown_text += f"""{translate_result}\n\n\\tbox{{ {conclusion_result} }}"""
markdown_text = markdown_text.replace('%', r'\%')
st.session_state.markdown_text = markdown_text
else:
markdown_text += f"""{translate_result}"""
st.session_state.markdown_text = markdown_text
st.rerun()