From a4d48373d47d03870c1b9ff813211c4b279552f2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B9=85=E6=B0=A2?= Date: Wed, 27 May 2026 16:34:01 +0800 Subject: [PATCH] feat(langchain): add support for reasoning content with new reasoning providers and integrate ChatDeepSeek model MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Change-Id: I60b0bdc5837f88c554957d322273e8dbd63dc677 Signed-off-by: 久氢 --- .../integration/langchain/model_adapter.py | 35 +++++++++++++++++-- pyproject.toml | 1 + 2 files changed, 34 insertions(+), 2 deletions(-) diff --git a/agentrun/integration/langchain/model_adapter.py b/agentrun/integration/langchain/model_adapter.py index 8f9e494..e20285a 100644 --- a/agentrun/integration/langchain/model_adapter.py +++ b/agentrun/integration/langchain/model_adapter.py @@ -11,6 +11,16 @@ ) from agentrun.integration.utils.adapter import ModelAdapter +# 支持 reasoning_content 的供应商列表 +_REASONING_PROVIDERS = frozenset({ + "tongyi", + "custom", + "deepseek", + "zhipuai", + "moonshot", + "minimax", +}) + class LangChainModelAdapter(ModelAdapter): """LangChain 模型适配器 / LangChain Model Adapter @@ -23,9 +33,30 @@ def __init__(self): def wrap_model(self, common_model: Any) -> Any: """包装 CommonModel 为 LangChain BaseChatModel / LangChain Model Adapter""" + info = common_model.get_model_info() # 确保模型可用 + provider = (info.provider or "").lower() + + if provider in _REASONING_PROVIDERS: + return self._create_reasoning_model(info) + return self._create_openai_model(info) + + def _create_reasoning_model(self, info: Any) -> Any: + """创建支持 reasoning_content 的模型(使用 ChatDeepSeek)""" + from langchain_deepseek import ChatDeepSeek + + return ChatDeepSeek( + model=info.model, + api_key=info.api_key, + api_base=info.base_url, + default_headers=info.headers, + stream_usage=True, + streaming=True, + ) + + def _create_openai_model(self, info: Any) -> Any: + """创建标准 OpenAI 兼容模型""" from langchain_openai import ChatOpenAI - info = common_model.get_model_info() # 确保模型可用 return ChatOpenAI( name=info.model, api_key=info.api_key, @@ -33,5 +64,5 @@ def wrap_model(self, common_model: Any) -> Any: base_url=info.base_url, default_headers=info.headers, stream_usage=True, - streaming=True, # 启用流式输出以支持 token by token + streaming=True, ) diff --git a/pyproject.toml b/pyproject.toml index 96b6ccb..2c224d7 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -38,6 +38,7 @@ server = [ langchain = [ "langchain>=1.0.0; python_version >= '3.10'", "langchain-openai>=1.0.0; python_version >= '3.10'", + "langchain-deepseek>=1.0.1; python_version >= '3.10'", ] google-adk = [