Aye10032
commited on
Commit
·
9479c01
1
Parent(s):
b4c8abe
添加中英互译工具
Browse files- pages/AcademicTranslate.py +75 -0
- requirements.txt +1 -0
- ui/Component.py +1 -0
pages/AcademicTranslate.py
ADDED
@@ -0,0 +1,75 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import streamlit as st
|
2 |
+
from langchain_core.messages import SystemMessage, HumanMessage, AIMessage
|
3 |
+
from langchain_core.prompts import ChatPromptTemplate
|
4 |
+
from langchain_openai import ChatOpenAI
|
5 |
+
from loguru import logger
|
6 |
+
|
7 |
+
from ui.Component import side_bar_links
|
8 |
+
|
9 |
+
st.set_page_config(
|
10 |
+
page_title='工具箱',
|
11 |
+
page_icon='🔨',
|
12 |
+
layout='centered',
|
13 |
+
)
|
14 |
+
|
15 |
+
st.title("学术中英互译")
|
16 |
+
|
17 |
+
with st.sidebar:
|
18 |
+
side_bar_links()
|
19 |
+
|
20 |
+
st.toggle('翻译模式', key='is_en2zh')
|
21 |
+
if st.session_state.get('is_en2zh'):
|
22 |
+
st.caption('en → zh')
|
23 |
+
else:
|
24 |
+
st.caption('zh → en')
|
25 |
+
|
26 |
+
with st.container(height=610, border=False) as chat_container:
|
27 |
+
for message in st.session_state.ac_translate_history:
|
28 |
+
icon = 'logo.png' if message['role'] != 'user' else None
|
29 |
+
with st.chat_message(message['role']):
|
30 |
+
st.markdown(message['content'])
|
31 |
+
|
32 |
+
|
33 |
+
def ac_translate(original_text: str, is_en2zh: bool):
|
34 |
+
if is_en2zh:
|
35 |
+
_prompt = ChatPromptTemplate.from_messages(
|
36 |
+
[
|
37 |
+
SystemMessage(content="You are an AI academic assistant and should answer user questions rigorously."),
|
38 |
+
HumanMessage(content="你的任务是以**学术论文的风格**将一段英文文本翻译为中文,不能漏翻或错翻。\n"
|
39 |
+
"对于文中的专有名词或公式等,可以保持原有英文不做翻译。下面是你需要翻译的句子:\n{original_text}")
|
40 |
+
]
|
41 |
+
)
|
42 |
+
else:
|
43 |
+
_prompt = ChatPromptTemplate.from_messages(
|
44 |
+
[
|
45 |
+
SystemMessage(content="You are an AI academic assistant and should answer user questions rigorously."),
|
46 |
+
HumanMessage(content="你的任务是以**学术论文的风格**将一段中文翻译成英文,务必注意不能漏翻或错翻。\n"
|
47 |
+
"下面是你需要翻译的句子:\n{original_text}")
|
48 |
+
]
|
49 |
+
)
|
50 |
+
|
51 |
+
llm = ChatOpenAI(
|
52 |
+
model_name="gpt-4o-mini",
|
53 |
+
temperature=0,
|
54 |
+
openai_api_key=st.secrets['gpt_key'],
|
55 |
+
streaming=True
|
56 |
+
)
|
57 |
+
|
58 |
+
chain = _prompt | llm
|
59 |
+
|
60 |
+
llm_result = chain.stream({"original_text": original_text})
|
61 |
+
|
62 |
+
return llm_result
|
63 |
+
|
64 |
+
|
65 |
+
if prompt := st.chat_input():
|
66 |
+
st.session_state.ac_translate_history = []
|
67 |
+
|
68 |
+
logger.info(f'[translate]: {prompt}')
|
69 |
+
|
70 |
+
chat_container.chat_message("human").write(prompt)
|
71 |
+
st.session_state.translate_messages.append({'role': 'user', 'content': prompt})
|
72 |
+
|
73 |
+
response = ac_translate(prompt, st.session_state.get('is_en2zh'))
|
74 |
+
translate_result = chat_container.chat_message("ai").write_stream(response)
|
75 |
+
st.session_state.ac_translate_history.append({'role': 'assistant', 'content': translate_result})
|
requirements.txt
CHANGED
@@ -1,6 +1,7 @@
|
|
1 |
loguru
|
2 |
bs4
|
3 |
PyYAML
|
|
|
4 |
langchain
|
5 |
langchain_openai
|
6 |
lxml
|
|
|
1 |
loguru
|
2 |
bs4
|
3 |
PyYAML
|
4 |
+
streamlit
|
5 |
langchain
|
6 |
langchain_openai
|
7 |
lxml
|
ui/Component.py
CHANGED
@@ -8,6 +8,7 @@ def side_bar_links():
|
|
8 |
st.page_link('pages/Reformat.py', label='文本格式化', icon='📖')
|
9 |
st.page_link('pages/Reference.py', label='引用文献生成', icon='📙')
|
10 |
st.page_link('pages/Translate.py', label='翻译总结工具', icon='🌐')
|
|
|
11 |
st.page_link('pages/TextToImage.py', label='文生图', icon='🎨')
|
12 |
|
13 |
st.divider()
|
|
|
8 |
st.page_link('pages/Reformat.py', label='文本格式化', icon='📖')
|
9 |
st.page_link('pages/Reference.py', label='引用文献生成', icon='📙')
|
10 |
st.page_link('pages/Translate.py', label='翻译总结工具', icon='🌐')
|
11 |
+
st.page_link('pages/AcademicTranslate.py', label='学术中英互译', icon='🌐')
|
12 |
st.page_link('pages/TextToImage.py', label='文生图', icon='🎨')
|
13 |
|
14 |
st.divider()
|