布成Agent工具(附exa參考實(shí)現(xiàn)))
Monid連接器教程6步把你自己的API發(fā)布成Agent工具附exa參考實(shí)現(xiàn)【免費(fèi)下載鏈接】monidMonid - OpenRouter for agent tools. Join our community at https://discord.gg/rQzztcgJV8項(xiàng)目地址: https://gitcode.com/gh_mirrors/mo/monidMonid 是一個(gè)面向 AI Agent 的工具聚合平臺(tái)OpenRouter for agent tools一個(gè)地址、一把密鑰Agent 就能調(diào)用 2000 工具。而本倉(cāng)庫(kù) monid 就是它的連接器Connector層你用聲明式 TypeScript 描述自己的 API它就能被所有 Agent 發(fā)現(xiàn)和調(diào)用。本教程以官方參考實(shí)現(xiàn) exa 連接器為樣板手把手教你 6 步完成發(fā)布。一、先搞懂Monid 連接器是什么 一句話連接器 一份聲明式的 API 說(shuō)明書(shū)描述“怎么調(diào)用、接受什么輸入、返回什么、如何計(jì)費(fèi)”。它不是傳統(tǒng)意義的客戶端代碼沒(méi)有適配器、沒(méi)有執(zhí)行分支。Agent 使用平臺(tái)只需三個(gè)動(dòng)詞前兩個(gè)免費(fèi)動(dòng)詞含義費(fèi)用discover按“任務(wù)是什么”在全目錄中檢索端點(diǎn)免費(fèi)inspect查看輸入 schema、價(jià)格與文檔免費(fèi)run執(zhí)行并結(jié)算用量按次計(jì)費(fèi)你要寫(xiě)的每一個(gè)端點(diǎn)都會(huì)進(jìn)入discover的檢索范圍被平臺(tái)上的每個(gè) Agent 看到。二、6 步發(fā)布你自己的 API第 1 步準(zhǔn)備環(huán)境并克隆倉(cāng)庫(kù)只需 Denogit clone https://gitcode.com/gh_mirrors/mo/monid cd monid deno task check deno task test # 類型檢查 188 個(gè)回放測(cè)試零網(wǎng)絡(luò)倉(cāng)庫(kù)目錄約定非常簡(jiǎn)單詳見(jiàn) README.md 的 Quickstartconnectors/你的項(xiàng)目名/ ├── provider.ts # 聲明身份、鑒權(quán)、計(jì)費(fèi) ├── schema/ # 多端點(diǎn)共享的 zod 片段可選 └── endpoints/端點(diǎn)名/ ├── endpoint.ts # 聲明請(qǐng)求與輸入 schema ├── schema/inputs.ts # 僅本端點(diǎn)使用的請(qǐng)求 schema ├── endpoint.test.ts # 回放測(cè)試 受門(mén)控的 live 測(cè)試 └── fixtures/*.json # 錄制下來(lái)的真實(shí)響應(yīng)第 2 步精讀 exa 參考實(shí)現(xiàn) 官方指定的參考實(shí)現(xiàn)是 connectors/exa/ —— 一個(gè)“AI 原生網(wǎng)頁(yè)搜索”API 的完整連接器建議按順序讀四個(gè)文件connectors/exa/provider.ts —— 聲明name、meta展示名、摘要、描述、分類、authpresets.auth.header(x-api-key)一行搞定請(qǐng)求頭注入、request.baseUrl、超時(shí)和計(jì)費(fèi)模型connectors/exa/endpoints/search/schema/inputs.ts —— 用 zod 逐字段鏡像 Exa 官方文檔query、type、numResults等每個(gè)字段帶describe()說(shuō)明connectors/exa/endpoints/search/endpoint.ts —— 聲明meta.description、requestPOST /search、輸入默認(rèn)值和usage基礎(chǔ)費(fèi) 超量結(jié)果的組合計(jì)費(fèi)connectors/exa/endpoints/search/endpoint.test.ts —— 基于 fixture 的回放測(cè)試CI 不需要任何廠商密鑰。 官方建議把 AGENT.md、你自己的 API 文檔和connectors/exa/一起交給編碼 Agent它可以直接產(chǎn)出 provider、schema 和測(cè)試。第 3 步寫(xiě) provider.ts 聲明你的服務(wù)商骨架只有 10 行左右核心字段如下export default defineProvider({ name: myapi, meta: { displayName: MyAPI, summary: ..., categories: [web-search] }, auth: { inject: presets.auth.header(X-API-Key) }, request: { baseUrl: https://api.myapi.com }, usage: { model: { kind: UsageModelKind.PER_CALL } }, // 免費(fèi)/按次/按量 });三個(gè)關(guān)鍵決策分類必須來(lái)自 connectors/categories.ts 的封閉詞表web-search、web-scraping、company-enrichment等未知 id 會(huì)直接編譯失敗鑒權(quán)用presets.auth預(yù)設(shè)header/bearer無(wú)需手寫(xiě)計(jì)費(fèi)模型usage.model聲明“怎么算錢(qián)”FREE永不計(jì)費(fèi)、PER_CALL固定按次、PER_UNIT按量每千字符、每秒視頻……。第 4 步寫(xiě) endpoint.ts 定義端點(diǎn) ?端點(diǎn) id 由路徑推斷provider#endpoint你需要聲明request方法 路徑如POST /searchinput.schema綁定第 3 步風(fēng)格的 zod 請(qǐng)求體可在此處補(bǔ)上廠商默認(rèn)值timeouts請(qǐng)求與整體運(yùn)行的超時(shí)。最重要的一條寫(xiě)作建議來(lái)自 README.md把meta.description寫(xiě)得像產(chǎn)品文案因?yàn)閷?duì) Agent 來(lái)說(shuō)它就是產(chǎn)品。它決定了discover如何為你排序、inspect返回什么。exa 的做法值得抄不僅說(shuō)明“能做什么”還寫(xiě)明“不做什么”、以及“什么場(chǎng)景該去用哪個(gè)端點(diǎn)”。第 5 步錄制 fixture 并通過(guò)本地測(cè)試 ?export MYAPI_CREDENTIALS_API_KEY... # 環(huán)境變量約定PROVIDER_CREDENTIALS_FIELD deno task record myapi#search ... # 錄制真實(shí)響應(yīng)為 fixture自動(dòng)脫敏裁剪 deno task check deno task test # 必須零網(wǎng)絡(luò)通過(guò) deno task engine:run myapi#search --body {...} # 用你自己的密鑰真實(shí)跑一次測(cè)試全部從 fixture回放所以 CI 不需要廠商密鑰live 測(cè)試只在環(huán)境變量中存在憑據(jù)時(shí)運(yùn)行否則自動(dòng)跳過(guò)。exa 的 connectors/exa/endpoints/search/fixtures/ 里只有兩個(gè)文件happy.jsonprovider-error.json就覆蓋了成功與 401 兩條鏈路——fixture 保持精簡(jiǎn)是硬要求。第 6 步提交 Pull Request 提交前自查清單deno task check deno task test無(wú)網(wǎng)絡(luò)通過(guò)分類 id 在 connectors/categories.ts 詞表內(nèi)fixture 已裁剪體積有 lint 上限32 KiB 警告 / 128 KiB 失敗若需新增分類在同一 PR 里修改詞表文件。合并后你的端點(diǎn)立即進(jìn)入discover成為平臺(tái)上所有 Agent 的候選工具。三、幕后原理從你的文件到一次調(diào)用選讀你寫(xiě)的 TypeScript 定義會(huì)被編譯器編譯成純 JSON 的EndpointDoc函數(shù)替換為內(nèi)容哈希引用再鏈接成“密封單元”交給引擎執(zhí)行。同一條流水線同一份產(chǎn)物跑三種方式本地你自己的密鑰、CIfixture 回放零網(wǎng)絡(luò)、托管平臺(tái)憑據(jù)在傳輸層內(nèi)部注入永不進(jìn)入引擎進(jìn)程。每次調(diào)用的固定管線校驗(yàn)輸入 → 構(gòu)造請(qǐng)求 → 傳輸層注入憑據(jù) →在原始響應(yīng)上先結(jié)算用量賬單錨定在網(wǎng)絡(luò)上真實(shí)返回的數(shù)據(jù)→ 映射輸出。廠商的 4xx/5xx 被視為“數(shù)據(jù)”而非異常——運(yùn)行完成、結(jié)算為 0 用量。更多細(xì)節(jié)見(jiàn) DEVELOPMENT.mdhooks、編譯器、計(jì)費(fèi)、CLI 參考與 openspec/changes/ 下的決策記錄。四、新手常見(jiàn)問(wèn)題 Q我完全沒(méi)寫(xiě)過(guò)連接器工作量有多大Aexa 連接器 1 個(gè) provider.ts 每個(gè)端點(diǎn)約 4 個(gè)文件。聲明式格式意味著沒(méi)有客戶端、沒(méi)有適配層編碼 Agent 可以代寫(xiě)你負(fù)責(zé)審閱“它是否如實(shí)描述了我的 API”。Q多密鑰的 API 怎么配A每個(gè)憑據(jù)字段對(duì)應(yīng)一個(gè)環(huán)境變量如兩把密鑰的寫(xiě)法參照 connectors/contactout/CONTACTOUT_CREDENTIALS_WORK_API_KEY/..._PERSONAL_API_KEY。Q異步任務(wù)型 API提交后輪詢?cè)趺崔kA平臺(tái)有 async run 協(xié)議用lifecycle.start/poll/stop三個(gè) hook 描述提交、輪詢、停止參考 connectors/firecrawl/ 等帶lifecycle.test.ts的實(shí)現(xiàn)設(shè)計(jì)文檔見(jiàn) openspec/changes/add-async-run-protocol/design.md。Q如何驗(yàn)證自己的端點(diǎn)寫(xiě)對(duì)了Adeno task catalog inspect myapi#search打印該端點(diǎn)的完整契約deno task engine:estimate直接輸出預(yù)估用量。寫(xiě)在最后從你的 API 文檔到全平臺(tái) Agent 可調(diào)用路徑就是這 6 步克隆 → 讀 exa → 寫(xiě) provider → 寫(xiě) endpoint → 錄 fixture 過(guò)測(cè)試 → 提 PR。整個(gè)契約寫(xiě)在 README.md 與 DEVELOPMENT.md參考實(shí)現(xiàn)在 connectors/exa/。今天就動(dòng)手讓你的 API 成為 Agent 的下一個(gè)工具?!久赓M(fèi)下載鏈接】monidMonid - OpenRouter for agent tools. Join our community at https://discord.gg/rQzztcgJV8項(xiàng)目地址: https://gitcode.com/gh_mirrors/mo/monid創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考