├── DianJin-R1 ├── README.md ├── README_zh.md ├── images │ ├── 2-step-training.png │ └── multi-agent2reasoning.png └── src │ ├── evaluate │ ├── eval.py │ ├── merge_model.py │ └── run_vllm.sh │ ├── rl │ ├── grpo.sh │ └── reward_score_cflue.py │ └── sft │ ├── dataset_info.json │ ├── qwen2.5_sft.yaml │ └── sft.sh ├── README.md ├── README_zh.md └── images ├── dianjin_dingding.png └── dianjin_logo.png /DianJin-R1/README.md: -------------------------------------------------------------------------------- 1 |
2 |

DianJin-R1

3 |

4 | A large reasoning model for the financial domain 5 |

6 | 7 | [![arXiv](https://img.shields.io/badge/arXiv-2504.15716-b31b1b.svg?logo=arXiv)](https://arxiv.org/abs/2504.15716) 8 | [![code](https://img.shields.io/badge/Github-Code-keygen.svg?logo=github)](https://github.com/aliyun/qwen-dianjin) 9 | [![model](https://img.shields.io/badge/%F0%9F%A4%97%20Hugging_Face-Model-blue.svg)](https://huggingface.co/DianJin) 10 | [![ModelScope](https://img.shields.io/badge/ModelScope-Model-blue.svg)](https://modelscope.cn/organization/tongyi_dianjin) 11 | [![model](https://img.shields.io/badge/%F0%9F%A4%97%20Hugging_Face-Dataset-orange.svg)](https://huggingface.co/DianJin) 12 | [![ModelScope](https://img.shields.io/badge/ModelScope-Dataset-orange.svg)](https://modelscope.cn/organization/tongyi_dianjin) 13 | 14 | [**中文**](README_zh.md) | **EN** 15 | 16 |
17 | 18 | ## Table of Contents 19 | - [Introduction](#summary) 20 | - [Dataset/Model Download](#download) 21 | - [Reasoning Dataset](#dataset) 22 | - [Two-stage Training](#2step) 23 | - [Stage 1: Learning Reasoning with SFT](#step1) 24 | - [Stage 2: Enhancing Reasoning with RL](#step2) 25 | - [Model Evaluation](#eval) 26 | - [Merge & Deploy](#merge_and_deploy) 27 | - [Inference & Evaluation](#infer_and_eval) 28 | - [License](#license) 29 | - [Citation](#cite) 30 | 31 | ## 📢 Introduction 32 | 33 | Effective reasoning remains a core challenge for large language models (LLMs) in the financial domain, where tasks often require domain-specific knowledge, precise numerical calculations, and strict adherence to compliance rules. We propose DianJin-R1, a reasoning-enhanced framework designed to address these challenges through reasoning-augmented supervision and reinforcement learning. Central to our approach is DianJin-R1-Data, a high-quality dataset constructed from CFLUE, FinQA, and a proprietary compliance corpus (Chinese Compliance Check, CCC), combining diverse financial reasoning scenarios with verified annotations. Our models, DianJin-R1-7B and DianJin-R1-32B, are fine-tuned from Qwen2.5-7B-Instruct and Qwen2.5-32B-Instruct using a structured format that generates both reasoning steps and final answers. To further refine reasoning quality, we apply Group Relative Policy Optimization (GRPO), a reinforcement learning method that incorporates dual reward signals: one encouraging structured outputs and another rewarding answer correctness. We evaluate our models on five benchmarks: three financial datasets (CFLUE, FinQA, and CCC) and two general reasoning benchmarks (MATH-500 and GPQA-Diamond). Experimental results show that DianJin-R1 models consistently outperform their non-reasoning counterparts, especially on complex financial tasks. Moreover, on the real-world CCC dataset, our single-call reasoning models match or even surpass the performance of multi-agent systems that require significantly more computational cost. These findings demonstrate the effectiveness of DianJin-R1 in enhancing financial reasoning through structured supervision and reward-aligned learning, offering a scalable and practical solution for real-world applications. 34 | 35 | 36 | ## 📥 Dataset/Model Download 37 | 38 | | | ModelScope | HuggingFace | 39 | |:---------------:|:----------------------------------------------------------:|:----------------------------------------:| 40 | | DianJin-R1-Data | [Data](https://modelscope.cn/organization/tongyi_dianjin) | [Data](https://huggingface.co/DianJin/) | 41 | | DianJin-R1-7B | [Model](https://modelscope.cn/organization/tongyi_dianjin) | [Model](https://huggingface.co/DianJin/) | 42 | | DianJin-R1-32B | [Model](https://modelscope.cn/organization/tongyi_dianjin) | [Model](https://huggingface.co/DianJin/) | 43 | 44 | 45 | ## 🔧 Reasoning Dataset 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 |
DatasetLanguageSizeQ_tokenR_tokenA_token
Used in SFT
CFLUE_{MCQ}Chinese26672134.85807.4295.71
CFLUE_{OE}Chinese504549.28857.04485.60
FinQAEnglish45811048.381576.91148.42
CCCChinese18001695.78884.2969.64
Used in RL
CFLUE_{MCQ}Chinese4096132.40-2.15
107 | 108 | For the CFLUE dataset, we first use gpt-4o to convert multiple-choice questions into open-ended questions, then utilize deepseek-r1 to obtain reasoning data. Please refer to [our paper](https://arxiv.org/abs/2504.15716) for details. 109 | 110 | For the FinQA dataset, which consists of open-ended questions by default, no additional conversion is required. Other processing steps are consistent with those used for CFLUE. 111 | 112 | For the CCC dataset, we collect all reasoning steps from the multi-agent LLM system and combine them into a final, unified reasoning process and result using gpt-4o. 113 | 114 | ![multi-agent2reasoning.png](./images/multi-agent2reasoning.png) 115 | 116 | ## 🔄 Two-stage Training 117 | 118 | ![2-step-training.png](./images/2-step-training.png) 119 | 120 | ### Stage 1: Learning Reasoning with SFT 121 | 122 | #### Envorinment Setup 123 | 124 | We use the [LLaMA-Factory](https://github.com/hiyouga/LLaMA-Factory) framework for SFT training. Please install the following dependencies: 125 | ```shell 126 | conda create -n llama python==3.10 -y 127 | conda activate llama 128 | git clone https://github.com/hiyouga/LLaMA-Factory.git 129 | cd LLaMA-Factory 130 | pip install -e . 131 | pip install deepspeed==0.15.4 132 | pip install vllm==0.8.2 133 | ``` 134 | 135 | #### Training(Using Qwen2.5-7B-Instruct as an Example) 136 | ```shell 137 | cd src/sft 138 | bash sft.sh 139 | ``` 140 | 141 | ### Stage 2: Enhancing Reasoning with RL 142 | #### Environment Setup 143 | 144 | We use the [verl](https://github.com/volcengine/verl) framework for GRPO training. Please install the following dependencies: 145 | ```shell 146 | conda create -n verl python==3.10 -y 147 | conda activate verl 148 | git clone https://github.com/volcengine/verl.git 149 | cd verl 150 | pip install -e . 151 | pip install flash-attn --no-build-isolation 152 | pip install vllm==0.8.2 153 | ``` 154 | 155 | #### Reward Function 156 | 157 | A score of 1 is given if the format is correct and the answer is accurate; 158 | otherwise, the score is 0. For details, please refer to `rl/reward_score_cflue.py`. 159 | 160 | #### Training(Using Qwen2.5-7B-Instruct as an Example) 161 | 162 | ```shell 163 | cd src/rl 164 | bash grpo.sh 165 | ``` 166 | 167 | ## 📊 Model Evaluation 168 | 169 | 170 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | 178 | 179 | 180 | 181 | 182 | 183 | 184 | 185 | 186 | 187 | 188 | 189 | 190 | 191 | 192 | 193 | 194 | 195 | 196 | 197 | 198 | 199 | 200 | 201 | 202 | 203 | 204 | 205 | 206 | 207 | 208 | 209 | 210 | 211 | 212 | 213 | 214 | 215 | 216 | 217 | 218 | 219 | 220 | 221 | 222 | 223 | 224 | 225 | 226 | 227 | 228 | 229 | 230 | 231 | 232 | 233 | 234 | 235 | 236 | 237 | 238 | 239 | 240 | 241 | 242 | 243 | 244 | 245 | 246 | 247 | 248 | 249 | 250 | 251 | 252 | 253 | 254 | 255 | 256 | 257 | 258 | 259 | 260 | 261 | 262 | 263 | 264 | 265 | 266 | 267 | 268 | 269 | 270 | 271 | 272 | 273 | 274 | 275 | 276 | 277 | 278 | 279 | 280 | 281 | 282 | 283 | 284 | 285 | 286 | 287 | 288 | 289 | 290 | 291 | 292 | 293 | 294 | 295 | 296 | 297 | 298 | 299 | 300 | 301 | 302 | 303 | 304 |
ModelFinancialGeneralAvg.
CFLUEFinQACCCMATHGPQA
General models without explicit reasoning
GPT-4o71.6879.1650.0077.9339.5663.67
DeepSeek-V375.1481.3457.5087.2045.4568.33
Qwen2.5-7B-Instruct69.3766.7055.0071.4033.8459.26
Qwen2.5-32B-Instruct77.9579.5156.5081.0044.9567.98
Qwen2.5-72B-Instruct79.4677.9455.5082.2039.9067.00
General models with reasoning
DeepSeek-R186.6479.8167.5094.8066.1678.98
DeepSeek-R1-Distill-Qwen-7B48.3966.0941.5090.2045.9658.43
DeepSeek-R1-Distill-Qwen-14B70.8376.6350.0093.2054.5569.04
DeepSeek-R1-Distill-Qwen-32B78.5277.0052.0095.0063.6473.23
QwQ-32B83.4978.3852.0095.0063.6474.50
DianJin-R1 with reasoning
DianJin-R1-7B80.3277.7294.5076.6037.5473.34
DianJin-R1-32B86.7480.8296.0088.2058.5982.07
305 | 306 | 307 | #### Merge & Deploy 308 | 309 | 310 | We need to merge the FSDP-trained model into the HuggingFace format and deploy it using VLLM for fast inference. 311 | 312 | ```shell 313 | cd src/evaluate 314 | # merge model 315 | python3 merge_model.py --fsdp_path --hf_path --out_path checkpoints/Qwen2.5-7B-Instruct-GRPO 316 | # deploy model 317 | bash run_vllm.sh 318 | ``` 319 | 320 | #### Inference & Evaluation 321 | 322 | - CFLUE & FinQA 323 | 324 | The relevant code is stored in `src/evaluate/eval.py`, where `eval_cflue` and `eval_finqa` are used to evaluate the CFLUE, FinQA datasets respectively. 325 | 326 | ```shell 327 | # Evaluation example 328 | cd src/evaluate 329 | python3 eval.py --result_path 330 | ``` 331 | 332 | - MATH & GPQA 333 | 334 | Please refer to [EvalScope](https://github.com/modelscope/evalscope) for evaluating MATH and GPQA-Diamond. 335 | 336 | ## 📋 License 337 | ![](https://img.shields.io/badge/License-MIT-blue.svg#id=wZ1Hr&originHeight=20&originWidth=82&originalType=binary&ratio=1&rotation=0&showTitle=false&status=done&style=none&title=) 338 | This project adheres to [MIT License](https://lbesson.mit-license.org/). 339 | 340 | ## 🔖 Citation 341 | 342 | If you use our model or dataset, please cite our paper. 343 | 344 | ``` 345 | @article{dianjin-r1, 346 | title = {DianJin-R1: Evaluating and Enhancing Financial Reasoning in Large Language Models}, 347 | author = {Jie Zhu, Qian Chen, Huaixia Dou, Junhui Li, Lifan Guo, Feng Chen, Chi Zhang}, 348 | journal = {arxiv.org/abs/2504.15716}, 349 | year = {2025} 350 | } 351 | ``` 352 | -------------------------------------------------------------------------------- /DianJin-R1/README_zh.md: -------------------------------------------------------------------------------- 1 |
2 |

DianJin-R1

3 |

4 | 面向金融领域的推理大模型 5 |

6 | 7 | [![arXiv](https://img.shields.io/badge/arXiv-2504.15716-b31b1b.svg?logo=arXiv)](https://arxiv.org/abs/2504.15716) 8 | [![code](https://img.shields.io/badge/Github-Code-keygen.svg?logo=github)](https://github.com/aliyun/qwen-dianjin) 9 | [![model](https://img.shields.io/badge/%F0%9F%A4%97%20Hugging_Face-Model-blue.svg)](https://huggingface.co/DianJin) 10 | [![ModelScope](https://img.shields.io/badge/ModelScope-Model-blue.svg)](https://modelscope.cn/organization/tongyi_dianjin) 11 | [![model](https://img.shields.io/badge/%F0%9F%A4%97%20Hugging_Face-Dataset-orange.svg)](https://huggingface.co/DianJin) 12 | [![ModelScope](https://img.shields.io/badge/ModelScope-Dataset-orange.svg)](https://modelscope.cn/organization/tongyi_dianjin) 13 | 14 | **中文** | [**EN**](README.md) 15 | 16 |
17 | 18 | ## 目录 19 | - [简介](#summary) 20 | - [数据集/模型下载](#download) 21 | - [推理数据集](#dataset) 22 | - [两阶段训练](#2step) 23 | - [阶段1: 通过SFT学习推理](#step1) 24 | - [阶段2: 利用RL增强推理](#step2) 25 | - [模型评测](#eval) 26 | - [合并 & 部署](#merge_and_deploy) 27 | - [推理 & 评测](#infer_and_eval) 28 | - [许可证](#license) 29 | - [引用](#cite) 30 | 31 | ## 📢 简介 32 | 33 | 大型语言模型(LLMs)在金融领域的有效推理仍然是一个核心挑战,因为金融任务通常需要领域特定知识、精确的数值计算以及严格遵守合规规则。我们提出了DianJin-R1,一种增强推理的框架,通过推理增量的监督和强化学习来解决这些挑战。我们的方法的核心是DianJin-R1-Data,一个由CFLUE、FinQA和一个专有合规语料库(Chinese Compliance Check,CCC)构建的高质量数据集,结合了多样化的金融推理场景和经过验证的注释。我们的模型,DianJin-R1-7B和DianJin-R1-32B,从Qwen2.5-7B-Instruct和Qwen2.5-32B-Instruct微调而来,使用生成推理步骤和最终答案的结构化格式。为了进一步完善推理质量,我们应用组相对策略优化(GRPO),一种强化学习方法,结合了双重奖励信号:一个促进结构化输出,另一个奖励答案正确性。我们在五个基准测试中评估我们的模型:三个金融数据集(CFLUE、FinQA和CCC)和两个通用推理基准(MATH-500和GPQA-Diamond)。实验结果表明,DianJin-R1模型在复杂金融任务中始终优于其非推理模型。此外,在真实世界的CCC数据集上,我们的单次调用推理模型相比那些需要显著更多计算成本的多代理系统表现相当甚至更好。这些发现证明了DianJin-R1在通过结构化监督和奖励对齐学习加强金融推理方面的有效性,为现实世界应用提供了一个可扩展且实用的解决方案。 34 | 35 | ## 📥 数据集/模型下载 36 | 37 | | | ModelScope | HuggingFace | 38 | |:---------------:|:-------------------------------------------------------:|:-------------------------------------------:| 39 | | DianJin-R1-Data | [数据](https://modelscope.cn/organization/tongyi_dianjin) | [数据](https://huggingface.co/DianJin/) | 40 | | DianJin-R1-7B | [模型](https://modelscope.cn/organization/tongyi_dianjin) | [模型](https://huggingface.co/DianJin/) | 41 | | DianJin-R1-32B | [模型](https://modelscope.cn/organization/tongyi_dianjin) | [模型](https://huggingface.co/DianJin/) | 42 | 43 | 44 | ## 🔧 推理数据集 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 |
DatasetLanguageSizeQ_tokenR_tokenA_token
Used in SFT
CFLUE_{MCQ}Chinese26672134.85807.4295.71
CFLUE_{OE}Chinese504549.28857.04485.60
FinQAEnglish45811048.381576.91148.42
CCCChinese18001695.78884.2969.64
Used in RL
CFLUE_{MCQ}Chinese4096132.40-2.15
106 | 107 | 对于CFLUE数据集,我们首先使用gpt-4o把多项选择题转换为开放式问题,接着利用deepseek-r1获取推理数据。更多细节请参考[论文](https://arxiv.org/abs/2504.15716)。 108 | 109 | 对于FinQA数据集,其本身是开放式问题,我们无须进行额外转换。其余处理步骤同CFLUE保持一致。 110 | 111 | 对于CCC数据集,我们获取Multi-Agent System工作流中所有的推理步骤并使用gpt-4o合并为一个最终的推理过程和推理结果。 112 | 113 | ![multi-agent2reasoning.png](./images/multi-agent2reasoning.png) 114 | 115 | ## 🔄 两阶段训练 116 | 117 | ![2-step-training.png](./images/2-step-training.png) 118 | 119 | ### 阶段1: 通过SFT学习推理 120 | 121 | #### 环境准备 122 | 我们使用[LLaMA-Factory](https://github.com/hiyouga/LLaMA-Factory)框架进行SFT训练,请安装如下依赖包 123 | ```shell 124 | conda create -n llama python==3.10 -y 125 | conda activate llama 126 | git clone https://github.com/hiyouga/LLaMA-Factory.git 127 | cd LLaMA-Factory 128 | pip install -e . 129 | pip install deepspeed==0.15.4 130 | pip install vllm==0.8.2 131 | ``` 132 | 133 | #### 训练(以Qwen2.5-7B-Instruct为例) 134 | ```shell 135 | cd src/sft 136 | bash sft.sh 137 | ``` 138 | 139 | ### 阶段2: 利用RL增强推理 140 | #### 环境准备 141 | 我们使用[verl](https://github.com/volcengine/verl)框架进行GRPO训练,请安装如下依赖包 142 | ```shell 143 | conda create -n verl python==3.10 -y 144 | conda activate verl 145 | git clone https://github.com/volcengine/verl.git 146 | cd verl 147 | pip install -e . 148 | pip install flash-attn --no-build-isolation 149 | pip install vllm==0.8.2 150 | ``` 151 | 152 | #### 奖励函数 153 | 154 | 格式正确+答案正确得分为1,其余情况得分为0,详情参考`rl/reward_score_cflue.py` 155 | 156 | #### 训练(以Qwen2.5-7B-Instruct为例) 157 | 158 | ```shell 159 | cd src/rl 160 | bash grpo.sh 161 | ``` 162 | 163 | ## 📊 模型评测 164 | 165 | 166 | 167 | 168 | 169 | 170 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | 178 | 179 | 180 | 181 | 182 | 183 | 184 | 185 | 186 | 187 | 188 | 189 | 190 | 191 | 192 | 193 | 194 | 195 | 196 | 197 | 198 | 199 | 200 | 201 | 202 | 203 | 204 | 205 | 206 | 207 | 208 | 209 | 210 | 211 | 212 | 213 | 214 | 215 | 216 | 217 | 218 | 219 | 220 | 221 | 222 | 223 | 224 | 225 | 226 | 227 | 228 | 229 | 230 | 231 | 232 | 233 | 234 | 235 | 236 | 237 | 238 | 239 | 240 | 241 | 242 | 243 | 244 | 245 | 246 | 247 | 248 | 249 | 250 | 251 | 252 | 253 | 254 | 255 | 256 | 257 | 258 | 259 | 260 | 261 | 262 | 263 | 264 | 265 | 266 | 267 | 268 | 269 | 270 | 271 | 272 | 273 | 274 | 275 | 276 | 277 | 278 | 279 | 280 | 281 | 282 | 283 | 284 | 285 | 286 | 287 | 288 | 289 | 290 | 291 | 292 | 293 | 294 | 295 | 296 | 297 | 298 | 299 | 300 |
ModelFinancialGeneralAvg.
CFLUEFinQACCCMATHGPQA
General models without explicit reasoning
GPT-4o71.6879.1650.0077.9339.5663.67
DeepSeek-V375.1481.3457.5087.2045.4568.33
Qwen2.5-7B-Instruct69.3766.7055.0071.4033.8459.26
Qwen2.5-32B-Instruct77.9579.5156.5081.0044.9567.98
Qwen2.5-72B-Instruct79.4677.9455.5082.2039.9067.00
General models with reasoning
DeepSeek-R186.6479.8167.5094.8066.1678.98
DeepSeek-R1-Distill-Qwen-7B48.3966.0941.5090.2045.9658.43
DeepSeek-R1-Distill-Qwen-14B70.8376.6350.0093.2054.5569.04
DeepSeek-R1-Distill-Qwen-32B78.5277.0052.0095.0063.6473.23
QwQ-32B83.4978.3852.0095.0063.6474.50
DianJin-R1 with reasoning
DianJin-R1-7B80.3277.7294.5076.6037.5473.34
DianJin-R1-32B86.7480.8296.0088.2058.5982.07
301 | 302 | 303 | #### 合并 & 部署 304 | 305 | 我们需要把fsdp训练后的模型合并成huggingface格式,并使用VLLM进行部署以进行快速推理。 306 | 307 | ```shell 308 | cd src/evaluate 309 | # 合并模型 310 | python3 merge_model.py --fsdp_path --hf_path --out_path checkpoints/Qwen2.5-7B-Instruct-GRPO 311 | # 部署模型 312 | bash run_vllm.sh 313 | ``` 314 | 315 | #### 推理 & 评测 316 | 317 | - CFLUE & FinQA 318 | 319 | 相关代码存放于`src/evaluate/eval.py`,其中`eval_cflue`和`eval_finqa`分别用于CFLUE、FinQA数据集的评测。 320 | 321 | ```shell 322 | # 评测示例 323 | cd src/evaluate 324 | python3 eval.py --result_path 325 | ``` 326 | 327 | - MATH & GPQA 328 | 329 | 请参考[EvalScope](https://github.com/modelscope/evalscope)进行MATH和GPQA-Diamond的评测。 330 | 331 | ## 📋 许可证 332 | ![](https://img.shields.io/badge/License-MIT-blue.svg#id=wZ1Hr&originHeight=20&originWidth=82&originalType=binary&ratio=1&rotation=0&showTitle=false&status=done&style=none&title=) 333 | 本项目遵循 [MIT License](https://lbesson.mit-license.org/). 334 | 335 | ## 🔖 引用 336 | 337 | 如果您使用了我们的数据集或模型,请引用我们的论文。 338 | 339 | ``` 340 | @article{dianjin-r1, 341 | title = {DianJin-R1: Evaluating and Enhancing Financial Reasoning in Large Language Models}, 342 | author = {Jie Zhu, Qian Chen, Huaixia Dou, Junhui Li, Lifan Guo, Feng Chen, Chi Zhang}, 343 | journal = {arxiv.org/abs/2504.15716}, 344 | year = {2025} 345 | } 346 | ``` -------------------------------------------------------------------------------- /DianJin-R1/images/2-step-training.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aliyun/qwen-dianjin/9e86559f23520dd289ba282743e131032e9838dc/DianJin-R1/images/2-step-training.png -------------------------------------------------------------------------------- /DianJin-R1/images/multi-agent2reasoning.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aliyun/qwen-dianjin/9e86559f23520dd289ba282743e131032e9838dc/DianJin-R1/images/multi-agent2reasoning.png -------------------------------------------------------------------------------- /DianJin-R1/src/evaluate/eval.py: -------------------------------------------------------------------------------- 1 | import re 2 | import json 3 | import argparse 4 | 5 | def eval_finqa(path): 6 | correct_cnt = 0 7 | total_cnt = 0 8 | with open(path) as f: 9 | for line in f: 10 | total_cnt += 1 11 | line = line.strip() 12 | item = json.loads(line) 13 | # gpt-4o评估结果 14 | response = item['output'] 15 | if "boxed{{1}}" in response: 16 | correct_cnt += 1 17 | 18 | print("=" * 20 + " Accuracy " + "=" * 20) 19 | print(correct_cnt) 20 | print(total_cnt) 21 | print(correct_cnt / total_cnt) 22 | 23 | def eval_cflue(path): 24 | box_pattern = r"\\boxed\{(.*?)\}" 25 | data = json.load(open(path, "r")) 26 | choices = "ABCDEFG" 27 | cnt = 0 28 | for item in data: 29 | # 标准答案 30 | answer = item["answer"] 31 | # 预测结果 32 | output = item["output"] 33 | if output is None: 34 | print("=" * 20 + " None " + "=" * 20) 35 | continue 36 | matches = re.findall(box_pattern, output, re.DOTALL) 37 | if len(matches) == 0: 38 | print("=" * 20 + " Wrong Format " + "=" * 20) 39 | print(item["instruction"]) 40 | print(answer) 41 | continue 42 | else: 43 | pred = "" 44 | for c in choices: 45 | if c in matches[-1]: 46 | pred += c 47 | if answer == pred: 48 | cnt += 1 49 | else: 50 | print("=" * 20 + " Wrong Answer " + "=" * 20) 51 | print(pred) 52 | print(answer) 53 | 54 | print("=" * 20 + " Accuracy " + "=" * 20) 55 | print(cnt) 56 | print(len(data)) 57 | print(cnt / len(data)) 58 | 59 | if __name__ == "__main__": 60 | parser = argparse.ArgumentParser() 61 | parser.add_argument("--result_path", type=str) 62 | args = parser.parse_args() 63 | output_path = args.result_path 64 | eval_cflue(output_path) 65 | # eval_finqa(output_path) -------------------------------------------------------------------------------- /DianJin-R1/src/evaluate/merge_model.py: -------------------------------------------------------------------------------- 1 | import argparse 2 | import torch 3 | from collections import defaultdict 4 | from transformers import AutoConfig, AutoModelForCausalLM, AutoTokenizer 5 | 6 | 7 | def main(): 8 | parser = argparse.ArgumentParser() 9 | parser.add_argument('--fsdp_path', help="GRPO Checkpoint Path", default='checkpoints/R1-GRPO/global_step_60/actor') 10 | parser.add_argument('--hf_path', help="HuggingFace Model Path", default='/data/Models/Qwen2.5-7B-Instruct') 11 | parser.add_argument('--out_path', help="Output Model Path", default='checkpoints/Qwen2.5-7B-Instruct-GRPO') 12 | parser.add_argument('--world_size', type=int, help="World Size", default=8) 13 | args = parser.parse_args() 14 | 15 | fsdp_checkpoint_path = args.fsdp_path 16 | huggingface_model_path = args.hf_path 17 | output_path = args.out_path 18 | world_size = args.world_size 19 | 20 | state_dict = defaultdict(list) 21 | for rank in range(world_size): 22 | filepath = f"{fsdp_checkpoint_path}/model_world_size_{world_size}_rank_{rank}.pt" 23 | print('loading', filepath) 24 | this_state_dict = torch.load(filepath) 25 | for key, value in this_state_dict.items(): 26 | state_dict[key].append(value.to_local()) 27 | 28 | for key in state_dict: 29 | state_dict[key] = torch.cat(state_dict[key], dim=0) 30 | 31 | config = AutoConfig.from_pretrained(huggingface_model_path) 32 | model = AutoModelForCausalLM.from_config(config) 33 | model.load_state_dict(state_dict) 34 | 35 | model.save_pretrained(output_path, max_shard_size="10GB") 36 | 37 | tokenizer = AutoTokenizer.from_pretrained(huggingface_model_path) 38 | tokenizer.save_pretrained(output_path) 39 | 40 | if __name__ == "__main__": 41 | main() -------------------------------------------------------------------------------- /DianJin-R1/src/evaluate/run_vllm.sh: -------------------------------------------------------------------------------- 1 | CUDA_VISIBLE_DEVICES=0,1,2,3 python -m vllm.entrypoints.openai.api_server \ 2 | --served-model-name checkpoints/Qwen2.5-7B-Instruct-GRPO \ 3 | --model checkpoints/Qwen2.5-7B-Instruct-GRPO \ 4 | --tensor_parallel_size 4 \ 5 | --port 8901 -------------------------------------------------------------------------------- /DianJin-R1/src/rl/grpo.sh: -------------------------------------------------------------------------------- 1 | set -x 2 | export VLLM_ATTENTION_BACKEND=XFORMERS 3 | 4 | export BASE_MODEL={{Qwen2.5-7B-Instruct-R1 Path}} 5 | export DATA_DIR=experiments/data 6 | export EXPERIMENT_NAME=DianJin-R1-7B 7 | export REWARD_PATH=reward_score_cflue.py 8 | export REWARD_NAME=compute_score 9 | export SAVE_DIR=experiments/checkpoints/$EXPERIMENT_NAME 10 | 11 | nohup python3 -m verl.trainer.main_ppo \ 12 | algorithm.adv_estimator=grpo \ 13 | data.train_files=$DATA_DIR/train.parquet \ 14 | data.val_files=$DATA_DIR/val.parquet \ 15 | data.train_batch_size=1024 \ 16 | data.max_prompt_length=1024 \ 17 | data.max_response_length=4096 \ 18 | data.filter_overlong_prompts=True \ 19 | data.truncation='error' \ 20 | actor_rollout_ref.model.path=$BASE_MODEL \ 21 | actor_rollout_ref.model.enable_gradient_checkpointing=True \ 22 | actor_rollout_ref.model.use_remove_padding=True \ 23 | actor_rollout_ref.actor.optim.lr=1e-6 \ 24 | actor_rollout_ref.actor.ppo_mini_batch_size=256 \ 25 | actor_rollout_ref.actor.ppo_micro_batch_size_per_gpu=8 \ 26 | actor_rollout_ref.actor.use_kl_loss=True \ 27 | actor_rollout_ref.actor.kl_loss_coef=0.001 \ 28 | actor_rollout_ref.actor.kl_loss_type=low_var_kl \ 29 | actor_rollout_ref.actor.entropy_coeff=0 \ 30 | actor_rollout_ref.actor.fsdp_config.param_offload=True \ 31 | actor_rollout_ref.actor.fsdp_config.optimizer_offload=True \ 32 | actor_rollout_ref.actor.checkpoint.contents=['model','hf_model','optimizer','extra'] \ 33 | actor_rollout_ref.rollout.log_prob_micro_batch_size_per_gpu=8 \ 34 | actor_rollout_ref.rollout.tensor_model_parallel_size=4 \ 35 | actor_rollout_ref.rollout.name=vllm \ 36 | actor_rollout_ref.rollout.gpu_memory_utilization=0.6 \ 37 | actor_rollout_ref.rollout.temperature=0.6 \ 38 | actor_rollout_ref.rollout.top_p=0.95 \ 39 | actor_rollout_ref.rollout.n=8 \ 40 | actor_rollout_ref.ref.log_prob_micro_batch_size_per_gpu=8 \ 41 | actor_rollout_ref.ref.fsdp_config.param_offload=True \ 42 | algorithm.kl_ctrl.kl_coef=0.001 \ 43 | custom_reward_function.path=$REWARD_PATH \ 44 | custom_reward_function.name=$REWARD_NAME \ 45 | trainer.critic_warmup=0 \ 46 | trainer.logger=['console'] \ 47 | trainer.project_name=$EXPERIMENT_NAME \ 48 | trainer.experiment_name=$EXPERIMENT_NAME \ 49 | trainer.n_gpus_per_node=8 \ 50 | trainer.nnodes=1 \ 51 | trainer.save_freq=50 \ 52 | trainer.test_freq=10 \ 53 | trainer.default_local_dir=$SAVE_DIR \ 54 | trainer.total_epochs=15 >experiments/logs/$EXPERIMENT_NAME.log 2>&1 & -------------------------------------------------------------------------------- /DianJin-R1/src/rl/reward_score_cflue.py: -------------------------------------------------------------------------------- 1 | import re 2 | 3 | 4 | def get_choices(text): 5 | choices = "ABCDEFG" 6 | answer = "" 7 | for c in choices: 8 | if c in text: 9 | answer += c 10 | return answer 11 | 12 | 13 | def extract_answer(solution_str): 14 | box_pattern = r"\\boxed\{(.*?)\}" 15 | think_pattern = r"(.*?)" 16 | answer_pattern = r"(.*?)" 17 | 18 | think_matches = re.findall(think_pattern, solution_str, re.DOTALL) 19 | if len(think_matches) != 1: 20 | return None 21 | 22 | answer_matches = re.findall(answer_pattern, solution_str, re.DOTALL) 23 | if len(answer_matches) != 1: 24 | return None 25 | 26 | box_matches = re.findall(box_pattern, answer_matches[0], re.DOTALL) 27 | if len(box_matches) == 0: 28 | return None 29 | 30 | return get_choices(box_matches[-1]) 31 | 32 | 33 | def compute_score(data_source, solution_str, ground_truth, extra_info=None): 34 | answer = extract_answer(solution_str) 35 | if answer is None: 36 | return 0.0 37 | else: 38 | gt = get_choices(ground_truth) 39 | if answer == gt: 40 | return 1.0 41 | else: 42 | return 0.0 -------------------------------------------------------------------------------- /DianJin-R1/src/sft/dataset_info.json: -------------------------------------------------------------------------------- 1 | { 2 | "cflue_oe_r1": { 3 | "file_name": "DianJin-R1/CFLUE_Open_SFT.json", 4 | "columns": { 5 | "prompt": "instruction", 6 | "response": "output" 7 | } 8 | }, 9 | "cflue_mcq_r1": { 10 | "file_name": "DianJin-R1/CFLUE_MCQ_SFT.json", 11 | "columns": { 12 | "prompt": "instruction", 13 | "response": "output" 14 | } 15 | }, 16 | "fin_qa_r1": { 17 | "file_name": "DianJin-R1/Fin-qa_SFT.json", 18 | "columns": { 19 | "prompt": "instruction", 20 | "response": "output" 21 | } 22 | }, 23 | "ccc_r1": { 24 | "file_name": "DianJin-R1/ccc_r1_sft.json", 25 | "columns": { 26 | "prompt": "instruction", 27 | "response": "output" 28 | } 29 | } 30 | } -------------------------------------------------------------------------------- /DianJin-R1/src/sft/qwen2.5_sft.yaml: -------------------------------------------------------------------------------- 1 | ### model 2 | model_name_or_path: {{Qwen2.5-7B-Instruct Path}} 3 | 4 | ### method 5 | stage: sft 6 | do_train: true 7 | finetuning_type: full 8 | deepspeed: {{examples/deepspeed/ds_z3_config.json from llama-factory}} 9 | 10 | ### dataset 11 | dataset: cflue_oe_r1,cflue_mcq_r1,fin_qa_r1,ccc_r1 12 | dataset_dir: {{dataset directory}} 13 | template: qwen 14 | cutoff_len: 16384 15 | max_samples: 1000000 16 | overwrite_cache: true 17 | preprocessing_num_workers: 128 18 | 19 | ### output 20 | output_dir: experiments/checkpoints/Qwen2.5-7B-Instruct-R1 21 | logging_steps: 10 22 | save_strategy: epoch 23 | plot_loss: true 24 | overwrite_output_dir: true 25 | 26 | ### train 27 | per_device_train_batch_size: 1 28 | gradient_accumulation_steps: 16 29 | learning_rate: 1.0e-5 30 | num_train_epochs: 3.0 31 | lr_scheduler_type: linear 32 | warmup_ratio: 0.03 33 | bf16: true 34 | ddp_timeout: 180000000 -------------------------------------------------------------------------------- /DianJin-R1/src/sft/sft.sh: -------------------------------------------------------------------------------- 1 | CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6,7 llamafactory-cli train qwen2.5_sft.yaml -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |
2 | DianJin Logo 3 |

4 | 💜 Qwen DianJin Platform • 5 | 🤗 HuggingFace • 6 | 🤖 ModelScope 7 |

8 | 9 | [**中文**](README_zh.md) | **EN** 10 | 11 |
12 | 13 | ## 🚀 News 14 | - **2025.05.22** 🔥🔥🔥 "M3FinMeeting: A Multilingual, Multi-Sector, and Multi-Task Financial Meeting Understanding Evaluation Dataset" has been officially accepted by ACL-2025! 15 | - **2025.04.23** [DianJin-R1](DianJin-R1/README.md) series open source release! This release includes the DianJin-R1-Data dataset, as well as two powerful models: DianJin-R1-7B and DianJin-R1-13B. Please check out our technical report "[DianJin-R1: Evaluating and Enhancing Financial Reasoning in Large Language Models](https://arxiv.org/abs/2504.15716)" for more details and explore the capabilities of these new models. 16 | - **2025.01.06** The [CFLUE](https://github.com/aliyun/cflue) dataset has been fully open-sourced and is now available for download! 🚀🚀🚀 17 | - **2024.05.16** The paper "[Benchmarking Large Language Models on CFLUE - A Chinese Financial Language Understanding Evaluation Dataset](https://arxiv.org/abs/2405.10542)" has been officially accepted by ACL-2024! 🚀🚀🚀 18 | 19 | The **data** and **models** that have been released so far are as follows: 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 |
ModelScopeHuggingFacePaper
DianJin-R1DianJin-R1-32BDianJin-R1-32Btechnical report
DianJin-R1-7BDianJin-R1-7B
DianJin-R1-DataDianJin-R1-Data
CFLUECFLUECFLUEACL-2024
49 | 50 | ## 📝 Introduction 51 | 52 | Welcome to Qwen DianJin 👋 53 | 54 | Tongyi DianJin is a financial intelligence solution platform built by Alibaba Cloud, 55 | dedicated to providing financial business developers with a convenient artificial intelligence application development environment. 56 | We not only focus on launching advanced large language models (LLM) and large multimodal models (LMM), but also serve as a financial assistant that integrates various artificial intelligence technologies. 57 | Through our platform, you can explore and experience innovative applications related to artificial general intelligence (AGI), driving development and innovation in the financial sector. 58 | 59 | We welcome you to explore and experience, and together embark on a journey of intelligent finance! 60 | 61 | ## ✨ Features 62 | 63 | ### 💡 Intelligent Applications 64 | 65 | Provide standardized API capabilities for financial scenarios, such as research report summarization, information extraction from news, and intent recognition for financial customer service. 66 | 67 | - ✅ Financial Services: Such as credit card repayment reminders, mobile banking navigation, renewal prompts, marketing material generation, etc. 68 | - ✅ Investment Research & News: Such as research report summarization, information extraction, financial translation, trading metrics Q&A, etc. 69 | - ✅ Operational Data Query: Such as operational metrics Q&A, anomaly alerts, and other intelligent operational capabilities. 70 | - ... 71 | 72 | ### 💡 Open Platform 73 | 74 | Equip developers with a suite of financial APIs and tools, making it easy to integrate and extend functionality. 75 | 76 | - ✅ Document Q&A: Optimized document parsing and recall ranking strategies, providing knowledge base Q&A capabilities tailored for financial scenarios. 77 | - ✅ Metrics Q&A: Capable of answering questions about metrics and plotting metrics, enhancing understanding of financial expertise. 78 | - ✅ Multi-Agent System: Includes configuration and orchestration of various types of nodes, supporting more personalized configurations based on the capabilities provided by DianJin. 79 | - ... 80 | 81 | ## 🔖 Citation 82 | 83 | If you find our work helpful, feel free to give us a cite. 84 | 85 | ``` 86 | @inproceedings{zhu-etal-2025-finmeeting, 87 | title = "M^{3}FinMeeting: A Multilingual, Multi-Sector, and Multi-Task Financial Meeting Understanding Evaluation Dataset", 88 | author = "Jie Zhu, Junhui Li, Yalong Wen, Xiandong Li, Lifan Guo, Feng Chen", 89 | booktitle = "Findings of ACL", 90 | year = "2025" 91 | } 92 | 93 | @article{zhu-etal-2025-dianjin-r1, 94 | title = {DianJin-R1: Evaluating and Enhancing Financial Reasoning in Large Language Models}, 95 | author = {Jie Zhu, Qian Chen, Huaixia Dou, Junhui Li, Lifan Guo, Feng Chen, Chi Zhang}, 96 | journal = {arxiv.org/abs/2504.15716}, 97 | year = {2025} 98 | } 99 | 100 | @inproceedings{zhu-etal-2024-cflue, 101 | title = "Benchmarking Large Language Models on CFLUE - A Chinese Financial Language Understanding Evaluation Dataset", 102 | author = "Jie Zhu, Junhui Li, Yalong Wen, Lifan Guo", 103 | booktitle = "Findings of ACL", 104 | year = "2024", 105 | pages = "5673--5693", 106 | } 107 | ``` 108 | 109 | ## 🤝 Contact Us 110 | 111 | Thank you very much for your interest in the Tongyi Dianjin series! 112 | If you would like to leave a message for our research or product team, feel free to contact us via our official email or by scanning the code to join our DingTalk group: CFLUE@alibabacloud.com. 113 | Our team is committed to providing you with assistance and support. 114 | 115 | DianJin Logo 116 | 117 | 118 | ## ⚠️ Disclaimer 119 | 120 | We assume no legal liability for the use of the DianJin open-source model and data. Users are responsible for independently assessing and assuming any potential risks associated with using the DianJin model or data, and should always exercise caution. 121 | We recommend that users independently verify and analyze the model's outputs, and make informed decisions based on their specific needs and real-world scenarios. 122 | By providing open-source data and models, we aim to offer valuable tools for academic research and industry applications, promoting advancements in artificial intelligence technology within data analysis, financial innovation, and other related fields. 123 | We encourage users to fully leverage their creativity, deeply explore the potential of the DianJin model, expand its application scenarios, and collectively drive progress and practical implementation of AI technologies across various domains. 124 | -------------------------------------------------------------------------------- /README_zh.md: -------------------------------------------------------------------------------- 1 |
2 | DianJin Logo 3 |

4 | 💜 Qwen DianJin Platform • 5 | 🤗 HuggingFace • 6 | 🤖 ModelScope 7 |

8 | 9 | **中文** | [**EN**](README.md) 10 | 11 |
12 | 13 | 14 | ## 🚀 最新动态 15 | - **2025.05.22** 🔥🔥🔥《M3FinMeeting: A Multilingual, Multi-Sector, and Multi-Task Financial Meeting Understanding Evaluation Dataset》已被 ACL-2025 正式录用! 16 | - **2025.04.23** [DianJin-R1](DianJin-R1/README.md) 系列开源发布!此次发布包括 DianJin-R1-Data 数据集,以及两款强大的模型:DianJin-R1-7B 和 DianJin-R1-13B。查看我们的技术报告《[DianJin-R1: Evaluating and Enhancing Financial Reasoning in Large Language Models](https://arxiv.org/abs/2504.15716)》,深入了解详情,并探索这些新模型的能力。 17 | - **2025.01.06** [CFLUE](https://github.com/aliyun/cflue)数据集已经全部开源,现已开放下载!🚀🚀🚀 18 | - **2024.05.16** 《[Benchmarking Large Language Models on CFLUE - A Chinese Financial Language Understanding Evaluation Dataset](https://arxiv.org/abs/2405.10542)》已被 ACL-2024 正式录用! 🚀🚀🚀 19 | 20 | 目前已发布的**数据**和**模型**如下: 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 |
ModelScopeHuggingFacePaper
DianJin-R1DianJin-R1-32BDianJin-R1-32Btechnical report
DianJin-R1-7BDianJin-R1-7B
DianJin-R1-DataDianJin-R1-Data
CFLUECFLUECFLUEACL-2024
50 | 51 | ## 📝 简介 52 | 欢迎来到通义点金 👋 53 | 54 | 通义点金是阿里云打造的智能金融解决方案平台,专注于金融领域大型语言模型(LLM)和大型多模态模型(LMM)的研究与开发。我们为金融业务开发者提供一个创新且易于使用的人工智能应用开发环境。作为多种尖端人工智能技术的融汇平台,通义点金致力于推动智能金融领域的发展与创新。 55 | 56 | 在这里,您可以探索与体验最新的人工智能通用技术(AGI)应用,开启属于您的智能金融创新之旅! 57 | 58 | 欢迎您的莅临,共同探索智能金融的无限可能! 59 | 60 | ## ✨ 功能特色 61 | 62 | ### 💡 智能应用 63 | 64 | 提供标准的金融场景化API能力,如研报总结、资讯信息抽取、金融客服意图识别等 65 | - ✅ 金融服务: 如信用卡还款提醒、手机银行导航、续保提示、营销素材生成等 66 | - ✅ 投研咨讯: 如研报总结、信息抽取、金融翻译、交易指标问答等 67 | - ✅ 经营问数: 如经营指标问答、异常预警等智能化经营能力 68 | - ... 69 | 70 | ### 💡 开放平台 71 | 72 | 为开发者提供一系列的金融接口和工具,更多能力建设,轻松完成对接和二次开发 73 | 74 | - ✅ 文档问答: 定向优化文档解析和召回排序策略,提供更适合金融场景的知识库问答能力 75 | - ✅ 指标问答: 具备指标问答,指标画图等能力,增加对金融专业知识的理解 76 | - ✅ 多智能体: 包含多种类型节点的配置和编排,支持您在点金提供的能力基础上做更多个性化配置 77 | - ... 78 | 79 | ## 🔖 引用 80 | 81 | If you find our work helpful, feel free to give us a cite. 82 | 83 | ``` 84 | @inproceedings{zhu-etal-2025-finmeeting, 85 | title = "M^{3}FinMeeting: A Multilingual, Multi-Sector, and Multi-Task Financial Meeting Understanding Evaluation Dataset", 86 | author = "Jie Zhu, Junhui Li, Yalong Wen, Xiandong Li, Lifan Guo, Feng Chen", 87 | booktitle = "Findings of ACL", 88 | year = "2025" 89 | } 90 | 91 | @article{zhu-etal-2025-dianjin-r1, 92 | title = {DianJin-R1: Evaluating and Enhancing Financial Reasoning in Large Language Models}, 93 | author = {Jie Zhu, Qian Chen, Huaixia Dou, Junhui Li, Lifan Guo, Feng Chen, Chi Zhang}, 94 | journal = {arxiv.org/abs/2504.15716}, 95 | year = {2025} 96 | } 97 | 98 | @inproceedings{zhu-etal-2024-cflue, 99 | title = "Benchmarking Large Language Models on CFLUE - A Chinese Financial Language Understanding Evaluation Dataset", 100 | author = "Jie Zhu, Junhui Li, Yalong Wen, Lifan Guo", 101 | booktitle = "Findings of ACL", 102 | year = "2024", 103 | pages = "5673--5693", 104 | } 105 | ``` 106 | 107 | ## 🤝 联系我们 108 | 非常感谢您对通义点金系列的关注!如果您有兴趣向我们的研究团队或产品团队留言,欢迎通过我们的官方邮箱或者扫码加入钉群与我们联系:CFLUE@alibabacloud.com。我们的团队将竭诚为您提供帮助和支持。 109 | 110 | DianJin Logo 111 | 112 | ## ⚠️ 免责声明 113 | 114 | 对于DianJin开源模型和数据的使用,我们不承担任何法律责任。用户在使用DianJin模型或数据时,需自行评估并承担可能存在的风险,并始终保持谨慎态度。 115 | 我们建议用户对模型输出的结果进行独立验证与分析,结合自身的实际需求和具体场景做出理性判断。 116 | 通过开源数据和模型,我们旨在为学术研究和行业应用提供有价值的工具,助力人工智能技术在数据分析、金融创新及其它相关领域的发展。 117 | 我们鼓励用户充分发挥创造力,深入探索DianJin模型的潜力,拓展其应用场景,共同推动人工智能技术在各领域的进步与实践。 118 | -------------------------------------------------------------------------------- /images/dianjin_dingding.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aliyun/qwen-dianjin/9e86559f23520dd289ba282743e131032e9838dc/images/dianjin_dingding.png -------------------------------------------------------------------------------- /images/dianjin_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aliyun/qwen-dianjin/9e86559f23520dd289ba282743e131032e9838dc/images/dianjin_logo.png --------------------------------------------------------------------------------