⽤ LLM 來整理您的
知識庫
Taipei
Johnny Sung
Full stack developer
Johnny Sung (宋岡諺)
https://fb.com/j796160836
https://blog.jks.co
ff
ee/
https://www.slideshare.net/j796160836
https://github.com/j796160836
⼤綱
•LLM 是什麼?
•怎麼樣問問題?
•使⽤ Langchain
•語⾔模型的選擇
•Vector Store 的選擇
•Demo
https://www.trustedreviews.com/explainer/what-is-google-deepmind-4327570
https://www.bbc.com/news/technology-35785875
李世乭
(이세돌)
2016年3⽉
https://deepmind.google/discover/blog/alphastar-mastering-the-real-time-strategy-game-starcraft-ii/
2019年1⽉
https://developers.generativeai.google/products/palm
PaLM 2
(Pathways Language Model)
https://medium.com/@aiuniverse/google-deepminds-gemini-ai-model-is-expected-to-launch-next-month-c1c524c3e863
https://bard.google.com/chat
可能有⼈第⼀眼看到
阿?不就是個⽂字框嗎? 🤔
https://www.theodysseyonline.com/magic-lamp-my-three-wishes-from-genie
不!它是個神燈!
Prompt
/prɒm(p)t/
指令、提⽰、咒語
LLM 的運作原理
Taipei
https://sebastianraschka.com/blog/2023/llm-reading-list.html
LLM 的運作原理
https://sebastianraschka.com/blog/2023/llm-reading-list.html
LLM 的運作原理
簡⽽⾔之就是,
的接龍遊戲
預測下⼀個字
https://www.empireonline.com/movies/features/westworld-season-3-tackle-burning-questions/
Ai
prompt
(⻄部世界 WestWorld)
怎麼樣問問題?
Taipei
Prompt
/prɒm(p)t/
指令、提⽰、咒語
怎麼樣問問題?
怎麼樣問個好問題?
怎麼樣寫咒語
如何問⼀個好問題?
•⾓⾊扮演,帶⼊情境
給他⼀個⼈設(⼈物設定),適時加上對於這個⼈設的敘述
•多舉例⼦
講多⼀點,多舉例⼦,讓它有跡可循
•引導式詢問
不直接給答案,繞著主題來引導並推論得到答案
https://cloud.google.com/vertex-ai/docs/generative-ai/learn/introduction-prompt-design
https://news.ltn.com.tw/news/life/breakingnews/926421
https://kknews.cc/zh-hk/psychology/oy9jnbq.html
假設你是⼀個 ________ 的專家
它怎麼幫助你的⽣活?
⽂本撰寫
問題除錯
語⾔學習
Question by Adrien Coquet from Noun Project (CC BY 3.0)
https://thenounproject.com/icon/question-3884088/
Learning by surotobendol075 from Noun Project (CC BY 3.0)
https://thenounproject.com/icon/learning-6383688/
Writing by Chattapat from Noun Project (CC BY 3.0)
https://thenounproject.com/icon/writing-3973939/
Bard 跟其他家的不⼀樣!
機器⼈三⼤定律
⼀、機器⼈不得傷害⼈類,或坐視⼈類受到傷害。
⼆、在不違反第⼀定律的前提下,機器⼈必須服從⼈類的命令。
三、在不違反第⼀與第⼆定律的前提下,機器⼈必須保護⾃⼰。
科幻⼩說家 以撒・艾西莫夫 (Isaac Asimov)
https://www.forbes.com/sites/stuartanderson/2019/04/16/isaac-asimov-a-family-immigrant-who-changed-science-
fi
ction-and-the-world/?sh=47a9b7335a30
AI 奉⾏準則(1/3)
1. Be socially bene
fi
cial.
對社會有益
將考慮社會和經濟因素,並將在我們認為整體的收益超過可預⾒的風險和負⾯的情況下繼續進⾏。
2. Avoid creating or reinforcing unfair bias.
避免產⽣或加強不公平的偏⾒
AI算法和數據集可以反映加強或減少不公平的偏⾒,因此因盡量避免對⼈們產⽣不公正的影響。
3. Be built and tested for safety.
在安全的基礎上建立並進⾏測試
開發和應⽤強有⼒的安全措施,以避免產⽣可能的意外。
https://ai.google/responsibility/principles/
AI 奉⾏準則(2/3)
4. Be accountable to people.
對⼈類負責
我們將設計⼈⼯智能系統為反饋,相關解釋和吸引⼒提供適當的機會。我們的⼈⼯智能技術將受到適當的⼈類
指導和控制。
5. Incorporate privacy design principles.
結合隱私設計原則
⿎勵具有隱私保護措施的架構,並提供適當的透明度和對數據使⽤的控制。
6. Uphold high standards of scienti
fi
c excellence.
堅持⾼標準的科學卓越性
技術創新植根於科學⽅法,致⼒於開放探究,嚴謹,誠信和協作。
https://ai.google/responsibility/principles/
AI 奉⾏準則(3/3)
7. Be made available for uses that accord with these
principles.
僅供符合這些原則的⽤途使⽤
許多技術有多種⽤途,因限制可能有害或濫⽤的應⽤程序。
https://ai.google/responsibility/principles/
https://cloud.google.com/static/vertex-ai/docs/generative-ai/images/generative-ai-work
fl
ow.png?dcb_=0.8499414824468179
安全審查機制
使⽤ Langchain
Taipei
https://python.langchain.com/en/latest/index.html
提供⼀個預整理好的知識庫給 Bard 去查找
,佐證資料都有來源參考
Retrieval Augmented Generation (RAG)
檢索增強⽣成
效果展⽰ https://youtu.be/Ix9WIZpArm0?t=128
輸入
特斯拉 2020, 2021, 2022
財報,近 1000 ⾴
詢問 特斯拉在 2022 年的風險
提供出處在哪⼀個檔案、第幾⾴
詢問
特斯拉過去三年的營運表現
內容橫跨三個檔案
⼀次提供三個出處
https://time.com/4106853/harry-potter-dumbledore-pastor/
https://screenrant.com/harry-potter-pensieve-memories-movies-missing/
https://zyngasupport.helpshift.com/hc/en/79-harry-potter-puzzles-spells/faq/19120-the-pensieve/
儲思盆 (Pensieve)
https://potterheadonline.wordpress.com/2015/10/25/what-does-the-pensieve-do/
https://hellogiggles.com/guy-his-wife-real-pensieve-harry-potter/
https://github.com/alejandro-ao/ask-multiple-pdfs/blob/main/docs/PDF-LangChain.jpg
Embedding
Model
餵資料
https://python.langchain.com/docs/use_cases/question_answering/
餵資料
載⼊ 字詞切分 轉成向量 儲存
https://devopedia.org/word-embedding
https://blog.ml6.eu/leveraging-llms-on-your-domain-speci
fi
c-knowledge-base-4441c8837b47
詢問
查找相關資料 相關結果
問題+結果
⽣成回答
問題
知識庫 (Vector database)
https://github.com/alejandro-ao/ask-multiple-pdfs/blob/main/docs/PDF-LangChain.jpg
Embedding
Model
QA_TEMPLATE:`
你是⼀位專業的研究者。根據下⾯的情境片段來回答最後的問題。
如果你不知道答案,請坦率地說你不知道,不要試圖胡亂編造答案。
如果問題與上下⽂或聊天歷史無關,請禮貌地回應說你只回答與上下⽂相關的問題。
<context>
{context}
</context>
<chat_history>
{chat_history}
</chat_history>`
你是⼀位專業的研究者。根據下⾯的情境片段來回答最後的問題。
如果你不知道答案,請坦率地說你不知道,不要試圖胡亂編造答案。
如果問題與上下⽂或聊天歷史無關,請禮貌地回應說你只回答與上下⽂相關的問題。
<context>
1 本法⾃公布⽇施⾏。
2 本法中華⺠國八⼗九年六⽉⼆⼗八⽇修正公布之第三⼗條第⼀項及第⼆項,⾃九⼗年⼀
⽉⼀⽇施⾏;⼀百零四年⼆⽉四⽇修正公布之第⼆⼗八條第⼀項,⾃公布後八個⽉施⾏
;⼀百零四年六⽉三⽇修正公布之條⽂,⾃⼀百零五年⼀⽉⼀⽇施⾏;⼀百零五年⼗⼆
⽉⼆⼗⼀⽇修正公布之第三⼗四條第⼆項施⾏⽇期,由⾏政院定之、第三⼗七條及第三
⼗八條,⾃⼀百零六年⼀⽉⼀⽇施⾏。
3 本法中華⺠國⼀百零七年⼀⽉⼗⽇修正之條⽂,⾃⼀百零七年三⽉⼀⽇施⾏。
八、其他經中央主管機關指定之事業。
2 依前項第八款指定時,得就事業之部分⼯作場所或⼯作者指定適⽤。
3 本法適⽤於⼀切勞雇關係。但因經營型態、管理制度及⼯作特性等因素適⽤本法確有窒
礙難⾏者,並經中央主管機關指定公告之⾏業或⼯作者,不適⽤之。
4 前項因窒礙難⾏⽽不適⽤本法者,不得逾第⼀項第⼀款⾄第七款以外勞⼯總數五分之⼀
。
第 4 條
本法所稱主管機關:在中央為勞動部;在直轄市為直轄市政府;在縣(市)為縣(市
度內預估成就第五⼗三條或第五⼗四條第⼀項第⼀款退休條件之勞⼯,依前條計算之退
休⾦數額者,雇主應於次年度三⽉底前⼀次提撥其差額,並送事業單位勞⼯退休準備⾦
監督委員會審議。
3 第⼀項雇主按⽉提撥之勞⼯退休準備⾦匯集為勞⼯退休基⾦,由中央主管機關設勞⼯退
休基⾦監理委員會管理之;其組織、會議及其他相關事項,由中央主管機關定之。
4 前項基⾦之收⽀、保管及運⽤,由中央主管機關會同財政部委託⾦融機構辦理。最低收
益不得低於當地銀⾏⼆年定期存款利率之收益;如有虧損,由國庫補⾜之。基⾦之收⽀
、保管及運⽤辦法,由中央主管機關擬訂,報請⾏政院核定之。
5 雇主所提撥勞⼯退休準備⾦,應由勞⼯與雇主共同組織勞⼯退休準備⾦監督委員會監督
之。委員會中勞⼯代表⼈數不得少於三分之⼆;其組織準則,由中央主管機關定之。
6 雇主按⽉提撥之勞⼯退休準備⾦比率之擬訂或調整,應經事業單位勞⼯退休準備⾦監督
委員會審議通過,並報請當地主管機關核定。
7 ⾦融機構辦理核貸業務,需查核該事業單位勞⼯退休準備⾦提撥狀況之必要資料時,得
保密。但有下列情事之⼀者,不在此限:
⼀、同⼀檢舉事項,於依勞資爭議處理法進⾏之調解、仲裁、裁決或依法提起⺠事訴訟
程序,已為被檢舉⼈知悉或可得知悉。
⼆、經檢舉⼈及檢舉案件之當事⼈,認無保密之必要。
2 受理檢舉機關(構)對於前項所定保密之資訊,應以密件保存,並禁⽌第三⼈閱覽或抄
錄。
第 7 條
受理檢舉機關(構)受理檢舉案件,於辦理檢舉⽂書之分⽂、保管、封發及歸檔等事項
</context>
<chat_history>
</chat_history>
Embedding 輸出內容
https://github.com/alejandro-ao/ask-multiple-pdfs/blob/main/docs/PDF-LangChain.jpg
https://python.langchain.com/docs/use_cases/question_answering/
詢問問題
向量查找
整合 Prompt
答案
Embedding
是什麼?
Taipei
https://devopedia.org/word-embedding
https://devopedia.org/word-embedding
https://devopedia.org/word-embedding
https://en.wikipedia.org/wiki/T-distributed_stochastic_neighbor_embedding
(資料圖片為⽰意,非真實情況)
語⾔模型的選擇
Taipei
模型的選擇
•Gemini in Google Ai Studio
•Gemini in Vertex AI
•PaLM 2 in Google Ai Studio
•PaLM 2 in Vertex AI
Vertex AI
Google Ai Studio
https://makersuite.google.com/
https://console.cloud.google.com/vertex-ai/generative/
language/create/text
https://ai.google.dev/models/gemini?hl=en
Gemini proin Google AI Studio
https://console.cloud.google.com/vertex-ai/publishers/google/model-garden/gemini-pro?hl=en
https://cloud.google.com/vertex-ai/docs/generative-ai/learn/models
Gemini proin Ve
rt
ex-ai
+2040
+6144
PaLM 2 in Vertex AI
•從 Google Ai Studio (原 MakerSuite)
取得 API_KEY
•額度內免費
•text-bison@001 不⽀援中⽂
PaLM 2 in Google Ai Studio
•直接使⽤ Google Cloud credentials
•要輸⼊⼀張信⽤卡 💳
•text-bison@002 可⽀援中⽂
•對應 Langchain 相關 class
• GoogleVertexAI
• GoogleVertexAIEmbeddings
• GoogleVertexAIMultimodalEmbeddings
•對應 Langchain 相關 class
• GooglePaLM
• GooglePaLMEmbeddings
PaLM 2
in Google AI Studio ( bison 野⽜ )
PaLM 2 in Google AI Studio
https://ai.google.dev/models/palm
( bison 野⽜ )
PaLM 2 (embedding model) in Google AI Studio
https://ai.google.dev/models/palm
( gecko 壁虎 )
https://console.cloud.google.com/vertex-ai/publishers/google/model-garden/text-bison?project=secure-pursuit-407306&supportedpurview=project
https://cloud.google.com/vertex-ai/docs/generative-ai/learn/model-versioning
PaLM 2in Ve
rt
ex-ai
https://cloud.google.com/vertex-ai/docs/generative-ai/learn/models
PaLM 2in Ve
rt
ex-ai
當然還有其他開源的 Model 可以選擇
(Vertex AI) Model Garden
(應該)都點得到
(Vertex AI) Model Garden
可調整的參數
Temperature 溫度
• 個⼈重新解釋:酒精濃度
• 值越⾼,回答越有創意、開創性,越容易出現胡⾔亂語的機會
• 值越低,回答越趨於保守、謹慎
• 建議值在 0.0 ~ 1.0 之間
https://www.evergreet.com.tw/tw/article/Professional/Getting_started_with_wine%20tasting
可調整的參數
• Top K
Top K 是⼀種「截斷策略」,它在每⼀步⽣成過程中僅考慮概率最⾼的 K 個詞。例如,如果K設置
為 50,則模型在預測下⼀個詞時只從概率最⾼的 50 個詞中選擇。這減少了⽣成不相關或離題內容
的風險。
• Top P(⼜稱Nucleus Sampling)
Top P 是另⼀種截斷策略,它根據累積概率來選擇詞。在這種⽅法中,選擇⼀組最⼩的詞,這些詞
的累積概率加起來等於 P。例如,如果P設置為 0.9,模型會選擇⼀組詞,這些詞的累計概率達到
90%。這允許更靈活的詞選擇,同時減少⽣成非常罕⾒或不相關詞的可能性。
可調整的參數
• chunkSize
chunkSize 是⽂字切分器的最⼤片段⼤⼩。
• chunkOverlap
chunkOverlap 是⼀個讓 LLM 上下⽂參照辨識使⽤的重疊⼤⼩。
Vector Store 的選擇
Taipei
Vector database
https://www.v7labs.com/blog/vector-databases
Vector stores
• Chroma
• Deep Lake
• ElasticSearch
• ElasticVectorSearch class
• ElasticKnnSearch class
• FAISS (Facebook AI Similarity Search)
• Pinecone
• Redis
• Supabase (Postgres)
• …
https://python.langchain.com/en/latest/modules/indexes/vectorstores.html
https://miro.medium.com/v2/resize:
fi
t:1200/1*VSkugYj5NOCQ8xTPaWnv2w.png
https://docs.trychroma.com/
Chroma 提供向量資料庫供語⾔模型做查詢
https://github.com/chroma-core/chroma
$ docker compose up -d
version: '3.9'
services:
server:
image: ghcr.io/chroma-core/chroma:latest
restart: always
command: uvicorn chromadb.app:app --reload --
workers 1 --host 0.0.0.0 --port 8000 --log-config
chromadb/log_config.yml --timeout-keep-alive 30
volumes:
- chroma_persistent_folder:/chroma/chroma/
ports:
- 8000:8000
networks:
- net
volumes:
chroma_persistent_folder:
driver: local
networks:
net:
driver: bridge
⽤ Docker 啟動 Chroma 超⽅便!
https://www.bluestarpackaging.co.uk/single-walled-cardboard-box-85-x-7-x-4---pack-of-25-166-p.asp
docker-compose.yml
怎麼開始?
Taipei
Langchain
•Python 版本
https://python.langchain.com/
•JavaScript 版本
https://js.langchain.com/
Google Ai Studio
•步驟 Google Ai Studio 取得 API Key
•https://makersuite.google.com/
•修改 .env 變數
https://makersuite.google.com/
{
"error": {
"code": 400,
"message": "The requested language is not supported by models/text-bison-001",
"status": "INVALID_ARGUMENT"
}
}
curl 
-H 'Content-Type: application/json' 
-d '{ "prompt": { "text": "雞胸⾁怎麼煮才不柴?"} }' 
"https://generativelanguage.googleapis.com/v1beta3/models/text-bison-001:generateText?key=YOUR_API_KEY"
舊版 text-bison@001 不⽀援中⽂
{
"candidates": [
{
"content": {
"parts": [
{
"text": "1. **⽤鹽⽔浸泡雞胸⾁**。在烹飪前將雞胸⾁放入鹽⽔中浸泡 30 分鐘,可以幫助雞胸⾁保持
⽔分和嫩度。nn2. **使⽤低溫烹飪**。使⽤低溫烹飪可以防⽌雞胸⾁被煮過頭,⽽讓它保持多汁和嫩滑。可以
使⽤烤箱、慢燉鍋或sous vide來低溫烹飪雞胸⾁。nn3. **快速烹飪**。如果你不想使⽤低溫烹飪,那麼快
速烹飪也可以防⽌雞胸⾁被煮過頭。可以使⽤平底鍋、烤盤或烤架來快速烹飪雞胸⾁。nn4. **使⽤醬汁或醃料
**。使⽤醬汁或醃料可以幫助雞胸⾁保持⽔分和嫩度。你可以在烹飪前將雞胸⾁放入醬汁或醃料中浸泡,也可以在
烹飪過程中刷上醬汁。nn5. **不要煮過頭**。雞胸⾁很容易被煮過頭,所以要注意烹飪的時間。使⽤⾁類溫度
計來檢查雞胸⾁是否煮熟,當雞胸⾁的內部溫度達到 74 攝⽒度時,即可取出。nn6. **讓雞胸⾁休息**。在
烹飪完雞胸⾁後,讓它休息 5-10 分鐘,這可以幫助雞胸⾁中的⽔分重新分布,使雞胸⾁更加多汁和嫩滑。"
}
],
"role": "model"
},
"finishReason": "STOP",
"index": 0,
"safetyRatings": [
{
"category": "HARM_CATEGORY_SEXUALLY_EXPLICIT",
"probability": "NEGLIGIBLE"
},
{
"category": "HARM_CATEGORY_HATE_SPEECH",
"probability": "NEGLIGIBLE"
},
{
"category": "HARM_CATEGORY_HARASSMENT",
"probability": "NEGLIGIBLE"
},
{
"category": "HARM_CATEGORY_DANGEROUS_CONTENT",
"probability": "NEGLIGIBLE"
}
]
}
],
"promptFeedback": {
"safetyRatings": [
{
"category": "HARM_CATEGORY_SEXUALLY_EXPLICIT",
"probability": "NEGLIGIBLE"
},
{
"category": "HARM_CATEGORY_HATE_SPEECH",
"probability": "NEGLIGIBLE"
},
{
"category": "HARM_CATEGORY_HARASSMENT",
"probability": "NEGLIGIBLE"
},
{
"category": "HARM_CATEGORY_DANGEROUS_CONTENT",
"probability": "NEGLIGIBLE"
}
]
}
}
#!/bin/bash
API_KEY="YOUR_API_KEY"
curl 
-X POST 'https://generativelanguage.googleapis.com/v1beta/models/gemini-
pro:generateContent?key='${API_KEY} 
-H 'Content-Type: application/json' 
-d @<(echo '{
"contents": [
{
"parts": [
{
"text": "雞胸⾁怎麼煮才不柴?"
}
]
}
],
"generationConfig": {
"temperature": 0.9,
"topK": 1,
"topP": 1,
"maxOutputTokens": 2048,
"stopSequences": []
},
"safetySettings": [
{
"category": "HARM_CATEGORY_HARASSMENT",
"threshold": "BLOCK_MEDIUM_AND_ABOVE"
},
{
"category": "HARM_CATEGORY_HATE_SPEECH",
"threshold": "BLOCK_MEDIUM_AND_ABOVE"
},
{
"category": "HARM_CATEGORY_SEXUALLY_EXPLICIT",
"threshold": "BLOCK_MEDIUM_AND_ABOVE"
},
{
"category": "HARM_CATEGORY_DANGEROUS_CONTENT",
"threshold": "BLOCK_MEDIUM_AND_ABOVE"
}
]
}')
要不直接改⽤ Gemini ?
Vertex AI
•到 Vertex AI 啟動功能
https://cloud.google.com/vertex-ai?hl=en
•安裝 Google Cloud CLI
https://cloud.google.com/sdk/docs/install-sdk
•執⾏登⼊指令取得 Key
gcloud auth application-default login
•修改 .env 變數
這需要你的魔法⼩卡 😆
💳
🧙
如果 Langchain 有問題,環境變數設定
LANGCHAIN_VERBOSE="true"
打開更詳細的 Debug Log
程式歡迎拿去改!
https://github.com/j796160836/gpt4-pdf-chatbot-langchain
🙇
Q&A
參考資料
• LLM: Google Vertex Ai
• https://js.langchain.com/docs/integrations/llms/google_vertex_ai
• Embeddings: GooglePaLMEmbeddings
• https://api.js.langchain.com/classes/experimental_multimodal_embeddings_googlevertexai.GoogleVertexAIMultimodalEmbeddings.html
• Embeddings: GoogleVertexAIMultimodalEmbeddings
• https://js.langchain.com/docs/modules/data_connection/experimental/multimodal_embeddings/google_vertex_ai
• https://api.js.langchain.com/classes/experimental_multimodal_embeddings_googlevertexai.GoogleVertexAIMultimodalEmbeddings.html
• LLM: Google PaLM
• https://js.langchain.com/docs/integrations/llms/google_palm
• Embeddings: GooglePaLMEmbeddings
• https://api.js.langchain.com/classes/embeddings_googlepalm.GooglePaLMEmbeddings.html
https://js.langchain.com/docs/integrations/chat/google_generativeai
https://js.langchain.com/docs/integrations/chat/google_generativeai
https://python.langchain.com/docs/integrations/chat/google_generative_ai

[AI / ML] 用 LLM (Large language model) 來整理您的知識庫 @Devfest Taipei 2023