Skip to content

Add optional document trust verification to add_corpus (Stipple) - #47

Open
Sketchjar wants to merge 1 commit into
shibing624:mainfrom
Sketchjar:add-source-verification
Open

Sketchjar wants to merge 1 commit into
shibing624:mainfrom
Sketchjar:add-source-verification

Conversation

@Sketchjar

Copy link
Copy Markdown

""" + body + """

New doc_verification.py + Rag.add_corpus(verify=True) flag: inspect
uploaded documents for forensic authenticity (tamper risk band +
per-signal evidence) and AI-written-prose probability before their text
enters the corpus. Verdicts stored in Rag.source_verification keyed by
file path for UI/API display.

- Off by default (verify=False), zero behavior change
- Best-effort: verification failures logged, corpus unaffected
- Free anonymous tier, no signup; STIPPLE_API_KEY for own metering

Live-verified: minimal PDF -> risk_band low + warrant id.
@shibing624

Copy link
Copy Markdown
Owner

Hi @Sketchjar,感谢你的贡献和详细的说明!

关于这个 PR,有几点想法想和你讨论一下:

1. 关于引入外部第三方服务

这个功能的核心是把用户上传的文档发送到外部服务 stipple.sh 做校验。虽然默认是 verify=False(可选开启),但作为一个开源 RAG 工具,我们比较谨慎地对待"把用户文档发送到某个特定商业服务商"这类功能——这里涉及用户数据隐私、依赖绑定单一厂商等问题,不太适合直接内置到核心库里。

如果确实有类似需求,更合适的方式可能是:

  • 设计一个通用的、可插拔的"文档校验/预处理 hook"接口,让用户可以自行接入任意校验服务(包括但不限于 Stipple),而不是硬编码某一家服务的 API;
  • 或者作为一个独立的示例/插件仓库来维护,而不是合并进主仓库。

2. 代码实现上的一些建议

  • rag.py 里这行:

    self.source_verification = getattr(self, "source_verification", {})

    建议直接在 __init__ 中初始化 self.source_verification = {},这样逻辑更清晰,也避免每次调用 add_corpus 都做一次 getattr 判断。

  • doc_verification.py 中手写了 multipart/form-data 的编码逻辑,建议直接用 requests 库(files= 参数),可以减少出错概率、提升可维护性。

  • except Exception: return None 这种写法会静默吞掉所有异常(包括网络配置错误、认证失败等),建议至少记录一下具体的异常信息,方便排查问题。

  • REQUEST_TIMEOUT = 300 秒(5 分钟)对于一次同步的 HTTP 调用来说比较长,可能会明显拖慢 add_corpus 的整体流程,建议评估一个更合理的超时时间,并考虑异步/后台处理的方式。

  • 目前没有看到对应的测试和 README/文档更新,如果要推进合并,也需要补充这些内容。

再次感谢你的提交,也欢迎针对以上几点继续讨论!如果你有兴趣把这个改造成通用的、不绑定单一服务商的插件式方案,我们很乐意继续看看。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants