ChatOpenAI 怎么才能拿到模型深度思考的过程

代码如下:

from langchain_openai import ChatOpenAI
import os

chat_model = ChatOpenAI(
    model=os.environ["MODEL_NAME"],
    temperature=0.5,
    base_url=os.environ["BASE_URL"],
    api_key=os.environ["OPENAI_API_KEY"],
    extra_body={
        "enable_thinking": True,
        "return_reasoning": True,
    },
    streaming=True,
)

for chunk in chat_model.stream("你好, 请介绍一下你自己"):
    print(chunk)

运行结果:

content='' additional_kwargs={} response_metadata={} id='run--af26814e-2c74-474d-8b2c-ac84a9b30026'
content='' additional_kwargs={} response_metadata={} id='run--af26814e-2c74-474d-8b2c-ac84a9b30026'
content='' additional_kwargs={} response_metadata={} id='run--af26814e-2c74-474d-8b2c-ac84a9b30026'
content='' additional_kwargs={} response_metadata={} id='run--af26814e-2c74-474d-8b2c-ac84a9b30026'
content='' additional_kwargs={} response_metadata={} id='run--af26814e-2c74-474d-8b2c-ac84a9b30026'
content='' additional_kwargs={} response_metadata={} id='run--af26814e-2c74-474d-8b2c-ac84a9b30026'
content='' additional_kwargs={} response_metadata={} id='run--af26814e-2c74-474d-8b2c-ac84a9b30026'
content='' additional_kwargs={} response_metadata={} id='run--af26814e-2c74-474d-8b2c-ac84a9b30026'
content='' additional_kwargs={} response_metadata={} id='run--af26814e-2c74-474d-8b2c-ac84a9b30026'
content='' additional_kwargs={} response_metadata={} id='run--af26814e-2c74-474d-8b2c-ac84a9b30026'
content='' additional_kwargs={} response_metadata={} id='run--af26814e-2c74-474d-8b2c-ac84a9b30026'
content='' additional_kwargs={} response_metadata={} id='run--af26814e-2c74-474d-8b2c-ac84a9b30026'
content='' additional_kwargs={} response_metadata={} id='run--af26814e-2c74-474d-8b2c-ac84a9b30026'
content='' additional_kwargs={} response_metadata={} id='run--af26814e-2c74-474d-8b2c-ac84a9b30026'
content='' additional_kwargs={} response_metadata={} id='run--af26814e-2c74-474d-8b2c-ac84a9b30026'
content='' additional_kwargs={} response_metadata={} id='run--af26814e-2c74-474d-8b2c-ac84a9b30026'
content='' additional_kwargs={} response_metadata={} id='run--af26814e-2c74-474d-8b2c-ac84a9b30026'
content='' additional_kwargs={} response_metadata={} id='run--af26814e-2c74-474d-8b2c-ac84a9b30026'
content='' additional_kwargs={} response_metadata={} id='run--af26814e-2c74-474d-8b2c-ac84a9b30026'
content='' additional_kwargs={} response_metadata={} id='run--af26814e-2c74-474d-8b2c-ac84a9b30026'
content='' additional_kwargs={} response_metadata={} id='run--af26814e-2c74-474d-8b2c-ac84a9b30026'
content='' additional_kwargs={} response_metadata={} id='run--af26814e-2c74-474d-8b2c-ac84a9b30026'
content='' additional_kwargs={} response_metadata={} id='run--af26814e-2c74-474d-8b2c-ac84a9b30026'
content='' additional_kwargs={} response_metadata={} id='run--af26814e-2c74-474d-8b2c-ac84a9b30026'
content='' additional_kwargs={} response_metadata={} id='run--af26814e-2c74-474d-8b2c-ac84a9b30026'
content='' additional_kwargs={} response_metadata={} id='run--af26814e-2c74-474d-8b2c-ac84a9b30026'
content='' additional_kwargs={} response_metadata={} id='run--af26814e-2c74-474d-8b2c-ac84a9b30026'
content='' additional_kwargs={} response_metadata={} id='run--af26814e-2c74-474d-8b2c-ac84a9b30026'
content='' additional_kwargs={} response_metadata={} id='run--af26814e-2c74-474d-8b2c-ac84a9b30026'
content='' additional_kwargs={} response_metadata={} id='run--af26814e-2c74-474d-8b2c-ac84a9b30026'
content='' additional_kwargs={} response_metadata={} id='run--af26814e-2c74-474d-8b2c-ac84a9b30026'
content='' additional_kwargs={} response_metadata={} id='run--af26814e-2c74-474d-8b2c-ac84a9b30026'
content='你好!' additional_kwargs={} response_metadata={} id='run--af26814e-2c74-474d-8b2c-ac84a9b30026'
content='我是Qwen3' additional_kwargs={} response_metadata={} id='run--af26814e-2c74-474d-8b2c-ac84a9b30026'
content=',是阿里巴巴集团' additional_kwargs={} response_metadata={} id='run--af26814e-2c74-474d-8b2c-ac84a9b30026'
content='旗下的通义实验室' additional_kwargs={} response_metadata={} id='run--af26814e-2c74-474d-8b2c-ac84a9b30026'
content='自主研发的超大规模' additional_kwargs={} response_metadata={} id='run--af26814e-2c74-474d-8b2c-ac84a9b30026'
content='语言模型。我可以' additional_kwargs={} response_metadata={} id='run--af26814e-2c74-474d-8b2c-ac84a9b30026'
content='帮助你回答问题' additional_kwargs={} response_metadata={} id='run--af26814e-2c74-474d-8b2c-ac84a9b30026'
content='、创作文字、' additional_kwargs={} response_metadata={} id='run--af26814e-2c74-474d-8b2c-ac84a9b30026'
content='编程、表达观点' additional_kwargs={} response_metadata={} id='run--af26814e-2c74-474d-8b2c-ac84a9b30026'
content='等。如果你有任何' additional_kwargs={} response_metadata={} id='run--af26814e-2c74-474d-8b2c-ac84a9b30026'
content='问题或需要帮助' additional_kwargs={} response_metadata={} id='run--af26814e-2c74-474d-8b2c-ac84a9b30026'
content=',欢迎随时告诉我' additional_kwargs={} response_metadata={} id='run--af26814e-2c74-474d-8b2c-ac84a9b30026'
content='!' additional_kwargs={} response_metadata={} id='run--af26814e-2c74-474d-8b2c-ac84a9b30026'
content='' additional_kwargs={} response_metadata={'finish_reason': 'stop', 'model_name': 'qwen3-235b-a22b'} id='run--af26814e-2c74-474d-8b2c-ac84a9b30026'

可以看到,前面的思考过程,除了id,什么信息都没有输出。

而如果使用ChatTongyi,则是正常的,代码如下:

from langchain_community.chat_models.tongyi import ChatTongyi
import os

chat_model = ChatTongyi(
    model=os.environ["MODEL_NAME"],
    api_key=os.environ["OPENAI_API_KEY"],
    streaming=True
)

is_thinking = False

for chunk in chat_model.stream("你好, 请介绍一下你自己"):
    if chunk.content:
        if is_thinking:
            print('\n\n' + '='*200 + '\n')
            is_thinking = False
        print(chunk.content, end="", flush=True)
    elif chunk.additional_kwargs['reasoning_content']:
        if not is_thinking:
            print('思考过程:' + '\n')
            is_thinking = True
        print(chunk.additional_kwargs['reasoning_content'], end="", flush=True)

运行结果如下:

思考过程:

嗯,用户让我介绍一下自己。首先,我需要确定用户的需求是什么。他们可能想了解我的功能、开发背景,或者应用场景。作为通义千问,我应该涵盖几个关键点:我的研发机构(通义实验室),我的能力范围(回答问题、创作文字、编程等),以及我的多语言支持。

然后,我需要考虑用户的潜在需求。他们可能不仅想知道我的基本功能,还可能关心我与其他模型的区别,比如超大规模参数量、训练数据量以及推理能力。此外,用户可能对实际应用感兴趣,比如写故事、写公文、写邮件等具体场景。

还要注意用户可能的疑问,比如我的训练数据截止时间,是否支持多语言,以及如何保持回答的准确性和时效性。需要明确说明数据截止到2024年10月,并强调持续更新和优化。

另外,用户可能希望了解我的安全性和可靠性,所以在回答中可以隐含这些信息,比如提到经过严格测试和优化,确保输出内容的安全性和准确性。最后,保持语气友好,邀请用户进一步提问,促进互动。

========================================================================================================================================================================================================

你好!我是通义千问,由通义实验室研发的超大规模语言模型。我可以帮助你:

1. **回答问题**:无论是学术问题、常识问题还是专业领域问题,我都可以尝试为你解答。
2. **创作文字**:写故事、写公文、写邮件、写剧本等,我都可以帮你完成。
3. **逻辑推理**:我可以帮助你进行逻辑推理和解决问题。
4. **编程**:我可以理解并生成多种编程语言的代码。
5. **多语言支持**:除了中文,我还支持英文、德语、法语、西班牙语等百种语言。

我的训练数据截止到2024年10月,这意味着我对这一时间点之前的信息有较好的了解。如果你有任何具体问题或需要帮助,欢迎随时告诉我!

也就是在additional_kwargs里面会包含有思考过程的内容。
想请教一下,就是ChatOpenAI 是不支持吗?那如果其他厂商的模型呢?每个厂商都要单独导一个包去写感觉很麻烦,也需要花时间去一一验证是否支持。
有没有其他的方案,有大佬懂的请留言,谢谢:pray: