张子阳的博客

首页 读书 技术 店铺 关于
张子阳的博客 首页 读书 技术 关于

Streamlit 英译中AI助手

2025-06-28 张子阳 分类: 大语言模型

自从有了大模型之后,阅读英文的技术文档再也没有了任何障碍。现在大模型的翻译水准,相比我自己的翻译,有时候甚至更加准确。于是,现在浏览英文文档,操作完全是ctrl+C/V,复制到 元宝 等大模型工具中,翻译后直接看译文。

但元宝存在3个问题:1. 每次复制英文原文前,都需要交代一下任务:“帮我将下面的英文内容翻译成中文,要求通俗易懂、专业严谨”;2. 聊天窗口的记忆上下文是有长度限制的,可能在几次对话后,如果你只发 英文原文,而不发说明,元宝会误以为 英文内容 就是提问本身,从而对英文进行解读,而非翻译;3. Deepseek 对长文本的翻译不如GPT-4.1等模型,会出现漏译的情况(不再逐行翻译,而是提取概要)。而 元宝 又只支持deepseek和自家的混元模型。既然我们已经学习了Streamlit 和 LlamaIndex,那么这篇文章,就编写一个简单的 英译中 AI助手,由它来解决上面的3个问题。

因为这篇文章仅仅是对之前知识的一个组合,例子又比较简单。就直接给出源码了,相关的说明在注释中:

import streamlit as st from llama_index.llms.openai import OpenAI from dotenv import load_dotenv load_dotenv() llm = OpenAI(model="gpt-4.1-mini") st.set_page_config(page_title="英译中 AI助手") st.title("💬 英译中 AI助手") user_input_value = "" if "input" in st.session_state: user_input_value = st.session_state.input # 保存输入框内容 st.session_state.input = "" # 清空输入框内容 # 初始化聊天历史 if "messages" not in st.session_state: st.session_state.messages = [ {"role": "assistant", "content": "您好!请发送英文,我将会翻译成英文"} ] # 初始化LLM模型 @st.cache_resource def init_llm(): # 使用OpenAI模型 llm = OpenAI(model="gpt-4.1-mini") return llm # 检查是否需要初始化模型 if 'llm' not in st.session_state: st.session_state['llm'] = init_llm() # 创建聊天消息容器 chat_container = st.container() # 显示历史消息 with chat_container: for msg in st.session_state.messages: avatar = "👤" if msg["role"] != "user": avatar = "🤖" with st.chat_message(msg["role"], avatar=avatar): st.markdown(msg["content"]) # 底部输入区域 with st.container(): with st.form(key="chat_form"): user_input = st.text_area("请输入英文内容:", height=120, key="input", placeholder="待翻译英文") submit_button = st.form_submit_button("发送") # 处理用户输入 if submit_button and user_input_value: # 添加用户消息到历史 st.session_state.messages.append({"role": "user", "content": user_input_value}) # 实时显示用户消息 with chat_container: with st.chat_message("user", avatar="👤"): st.markdown(user_input_value) # 获取AI回复(流式输出) with chat_container: with st.chat_message("assistant", avatar="🤖"): message_placeholder = st.empty() full_response = "" prompt = f""" 请将下面的英文逐行翻译成中文,要求通俗易懂、专业严谨。只输出译文,不需要对照翻译,对于程序代码需要保留格式和内容,但代码中的注释需要翻译。下面是需要翻译的英文内容: ----------------------------------------------------------------- { user_input_value } """ # 直接使用LLM生成响应(流式) response_stream = st.session_state['llm'].stream_complete(prompt) for chunk in response_stream: full_response += chunk.delta message_placeholder.markdown(full_response + "...") message_placeholder.markdown(full_response) # 添加AI回复到历史 st.session_state.messages.append({"role": "assistant", "content": full_response})

输出结果类似下图:

感谢阅读,希望这篇文章能给你带来帮助!