[科技工作講-心得] 在 LINE 的世界裡: Evan Lin 的科技之旅

前言

最近,我有幸受邀參加了一場精彩的Podcast專訪,由科技工作講主辦。在這個以科技職涯和人才發展為主題的節目中,我分享了自己在LINE台灣開發者關係與技術推廣部門的工作經驗,以及對於科技行業的見解。以下是這次專訪的精華,希望能給大家帶來一些啟發。

專訪概覽

  • 專訪時間:4月3日,晚上10點
  • 專訪形式線上直播
  • 單集標題:LINE的主管聊聊他們在做什麼 feat. LINE 台灣開發者關係與技術推廣部門資深經理 Evan Lin
  • 上線時間:4月6日

職涯分享

我的職業旅程從研究所畢業後開始,那時我加入了一家跨國的軟體公司,他們的業務遍及美國和加拿大。隨後,我也在台灣的硬體公司和新創企業中擔任過要職。特別是在新創公司的時光,我非常積極地參與技術分享和開源軟體開發,這讓我有機會接觸到許多新的領域和機會。

這段經歷對我來說是一個轉捩點,因為我在開源軟體開發和技術推廣方面的熱情,恰好與 LINE 當時的職缺非常契合。所以,在2018年底,我決定加入LINE台灣,開始了我在這裡的新篇章。

LINE的工作文化

在 LINE,溝通是我們極為重視的一環。我們不僅透過自家開發的通訊平台進行直接討論,還非常注重開放性和自主性。我們鼓勵員工與上司討論,表達自己對於新專案或新挑戰的意願。這種文化鼓勵我們主動探索和擴展自己的能力範圍。實習生也能夠體驗到這樣的開放文化,這證明了LINE的開放和自主。

部門工作內容

我們的部門負責推廣LINE的開發者生態系統和技術品牌。我們舉辦外部活動和工作坊教學,並且推廣LINE工程團隊的技術分享活動。我們的總公司在日本,提供全球市場的服務,並且在台灣也持續發展在地服務,如LINE TODAY。

img

(關於 LINE 台灣的企業參訪: 詳情請看文章關於 LINE 台灣開發者關係與技術推廣部門的校園相關資源)

工作上的挑戰

img

(在 LINE 研發工程團隊中,我們有相關的文化來塑造團隊合作氛圍,請參考 LINE Engineering Culture)

在LINE,我們鼓勵直接與相關部門的同仁溝通,這種開放的溝通方式大大提高了效率。在這裡,老闆不僅期待你執行既定的任務,他們更希望你能提出新的想法,並且主動去推動讓這些想法成為現實。

資深軟體開發人力市場

資深軟體開發人員的需求一直都很高。在LINE,我們透過舉辦技術研討會和社群聚會來吸引資深人才,並且非常注重人才的培養。我們有「LINE TECH FRESH」的技術新星實習計畫,旨在培養有潛力的軟體開發工程師。

img

(LINE 台灣的開發者技術年會 - LINE TAIWAN TECHPUSE )

加入LINE的建議

對於想要加入LINE的朋友,學歷背景並不是唯一標準。更重要的是你對軟體開發的熱情,你的學習能力和願意深入了解系統架構背後的效能限制。我們鼓勵參與開源專案,這對於開發工作來說是非常重要的。在LINE的實習生中,我們也有來自不同學科的優秀學生,他們的跨領域學習精神和對軟體開發的熱愛,讓他們在實習結束後也獲得了轉為正職的機會。

img

LINE TECH FRESH:培育下一代科技領袖

在我們的專訪中,我提到了「LINE TECH FRESH」計畫,這是LINE台灣為了培養新一代科技人才而特別推出的培育計畫。在這個快速變遷的數位時代,我們深刻理解到,培養年輕學子的重要性。因此,我們致力於幫助參與者建立堅實的技術基礎,同時兼顧軟實力的提升,為未來職涯發展奠定全面的基石。

計畫特色

專業訓練課程

我們提供一系列精心設計的訓練課程,涵蓋最新的技術趨勢與工具。這些課程旨在讓實習生能夠快速適應職場環境,並掌握必要的技術知識。

實務實習機會

實習生將有機會參與實際的專案,並在專業人士的指導下,將所學知識應用於實務工作中。這不僅是一個學習的機會,也是一個證明自己能力的舞台。

跨部門交流

透過與LINE各部門專業人才的交流,實習生將能夠獲得多元化的視角與經驗。這種跨部門的互動對於擴展視野和建立人脈網絡都是非常有價值的。

職涯發展支援

從個人職涯規劃到專業技能提升,我們提供全方位的支援。我們的目標是協助實習生找到最適合自己的職涯道路,並在科技領域中脫穎而出。

轉正機會

表現優異的實習生將有機會在計畫結束後,成為LINE台灣的正式員工。這是一個讓實習生能夠持續在LINE這個大家庭中成長的機會。

更多細節請參考: LINE TECH FRESH 2024 Summer Class 招募相關說明 (時程, 職缺)

活動小結

「LINE TECH FRESH」計畫是我們對於人才培養的承諾,也是LINE文化的一部分。我們相信,透過這個計畫,我們不僅能夠吸引優秀的開發人才,更能為台灣的資深軟體開發人力市場做出貢獻。

立即加入「LINE 開發者官方社群」官方帳號,就能收到第一手 Meetup 活動,或與開發者計畫有關的最新消息的推播通知。▼

「LINE 開發者官方社群」官方帳號 ID:@line_tw_dev

img

關於「LINE 開發社群計畫」

LINE 於 2019 年開始在台灣啟動「LINE 開發社群計畫」,將長期投入人力與資源在台灣舉辦對內對外、線上線下的開發者社群聚會、徵才日、開發者大會等,已經舉辦 30 場以上的活動。歡迎讀者們能夠持續回來查看最新的狀況。詳情請看:

[好書分享] 馬斯克傳

馬斯克傳:唯一不設限、全公開傳記
作者: 華特.艾薩克森  
原文作者: Walter Isaacson  
譯者: 吳凱琳  
出版社:天下雜誌出版 
出版日期:2023/09/27

買書推薦網址:

前言:

這是 2024 年第 2 本讀完的書,這是一本相當厚的書籍,但是我覺得裡面包括了近幾年許多的科技大小事情,讀起來一點也不會疲累反而覺得相當的有趣。

內容摘要:

馬斯克唯一不設限、全公開傳記
權威傳記作家艾薩克森重磅力作

兩年深度跟訪,解密全世界最令人好奇,也最具爭議性的創新者——
是狂人還是造勢天才?是破壞者還是創新者?是混蛋還是英雄?
想要了解最真實的馬斯克,只能透過這本書!

★第一視角觀察馬斯克獨有的英雄模式與惡魔模式
★深入解讀馬斯克旗下六大事業的商業與創新策略
★揭露AI、自動駕駛、太空探險三大尖端科技趨勢

「不管你喜歡與否,我們都生活在馬斯克創造的世界裡。」—《時代》

馬斯克引領世界進入電動車時代、開發私人太空探險、嚴肅想像人工智慧,他改變了三大關鍵產業,也改變了我們的未來。喔,他還買下了推特。

他是打破常規的夢想家,沒有開不出的路徑,沒有打不破的框架,沒有丟不掉的包袱。對風險,不但冷靜計算,更熱情擁抱,冒險不設限。當其他企業家在發展世界觀時,馬斯克已在構建他的宇宙觀。

比任何科幻小說都更精采的傳奇人生,他旗下的每一個事業:特斯拉、SpaceX 與星鏈、X(原為推特)、鑽孔公司、Neuralink、xAI,都在改寫歷史。未來,他會如何進一步改變科技世界﹖

《賈伯斯傳》作者、最能捕捉天才腦中靈光的艾薩克森,跟隨馬斯克長達兩年,跟他一起開會、走訪工廠,採訪馬斯克本人、他的家人、朋友、同事和對手,寫出這部考證詳實、藏著驚人內幕的人生故事。寫作過程中,馬斯克從不掌控內容走向,也不要求在出版前先看過,甚至鼓勵他的對手、前員工跟作者談一談。

艾薩克森精闢描述馬斯克的成功與風暴,也探討了一個問題:驅動馬斯克的惡魔,是否也是創新和進步的推手?

馬斯克的成功無法複製,沒人能像他那樣。但他在成長、創新、創業歷程中的有效方法,值得你一讀。

‧設計工廠有什麼祕密﹖
‧特斯拉下一個要顛覆的是什麼﹖
‧遠大計畫的務實商業目標該怎麼訂﹖
‧講求硬派精神的馬斯克都怎麼用人﹖
‧從電玩可以學習到什麼人生道理或商業思維﹖
‧如何提升學習力、快速形成見解、精通新領域﹖
‧閱讀如何讓一個人的影響力從地球到太空……

心得:

整本書包括了幾個 Musk 許多重要的相關里程碑:

  • 小時候父親偏激造就他的獨特個性
  • Paypal 與 x.com
  • SpaceX 的火箭夢
  • Tesla 電動車的未來夢
  • 自動駕駛與機器人的特斯拉
  • Twitter 的愛恨情仇

這些的重要成就都圍繞著他的獨特思維:

「第一性原理」的思考方式是用物理學的角度看待世界的方法,也就是說一層層剝開事物的表象,看到裏面的本質,然後再從本質一層層往上走。

透過第一性原理的方式,馬斯克經常做出許多不可思議的要求,讓他的員工相當的痛苦與難受。並且透過馬斯克經常性的開啟的加速模式,來讓許多本來不可能的專案也逐漸地完成。 舉凡像是:

  • 火箭如何將成本不斷地降低
  • 如何能夠回收火箭
  • 電動車的成本分析,如何節省電池的費用。
  • 到最近一次的如何節省 Twitter 開發人員的費用。

也都發現了馬斯克極盡苛刻的成本樽節與細節追求,讓追隨他的員工都無法忍受。但是也是因為這些原因才有可能有這些相關成就的發生。 同樣身為科技從業人員,都同意極致的追求細節與拼命的成本鑽研才會是造就令人驚豔的科技。

至於相關的員工能不能接受一樣的想法,造就出相關的完美的追求與拼命的個性。有看過一些 YTer 曾經分享過,特斯拉就像是新創公司一樣,每天幾乎不可思議的超長工時與經常性的大規模的專案追求團隊。都會讓裡面的員工戰戰兢兢,相當痛苦。但是完成後的成就感也會是無比巨大的。 但是又有多少人能夠在這樣的公司待得夠久呢? 或許追求出自己完美的一個里程碑之後,都會回歸到自己想要持續的平衡吧?

[LINE Bot][Python] Cloud Function + Gemini Pro + Firebase Database = 記憶體聊天機器人

image-20240318204441270

起因

這邊文章,主要是透過【LineBot實作】如何製作有記憶的對話機器人 的相關修改。 把需要付費的服務 OpenAI 改成目前還有免費額度的 Google Gemini ,並且針對相關訊息的程式碼做一些調整。 主要的 LINe Bot 設定與 Firebase 設定請參考原先文章。

快速講解一下設定的方法:

這裡僅快速條列式,講解一下該如何設定這個應用。

  • 建立 LINE Bot 帳號
    • 首先先去 LINE Developer Console 建立一個 Messaging API Channel
    • 在 Basic Setting Tab 取得 Channel secret
    • 在 Messaging API Tab 產生 (issue) Channel access token
  • 到 Google Cloud 的 Firebase
    • 建立一個專案
    • 設定一個 Realtime Database
    • 更改安全規則,讓資料庫可以被任何人存取與修改。(請注意: 這是因為做測試專案,請勿再正式專案如此設定)
    • 取得該資料庫網址: https://XXX.firebaseio.com/
  • 到 Google Cloud 的 Cloud Functions
    • 建立一個 Cloud Functions - Gen1 或是 Gen2 都可以
    • 採取 HTTPS
    • 驗證部分: 使用「允許未經驗證的叫用」
    • 新增四個環境變數
      1. GEMINI_API_KEY:(在 Google AI Studio 獲得的secret key)
      2. LINE_BOT_TOKEN:(在Line Developers獲得的Channel access token)
      3. LINE_BOT_SECRET:(在Line Developers獲得的Channel secret)
      4. FIREBASE_URL:(在Firebase獲得的URL)
    • 程式碼部分,請使用以下修改的程式碼。

主要修改程式碼部分

首先是 requirements.txt 需要將相關設備改成 Gemini pro - google.generativeai

接下來建立另外一個檔案: main.py

設定 “進入點” 到 linebot,並且記錄觸發網址 https://xxxxxxxx.cloudfunctions.net/function-test1

關於 OpenAI ChatComplete 與 Google Gemini Pro - Multi-turn conversations 格式轉換

這邊講解一下,關於 OpenAI 的 Chat Completion API 的格式:

[
  {
    "role": "system",
    "content": "You are a helpful assistant."
  },
  {
    "role": "user",
    "content": "Hello!"
  }
]

但是 Google Gemini Pro 的 Multi-turn Conversations 格式不太一樣。

[
    {'role':'user',
     'parts': ["Briefly explain how a computer works to a young child."]},
    {'role':'model',
     'parts': ["想像一下你的電腦就像一個超級聰明的機器人,它可以按照你的指令去做很多事情....."]}   
]

主要差別除了 “content” 與 “parts” 命名不同外, parts 可以接受多種資料格式。可以參考 API Reference 關於 Gemini Content

回頭設定 LINE Bot

  • 設定 LINE Developer Console 到了 Messaging API Tab 並且將 Webhook URL 放入剛剛輸入的 https://xxxxxxxx.cloudfunctions.net/function-test1
  • 測試是否成功,即可開始對聊天機器人溝通。

參考文章:

[LINEBot SDK][Python] 使用 AiohttpAsyncHttpClient 處理 LINE Bot 圖片消息

使用 AiohttpAsyncHttpClient 處理 LINE Bot 圖片消息

在開發 LINE Bot 應用時,我遇到了一個挑戰:如何有效地處理用戶發送的圖片消息。我需要從 LINE 平台獲取圖片內容,然後將其用於後續的處理。這裡,我想分享我的問題與解決方式,特別是在使用 AiohttpAsyncHttpClient 與普通 HTTP 客戶端之間的比較。

套件: https://github.com/line/line-bot-sdk-python

問題描述

當用戶通過 LINE Bot 發送圖片時,我需要從 LINE 的服務器上獲取圖片數據。初始的問題出現在嘗試使用一個不存在的 iter_any 方法來讀取數據流,這導致了一個 AttributeError。這個問題很快被發現並修正,但我還想探索一種更高效的方法來處理這些圖片數據。

以前做法

這是以前透過 non-async 的做法,資料會完整讀完才會繼續執行。

ef handle_message(event):
	if (event.message.type == "image"):
		SendImage = line_bot_api.get_message_content(event.message.id)

		local_save = './static/' + event.message.id + '.png'
		with open(local_save, 'wb') as fd:
			for chenk in SendImage.iter_content():
				fd.write(chenk)
                
		line_bot_api.reply_message(event.reply_token, ImageSendMessage(original_content_url = ngrok_url + "/static/" + event.message.id + ".png", preview_image_url = ngrok_url + "/static/" + event.message.id + ".png"))

這樣有可能會在某些地方卡住很久,造成整個流程無法繼續進行。

AiohttpAsyncHttpClient 的優勢

AiohttpAsyncHttpClientline-bot-sdk 的一部分,它提供了一種非同步的方式來處理 HTTP 請求。這與傳統的同步 HTTP 客戶端有著本質的不同。在同步模式下,每個 HTTP 請求都會阻塞當前執行線程,直到收到響應。這在處理大量請求或需要高性能的應用中是不可取的。

相反,AiohttpAsyncHttpClient 允許我們發送非同步請求,這意味著我們可以在等待響應的同時繼續執行其他代碼。這對於提高應用的響應性和吞吐量至關重要。

from linebot.aiohttp_async_http_client import AiohttpAsyncHttpClient

.....

async_http_client = AiohttpAsyncHttpClient(session)
line_bot_api = AsyncLineBotApi(channel_access_token, async_http_client)

解決方案

我採用了以下代碼來異步獲取圖片內容:

message_content = await line_bot_api.get_message_content(event.message.id)
image_content = b''
async for s in message_content.iter_content():
    image_content += s
img = PIL.Image.open(BytesIO(image_content))

這段代碼使用 AiohttpAsyncHttpClient 通過 line_bot_api.get_message_content 異步獲取消息內容。然後,我使用 iter_content 方法來異步迭代數據塊,並將它們合併到一個二進制字符串中。最後,我使用 PIL.Image.open 從這個二進制數據創建了一個圖片對象。

這種方法的好處是,它完全非阻塞。即使在下載大圖片時,我們的應用也可以繼續處理其他事件或消息,從而提高了整體效率。

結論

通過使用 AiohttpAsyncHttpClient,我成功地解決了處理 LINE Bot 圖片消息的問題,並且提高了應用的性能。這個案例展示了異步編程在現代應用開發中的重要性,特別是在需要處理大量 I/O 操作時。對於開發者來說,理解並利用這些異步工具將是提高應用性能和用戶體驗的關鍵。

參考文章:

[Google Colab][Python] 如何升級Google Colab 的 Python3 版號從 3.9 到 3.11

image-20240217203309580

Google Colab 是一個免費的雲端 Jupyter 筆記本環境,可用於編寫和執行 Python 程式碼。Colab 預設的 Python 版本為 3.7,但有些情況下可能需要使用其他版本的 Python。

如何查看 Google Colab 的 Python 版本

要查看 Google Colab 的 Python 版本,請在程式碼編輯區域中輸入以下命令:

!python --version

如何更改 Google Colab 的 Python 版本

有兩種方法可以更改 Google Colab 的 Python 版本:

  • 使用 %env 魔術命令
%env PYTHONPATH=/usr/lib/python3.11

!python --version
  • 使用 update-alternatives 命令
sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.11

!python --version

注意事項

  • 更改 Google Colab 的 Python 版本可能會影響已安裝的套件。
  • 更改 Python 版本後,請重新啟動 Colab 執行階段。

以下是一些常見的 Google Colab Python 版本問題及其解決方案:

  • 問題: 我需要使用 Python 3.9,但 Colab 預設的 Python 版本為 3.7。
    • 解決方案: 使用上述方法之一將 Python 版本更改為 3.9。
  • 問題: 我更改了 Python 版本,但 Colab 仍使用舊版本的 Python。
    • 解決方案: 重新啟動 Colab 執行階段。
  • 問題: 我更改了 Python 版本,但某些套件無法正常工作。
    • 解決方案: 重新安裝這些套件。

希望這篇教學文章能幫助您解決 Google Colab Python 版本號碼問題。

以下為截圖上的程式碼擷取,放在這裡備用。

!python --version
#Python 3.9, but langchain need workaround for pydantic==1.10.8 to fix import issue. change to 3.11
!sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.11
#Install Python3.11 (no need for final version, will use latest one)
!sudo apt update
!sudo apt install python3-pip

[Golang][Gemini Pro] 使用 Gemini-Pro-Vision 來打造名片管理的聊天機器人

img

前提

在之前的文章中,探討了如何使用 Golang 結合 Google Gemini Pro 來開發一個具備大型語言模型(LLM)功能的 LINE Bot。這些文章分別介紹了如何整合 Gemini Pro 的聊天完成(Chat Completion)和圖像識別(Image Vision)功能:

  1. 使用 Golang 透過 Google Gemini Pro 來打造一個具有LLM 功能 LINE Bot (一): 聊天完成與圖像識別
  2. 使用 Golang 透過 Google Gemini Pro 來打造一個具有LLM 功能 LINE Bot (二): 使用聊天會話(Chat Session)與 LINE Bot 快速整合,打造具有記憶功能的 LINE Bot

這次,將簡要介紹如何利用 Gemini Pro Vision 模型來創建一個能夠幫助你整理名片的小工具,它甚至能自行識別名片上的資訊。

相關開源程式碼:

https://github.com/kkdai/linebot-smart-namecard

註解: 關於如何使用 Notion 作為線上免費的資料庫,請參考這篇文章 : [Golang][Notion] 如何透過 Golang 來操控 Notion DB 當成線上資料庫

系列文章:

  1. 使用 Golang 透過 Google Gemini Pro 來打造一個具有LLM 功能 LINE Bot (一): Chat Completion and Image Vision
  2. 使用 Golang 透過 Google Gemini Pro 來打造一個具有LLM 功能 LINE Bot (二): 使用 Chat Session 與 LINEBot 快速整合出有記憶的 LINE Bot
  3. 使用 Golang 透過 Google Gemini Pro 來打造一個具有LLM 功能 LINE Bot (三): 使用 Gemini-Pro-Vision 來打造名片管理的聊天機器人 (本篇)

辨識名片處理上的小訣竅

執行的 Prompt

關於打造一個名片辨識的部分,這裡分享相關的做法:

// Const variables of Prompts.
const ImagePrompt = "這是一張名片,你是一個名片秘書。請將以下資訊整理成 json 給我。如果看不出來的,幫我填寫 N/A, 只好 json 就好:  Name, Title, Address, Email, Phone, Company.   其中 Phone 的內容格式為 #886-0123-456-789,1234. 沒有分機就忽略 ,1234"

這個名片分成幾個部分來解釋:

解析圖片

相關資訊透過照片的上傳。請 Gemini Pro Vision 來分析。

產出格式

這裡有說明,希望 LLm 將資訊透過 json 來提供解決。並且透過以下欄位來分開提供。 這裡也說明一下,這樣說明,就會讓 LLM 會自動去看懂名片上的資訊然後分開提供給你相關資訊。

  • Name
  • Title
  • Address
  • Email
  • Phone
  • Company

特殊處理

透過 Gemini-Pro-Vision 或是其他 GPT-Vision 大模型來處理影像的時候,都需要準備相關的特殊處理。

關於名片上電話的處理案例:

以下分享幾個電話例子:

  • (02) 1234-5678
  • (02) 1234 5678
  • (02) 1234-5678 轉 123
  • (02) 1234-5678 分機 123

根據電話資訊的正確輸入法: 電話好買 *886-02-1234-5678, 1234 (如果分機是 1234) 的話。 使用以下的 Prompt 可以有效的取得:

其中 Phone 的內容格式為 #886-0123-456-789,1234. 沒有分機就忽略 ,1234。

關於名片上空白數值:

如果在 Notion 資料庫中有著空的數值不會有任何問題。但是如果要使用 Flex Message 卡片格式來放資料。每一個欄位則必須要有數值,不然 LINE 平台無法接受這樣的 Flex Message. 。

而相信許多人也收過,有些人的名片是比較精簡的版本,上面並不會有職稱,或是說不會有電話(比較常見)。這個時候需要填入一些數值,讓資料不會有空值。 相關的 Prompt 為:

如果看不出來的,幫我填寫 N/A

GPT Vision 辨識處理 Golang 程式碼

關於 Gemini Pro 影像辨識的程式碼是跟之前(第一篇文章)一樣,這邊就不重新敘述。也可以直接參考 github 。 但是這裡寫一下處理的方式:

透過外部參數或是環境變數處理 Prompt

在寫 LLM 相關應用的時候,要記得 Prompt 是會隨時去調整來取得最佳的辨識效果。這時候如果 Prompt 是寫在程式碼裡面,就會發生不斷修改與部署。建議要寫在外部資料庫,或是系統環境變數。以下提供相關流程:

// Const variables of Prompts.
const ImagePrompt = "這是一張名片,你是一個名片秘書。請將以下資訊整理成 json 給我。如果看不出來的,幫我填寫 N/A, 只好 json 就好:  Name, Title, Address, Email, Phone, Company.   其中 Phone 的內容格式為 #886-0123-456-789,1234. 沒有分機就忽略 ,1234"


// 檢查是否有環境變數,如果沒有,就使用自定義的 Prompt 。
card_prompt := os.Getenv("CARD_PROMPT")
	if card_prompt == "" {
		card_prompt = ImagePrompt
	}
	

// 透過圖片下 Prompt
// Chat with Image
				ret, err := GeminiImage(data, card_prompt)
				if err != nil {
					ret = "無法辨識圖片內容文字,請重新輸入:" + err.Error()
					if err := replyText(e.ReplyToken, ret); err != nil {
						log.Print(err)
					}
					continue
				}

輸入卡片到資料庫的基本處理

雖然本篇文章不會詳細敘述關於 Notion 資料庫的處理。但是這邊稍微提供卡片資料庫的基本處理流程。

  • 掃描到卡片後,透過 Email 作為卡片的唯一資料來檢查是否有重複資料。
  • 如果有 Email 相同,則會 skip 本次的掃描資訊。

這部分的處理就算是一個段落,接下來要講解如何透過關鍵字搜尋的相關處理。

方便的名片搜尋

以往在搜尋名片的時候,經常會使用一些關鍵字來搜尋。比如說:

  • 想要找出所有認識的「經理」
  • 想要找位於某間公司的所有窗口
  • 想要找出所有認識的行銷窗口
  • 印象中認識一位「李教授」但是不確定是哪間學校。

以上的方式都是名片搜尋需要的功能,本段將介紹該如何實作這一段的部分:

名片搜尋方式:

這邊稍微列出在 Notion 上面使用的程式碼:

				//using test as keyword to query database
				nDB := &NotionDB{
					DatabaseID: os.Getenv("NOTION_DB_PAGEID"),
					Token:      os.Getenv("NOTION_INTEGRATION_TOKEN"),
					UID:        uID,
				}

				// Query the database with the provided uID and text
				results, err := nDB.QueryDatabaseContains(message.Text)
				log.Println("Got results:", results)

				// If there's an error or no results, reply with an error message
				if err != nil || len(results) == 0 {
					ret := "查不到資料,請重新輸入"
					if err != nil {
						ret = fmt.Sprintf("%s: %s", ret, err.Error())
					}
					if err := replyText(e.ReplyToken, ret); err != nil {
						log.Print(err)
					}
					continue
				}

其中 QueryDatabaseContains 這個 function 會先尋找 Name, Title 與公司名稱。依照這三個順序,將所有的資料搜尋出來。

成果與未來展望

img

使用方式:

  • 新增名片: 直接透過相片,掃描名片即可。 不需要像其他名片軟體需要抓名片的四周,也不需要等待對應。
  • 查詢名片: 直接在 LINE Bot 想要搜尋的關鍵字,接下來會自動去搜尋「姓名」「職稱」「公司名稱」等等欄位。

未來展望:

1. 更智慧的操作流程

目前相關套件,沒有比較好的 Gemini Pro 的 Function Calling 可以使用。 我有起了一些架構在,接下來會使用 Function Callin 來達到以下相關功能:

  • 智慧查詢: 可以問一個句子,找出相關名片資料。 (e.g. 想找是學術界,姓陳的教授。)
  • 交流紀錄: 可以增加一筆欄位交流紀錄,透過輸入交流紀錄之後可以有更多相關資料可以輔助。

2. 圖片支援

目前沒有將原來的名片圖片存取下來,由於 Notion 並不開放直接上傳檔案,這部分也會思考如何在 Notion 裡面可以更順暢的處理。

如果有更多建議,也歡迎送上 Pull Request https://github.com/kkdai/linebot-smart-namecard

總結:

本文介紹了利用 Golang 和 Google Gemini Pro 開發的 LINE Bot,它能夠識別名片資訊,並將其整理和搜尋,未來還將增加更多智慧查詢和交流紀錄功能,以提升用戶管理名片的效率。

參考資料: