Spaces:
Running
on
CPU Upgrade
Running
on
CPU Upgrade
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.') |