Notes knowledge mapper. Input Markdown/TXT notes or a topic folder; extract entities, similar ideas, relationships, and map views, then output searchable JSO...
记忆
WeKnora
通过 WeKnora REST API 导入文档,并对知识库执行向量+关键词混合检索。
它能做什么
封装 WeKnora REST API,用于向知识库上传文件、抓取网页 URL 或写入 Markdown,并提供检索能力。覆盖知识库列表查看、文件 multipart/form-data 上传、URL 导入、手写 Markdown 录入、轮询 parse_status 直到解析完成,以及知识条目的编辑和删除。检索支持单库混合检索(向量 + 关键词)和跨库语义检索,返回结果包含相关度分数与 chunk 元信息。鉴权通过 X-API-Key 请求头,凭据由 WEKNORA_BASE_URL 与 WEKNORA_API_KEY 两个环境变量提供。
什么时候用它
- 上传 PDF 并轮询 parse_status 直至解析完成
- 通过 URL 把网页文章导入知识库
- 直接把 Markdown 笔记写入知识库
- 在单个或多个知识库之间执行混合检索
技能文档
WeKnora
Knowledge base document import and retrieval through the WeKnora REST API.
Setup
- Get your API Key from the WeKnora web UI (account settings page)
- Configure environment variables:
export WEKNORA_BASE_URL="https://your-server.com/api/v1"
export WEKNORA_API_KEY="sk-your-api-key"
Add the above to
~/.zshrcor~/.bashrcto persist across sessions.
Credential Check
Verify credentials before any API call. Stop and prompt the user if unset.
if [ -z "$WEKNORA_BASE_URL" ] || [ -z "$WEKNORA_API_KEY" ]; then
echo "Missing WeKnora credentials. Set WEKNORA_BASE_URL and WEKNORA_API_KEY per Setup."
exit 1
fi
API Call Template
All requests go to $WEKNORA_BASE_URL with a shared header set. Define a helper:
wk_api() {
local method="$1" endpoint="$2" body="$3"
curl -s -X "$method" "$WEKNORA_BASE_URL/$endpoint" \
-H "X-API-Key: $WEKNORA_API_KEY" \
-H "Content-Type: application/json" \
-H "X-Request-ID: $(uuidgen 2>/dev/null || date +%s)" \
${body:+-d "$body"}
}
For file uploads use curl -F directly (multipart/form-data).
API Decision Table
| User Intent | Endpoint | Key Params |
|---|---|---|
| List knowledge bases | GET /knowledge-bases | — |
| View KB details | GET /knowledge-bases/:id | — |
| Upload a file | POST /knowledge-bases/:id/knowledge/file | file (form-data), enable_multimodel |
| Import a web page | POST /knowledge-bases/:id/knowledge/url | url, enable_multimodel |
| Write Markdown content | POST /knowledge-bases/:id/knowledge/manual | title, content, tag_id |
| Check upload progress | GET /knowledge/:id | watch parse_status |
| Browse KB contents | GET /knowledge-bases/:id/knowledge | page, page_size, tag_id |
| Edit Markdown knowledge | PUT /knowledge/manual/:id | title, content |
| Delete a knowledge entry | DELETE /knowledge/:id | — |
| Search within a KB | GET /knowledge-bases/:id/hybrid-search | query_text, match_count, thresholds |
| Search across KBs | POST /knowledge-search | query, knowledge_base_ids |
Common Workflows
Upload File and Wait for Parsing
# 1. Find target KB
wk_api GET "knowledge-bases"
# -> pick kb_id from data[].id
# 2. Upload file
curl -s -X POST "$WEKNORA_BASE_URL/knowledge-bases//knowledge/file" \
-H "X-API-Key: $WEKNORA_API_KEY" \
-F 'file=@document.pdf' -F 'enable_multimodel=true'
# -> get knowledge_id from data.id
# 3. Poll until parsed
wk_api GET "knowledge/"
# -> repeat until data.parse_status == "completed"
Import URL
wk_api POST "knowledge-bases//knowledge/url" \
'{"url": "https://example.com/article", "enable_multimodel": true}'
# -> poll knowledge/:id same as file upload
Write Markdown Knowledge
wk_api POST "knowledge-bases//knowledge/manual" \
'{"title": "Meeting Notes", "content": "# Q1 Review\n\nKey points..."}'
Search Knowledge
# Single-KB hybrid search (vector + keyword)
wk_api GET "knowledge-bases//hybrid-search" \
'{"query_text": "deployment process", "match_count": 5}'
# Cross-KB semantic search
wk_api POST "knowledge-search" \
'{"query": "deployment process", "knowledge_base_ids": ["kb-1", "kb-2"]}'
Browse and Read KB Contents
# List knowledge entries (paginated)
wk_api GET "knowledge-bases//knowledge?page=1&page_size=20"
# Get full detail of one entry
wk_api GET "knowledge/"
Core Response Fields
Knowledge Base (GET /knowledge-bases): data[] — id, name, description, type (document | faq), embedding_model_id, knowledge_count, chunk_count, is_processing, created_at.
Knowledge Entry (GET /knowledge/:id): data — id, title, description (auto-generated summary), type (file | url | manual), parse_status, enable_status, file_name, file_type, file_size, source (URL origin), created_at, processed_at, error_message.
Search Result (hybrid-search): data[] — id, content (chunk text), score (relevance 0–1), knowledge_id, knowledge_title, knowledge_filename, chunk_index, chunk_type (text | summary | image), match_type, metadata.
Paginated List (GET .../knowledge): data[] + total, page, page_size.
Enum Values
parse_status:pending→processing→completed|failedenable_status:enabled|disabled(knowledge becomesenabledafter successful parsing)type(knowledge):file(uploaded file),url(web import),manual(Markdown)type(knowledge base):document(standard),faq(FAQ pairs)chunk_type:text(regular chunk),summary(auto-generated summary),image(image chunk)
Pagination
- Offset pagination (
GET .../knowledge,GET /sessions): usepageandpage_sizequery params. Response includestotalfor calculating pages. - Hybrid search: returns up to
match_countresults (no pagination; increasematch_countfor more).
Notes
GET /knowledge-bases/:id/hybrid-searchuses GET method but requires a JSON request body — pass-d '{...}'with curl.- After uploading, knowledge
enable_statusstarts asdisabledand auto-switches toenabledonceparse_statusreachescompleted. - File upload uses
multipart/form-data, not JSON. Usecurl -F 'file=@path'. file_typeis auto-detected from the uploaded file (supportspdf,docx,xlsx,pptx,txt,md,csv,html, etc.).- Search
scoreranges from 0 to 1; higher is more relevant. Adjustvector_threshold(default ~0.5) to filter low-quality matches. - When
parse_statusisfailed, checkerror_messagefield for the failure reason before retrying withPOST /knowledge/:id/reparse.
Error Handling
All errors return:
{
"success": false,
"error": {
"code": "ERROR_CODE",
"message": "Human-readable description",
"details": "Optional extra info"
}
}
| HTTP Code | Meaning | Suggested Action |
|---|---|---|
400 | Bad request | Check required fields and param formats |
401 | Unauthorized | Verify WEKNORA_API_KEY is correct |
403 | Forbidden | Confirm you have access to this resource |
404 | Not found | Check resource ID exists |
413 | Payload too large | Reduce file size or split content |
500 | Server error | Retry after a short delay |
常见问题
- 上传支持哪些文件格式?
- WeKnora 会自动检测 file_type,文档明确列出的支持格式包括 pdf、docx、xlsx、pptx、txt、md、csv、html 等。
- 混合检索是如何工作的?
- 单库混合检索向 GET /knowledge-bases/:id/hybrid-search 发送 query_text,结合向量匹配与关键词匹配;结果带有 0 到 1 的相关度分数,可通过 vector_threshold(默认约 0.5)过滤低分匹配。
- 如何跟踪上传进度?
- 上传后轮询 GET /knowledge/:id,观察 parse_status,流程为 pending → processing → completed(或 failed);解析成功后,对应条目的 enable_status 会自动从 disabled 切换为 enabled,可通过 error_message 字段查看失败原因并使用 POST /knowledge/:id/reparse 重试。
相关技能
通过 CLI 或 MCP,在 Linkly AI 索引的本地与云端文档中完成搜索、列出、读取与笔记。
Use when an AI Agent (Claude Code, Codex, OpenClaw, or similar) needs to operate an llm-wiki knowledge base: ingest source files into Markdown wiki pages, answer questions from wiki/index.md and linked pages, run agent-bridge status/lint/link/relink/merge/query/index tasks, preserve provenance and t
Knowledge workbench connector. Input notes, documents, or a local knowledge folder; output import guidance, relationship maps, cross-document answers, and co...
汇总过去 30 天 Reddit、X、YouTube 和网页上关于某个话题的真实讨论。
Hire humans for physical-world tasks via RentAHuman.ai. Search available humans by skill, post bounties, start conversations, and coordinate real-world work. Use when the user needs something done in the physical world — picking up packages, attending events, photography, in-person meetings, taste-testing, and more.