Work / Case Study

AI Research Grant Assistant

Nanyang Technological University (Singapore)

Multi-agent platform that helps researchers find grants, check eligibility, and prepare applications

Role AI Solutions Consultant (requirements → production) Duration ~1 month Domain Higher Education / Research Administration Status Beta, internal tool, ~25 users (GCP Cloud Run)

1 mo
requirements to production
3
agents, phase-gated
14
tool functions
13
official funding sources

作品集 / 案例

南洋理工大學(新加坡)AI 研究補助申請助理

協助研究人員搜尋補助、檢查資格、準備申請文件的多 agent 平台

角色 AI 解決方案顧問(從需求到上線) 時程 約 1 個月 領域 高等教育/研究行政 狀態 Beta,內部使用工具,約 25 位使用者(GCP Cloud Run)

1 mo
從需求到上線
3
個 agent,階段閘門調度
14
個工具函式
13
個官方資助來源

Overview總覽

Built a research-grant assistant for the medical school of Nanyang Technological University in Singapore. Researchers search for grants in plain conversation, check whether they qualify, and compare options. Once they pick a grant, the platform hands them an application checklist, templates, and proposal review. A scraper service, deployed separately in the cloud, keeps grant data current from 13 official funding sources (NMRC, NRF, A*STAR, and others).

React on the front end, FastAPI with async PostgreSQL behind it. The agent layer runs on the OpenAI Agents SDK with Claude Sonnet 4.6 via OpenRouter, deployed on GCP Cloud Run in Singapore.

為南洋理工大學(NTU Singapore)醫學院建置研究補助申請助理:研究人員以對話搜尋合適補助、檢查申請資格、比較方案,選定後取得申請文件清單、範本與提案審閱協助。系統整合獨立部署的自動爬蟲,持續從 13 個官方資助來源(NMRC、NRF、A*STAR 等)更新補助資料。

前端 React,後端 FastAPI 搭配 async PostgreSQL;agent 層以 OpenAI Agents SDK 搭配 Claude Sonnet 4.6(經 OpenRouter)建置,部署於 GCP Cloud Run(新加坡)。

Challenge & Solution挑戰與解法

Challenge

Grant information lives on a dozen official sites, each with its own format, and it changes often. Eligibility rules, deadlines, and document requirements have to be cross-checked one by one. There is also a cost constraint: summarizing large grant documents with an LLM at query time is too slow and too expensive, so it has to happen offline.

Solution

Three agents split the work: DiscoveryAgent for search, eligibility, and comparison; WritingAgent for checklists, templates, and proposal review; CVAgent for résumé management. The backend decides when to switch phases, so agents never hand off to each other and behavior stays predictable. Fourteen tool functions sit underneath. The scraper is its own cloud service, called via API, and it writes results back the same way. Grant briefs and checklists are generated offline during scraping; selecting a grant returns them instantly, with no LLM call at query time.

挑戰

補助資訊散落在十多個官方網站,格式不一且經常變動,資格條件、截止日與文件要求需要逐一比對。另一個工程限制:對大量補助文件做即時 LLM 摘要,成本與延遲都不可行,必須離線預運算。

解法

三個專責 agent 以階段閘門調度:搜尋階段由 DiscoveryAgent 處理,進入撰寫階段切換到 WritingAgent;切換由後端確定性控制,不讓 agent 自行跳轉,行為可預測。14 個工具函式涵蓋補助搜尋、資格檢查、方案比較、清單與 CV 管理、提案審閱。爬蟲服務獨立部署於雲端、以 API 形式呼叫與回寫;補助簡報與文件清單在爬蟲階段離線預運算,使用者選定補助時即時取得、零查詢延遲。

System Architecture系統架構

ResearchersReact SPA
FastAPI backendphase-gated dispatch, session ownership
Agent layerOpenAI Agents SDK + Claude Sonnet 4.6 via OpenRouter, 14 tools
DiscoveryAgentsearch, eligibility, comparison
WritingAgentchecklists, templates, proposal review
CVAgentrésumé management, DOCX output
PostgreSQLgrant data, sessions, precomputed briefs
API write-back
Grant scraper serviceseparate cloud service; 13 sources, multi-tier fetch fallbacks
daily schedule
Cloud Schedulerdaily expiration job
Deployment: GCP Cloud Run (Singapore)

Briefs and checklists are precomputed during scraping; selecting a grant returns them with no LLM call at query time.

研究人員React SPA
FastAPI 後端階段閘門調度、session 擁有權
Agent 層OpenAI Agents SDK + Claude Sonnet 4.6(OpenRouter),14 個工具
DiscoveryAgent搜尋、資格檢查、方案比較
WritingAgent申請清單、範本、提案審閱
CVAgent履歷管理、DOCX 產出
PostgreSQL補助資料、session、預運算簡報
API 回寫
補助爬蟲服務獨立雲端部署;13 個官方來源、多層抓取備援
每日排程
Cloud Scheduler每日到期處理
部署:GCP Cloud Run(新加坡)

簡報與申請清單於爬蟲階段離線預運算;選定補助即時取得,查詢路徑零 LLM 呼叫。

Key Capabilities核心能力

  • Phase-gated architectureThree agents (Discovery, Writing, CV); the backend controls every phase switch. No agent-to-agent loops.
  • 14 tool functionsGrant search, web lookup, eligibility checks, comparisons, checklists, CV management with DOCX output, proposal review
  • Standalone scraper13 official funding sources; a separate cloud service called via API, with multi-tier fetch fallbacks for unstable .gov.sg sites
  • Precomputed briefsBriefs and checklists come out of the scraping stage, not the query path; selecting a grant returns them instantly
  • AI-assisted adminUploads (PDF, DOCX, PPTX, XLSX) auto-fill grant fields; an admin reviews the diff before anything saves, and every change is audited
  • Daily expirationA scheduled job closes past-deadline grants each day; the platform also drafts contact emails on request
  • Access control and cost engineeringUsers see only their own sessions; the ~10K-token system prompt is cached
  • 三 agent 階段閘門架構Discovery(搜尋/資格/比較)、Writing(清單/範本/提案審閱)、CV(履歷管理);後端做確定性階段切換,避免 agent 互相跳轉造成循環
  • 14 個工具函式補助搜尋、網路查詢、資格檢查、方案比較、清單管理、CV 管理與 DOCX 產出、提案審閱
  • 獨立部署的自動爬蟲13 個官方資助來源;獨立雲端服務、以 API 形式呼叫與回寫;針對不穩定的 .gov.sg 站點內建多層抓取備援
  • 預運算簡報管線簡報與申請清單在爬蟲階段由 LLM 離線產生,查詢時零 LLM 呼叫、零延遲
  • AI 輔助管理後台上傳 PDF/DOCX/PPTX/XLSX 自動抽取補助欄位,差異比對後人工確認,附稽核紀錄
  • 每日自動到期處理雲端排程每日自動下架過期補助;內建 AI 草擬聯絡信件
  • 權限與成本工程session 擁有權隔離(使用者只見自己的對話)、約 10K token 系統提示快取

Technology Stack技術棧

LLM & Agent
OpenAI Agents SDK, Claude Sonnet 4.6 (OpenRouter), Python
Frontend
React 19, Vite, React Router 7
Backend
FastAPI, SQLAlchemy 2.0 async, PostgreSQL
Platform
GCP Cloud Run, Cloud Scheduler
Quality
pytest (167 test files), Vitest (1000+ frontend tests, enforced pre-push), Playwright E2E
LLM & Agent
OpenAI Agents SDK、Claude Sonnet 4.6(OpenRouter)、Python
前端
React 19、Vite、React Router 7
後端
FastAPI、SQLAlchemy 2.0 async、PostgreSQL
平台
GCP Cloud Run、Cloud Scheduler
品質
pytest(167 個測試檔)、Vitest(前端 1000+ 測試,推送前強制執行)、Playwright E2E

My Contribution我的貢獻

  • End-to-end delivery: requirements, architecture, frontend, backend, agent layer, cloud deployment
  • Chose phase-gated dispatch over free-form handoffs to keep behavior predictable
  • Moved LLM cost out of the query path with precomputed briefs and prompt caching
  • Built the 13-source scraper as a separate service with layered fetch fallbacks; AI field extraction with human diff review
  • Three test layers enforced before every push: pytest (167 test files), Vitest (1000+ tests), Playwright E2E
  • 端到端交付:從需求訪談、系統架構、前後端與 agent 層實作到雲端部署
  • 多 agent 架構設計:以階段閘門調度取代自由 handoff,使使用者體驗可預測
  • 成本工程:預運算簡報管線與系統提示快取,把 LLM 成本移出查詢路徑
  • 資料管線:獨立部署的 13 來源爬蟲、多層抓取備援、AI 欄位抽取加人工差異確認
  • 品質工程:pytest、Vitest、Playwright 三層測試,推送前強制執行
← All work← 全部作品