該項目開發了一個基於Streamlit的Web應用,利用大型語言模型將複雜的機構公文或法律文本,遵循特定的語言規範,自動重寫為通俗易懂的“簡易語言”或“輕鬆語言”,並提供文本可讀性評分和寫作建議。
項目:Simply Simplify Language
目錄
- 用法
- 項目信息
- 應用功能
- 成本
- 語言指南
- 一些發現
- 可讀性分數如何工作?
- 分數的含義?
- 項目團隊
- 貢獻
- 許可證
- 其他
- 免責聲明
用法
您可以在本地、雲端或在GitHub Codespaces中運行該應用。該應用使用OpenRouter作為統一的API提供方,以訪問多個主流語言模型。我們還提供了一個僅使用OpenAI API的應用版本。所有可用模型均已在config.yaml中配置,可根據需要輕鬆定製。
本地運行
推薦使用uv
- 安裝
uv:pip3 install uv - 克隆倉庫並進入目錄:
cd simply-simplify-language/ - 創建並激活虛擬環境:
uv sync
source .venv/bin/activate # (Unix/macOS)
.venv\Scripts\activate # (Windows)
- 將您的OpenRouter(或OpenAI)API密鑰添加到
_streamlit_app/目錄下的.env文件中:
OPENROUTER_API_KEY=sk-or-v1-...
# 或用於OpenAI API:
OPENAI_API_KEY=sk-...
- 進入應用目錄:
cd _streamlit_app/ - 啓動應用:
streamlit run sprache-vereinfachen.py或使用僅OpenAI版本:streamlit run sprache-vereinfachen_openai.py
使用conda/pip(備選)
- 創建環境:
conda create -n simplify python=3.10+ - 激活環境:
conda activate simplify - 克隆倉庫:
cd simply-simplify-language/ - 安裝依賴:
pip install -r requirements.txt - 安裝spaCy模型:
python -m spacy download de_core_news_sm - 如上所述,將您的OpenRouter / OpenAI API密鑰添加到
.env。 - 進入應用目錄並啓動:
cd _streamlit_app/然後streamlit run sprache-vereinfachen.py或使用僅OpenAI版本:streamlit run sprache-vereinfachen_openai.py
獲取OpenRouter API密鑰
- 在OpenRouter註冊
- 創建API密鑰: API密鑰
- 添加點數: 點數
備選方案:獲取OpenAI API密鑰
- 在OpenAI註冊
- 在賬單中添加付款信息並充值
- 創建新的API密鑰
在雲端運行
- 在您選擇的雲服務商處實例化一個小型虛擬機。建議規格:2個vCPU,2GB RAM,以及幾個GB的SSD就足夠了。這每月只需花費幾法郎。
- 按照上述本地用法説明安裝應用。
- 建議:要使用合適的域名和HTTPS,安裝反向代理是有意義的。由於其簡單性和易用性,我們非常喜歡為此使用Caddy服務器。請求證書也很簡單 – Caddy會自動為您完成此操作。
在GitHub Codespaces中運行
您可以使用GitHub Codespaces在雲託管環境中開發和運行該應用。好處包括:
- 無需本地安裝
- 一切從您的網絡瀏覽器運行
- 使用您的GitHub帳户可免費使用一定時長(您仍需為LLM令牌使用付費)
注意 為避免不必要的費用,請記住刪除任何未使用的Codespaces。在設置中啓用“自動刪除代碼空間”選項也是一個好主意。
- 啓動一個代碼空間: Code > Codespaces > Create codespace on main
- 安裝依賴:
uv sync或pip install -r requirements.txt - 安裝spaCy模型:
python -m spacy download de_core_news_sm - 通過
.env或GitHub Secrets添加OpenRouter API密鑰。 - 啓動應用:
python -m streamlit run _streamlit_app/sprache-vereinfachen.py - 端口8501由Codespaces自動轉發。
配置模型
編輯config.yaml以自定義可用模型:
name: UI顯示名稱id: OpenRouter模型標識符(例如,anthropic/claude-3-5-sonnet,openai/gpt-4o)
請參閲OpenRouter模型獲取完整列表。
備選方案(用於OpenAI):
編輯config_openai.yaml:name: UI顯示名稱id: OpenAI模型標識符(例如,gpt-4o,gpt-4o-mini)
請參閲OpenAI模型獲取完整列表。
注意 該應用將用户交互記錄到本地計算機或虛擬機上名為app.log的文件中。如果您不希望進行分析,只需在代碼中註釋掉相關函數調用。
項目信息
機構溝通通常複雜且難以理解。這對許多人來説可能是一種障礙。清晰簡單的溝通對於確保平等獲得公共流程和服務至關重要。
蘇黎世州行政部門長期致力於使其溝通更具包容性和可及性。隨着內容數量持續增長,我們看到了利用AI支持這一目標的機會。2023年秋季,我們啓動了一個試點項目——此應用是其成果之一。此倉庫中的代碼是我們正在進行工作的一個快照。
我們根據溝通指南開發了此應用,但根據經驗,它可以輕鬆適應其他指南和其他機構。
應用功能
- 此應用簡化複雜文本,根據“簡易語言”或“輕鬆語言”的規則重寫它們。為了簡化您的源文本,該應用應用了有效的提示工程,並通過OpenRouter使用您選擇的LLM。
- 該應用還提供寫作輔導。其分析功能提供詳細的、逐句的反饋,以改善您的溝通。
- 它衡量文本的可理解性,分值範圍從-10(非常複雜)到+10(非常容易理解)。
- “一鍵”功能將您的文本同時發送到所有配置的LLM,在幾秒鐘內交付多個草稿並格式化為Word文檔,可供下載。
注意 “簡易語言”在英文中大致相當於“Plain English”,而“輕鬆語言”與“Easy English”有相似之處。
重要 冒着陳述顯而易見事實的風險:通過使用該應用,您將數據發送到OpenRouter及其合作伙伴模型提供方。因此,請嚴格僅使用非敏感數據。再次陳述顯而易見的事實:LLM會出錯。它們經常產生幻覺、編造事物、搞錯事情。它們經常以微妙、不顯眼的方式這樣做,可能難以察覺。此應用旨在用作輔助系統。它只產生草稿,您必須始終進行檢查。
在撰寫本文時,我們行政部門中的許多用户在超過一年半的時間裏,使用該應用處理了成千上萬的文本。結果非常令人鼓舞。通過這個原型應用,我們的專家節省了時間,改進了輸出,並使公共溝通更具包容性。
注意 此應用針對瑞士德語進行了優化。提示中的一些規則引導模型朝向此方向。此外,應用設置為使用瑞士的ss而非德語的ß。可理解性指數在計算常用詞分數時假定使用瑞士的ss,並在結果中將ß替換為ss。
成本
使用成本低廉。您只需向OpenRouter支付您使用的令牌費用。OpenRouter為所有模型提供透明、有競爭力的定價。例如,對於將100個獨立的“標準頁”簡化成簡易語言或輕鬆語言,根據模型不同,成本大約在0.5瑞士法郎(針對較快模型)到大約5-10瑞士法郎(針對Claude Opus等高級模型)之間。請查看OpenRouter定價瞭解當前費率。運行應用的硬件要求也很低。如上所述,每月只需幾法郎的小型虛擬機就足夠了。
語言指南
您可以在utils_prompts.py中找到當前在提示中使用的規則。請查看並根據您的需求和組織的溝通指南進行更改。
我們從以下語言指南中主要推導出提示中的當前規則:
- 通用語言指南
- 輕鬆語言指南
- 道路運輸局指南
一些發現
- 大型語言模型通過預訓練已經對簡易語言、輕鬆語言和CEFR級別(A1, A2, B1等)有所理解。僅要求其根據這些術語或級別重寫文本,它們的表現就令人印象深刻。我們還成功地通過要求模型描述各個CEFR級別的情景來創建測試數據。
- LLM產生多樣化的改寫,這是有益的。通過OpenRouter提供多種模型選項,用户可以獲得一系列建議,幫助他們獲得好的結果。使用“一鍵”模式通常很有效,該模式整合了所有配置模型的結果。
- 衡量文本可理解性確實很有幫助。在項目早期,我們意識到需要一個定量指標來評估我們的輸出,例如比較不同的提示、模型和預處理步驟。為此我們開發了一個指數,稱之為“蘇黎世可理解性指數”。我們使用複雜法律和行政文本以及許多簡易語言和輕鬆語言的樣本來創建ZIX,並訓練了一個分類模型來區分複雜和簡單的文本。ZIX作為一個度量指標在實踐中對我們非常有用。我們已在此處發佈了代碼和Python包。
- 最後,用您的目標受眾驗證結果至關重要,特別是對於輕鬆語言,這需要專家和用户驗證才能有效。
可讀性分數如何工作?
- 該分數考慮了句子長度、可讀性指標RIX、常用詞的出現以及與標準CEFR詞彙表A1、A2和B1的重疊程度。
- 目前該分數未考慮其他對簡易語言或輕鬆語言至關重要的語言屬性,例如被動語態、虛擬語氣、否定等的使用。
我們將ZIX可理解性指數發佈為可通過pip安裝的包。您可以在此處找到它。
注意 該指數針對瑞士德語進行了輕微調整。具體來説,我們在詞彙列表中使用ss而非ß。實際上這應該不會造成很大差異。對於確實包含ß的標準德語文本,該指數可能會略微低估可理解性,差異大約為0.1。
分數的含義?
- 負分表示文本難度在B2到C2範圍內。這些文本可能對許多人來説非常難懂。
- 正分表示語言水平為B1或更簡單。