Hacktoberfest 2026:维护者为十月标记出来的 issue,仍然开放、适合新手。 浏览 Hacktoberfest issue

feat: documents contribute to the knowledge graph

未关闭
#235 1 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看

维护者通常 1 天内回复

还没有人认领这个 Issue。

评估

难度
5/5
预计耗时
一周以上
新手友好度
28/100
Issue 类型
功能
描述清晰度
基本清楚
活跃度
活跃
技术栈
dart
领域
ai

调研方向

Start by reading ExtractKnowledgeUseCase, InferenceScheduler, PromptBudget, and RagPipeline to understand the existing note extraction and retrieval paths. Work out how document identity and long inputs should be handled before implementation; the issue leaves both open. Done means a document is extracted once per document, participates in graph expansion, and long inputs are handled without silent truncation.

由索引模型根据 Issue 内容生成。

描述

enhancement P2-Medium P3-Low

Notes participate in a knowledge graph — e tags are edges, t tags are topic nodes, and ExtractKnowledgeUseCase pulls entities and relations that feed graph expansion during retrieval. A document's chunks participate in none of it. They are retrieved by vector similarity alone, then explicitly skip graph expansion and memory lookup, because a chunk is not a graph node (RagPipeline).

So a PDF that is entirely about a topic the user has notes on contributes nothing to the graph around that topic, and a question answered from the graph never reaches the document.

What to build

Let a document contribute to the graph — one extraction pass per document, not per chunk.

Per-chunk extraction is the wrong shape and worth stating plainly: a long PDF is dozens of chunks, each pass is an LLM call on a device already contending for the model with chat and Gana, and chunk boundaries cut mid-argument so the extracted relations would be worse than from whole text. Document-level extraction is one call over the joined text, which is also what the existing note path already does.

Pointers:

  • ExtractKnowledgeUseCase is the existing extraction path; the question is whether it generalises or needs a document-shaped sibling
  • InferenceScheduler has a T2 extract tier — document extraction belongs there, not on the chat path
  • PromptBudget caps what one call can carry; a long document will not fit in one pass on the smallest local model, so this needs a real answer for long inputs rather than silent truncation

Open questions

  • What is a document's node identity in the graph? The attaching note, or the document itself? A document can be attached to more than one note.
  • Does a not-searchable scan get any graph presence at all?

Part of #228 · Feature it follows from: #226


Status: backlog (2026-10-13)

Not feasible to do well with on-device compute today, so this is parked. The reasoning is in the comment below; the short version: local models cap one call at 1k-8k tokens (PromptBudget), a PDF is 10k-100k+, and every workaround (truncate, per-chunk calls, map-reduce) is either wrong or too expensive on a phone that is already contended. Revisit when local context and throughput improve, or when UNIUN Cloud is the default for extraction.

Options to consider later (no LLM call, not built)
  1. Attachment edge. A document is already attached to a note. Treat that as a graph edge so expansion reaching the note brings its document's top chunks. Zero cost; overlaps with #236.
  2. Vector-derived related edges. At index time compare a document's chunk vectors (or centroid) to existing note vectors and store the top matches as note-document edges. A few dot products, no model call.
  3. Non-LLM topic nodes. RAKE or TF-IDF keyphrases over the already-extracted text become topic nodes, the way t tags do for notes.
  4. Cloud-only extraction, opt-in. A single full-document pass is realistic only with a large cloud context window. Gate on LlmBackendType.uniunCloud; needs a privacy note since document text leaves the device.

Still to answer before building any of these: is a document's node identity the attaching note or the document itself (it can be attached to several notes), and does a not-searchable scan get any graph presence?

主要语言
Dart
星标
2
派生
2
平均合并
1 天 7 小时
30 天内合并 PR
35

环境准备

  • 没有 Dockerfile 或 Docker Compose 文件
  • 没有 Pull Request 模板
  • 阅读贡献指南

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

basictech01/uniun 的其他 Issue

查看 basictech01/uniun 的全部 Issue

相似的 Issue

更多 Dart Issue

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。