淺談 Generative AI Engineer: 給 Rubyist 的上手指南
最後更新日期: 2023/12/16
我是誰
  • 張文鈿,網路暱稱 ihower
  • 2002 年開始從事 Web 軟體開發
  • 擅長使用 Ruby on Rails 技術,是個 Full-Stack Web Developer
  • 2018 年成立愛好資訊科技
  • 一個全端開發者 full-stack developer 的觀點,不是 Machine Learning Engineer 或 Data Scientist 觀點

👉 我的 LLM 應用開發工作坊課程https://ihower.tw/notes/llm-app-workshop
👉 我的 AI Engineer 電子報,歡迎訂閱
aihao.eo.page/ai-engineer
☝️ 什麼是生成式 AI Engineer?
1
AI 應用開發的典範轉移
2
什麼是 AI Engineer
What's LLM?
  • Large Language Model 大型語言模型
  • 用非常多語言資料來訓練的深度學習語言模型
  • ChatGPT 背後的關鍵技術,可以處理廣泛的自然語言任務(NLP)
  • 分類、摘要、翻譯、問答、情感分析、文本產生等等
  • 這個模型用戶輸入一句話(也就是提示詞 Prompt),模型可以預測下一句話(答案)
  • 和生成式AI 的關係是?
  • Generative AI 泛指所有可以 生成內容的 AI,包括文字、影像(Midjourney, Stable Diffusion 等)
Prompting 是 AI 應用開發的革命
  • 跟以往機器學習流程不同,呼叫 LLM API 的使用門檻很低
  • LLM 是個通用模型,用 API 去呼叫即可,不需要從頭訓練模型
  • 更何況從頭訓練起的成本上百萬美金
  • App Developer 會 Prompt 就可以做到之前要有 Machine Learning 團隊才能做到的事情
  • 而且現在做的又快又好
推薦:吳恩達(Andrew Ng)博士的 Opportunities in AI 演講
Loading...
對應用開發的軟體工程師來說,LLMs 就是一個黑盒子
我們直接把 LLM 當作一個 HTTP API 來使用
~$ curl https://api.openai.com/v1/completions -H "Content-Type: application/json" -H "Authorization: Bearer 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" -d '{ "model": "gpt-3.5-turbo-instruct", "prompt": "寫一首關於AI的詩,50字以內" }' { "id": "cmpl-80LQCalwcouTwifiSgG2xXDV7MwkA", "object": "text_completion", "created": 1695093036, "model": "gpt-3.5-turbo-instruct", "choices": [ { "text": "\n\n機器之腦\n人類所想", "index": 0, "logprobs": null, "finish_reason": "length" } ], "usage": { "prompt_tokens": 18, "completion_tokens": 16, "total_tokens": 34 } }
新時代 AI Engineer 的崛起
  • 美國知名科技部落格主 swyx (Shawn Wang)的這篇文章提出在 AI 新時代出現的新職種 — AI 工程師 (AI Engineer)
  • 我們以 LLM API 為界
  • 左端負責研發模型、微調模型,並提供 API
  • 右端則是新的 AI 工程師和全端工程師
  • 除了提示詞 Prompt,想把 LLM 整合進產品,還需要做 Prompt Engineering、Chaining、Embeddings、Vector Database、RAG、Agent 等等
  • 這些事情不是傳統ML工程師、也不是科學家在做的事,而是應用面的實作
  • 例如:Github Co-pilot 是一個成功的產品,但背後的 Prompt 交互細節是經過不斷打磨出來的 UX
  • 預測會有越來越多全端工程師逐漸掌握使用 LLM API 技能

www.latent.space

The Rise of the AI Engineer

Emergent capabilities are creating an emerging job title beyond the Prompt Engineer. Plus: Join 500 AI Engineers at our first summit, Oct 8-10 in SF!

接下來,讓我們看看 (Generative) AI Engineer 的守備範圍 👨‍💻 🔎
✌️ AI Engineer 指南
今天時間有限,只會涵蓋部分內容並加上 Ruby Code 的示範,會後會分享完整的入門投影片
Part 1: 認識提示詞 Prompting
1
LLM API
了解 LLM API 的參數和限制
2
Prompt Techniques
如何寫好 Prompt
3
Prompt Engineering
工程思維和評估
Part 2: 四種常見應用場景
1
Conversation
Chatbot 對話應用
2
Summarization
長文本摘要轉換
3
Retriever Augmented
語意搜尋 和 QA 應用
4
Agent
自主決策的代理人
Part 3: 進階議題討論
1
LLM App Stack
了解工具
2
如何選擇模型
閉源 v.s. 開源
3
Fine-tuning
模型微調
4
LLM Hosting
模型部署
AI Engineer 指南
Part 1: 認識提示詞 Prompting
1
LLM API
了解 LLM API 的參數和限制
2
Prompt Techniques
如何寫好 Prompt
3
Prompt Engineering
工程思維和評估
LLM API 的參數有
  • model 模型,例如 OpenAI 的 gpt-3.5-turbo 或是 gpt-4
  • prompt 提示詞 (或 messages 對話紀錄)
  • temperature 溫度或 top_p 控制輸出的隨機性: 0.8 有創意、0.5 平衡、0.2 精準、0 總是一樣的回應
  • max_tokens 回應最多產生多少 token
  • 此 token 是切詞(sub-words)出來的單位,不同 model 有不同上限
有哪些 LLM 模型?
目前有在雲端上有提供 Token-based 計費的 API 服務,也就是 OpenAI, Google, Claude, Llama 這幾家主流模型
OpenAI
  • GPT-3.5-Turbo (4k)
  • GPT-3.5-Turbo-16k (在 2023/12/11 會成為預設)
  • GPT-4 (8k)
  • GPT-4-32k
  • GPT-4-1106 (128k,有 Vision 解讀辨識功能)
除了 OpenAI,你也可以在微軟的 Azure 上使用
Anthropic
  • claude-instant-1.2
  • claude-2.1 200k
Google
  • PaLM
  • Gemini
Meta
  • Llama 2 (開源)
  • 大小有分 7B, 13B, 70B,以及 Chat 版本、HF 版本
你可以在 Azure 跟 AWS Bedrock 上使用
什麼是 Token 字數限制 (context window)
LLM 模型需將文字轉成編碼,才能訓練和輸出。方法是用 Sub-words 來切,而是不是用單字。
  • 1 token 大約是 4 英文字母
  • 100 token 大約是 75 words
  • 一個中文字約是 2 tokens
  • 不同LLM模型的最大可處理 tokens 數不同,例如
  • 新的 gpt3.5-turbo 是 16k (包含 prompt 輸入和輸出) 1106版
  • gpt-4 是 8k
  • 新的 gpt-4-turbo 是 128k
使用 LLM API 注意事項
1
模型是非確定性的
  • Prompt 沒有一定正確的寫法標準
  • 不同的 LLM 模型,表現不一樣、Prompt 也有差異
  • 有幻覺現象 (Hallucination) 可能會唬爛
2
API 是 Stateless 無狀態的
  • 每次你都得把所有對話歷史傳給 LLM API
3
Token 有長度限制 (Context Window)
  • Prompt 太長加上回應後,可能會超過限制
4
知識實時性 (有 cut-off date)
  • 模型只有到訓練當時的資料 (例如 OpenAI 是 2021/9),沒有新的內容,也沒有私人資料
  • 最新的 GPT-4-1106 版更新至 2023/4
5
LLM 本身不會用外部工具
  • LLM 本身不會連網自動去搜尋資料
6
LLM 還有安全性問題還沒完全解決
  • Prompt Injection
  • Jailbreaking
  • Prompt leaking
  • LLM Attacks

這些議題,代表工程團隊還有很多事情可做 😎
所以,LLMs are not all you need
光靠 LLM 還不夠,要打造一個產品,我們還需要圍繞 LLM 建立工程生態,來將 LLM 好好運作起來。
圖片出處:

pinecone

LLMs Are Not All You Need

A walk through the large language models (LLMs) ecosystem. Covering things like deploying open access LLMs, quantization, hallucination, retrieval augmented generation (RAG), conversational memory, agents, and more.

AI Engineer 指南
Part 1: 認識提示詞 Prompting
1
LLM API
了解 LLM API 的參數和限制
2
Prompt Techniques
如何寫好 Prompt
3
Prompt Engineering
工程思維和評估
1️⃣ 寫清晰且具體的指示
  • 清晰不代表短,Prompt 可以寫很長描述具體清楚
  • 指示最好用到明確的關鍵字: Classify, Translate, Summarize, Extract
  • 指示非常詳盡完整,就像教一個職場實習生。越厲害的模型例如 GPT-4 越有能力遵守這些指令。
  • 用分隔符號來明確界定輸入的不同部分
  • 也可避免 Prompt injection: 用戶輸入一些 prompt 繞過你的指示,讓模型發出你不想做的事情
  • 可以指定輸出格式,例如指定 JSON 輸出、用分隔號區隔不同段落、或是用 XML 包起來
  • 給範例 (這叫做 Few-shot prompt/learning,相比於 zero-shot)
只有指示無範例(zero-shot)
晶晶體是一種流行於臺灣以中文為基底,夾雜英語不成句的單字或片語的表達方式。特指所使用的英文字多為過於簡單、沒有替換必要者,進而產生有意炫耀雙語能力卻弄巧成拙的效果。 例如: 原文: 每位員工都要參加每週電話會議,沒有例外 晶晶體:
每位員工都要參加每週電話會議,no exception
給範例 (few-shot)
在一些較難描述明確指示的任務中,蠻適合用 few-shot 的方式讓模型自己學,例如文字風格、特定的輸出結構(某種schema)
晶晶體是一種流行於臺灣以中文為基底,夾雜英語不成句的單字或片語的表達方式。特指所使用的英文字多為過於簡單、沒有替換必要者,進而產生有意炫耀雙語能力卻弄巧成拙的效果。 例如: 原文: 我很忙,因為我很有事要做 晶晶體: 我是很busy,因為我很多things要do 原文: 天氣總算放晴,沒有下雨、太陽很大、有點熱、讓我想到以前還是學生時,喜歡在這樣的天氣,吃一球冰淇淋,真的會讓人很高興 晶晶體: 天氣總算放晴,沒有rain、太陽很big、有點hot、讓我想到以前還是student時,喜歡在這樣的天氣,吃一球ice cream,真的會讓人很happy 原文: 每位員工都要參加每週電話會議,沒有例外 晶晶體:
每位staff都要join每週phone meeting,沒有exception
2️⃣ 給模型思考時間
  • 拆解步驟,讓模型對一個問題進行更長的思考時間 (也就是,有更多的輸出)
  • 太困難的任務,模型無法在短時間或用很少的詞來完成,就會亂掰
  • 這招叫做 Chain of Thought (CoT)
  • 也可以不拆步驟,只需要寫 Let's think step by step,就會大幅改進推理
拆解成多步驟,例如
請按照以下步驟來回應使用者的輸入: Step 1: 用戶會用三個引號 ``` 包裹文案,請以"Summary: "為開頭,摘要這個文案成一個句子。 Step 2: 請將步驟1的摘要結果,翻譯成英文,並在前面加上 "Translation:" 請處理這段文字: #{user input}
CoT Live demo
  • 1-1 不用 CoT 的失敗案例
  • 1-2 使用 CoT 的成功案例
  • 2-1 使用 CoT 的成功案例
  • 2-2 省略輸出過程的失敗 CoT
  • 2-3 順序錯誤的失敗 CoT
  • 2-4 內心獨白策略
Why 需要給模型思考時間?
LLM 的運作方式,是一個 token 一個 token 的依序預測
根據前面的 tokens 序列,會影響預測的結果
  • 每個 N-th token 都依賴於 N-1 步時的 tokens 序列
  • 輸入的 Prompt 是初始的 tokens 序列,影響後面接續 tokens 的條件機率
選擇下一個 token 是個條件機率
溫度參數就是去調整這個機率,溫度0時,我們只會挑機率最大的那個 token。溫度越大則越隨機。
因此,你讓模型先輸出什麼(思考過程),就會影響模型後面輸出的結果

推薦文章

Bea Stollnitz

Bea Stollnitz - How GPT models work: accessible to everyone

Learn Azure ML and machine learning with Bea Stollnitz.

Chaining Prompts
  • 多個任務時,雖然用一個 prompt 拆步驟也行(CoT),但若是複雜的任務,對 LLM 來說比較挑戰
  • 拆開 Prompts 一次只做一個任務,用 Prompt 的輸出作為下一個 Prompt 的(部分)輸入
  • 一環接一環,最後結果通常比較穩定,除錯也較容易
  • 雖然缺點是 API call latency 會變高
  • 若要串接使用外部工具,也只能用 Chaining,無法用 CoT
Chaining Prompts Live demo
  • 3 使用 Chaining Prompts 做兩次翻譯: 直譯、意譯
  • 4 使用外部工具查詢公司股價
AI Engineer 指南
Part 2: 應用場景
1
Conversation
Chatbot 對話應用
2
Summarization
長文本摘要轉換
3
Retriever Augmented
語意搜尋 和 QA 應用
4
Agent
自主決策的代理人
語意搜尋 v.s 關鍵字搜尋
傳統關鍵字搜尋
  • BM25 算法
  • 需要有一模一樣的單字,才能搜尋出來
語意搜尋
  • 不需要一模一樣的單字,只要意思接近,就可以搜尋出來
  • 例如: 用戶查詢 "在家製作義大利麵" 時,以下內容也可以搜尋出來 (都沒有"義大利麵" 這四個字)
  • 在家製作傳統意式麵食
  • 自製意式麵條的步驟和秘訣"
  • 學習做一道經典的意大利式麵食
能夠代表語意的 Embedding
  • 以 OpenAI API 提供的 Embedding API 為例
  • 給一段不超過 8192 token 的文字,回傳一個 1536 維度的向量 Vector 代表這文字的語意
  • 文字可以是一個單字、一個標題、一句話、一個段落、一篇文章
語意搜尋” (Semantic Search)
  • 餘弦相似性 (Cosine similarity) 可以找出最接近的 Vectors,就是最相似的內容
  • 將用戶的搜尋關鍵字,去找最相似的內容,就是語意搜尋了
  • 也可以拿來做推薦引擎,推薦相關的產品或是內容
舉例: 將書做 Embedding 後的多維向量,降到二維後視覺化
如何針對超長文本做 QA 問答?
(Chat with Your Data)
  • 學名: Retrieval-Augmented Generation (RAG) 檢索增強
  • 先搜尋出相關內容,放進 Prompt 裡面當作 context,再問 LLM
  • 可有效減少 LLM 的幻覺現象,讓 LLM 根據資料進行回答
1. 準備工作
  • 先將文本資料拆段落 (chunks)
  • 每個段落建立 index,放到 Vector Database 向量資料庫
2. 當用戶問問題時
  • 根據問題做語意搜尋,找出 “問題字串” 和 “最相關的內容片段” 共 N 筆
  • 把 context 和問題組出 Prompt 再問 LLM
  • Prompt 範例:
the following pieces of context to answer the question at the end. If you don't know the answer, just say that you don't know, don't try to make up an answer. #{這裡放搜尋出來最相關的 context 資料} Question: #{這裡放用戶問題} Helpful Answer:
RAG Live demo
  • 索引部分
  • 詳見 Document#parse_and_index!
  • 問答部分
  • 詳見 SimpleRagJob#perform
  • 使用了 DocumentChunk.nearest_neighbors 找到最相似的內容
RAG 的系統元件
RAG 可以講的內容太多了….本質上其實是個資訊檢索 Information retrieval 問題,一種搜尋問題
圖片出處: LangChain: Chat with Your Data 課程
  • 資料來源: 載入多種格式文件: CSV, File, HTML, Markdown, PDF 等
  • 各種拆 chunk 的方式: Text Splitters
  • 各種 Vector Store (因為需要快速計算大量 vector 的 cosine 相似性)
  • 各種 Embedding 算法 (不只有 OpenAI Embedding)
  • 各種 Retriever (不只有 Vector 相似性搜尋)
  • 例如 Hybrid 結合傳統全文搜尋 BM25 算法
  • LangChain 跟 LlamaIndex 套件中有不少方法可試
  • Ranking 將搜尋結果重新排序,因為 LLM 對於放頭尾的內容比較記得
(補充) OpenAI DevDay (2023/11/7) 分享的 RAG 成功案例: 需要迭代做最佳化
  • 若只用 Vector 相似性搜尋,只能達到 45% 精準度
  • 需要再根據資料,用各種進階技巧來優化,才能達到 98% 的精準度
Llamaindex 的進階 RAG 方案
LangChain 的進階 RAG 方案
AI Engineer 指南
Part 2: 應用場景
1
Conversation
Chatbot 對話應用
2
Summarization
長文本摘要轉換
3
Retriever Augmented
語意搜尋 和 QA 應用
4
Agent
自主決策的代理人
Agent 應用
  • Chains v.s Agents
  • Chains: 固定的 Chaining 流程,要用哪些工具、呼叫幾次是寫死的
  • Agents: 不固定的 Chaining 流程,讓 LLM 判斷要用哪些工具、需要呼叫幾次
ReAct Prompting
  • 我們告訴 LLM 有哪些工具可以用,讓 LLM 自行判斷是否需要使用
  • 從用戶問題中擷取出工具參數
  • 執行工具
  • 觀察工具輸出
  • 不斷重複直到問題解決

ReAct 解說

ReAct: Synergizing Reasoning and Acting in Language Models 提出一種 Prompt Chaining 方式,可以進行連續推理和行動的代理人任務 圖片出處: edX 課程 Action: 根據用戶輸入,選擇應該用哪一個 Tool 就根據 tool 的文字描述來判斷 Action Input: 根據需要使用的 tool,從用戶輸入中提取參數 Observation: 觀察 Tool 得到的結果 Thought: 再看一次用戶輸入,判斷接下來怎麼辦 是回到 Action 用另一個工具? 還是這就是 Final Answer? Final Answer: Thought 看到 Observation 後,若認為這是解答,就給出最終輸出 實際 Prompt 範例 Answer the following questions as best you can. You have access to the following tools: 工具X: 工具X描述 工具Y: 工具Y描述 工具Z: 工具Z描述 Use the following format: Question: the input question you must answer Thought: you should always think about what to do Action: the action to take, should be one of [查詢最新消息, 計算機] Action Input: the input to the action Observation: the result of the action ... (this Thought/Action/Action Input/Observation can repeat N times) Thought: I now know the final answer Final Answer: the final answer to the original input question Begin! Question: #{用戶問題} Thought: 接著 AI 回傳 我需要先做什麼事情.... Action: 工具X Action Input: 工具X的參數 你在本機執行工具X,得到工具結果 下一個 prompt Answer the following questions as best you can. You have access to the following tools: 工具X: 工具X描述 工具Y: 工具Y描述 工具Z: 工具Z描述 Use the following format: Question: the input question you must answer Thought: you should always think about what to do Action: the action to take, should be one of [查詢最新消息, 計算機] Action Input: the input to the action Observation: the result of the action ... (this Thought/Action/Action Input/Observation can repeat N times) Thought: I now know the final answer Final Answer: the final answer to the original input question Begin! Question: #{用戶問題} Thought: #{我需要先做什麼事情} Action Input: #{工具X的參數} Observation: #{工具X執行後的結果} 接著 AI 可能回傳需要另一個工具 我需要先做什麼事情.... Action: 工具Y Action Input: 工具Y的參數 或是完成 我現在知道答案了。 Final Answer: 這是最後答案OOXX

OpenAI Function Calling 是個 killing feature 用來串接外部工具
  • 將自然語言轉換為 API 呼叫,更方便可靠串接外部工具,LLM 回傳的就是結構化參數
  • 告訴 LLM 你有哪些工具(Function)可以使用,讓 LLM 自己判斷要不要使用,要用的話回傳參數
  • 還可以做 metadata 萃取,將非結構化資料,轉成結構化資料
  • 目前有 OpenAI 和 Google Gemini Pro 推出,但其他家我猜未來也都會提供,Llama 2 也有人 fine-tuned 出來了
使用案例: 完整流程
以詢問天氣為例,LLM 沒有今天的天氣資料,但你自己有實作一個 get_current_weather 方法
Step 1:
發出 Prompt 請求,附上你有的 function 規格
{ "model": "gpt-3.5-turbo-0613", "messages": [ {"role": "user", "content": "今天台北天氣如何?"} ], "functions": [ { "name": "get_current_weather", "description": "傳入地點,回傳目前天氣資訊", "parameters": { "type": "object", "properties": { "location": { "type": "string", "description": "城市或地區" }, "unit": { "type": "string", "enum": ["celsius", "fahrenheit"] } }, "required": ["location"] } } ] }
LLM 的回應
{ "id": "chatcmpl-123", ... "choices": [{ "index": 0, "message": { "role": "assistant", "content": null, "function_call": { "name": "get_current_weather", "arguments": "{ \"location\": \"台北\"}" } }, "finish_reason": "function_call" }] }
Step 2
你實際呼叫 get_current_weather 方法,帶有參數 location,得到一個結果
{ "temperature": 22, "unit": "celsius", "description": "Sunny" }
Step 3
再次呼叫 OpenAI API,除了原先的對話紀錄,多傳一個 role 是 function 的資料,把上述的天氣結果放進去
{ "model": "gpt-3.5-turbo-0613", "messages": [ {"role": "user", "content": "今天台北天氣如何?"}, {"role": "assistant", "content": null, "function_call": {"name": "get_current_weather", "arguments": "{ \"location\": \"Boston, MA\"}"}}, {"role": "function", "name": "get_current_weather", "content": "{\"temperature\": "22", \"unit\": \"celsius\", \"description\": \"Sunny\"}"} ], "functions": [ { "name": "get_current_weather", "description": "傳入地點,回傳目前天氣資訊", "parameters": { "type": "object", "properties": { "location": { "type": "string", "description": "城市或地區" }, "unit": { "type": "string", "enum": ["celsius", "fahrenheit"] } }, "required": ["location"] } } ] }
回傳
{ "id": "chatcmpl-123", ... "choices": [{ "index": 0, "message": { "role": "assistant", "content": "台北目前天氣晴朗,氣溫為攝氏22度。", }, "finish_reason": "stop" }] }
結束。
使用案例: 用 Function Calling 就可以做到 ReAct 的效果

相比使用 ReAct prompting,使用 Function Calling 可在執行速度、成本、準確性上,有明顯提升!
當你的問題需要多次使用工具時,OpenAI 模型會連續指示你呼叫 Function 來完成任務。
Loading...
Function Calling Live demo
  • 5 使用 Function Calling 查詢公司股價
  • 6 有 Function Calling 但並沒有真正需要用到
  • 7 使用 Function Calling 查詢公司股價,一次查詢多家公司會有問題
  • 8 使用 Function Calling 查詢公司股價,改寫成 Agent 的遞迴版本
範例只有用到一個查詢股價的工具,實際上可以給多個工具,例如 CRUD 四個操作。這個 Function Calling Agent 可以根據用戶需求自動判斷要用哪一個工具。
另外,OpenAI 新模型 1106 版,也有支援 Parallel Function Calling
AI Engineer 指南
Part 3: 進階議題
1
LLM App Stack
了解工具
2
如何選擇模型
閉源 v.s. 開源
3
Fine-tuning
模型微調
4
LLM Hosting
模型部署
熱門的 Orchestration 調度框架
  • Langchain
  • 目前排行第一熱門的 LLM 框架,除了 Python,也有出 TypeScript 版本
  • Llamaindex
  • 排名第二熱門的 Python LLM 框架 Llamaindex,強項是做 RAG

不一定需要使用這種框架,完全可以自己打造需要的 LLM API wrapper 工具
  • LangChain 本身有多餘的複雜性,拿來做 PoC 用途非常方便好用,部分組件拿來用也行
  • 但上 Production 可用自己熟悉的後端程式語言(例如 Node.js, Ruby, PHP, Go, Java, C#) 來實做
  • 我自己的專案用 Ruby on Rails 也是直接用 Ruby 呼叫 OpenAI API
  • 關鍵就是 Prompt 怎麼寫,怎麼 Chaining 起來,這些參考 LangChain 文件跟程式碼就可以學會了
Ruby 的實作建議
若想用 LangChain 部分組件,可以用 PyCall.rb
幾個月前,我有用 pycall.rb 和 langchain 做過

GitHub

GitHub - mrkn/pycall.rb: Calling Python functions from the Ruby language

Calling Python functions from the Ruby language. Contribute to mrkn/pycall.rb development by creating an account on GitHub.

ihower { blogging }

(給Ruby開發者的) 大語言模型 LLM 應用開發入門 投影片

(2022/6) 對 LLM 有興趣的朋友,歡迎加入我的 Telegram討論群。 2023/5/3...

現在我推薦只用 HTTP client,或是用 openai gem

GitHub

GitHub - alexrudall/ruby-openai: OpenAI API + Ruby! 🤖🩵 Now with Assistants, Threads, Messages, Runs and Text to Speech 🍾

OpenAI API + Ruby! 🤖🩵 Now with Assistants, Threads, Messages, Runs and Text to Speech 🍾 - GitHub - alexrudall/ruby-openai: OpenAI API + Ruby! 🤖🩵 Now with Assistants, Threads, Messages, Runs and Tex...

向量資料庫則推薦用 PostgreSQL 的 pgvector
搭配 Neighbor gem

GitHub

GitHub - ankane/neighbor: Nearest neighbor search for Rails and Postgres

Nearest neighbor search for Rails and Postgres. Contribute to ankane/neighbor development by creating an account on GitHub.

那會需要用到 Python 嗎? 🐍
  • 上 Production 是可以用 Ruby 開發
  • 但是學習 LLM 的過程會碰到很多 Python 範例,所以逃不掉
  • 寫 Python 使用獨立環境的 Google colab notebook 是好東西
  • Python 的套件管理 👎👎
  • Python 的 OO 設計 👎👎
  • 所幸我們不需要學太多 Python,會基本語法就好了
  • 而且 ChatGPT 讓語言之間的隔閡降低了,我經常用 ChatGPT 幫我產生 Python code
請多指教
個人部落格 https://ihower.tw
今天的程式碼在 https://github.com/ihower/rails-llm-app
完整的入門投影片
也歡迎報名我的 Workshop 課程有更多 code 教學
Made with