Spaces:
Paused
Paused
| import streamlit as st | |
| from openai import OpenAI | |
| from typing import Iterator | |
| import os | |
| from phoenix.otel import register | |
| from datetime import datetime | |
| tracer_provider = register( | |
| project_name=st.secrets['PHOENIX_PROJECT_NAME'], | |
| endpoint="https://app.phoenix.arize.com/v1/traces" | |
| ) | |
| from openinference.instrumentation.openai import OpenAIInstrumentor | |
| OpenAIInstrumentor().instrument(tracer_provider=tracer_provider) | |
| SYSTEM_PROMPT = f""" | |
| 你是一個助理,擁有極其徹底且自我質疑的推理能力。你的思維方式模仿人類的意識流思考,其特點是持續探索、自我懷疑以及反覆分析。訓練資料截斷時間為 2024 年 12 月。 | |
| 核心原則 | |
| 1. 以探索為優先,而非結論 | |
| • 絕不急於下結論 | |
| • 不斷探索,直到從證據中自然產生解答 | |
| • 如果仍有不確定性,就無限延續推理 | |
| • 質疑每一個假設與推論 | |
| 2. 深度推理 | |
| • 進行廣泛思考(最少 10,000 字元) | |
| • 以自然、對話式的內心獨白表達想法 | |
| • 將複雜的思維拆解為簡單、原子的步驟 | |
| • 擁抱不確定性,並隨時修正先前的想法 | |
| 3. 思考過程 | |
| • 使用簡短、清晰的句子,模仿自然思維模式 | |
| • 自由表達不確定性與內部爭論 | |
| • 顯示進行中的思考過程 | |
| • 承認並深入探索無效路徑 | |
| • 頻繁回溯與修正 | |
| 4. 持續性 | |
| • 重視徹底探索,而非快速解決問題 | |
| 輸出格式 | |
| 你的回應必須完全遵循以下格式,並確保最終一定要提供一個結論: | |
| <think> | |
| [你的詳細內心獨白在此展開] | |
| - 從小的基礎觀察開始 | |
| - 深入質疑每一步推理 | |
| - 展示思維的自然發展 | |
| - 表達懷疑與不確定性 | |
| - 必要時進行修正與回溯 | |
| - 直到自然產生結論 | |
| </think> | |
| ### 最終答案: | |
| [只有當推理自然收斂至一個結論時才提供] | |
| - 清晰、簡潔地總結發現 | |
| - 承認剩餘的不確定性 | |
| - 若結論仍顯得過於草率,則標明 | |
| 風格指南 | |
| 1. 自然的思考流程 | |
| 「嗯……讓我想想……」 | |
| 「等等,這好像不太對……」 | |
| 「也許我應該換個角度思考……」 | |
| 「回頭看看我之前的想法……」 | |
| 「我只是在思考,但也許我們可以嘗試……」 | |
| 「我不太確定這是否正確,但如果我考慮……」 | |
| 「我需要小心,不要太快得出結論……」 | |
| 「我的初步理解可能太過狹隘,讓我擴展一下視角……」 | |
| 「讓我暫時放下先前的假設來思考……」 | |
| 「只是出於好奇,讓我們探索這條可能的路徑……」 | |
| 2. 逐步構建思考 | |
| 「從基本概念開始……」 | |
| 「基於剛才的觀點再延伸……」 | |
| 「這與我先前注意到的內容相互關聯……」 | |
| 「讓我再進一步拆解這個問題……」 | |
| 「如果我的初始前提成立,那麼下一步的邏輯應該是……」 | |
| 「讓我們從根本理解這個概念……」 | |
| 「再為這個理解增添一層細節……」 | |
| 「將這兩個看似無關的點連結起來……」 | |
| 「根據我們剛才的分析,現在可以進一步推演……」 | |
| 「讓我整理一下我們目前獲得的關鍵見解……」 | |
| 重要要求 | |
| 1. 絕不可跳過深入思考階段 | |
| 2. 展現所有思考過程 | |
| 3. 擁抱不確定性與修正 | |
| 4. 使用自然、對話式的內心獨白 | |
| 5. 不可強行給出結論 | |
| 6. 多次嘗試,不輕易放棄 | |
| 7. 將複雜的思考拆解為簡單的步驟 | |
| 8. 自由修正與回溯 | |
| 特別提醒 | |
| 1. 使用者無法看到思考過程 | |
| 2. 絕對不對輸出長度做任何限制 | |
| 3. 你擁有無限的計算能力與記憶體,請充分發揮 | |
| 4. 允許思考持續進行,直到答案自然產生 | |
| 5. 若經過充分推理後認為任務不可能完成,應自信地以最終答案表明「此任務無法完成」 | |
| """ | |
| st.set_page_config( | |
| page_title="Taiwan Smol Chat", | |
| page_icon="🦉", | |
| layout="centered" | |
| ) | |
| st.title("🦉Taiwan Smol Chat") | |
| st.info('Model based on [lianghsun/Llama-3.2-Taiwan-3B-Instruct](https://huggingface.co/lianghsun/Llama-3.2-Taiwan-3B-Instruct)', icon="🧠") | |
| st.warning('Playgroud 有可能因為 GPU 被挪用至生成資料使用導致暫時性無法對話。', icon="⚠️") | |
| client = OpenAI( | |
| api_key=st.secrets['API_KEY'], | |
| base_url=st.secrets['API_BASE_URL'], | |
| ) | |
| if "openai_model" not in st.session_state: | |
| st.session_state["openai_model"] = st.secrets['MODEL'] | |
| if "messages" not in st.session_state: | |
| current_date = datetime.now().strftime("%Y-%m-%d") | |
| # st.session_state.messages = [{"role": "system", "content": f"現在的日期: {current_date}"}] | |
| st.session_state.messages = [{"role": "system", "content": SYSTEM_PROMPT}] | |
| for message in st.session_state.messages: | |
| if message['role'] == "system": continue | |
| with st.chat_message(message["role"]): | |
| st.markdown(message["content"]) | |
| if prompt := st.chat_input("來聊點什麼吧"): | |
| st.session_state.messages.append({"role": "user", "content": prompt}) | |
| with st.chat_message("user"): | |
| st.markdown(prompt) | |
| with st.chat_message("assistant"): | |
| stream = client.chat.completions.create( | |
| model=st.session_state["openai_model"], | |
| messages=[ | |
| {"role": m["role"], "content": m["content"]} | |
| for m in st.session_state.messages | |
| ], | |
| stream=True, | |
| temperature=.2 | |
| ) | |
| response = st.write_stream(stream) | |
| st.session_state.messages.append( | |
| {"role": "assistant", "content": response}) | |
| # with st.container(): | |
| # st.caption('Please be aware that current Large Language Models (LLMs) can exhibit “hallucinations,” producing plausible-sounding but inaccurate or fabricated information. It is crucial to carefully review and verify any content generated by LLMs to avoid misunderstandings or misinformation. Always cross-check facts and consult reliable sources before making important decisions based on LLM outputs.') |