發表文章

Cannot find the user 'dbo', because it does not exist or you do not have permission

 1. 檢查目前資料庫中的使用者是否存在 dbo 確認 dbo 是否真的是一個 "使用者"(user),而不是只有 schema。 -- 查詢目前資料庫內所有的使用者 SELECT name, type_desc FROM sys.database_principals WHERE name = 'dbo'; 若查不到 dbo 或其 type_desc 不是 SQL_USER 或 WINDOWS_USER,表示它不是一個 user。 正確情況下 dbo 應該是 DATABASE_ROLE,不是使用者。 2. 檢查哪一行語法錯誤地參照了 dbo 作為 user 搜尋 SP 或 SQL 檔中使用 GRANT, REVOKE, DENY 等授權語句對象是否錯誤指向 dbo: -- 搜尋資料庫內的物件含有 'GRANT ... TO dbo' SELECT OBJECT_NAME(object_id), definition FROM sys.sql_modules WHERE definition LIKE '%GRANT%TO dbo%'; 哪些 Stored Procedure 或 View 中誤用 GRANT TO dbo。 3. 在 SSMS 的 Object Explorer 中檢查目前登入帳號是否有權限存取目前資料庫 如果你懷疑是登入帳號無權限,也可能會報這錯: -- 查看目前帳號是否有 mapping 到目前資料庫 SELECT dp.name AS UserName, dp.type_desc, dp.authentication_type_desc FROM sys.database_principals dp WHERE dp.sid = SUSER_SID();  -- 目前登入帳號的 SID 或 -- 顯示目前登入帳號所擁有的權限 SELECT * FROM fn_my_permissions(NULL, 'DATABASE'); 若查不到權限,表示登入帳號無權操作目前資料庫,可能造成 GRANT TO dbo 這類語法被拒絕執行。 4. 檢查是否有混淆 schema 與 user 的概念 有時候開發人員誤把 dbo 當作使用者來授權,其實它是 schema: --...

AZ-104_管理Azure 身分識別和治理 (20-25%)_Part1.管理 Microsoft Entra 使用者和群組

圖片
管理 Microsoft Entra 使用者和群組 建立使用者與群組 管理使用者與群組屬性 管理 Microsoft Entra ID 中的授權 管理外部使用者 設定自助式密碼重設 (SSPR) Microsoft Entra ID  前身為Azure Active Directory(Azure AD)。2023 年,Azure Active Directory (Azure AD) 已更名為 Microsoft Entra ID。 由 Microsoft 提供的雲端基礎身份認證、識別與存取權管理 (IAM) 服務, 允許組織管理使用者帳戶並存取本地的資源和雲端的資源。 提供了一個集中管理位置,用於跨多個應用程式、平台和設備管理使用者認證和授權。 使用如 OAuth 2、OpenID Connect、SAML 和 WS-Fed 等協定用於身分識別和授權。(非常適合透過網際網路運作,因為它們使用 HTTPS/TLS 加密。) 在 Entra ID 中,標準交流方式是透過 Microsoft Graph,用於與 Office 365、Entra ID 等許多服務進行互動,這些互動是基於 REST 的呼叫,同樣透過 HTTPS (連接埠 443) 進行。 與地端環境中常見的 Active Directory Domain Services (AD DS) 有顯著不同,AD DS 使用 Kerberos、NTLM,並透過 LDAP 進行互動。 AD DS 具有組織單位 (OU) 的結構,但 Entra ID 主要是扁平的,AD DS主要為私有網路結構設計。 Entra ID 中有兩種類型的群組 安全性 (Security):最常見的類型,可以指派給角色 Microsoft 365:用於協作工具、行事曆、SharePoint 等 群組成員資格 指派的 (Assigned):手動指定特定的使用者或裝置。 動態的 (Dynamic):基於規則自動管理成員資格(適用於使用者或裝置),Entra ID 會定期檢查符合規則的身分識別並將其新增到群組中。 Entra ID 具有不同層級的授權,通常是按使用者授權。功能因授權層級(收費標準)而異: 免費 (Free):提供基本功能 P1 (Premium P1):增加了許多關鍵功能,例如 條件式存取 (Conditional Ac...

GAN研究筆記(1)_自編碼器(Auto-Encoder)跟變分自編碼器(VAE)

圖片
  自編碼器(Auto-Encoder) 是一種神經網路又可稱其為重建(構)模型,本身並不算生成模型。 使用自身的高階特徵編碼自己,壓縮成一個高階向量。是透過壓縮與還原圖像,來重建與輸入圖像相似圖像的模型。 其網路架構分為三部分:輸入層、隱藏層、輸出層。輸入層與輸出層通常具有相同維度,而隱藏層的維度會被設為比輸入層更小,從而達成資訊壓縮。 輸入層到隱藏層這部分稱為 編碼器(Encoder),負責將圖像壓縮為低維表示。 隨後從隱藏層到輸出層的部分稱為 解碼器(Decoder),其目的是還原圖像,使其盡量接近輸入圖像。 目標是使用稀疏的高階特徵重新組合來重構自己。 其輸入、輸出是一致的。是一種數據壓縮算法,其中數據的壓縮和解壓縮函數是和數據本身相關、有損的,從樣本中自動學習。 屬於無監督式學習。因為會和訓練數據息息相關,只能重構那些與壓縮訓練數據類似的數據。但本身要求輸入、輸出愈相近愈好這個目標,算監督式學習特性。 https://medium.com/ai-academy-taiwan/what-are-autoencoders-175b474d74d1 主要流程:Original Input -> Encoder -> Compressed -> Decoder -> Reconstructed input Encoder(編碼器):把圖像給編碼成向量 Decoder(解碼器/生成器):透過接收一個向量來產生一張圖像。 損失函數(Loss Function):透過比較輸入圖像與重建圖像的像素差異(逐像素)來計算損失, 此損失稱為「重建誤差(Reconstruction Loss)」,可用以下公式表示: 此公式中的 Xi為網路的輸入,Yi  為輸出。 該損失函數透過計算這兩者之間的交叉熵,來求出需最小化的參數。 輸出值的決定公式: 此處的參數如下: 𝑊1,𝑏1:編碼器的權重與偏差 𝑊2,𝑏2:解碼器的權重與偏差 簡略地可記作: 自編碼器設計方式 Step1.搭建Encoder Step2.搭建Decoder Step3.定義損失函數->重構圖片越接近原本圖片越好 十分不靈活,會受限於已知的數據樣本,無法給定隨機圖片的隨機向量。 自編碼器應用 1.數據去噪音 2.降維度 3.生成圖片 自動編碼器透過圖像壓縮的過程,...

Akamai 以約 9 億美元正式收購 Linode

圖片
  https://hosthum.com/posts/akamai-to-acquire-linode/ Linode: https://www.linode.com/lp/free-credit-100-5000 成立於 2003 年,是一家專注於提供 VPS(虛擬私有伺服器)和雲端運算服務的公司。 主打簡單易用、價格透明,是開發者與中小企業常用的雲平台替代 AWS、GCP 等。 Akamai Technologies: https://www.akamai.com/ 成立於 1998 年,是全球知名的 CDN(內容傳遞網路)與網路安全解決方案提供商。 專長於分散式架構、DDoS 防護、邊緣運算等。 Linode 是 Akamai 的子公司 2022 年: Akamai 以約 9 億美元正式收購 Linode,整合成為 Akamai 的雲端計算服務部門。 Linode 原為開發者友好的 VPS 提供商,現在是 Akamai Connected Cloud 的一部分。 Linode 品牌在初期保留,但已逐步整併進 Akamai Cloud。 如果是要找便宜的 VPS 或搭建 Side Project 平台 (例如 Hadoop、Node.js、Python API),Linode(Akamai) 依然是值得考慮的平台,尤其提供: $5 美金 / 月的共享 CPU 方案(1 核 + 1GB RAM) 支援自建 Spark/Hadoop cluster(較適合技術熟練者)

Render 平台簡介

圖片
Render 是一個現代化的雲端應用平台,提供開發者和團隊一站式的部署、管理與擴展解決方案。無論是靜態網站、動態 Web 應用、背景工作甚至是資料庫服務,Render 都能簡化部署流程,讓開發者專注於開發本身。 Render租用平台具有以下幾個特性 每個工作區每月提供 750 小時 的免費執行時間 若服務在 15 分鐘 內無任何流量,將自動進入休眠狀態。 每個工作區僅允許 一個免費的 Postgres 資料庫 和 一個免費的 Key Value 實體同時運行。 每個帳號(或 workspace)最多只能建立一個免費 PostgreSQL 資料庫。如需更多資料庫,需升級為付費方案。此外,免費資料庫最多提供 256 MB 的儲存容量。 免費 Postgres 不支援持久性資料儲存擴充與備份策略。若需進行備份、快照、還原,需改為付費方案。 免費版資料庫僅限於公開網路存取,不支援私有服務之間的資料庫連線(Private Networking)。也無高可用性(HA)與備援機制。若資料庫掛掉或 Render 有中斷,可能會有資料遺失風險。 支援程式語言:Node.js, Python, Ruby, Go, PHP 免費專案每天會「休眠」數小時,需要流量活躍來保持活躍。 免費方案每月包含一定的 出站頻寬 和 建置管線時間。超過配額後,若未新增付款方式,服務將被暫停。若已新增付款方式,將依據超出部分收費(例如,額外的 100GB 頻寬收費 $30 美元) 。 https://render.com/pricing 若要進行商業部署、API 平台支援或資料分析專案,建議改用付費的 Postgres Plus 方案,享有更穩定、容量更大(起始為 256MB → 10GB 起跳)、支援備份與自訂網域連線。 Render Postgres Services 免費方案下的 Web 服務配置為 0.1 vCPU 和 512 MB RAM。 Deploy for Free render.com/docs/free Ref: Add Render's free web services https://github.com/cloudcommunity/Cloud-Free-Tier-Comparison/issues/48 https://render.com/docs/disks htt...

LLM及LangChain開發筆記(14)_對話記憶(Conversational Memory):介紹與簡介

圖片
  記憶機制簡介 ConversationBufferMemory :儲存完整的對話歷史 ConversationSummaryBufferMemory :使用摘要方式儲存對話歷史 ConversationBufferWindowMemory :僅保留最後幾輪對話 ConversationalTokenBufferMemory :限制儲存的 Token 數量 範例程式 import openai import os from dotenv import load_dotenv, find_dotenv _ = load_dotenv(find_dotenv()) # read local .env file openai.api_key = os.getenv( 'OPENAI_API_KEY' ) from langchain.chat_models import ChatOpenAI chat = ChatOpenAI(model_name= "gpt-3.5-turbo" , temperature= 0.0 ) from langchain.callbacks import get_openai_callback def count_tokens (chain, query): with get_openai_callback() as cb: result = chain.run(query) print (f 'Spent a total of {cb.total_tokens} tokens' ) return result from langchain.chains import ConversationChain conversation_buf = ConversationChain( llm=chat, ) print (conversation_buf.prompt.template) from langchain.memory import ConversationBufferMemory memory=ConversationBuffe...

LLM及LangChain開發筆記(13)_輸出解析器(Output Parser)

圖片
  原始輸入(customer_review)內容: customer_review = """ 這個吹風機非常棒。它有四個檔位:輕柔模式、輕微微風、大風城市和龍捲風。 它在兩天內送到,正好趕上我妻子的周年紀念禮物。我覺得我妻子非常喜歡它, 她感到無言以對。到目前為止,我是唯一在使用它, 我每隔一天上班前用它來為妻子吹頭髮。它的價格略高於其他吹風機, 但我認為為了額外的功能,這是值得的。 """ 預期的輸出 JSON: { "禮物" : true, "送貨天數" : "2" , "價格" : [ "它的價格略高於其他吹風機," , "但我認為為了額外的功能,這是值得的。" ] } "禮物" 由 我妻子的周年紀念禮物 判斷為 true "送貨天數" 由 它在兩天內送到 中的「兩天」提取為 "2" "價格" 將描述價格與價值的兩句話提取為一組列表 Step1.定義 JSON 輸出格式的 Schema(結構化回應欄位) 目的是讓大語言模型(如 GPT)依照明確規範輸出 JSON 格式的資訊。 常用於資訊擷取(Information Extraction)任務。 匯入必要模組: ResponseSchema:定義每個欄位的名稱與描述。 StructuredOutputParser:根據這些 Schema 解析模型輸出。 ChatPromptTemplate:製作提示詞。 步驟1程式 from langchain.output_parsers import ResponseSchema from langchain.output_parsers import StructuredOutputParser from langchain.prompts.chat import ChatPromptTemplate gift_schema = ResponseSchema( name= "禮物" , desc...

LLM及LangChain開發筆記(12)_聊天模型的PromptTemplate_ChatPromptTemplate

圖片
  https://livebook.manning.com/book/langchain-in-action/chapter-1/v-3/49 範例1.HumanMessagePromptTemplate 根據指定主題與風格,自動生成一首詩。 import openai import os from dotenv import load_dotenv, find_dotenv _ = load_dotenv(find_dotenv()) # read local .env file openai.api_key = os.getenv( 'OPENAI_API_KEY' ) from langchain.chat_models import ChatOpenAI chat = ChatOpenAI(model_name= "gpt-3.5-turbo" , temperature= 0.0 ) from langchain.prompts import ChatPromptTemplate, HumanMessagePromptTemplate human_template = HumanMessagePromptTemplate.from_template( """ 請寫首詩,按以下主題與風格: 主題:{theme} 風格:{style} """ ) chat_prompt = ChatPromptTemplate.from_messages([human_template]) theme = "描述大海的美麗" style = "用唐代的七言詩,共四句,每句七個字" chat_prompt_value = chat_prompt.format_prompt( theme=theme, style = style ) response = chat.invoke(chat_prompt_value.to_messages()) print (response.content) 建立 Prompt 模板(HumanMessage) 使用者輸入的 pr...

LLM及LangChain開發筆記(11)_文本語言模型LLMs的FewShotPromptTemplate

圖片
透過給模型幾個示範範例,讓它更好地模仿這些範例風格來回答新問題。 https://python.langchain.com/api_reference/core/prompts/langchain_core.prompts.few_shot.FewShotPromptTemplate.html 示範程式1.實作一個 few-shot learning 對話提示系統。 使用 LangChain + OpenAI GPT 模型(gpt-3.5-turbo-instruct) 透過 few-shot learning(少樣本學習) 方式,讓 GPT 模型根據兩個範例學會風格與語氣,並回答新的問題。 import openai import os from dotenv import load_dotenv, find_dotenv _ = load_dotenv(find_dotenv()) # read local .env file openai.api_key = os.getenv( 'OPENAI_API_KEY' ) from langchain import FewShotPromptTemplate, PromptTemplate from langchain.llms import OpenAI llm = OpenAI(model_name= "gpt-3.5-turbo-instruct" ,temperature= 0.0 ,max_tokens= 1024 ) # create our examples examples = [ { "query" : "你好嗎?" , "answer" : "還不錯,但有時我們仍會抱怨。" }, { "query" : "現在幾點了?" , "answer" : "是時候買支手錶了。" } ] # create a example template example_temp...

LLM及LangChain開發筆記(10)_文本語言模型LLMs的PromptTemplate

圖片
在過去幾篇章中探討到關於prompt技巧,至於所謂PromptTemplate主要聚焦在如何去重複運用提示詞,並將其抽離成可以重複使用的模板。類似所謂「字串插值」(String interpolation)。 傳統透過python f string去做format字串傳參數的寫法較不靈活。 https://python.langchain.com/api_reference/core/prompts/langchain_core.prompts.prompt.PromptTemplate.html 示範程式1 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 import openai import os from dotenv import load_dotenv, find_dotenv _ = load_dotenv(find_dotenv()) # read local .env file openai.api_key = os.getenv( 'OPENAI_API_KEY' ) from langchain.llms import OpenAI llm = OpenAI(model_name= "gpt-3.5-turbo-instruct" ,max_tokens= 1024 ) from langchain import PromptTemplate template = """ 請將由三個反引號分隔的文本內容用一句話進行概括 ```{text}``` """ prompt_template = PromptTemplate( input_variables = [ "text" ], template = template ) print ( prompt_template.format( text = "這是一個神奇的大模型,可以像人一樣對話" ) ) 示範程式2 1 2 3 4 5 ...