Replies: 3 comments
|
对的,我也遇到了,而且他不像小米mimo,小米是报“Considered high risk”然后中断输出,但是上下文还能继续用,但是DS的话上下文污染了,对话就废了,只能说从上一轮创建分支 |
|
运行任务的时候查到了某条新闻,类似习特会那种,直接污染整个历史会话和几个尝试修复的会话,全部返回http 400我还奇了怪了。历史请求点进去才发现这个问题。 |
|
Thanks for the deterministic minimal repro — the four-character trigger, "spacing it inside a sentence still 400s", and "any two-character subset 200s" together settle that this is a match against the whole replayed payload, not a per-turn check, and your "reading it back poisons the reader" finding is the part that turns it from a nuisance into a hazard. Perry Link's mechanism analysis in #5445 is the accurate frame, and its bullet 1 ("去掉或改写后重试") is exactly the recovery shape. This reply adds the piece neither thread carries: a working, installable plugin-form mitigation for the session-poisoning case, so a session whose only other option is failing every turn can keep going. The plugin
Mounting needs no configuration: - insert:
- id: content-exists-risk
name: '@argszero/cordis-plugin-content-exists-risk'What it doesIt is reactive, so a healthy session pays nothing:
Nothing here bypasses the upstream content policy — when the platform refuses every rung, you get exactly the provider's error back. Where it can reach — honestlyYour carrier is the tool result (turn 3's command output).
Boundaries, stated plainly: it does not remove the poison from your log, it stops the poison from being transmitted. Assistant content is opt-in via On your two proposalsAn independent error code (e.g. Evidence47 tests against a real |
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
EN TL;DR — A banned word in the request content makes the DeepSeek API reject the whole request
(
400 Content Exists Risk). Because that word stays in the session history, every later request replays it,so the session becomes permanently unusable; worse, any other session that reads that content gets
poisoned the same way. Deterministic minimal repro included; related discussion: #5445.
一句话
请求内容里出现了违禁词(就是 "xx事件" 这一类词),DeepSeek 服务端直接拒掉整条请求
(HTTP 400,
Content Exists Risk);因为这个词留在了会话历史里,之后每一轮请求都会把它一起发出去,于是整个会话此后每轮必败,重试、换说法都无效。相关现象见 #5445(那里有附件样本)。
环境:DSH
0.1.1-rc.2、模型deepseek-flash(providerdeepseek-official)、Windows 10。确定性复现
POST https://api.deepseek.com/chat/completions:400 Content Exists Risk(code=invalid_request_error);200;400(说明只看是否出现,与上下文无关);200(是"组合"才触发)。s10_turns_6_7.txt见 长会话触发 Content Exists Risk / INVALID_REQUEST,整个会话被 400 拒绝,能否恢复?(dsh + DeepSeek API) #5445,共 20 行):400;400;第 1–2 行、第 4–20 行单独发 →200;为什么比"偶尔一次报错"严重
(
seq连续、无损坏),从文件层面看不出问题,用户只能看到"每轮都失败";400—— 我实测复现过两次(一次人工、一次用裸 API 请求);也就是说"去查证/修复"这个动作本身会扩散问题;
INVALID_REQUEST(
packages/llm/llm-deepseek/src/adapter.ts的httpErrorCode),既没有"供应商内容拒绝"这一类独立错误码,也没有任何"这段历史无法重放,建议删除某轮"的向导。
建议
CONTENT_REJECTED),这样宿主/客户端才能给出正确引导,而不是把它当成参数格式错误;
或允许"跳过某条历史";另外 [Bug/提案] 纯推理轮到 content or tool_calls must be set,毒死整会话:(serialize) 层缺少对 reasoning-only 空 content 的兜底 #5466 指出的"reasoning-only 空 content 毒死会话"是同一类问题的另一个入口,
建议一起考虑。
相关
Content Exists Risk、整会话被 400 拒),附件s10_turns_6_7.txt可复现;该词涉及敏感话题,具体是哪几个字我不写出来,上面统一用 "xx事件" 代指。
All reactions