LLM JSON Output Incorrectly Extracts Data from "<think>" Label #20219

Closed
opened 2026-02-21 20:06:20 -05:00 by yindo · 3 comments
Owner

Originally created by @Mister-leo on GitHub (Nov 9, 2025).

Self Checks

  • I have read the Contributing Guide and Language Policy.
  • This is only for bug report, if you would like to ask a question, please head to Discussions.
  • I have searched for existing issues search for existing issues, including closed ones.
  • I confirm that I am using English to submit this report, otherwise it will be closed.
  • 【中文用户 & Non English User】请使用英语提交,否则会被关闭 :)
  • Please do not modify this template :) and fill in all the required fields.

Dify version

1.9.2

Cloud or Self Hosted

Self Hosted (Docker)

Steps to reproduce

Although I use structured output, when the data structure appears within the "" label, the LLM incorrectly extracts data from inside the label instead of from outside it.
Image

Image

✔️ Expected Behavior

Should extract the formatted output out of the label of

Actual Behavior

No response

Originally created by @Mister-leo on GitHub (Nov 9, 2025). ### Self Checks - [x] I have read the [Contributing Guide](https://github.com/langgenius/dify/blob/main/CONTRIBUTING.md) and [Language Policy](https://github.com/langgenius/dify/issues/1542). - [x] This is only for bug report, if you would like to ask a question, please head to [Discussions](https://github.com/langgenius/dify/discussions/categories/general). - [x] I have searched for existing issues [search for existing issues](https://github.com/langgenius/dify/issues), including closed ones. - [x] I confirm that I am using English to submit this report, otherwise it will be closed. - [x] 【中文用户 & Non English User】请使用英语提交,否则会被关闭 :) - [x] Please do not modify this template :) and fill in all the required fields. ### Dify version 1.9.2 ### Cloud or Self Hosted Self Hosted (Docker) ### Steps to reproduce Although I use structured output, when the data structure appears within the "<think>" label, the LLM incorrectly extracts data from inside the label instead of from outside it. <img width="923" height="340" alt="Image" src="https://github.com/user-attachments/assets/f7a2849a-6320-4d22-8379-cb115cd33dda" /> <img width="586" height="259" alt="Image" src="https://github.com/user-attachments/assets/56679ec1-3770-4ce0-bb45-0dfd084797f5" /> ### ✔️ Expected Behavior Should extract the formatted output out of the label of </think> ### ❌ Actual Behavior _No response_
yindo added the 🐞 bug label 2026-02-21 20:06:20 -05:00
yindo closed this issue 2026-02-21 20:06:20 -05:00
Author
Owner

@dosubot[bot] commented on GitHub (Nov 9, 2025):

Hi @Mister-leo! I'm Dosu and I’m helping the dify team.

This is a known bug in Dify v1.9.2: when JSON structured output appears inside <think> tags, the parser may incorrectly extract or fail to extract the intended output. Recent updates have addressed this by stripping out <think>...</think> content before parsing JSON, ensuring only the correct structured output is extracted. The fix was merged after your version—see PR #26992 for details and code changes.

If you need a workaround, you can manually patch your deployment to remove <think> tags from the LLM output before JSON parsing, similar to the regex used in the PR:

import re
if "<think>" in result_text:
    result_text = re.sub(r"<think[^>]*>[\s\S]*?</think>", "", result_text, flags=re.IGNORECASE)

Upgrading to the latest release will include this fix and improve structured output extraction reliability.

To reply, just mention @dosu.


How did I do? Good | Irrelevant | Incorrect | Verbose | Hallucination | Report 🐛 | Other  Chat with Dosu Join Discord Share on X

@dosubot[bot] commented on GitHub (Nov 9, 2025): <!-- Greeting --> Hi @Mister-leo! I'm [Dosu](https://go.dosu.dev/dosubot) and I’m helping the dify team. <!-- Answer --> This is a known bug in Dify v1.9.2: when JSON structured output appears inside `<think>` tags, the parser may incorrectly extract or fail to extract the intended output. Recent updates have addressed this by stripping out `<think>...</think>` content before parsing JSON, ensuring only the correct structured output is extracted. The fix was merged after your version—see [PR #26992](https://github.com/langgenius/dify/pull/26992) for details and code changes. If you need a workaround, you can manually patch your deployment to remove `<think>` tags from the LLM output before JSON parsing, similar to the regex used in the PR: ```python import re if "<think>" in result_text: result_text = re.sub(r"<think[^>]*>[\s\S]*?</think>", "", result_text, flags=re.IGNORECASE) ``` Upgrading to the latest release will include this fix and improve structured output extraction reliability. <!-- Dosu Comment Footer --> *To reply, just mention [@dosu](https://go.dosu.dev/dosubot).* --- <sup>How did I do? [Good](https://app.dosu.dev/response-feedback/cffa658f-234d-473d-b1f4-374325d02637?feedback_type=great_response) | [Irrelevant](https://app.dosu.dev/response-feedback/cffa658f-234d-473d-b1f4-374325d02637?feedback_type=irrelevant_answer) | [Incorrect](https://app.dosu.dev/response-feedback/cffa658f-234d-473d-b1f4-374325d02637?feedback_type=incorrect_sources) | [Verbose](https://app.dosu.dev/response-feedback/cffa658f-234d-473d-b1f4-374325d02637?feedback_type=too_verbose) | [Hallucination](https://app.dosu.dev/response-feedback/cffa658f-234d-473d-b1f4-374325d02637?feedback_type=hallucination) | [Report 🐛](https://app.dosu.dev/response-feedback/cffa658f-234d-473d-b1f4-374325d02637?feedback_type=bug_report) | [Other](https://app.dosu.dev/response-feedback/cffa658f-234d-473d-b1f4-374325d02637?feedback_type=other)</sup>&nbsp;&nbsp;[![Chat with Dosu](https://dosu.dev/dosu-chat-badge.svg)](https://app.dosu.dev/6088a4f4-073a-43f3-b3d4-4f06fb0c05a0/ask?utm_source=github)&nbsp;[![Join Discord](https://img.shields.io/badge/join-5865F2?logo=discord&logoColor=white&label=)](https://go.dosu.dev/discord-bot)&nbsp;[![Share on X](https://img.shields.io/badge/X-share-black)](https://twitter.com/intent/tweet?text=%40dosu_ai%20helped%20me%20solve%20this%20issue!&url=https%3A//github.com/langgenius/dify/issues/28019)
Author
Owner

@Jimmy-L99 commented on GitHub (Nov 9, 2025):

Same problem, I use 1.8.1 version now, some times reasoning model will repeat the json schema in thinking part then output the final json in answer, but dify extract the json from reasoning but not response.

@Jimmy-L99 commented on GitHub (Nov 9, 2025): Same problem, I use 1.8.1 version now, some times reasoning model will repeat the json schema in thinking part then output the final json in answer, but dify extract the json from reasoning but not response.
Author
Owner

@dosubot[bot] commented on GitHub (Dec 13, 2025):

Hi, @Mister-leo. I'm Dosu, and I'm helping the Dify team manage their backlog and am marking this issue as stale.

Issue Summary:

  • You reported that in Dify v1.9.2, the LLM incorrectly extracted structured output from inside the "" tags instead of outside.
  • This was a known bug affecting versions around v1.8.1 and v1.9.2, causing JSON extraction from reasoning rather than the final answer.
  • The issue was fixed after v1.9.2 by stripping out "..." content before JSON parsing (see PR #26992).
  • A manual regex patch was suggested as a temporary workaround before upgrading.
  • Upgrading to the latest release resolves this extraction problem.

Next Steps:

  • Please confirm if this issue is still relevant with the latest version of Dify; if so, you can keep the discussion open by commenting here.
  • Otherwise, I will automatically close this issue in 15 days.

Thanks for your understanding and contribution!

@dosubot[bot] commented on GitHub (Dec 13, 2025): Hi, @Mister-leo. I'm [Dosu](https://dosu.dev), and I'm helping the Dify team manage their backlog and am marking this issue as stale. **Issue Summary:** - You reported that in Dify v1.9.2, the LLM incorrectly extracted structured output from inside the "<think>" tags instead of outside. - This was a known bug affecting versions around v1.8.1 and v1.9.2, causing JSON extraction from reasoning rather than the final answer. - The issue was fixed after v1.9.2 by stripping out "<think>...</think>" content before JSON parsing (see PR #26992). - A manual regex patch was suggested as a temporary workaround before upgrading. - Upgrading to the latest release resolves this extraction problem. **Next Steps:** - Please confirm if this issue is still relevant with the latest version of Dify; if so, you can keep the discussion open by commenting here. - Otherwise, I will automatically close this issue in 15 days. Thanks for your understanding and contribution!
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: langgenius/dify#20219