无需依赖模型蒸馏!RepoSearch-R1:蒙特卡洛树搜索驱动的LLMs代码库探索新方法!

仓库级软件工程任务要求大型语言模型(LLMs)能够通过多轮工具交互,在复杂的代码库中高效导航并提取信息。现有方法存在明显局限:免训练的上下文学习方法,难以根据环境反馈有效引导智能体使用工具与决策;而基于训练的方法通常依赖从更大规模LLM进行成本高昂的知识蒸馏,这在企业环境中会引发数据合规风险。

针对上述挑战,浙江大学联合阿里通义灵码团队提出一种基于蒙特卡洛树搜索(MCTS)驱动的新型智能体强化学习框架RepoSearch-R1,使智能体能够通过自训练生成多样化且高质量的推理轨迹,无需依赖模型蒸馏或外部监督。基于RepoSearch-R1,研究团队构建了专为代码库问答任务设计的RepoQA-Agent。

  • 论文标题:

    Empowering RepoQA-Agent based on Reinforcement Learning Driven by Monte-carlo Tree Search

  • 论文链接:

    https://arxiv.org/pdf/2510.26287

  • 项目地址:
    https://github.com/LingmaTongyi/RepoSearch-R1

一、方法

图3:RepoSearch-R1 框架概览。

如图3所示,RepoSearch-R1 的训练流程主要包含MCTS引导的轨迹生成轨迹选择与奖励计算优势计算与GRPO训练三个阶段。

(1)MCTS引导的轨迹生成

在采样阶段,数据集中的每个问题都通过多次 rollout 构建并维护一个蒙特卡洛树。树中的每个节点代表一轮交互,包含模型根据根节点到其父节点的聊天历史生成的思考和动作。通过解析调用的工具并将其执行结果(称为观察)追加到对话历史,进一步处理工具调用。因此,每个节点由三个部分构成:思考-动作-观察(Thought-Action-Observation)。

其中,根节点仅包含系统提示词和首轮用户提示(包括用户关于代码库的提问及相关代码片段),而叶节点仅包含以"### Answer"为前缀的智能体最终答案。

如算法1所述,MCTS引导的rollout是 RepoSearch-R1框架的关键组成部分。该过程使 RepoQA-Agent 能够借助一组工具,在代码库中系统性地探索多样化的动作序列,以收集信息并做出有依据的决策。MCTS引导的轨迹生成遵循四个连续阶段:

1)选择:使用UCT(Upper Confidence Bound for Trees)策略选择有潜力的节点。

2)扩展:使用自我批判机制来生成多样化且高质量的子节点。子节点生成过程遵循两个步骤:

步骤1:标准子节点生成

第一个子节点通过标准策略模型生成,不附加任何反思提示。该子节点代表LLM对当前状态的初始响应,并作为基准探索路径。

步骤2:基于反思的子节点生成

如果需要生成多个子节点(通常为2个),则使用一种自我批判式的反思机制生成第二个子节点。如图4所示,反思提示会根据当前探索过程的状态进行差异化设计。智能体会分析第一个子节点的思考-动作-观察过程并附加一个反思提示,以促使LLM重新审视先前的推理过程。

图4:面向不同探索状态的自我批判反思提示。

一直在更新,更多的大模型学习和面试资料已经上传带到优快云的官方了,有需要的朋友可以扫描下方二维码免费领取【保证100%免费】👇👇

在这里插入图片描述

这种自我批判方法具有多重作用:鼓励模型考虑替代性推理策略,增加探索路径的多样性;帮助识别初始推理过程中的潜在错误;为同一代码库探索问题提供多种视角。在代码库任务中反思机制很有价值,因为针对相关信息的查找往往存在多种有效方法,而自我纠正能够带来更全面、更准确的解决方案

3)模拟:在MCTS采样过程中,完整的模拟流程从包含用户问题的根节点开始,迭代执行节点选择与扩展操作,直至抵达终止节点。终止条件定义为:智能体给出答案且不再执行任何进一步的检索操作,或达到允许的最大对话轮次(即树的最大深度)。

4)反向传播:到达终止节点后将调用奖励函数,根据标准答案对智能体生成的回答进行评分。获得的奖励值会沿着探索路径反向传播,路径上的每个中间推理节点都会累加该奖励值,同时这些节点的访问次数均增加一次。需要注意的是,这些更新后的数值将用于UCT公式,以指导后续节点的选择。

(2)轨迹选择与奖励计算

用于评估生成轨迹的奖励函数包含三个核心组成部分:

1)基于LLM-as-a-judge的最终结果奖励,完整评估框架如图5所示,评判器通过结构化提示来检验候选答案是否覆盖问题的所有关键点,并参照标准答案衡量这些关键点回答的完整程度。

图5:用于答案质量评估的LLM评判模板。

LLM评判器采用严格的1-100分制进行完整性评估,随后将分数映射为离散质量等级以提供稳定的训练信号(其中s代表LLM评判器给出的1-100分原始分数):

2)为区分最终得分相同但探索路径不同的轨迹,引入整个推理轨迹过程中累积的中间过程奖励。MCTS树中的每个节点在探索过程中都会累积工具使用奖励,这既反映了单个工具使用决策的质量,也激励智能体形成高效的代码库导航模式。

中间过程奖励𝑅tool,累加了轨迹中每个工具执行步骤获得的奖励。这些奖励通过二元反馈捕捉智能体探索策略的有效性:成功的信息检索操作获得+1.0奖励,而不正确或无效的工具使用模式则会被给予-1.0的惩罚。

3)最终奖励通过加权聚合机制,将LLM评判器的结果奖励与累积的中间过程奖励相结合

该聚合机制鼓励智能体不仅追求高质量的最终答案,还在整个推理过程中发展出高效的探索策略。

(3)优势计算与GRPO训练

**RepoSearch-R1 通过一种完全冷启动的强化学习方法,彻底摆脱了对现有轨迹数据或模型蒸馏的依赖。**该方法完全跳过 SFT 初始化,直接从一个基础 LLM 开始,通过MCTS rollout生成轨迹数据。这一设计不仅确保了数据合规性,还使 LLM 能够形成自主探索策略,且不受外部蒸馏轨迹模式的限制。

为提升MCTS rollout过程中的探索多样性,RepoSearch-R1在rollout阶段采用高温采样策略。鉴于 GRPO 的分组训练特性,采样的方式会直接影响每个组内轨迹的质量与多样性,从而影响整体学习效果。高温采样通过增强模拟期间动作选择的随机性,鼓励LLM 探索多样化的工具使用模式与代码库导航策略。该训练方法让 LLM 接触更广泛的探索模式,有助于发展出更具泛化能力的代码库导航技能,还可有效避免对特定搜索策略的过拟合。此外,高温采样还能维持相对较高的交叉熵值,从而保留更强的持续学习(Continue Learning)潜力。

研究团队引入了检索token的掩码损失(loss mask)机制,使智能体能够专注提升其内部推理能力。该掩码机制确保策略梯度目标仅在 LLM 生成的token上进行计算,排除优化过程中检索到的任何内容。因此,外部token不会影响损失计算,从而防止检索到的文档干扰LLM内在推理与生成过程。

基于RepoSearch-R1,研究团队构建了专为代码库问答任务设计的RepoQA-Agent框架,赋予LLMs文件与文件夹审查能力,以及文件和关键词检索功能,使其能够推理出正确的工具调用并搜索最相关的代码来回答问题。

表1:RepoQA-Agent工具集:这些工具使LLMs能够在代码库中执行仓库探索、代码审查、文件导航及关键词/符号搜索等操作。

RepoQA-Agent 采用 ReAct 框架,通过多轮交互对代码库进行探索。图2展示了单轮探索的示例。每轮交互遵循思考-动作-观察流程。这一迭代过程将持续进行,直到智能体收集到能够回答问题的信息或达到预设的最大搜索轮数为止。

图2:与代码库进行多轮交互的示例,展示了“思考-动作-观察”模式。

二、评估

在 CoReQA 数据集上评估,采用课程学习的方法对其进行处理,按难度级别对数据集进行分层。经筛选,原始 CoReQA 数据集中的 1,563 个样本被精炼为 830 个高质量问答对。其中,500 对用于训练、160 对用于验证,以及 170 对用于评估。

研究团队将 RepoSearch-R1 与代码库级问答领域的多种现有方法进行对比:

  • 朴素生成(Naive Generation):直接问答,不借助任何代码库上下文或检索机制。
  • RAG:传统检索增强生成方法,将代码库文件分割为文本块,并采用基于BM25的语义相似度检索相关代码片段。
  • IRCoT(Iterative Retrieval Chain-of-Thought):融合迭代检索与思维链推理的先进基线方法,代表了当前复杂代码库探索任务的最先进技术。
  • Search-R1 :基于搜索的强化学习方法,已针对代码库探索进行了适配。为基于MCTS的方法提供直接对比基准。

研究团队使用 veRL 框架和 GRPO 算法实现了 RepoSearch-R1。表 2 和表 3 总结了实验中使用的关键超参数和配置。对于 MCTS 算法,通常需要进行多轮采样以探索更有效的检索策略。然而,为确保在本研究中与 Search-R1 进行公平比较,将 MCTS rollout限制为八次 ,每个问题最多生成八条智能体执行轨迹。采用LLM-as-a-judge进行评分,使用Qwen3-Coder-480B-A35B-Instruct作为 LLM 评判模型 。

(1)RQ1:RepoSearch-R1方法的有效性与效率

为探究RQ1,研究团队评估RepoSearch-R1能否有效增强智能体理解代码库并准确回答问题的能力,重点关注其在各类代码库推理场景中的性能提升。

表4:Search-R1与RepoSearch-R1在Qwen3-8B模型上的训练步数及最大评估性能对比。第0步代表强化学习训练前的初始IRCoT基线性能。

表4展示了RepoSearch-R1在代码库理解能力方面的显著提升。在具有挑战性的Qwen3-8B模型上,RepoSearch-R1的完整度得分达到0.6306,相比朴素生成方法提升了16.0%,相比RAG方法提升了6.4%,相比IRCoT提升了19.4%。训练过程显示,RepoSearch-R1在第80步达到最佳性能(得分为0.631),而Search-R1则需120步才能达到其最优性能。这些结果表明,RepoSearch-R1能够增强智能体理解复杂代码库结构和检索相关信息的能力

(2)RQ2:多轮工具推理对LLMs的增益效果

鉴于研究团队的工具集专为代码库级问答任务设计,本研究重点评估LLMs能否通过多轮工具调用来提升智能体问答性能。Gemini和Claude等大规模模型本身具备强大的工具利用能力,若设计的工具集确实有效,这些模型在使用IRCoT方法时应当展现出可衡量的性能提升。

表5:闭源LLM在代码库问答任务中采用不同方法的性能对比。百分比表示相对于朴素生成基线的提升幅度。

表6:开源LLMs在代码库问答任务中采用不同方法的性能对比。百分比表示相对于朴素生成基线的提升幅度。

表5、表6展示了闭源与开源LLM的评估结果。对于闭源模型,Claude-3.5-Sonnet和Gemini-2.5-Pro在使用支持多轮工具增强的IRCoT方法时均展现出更强的推理能力。其中,Gemini-2.5-Pro结合IRCoT获得的完整度得分为0.8729,相比朴素生成方法提升了 5.8%;Claude-3.5-Sonnet 的提升更为显著,IRCoT 得分为 0.7800,较朴素生成方法提高了10.5%。相比之下,GPT-4o 在使用 IRCoT 时的问答完整性并未超越RAG,反而比朴素生成方法下降了 3.0%。

开源模型在使用 IRCoT 时表现参差不齐:Qwen3-14B 相比朴素生成方法仅取得 2.6% 的小幅提升,但仍明显弱于 RAG(RAG 提升 11.1%);Qwen3-32B(-6.7%)和 Qwen3-8B(-2.8%)则在IRCoT下表现不如朴素生成方法。这些结果表明,研究团队设计的工具集能有效帮助大型闭源 LLM 探索代码库,但较小的开源模型在缺乏额外训练的情况下难以有效进行多轮工具推理

(3)RQ3:MCTS引导的Rollout能够维持更高的熵值与轨迹多样性

为探究RQ3,研究团队深入分析了基于MCTS的探索方法相较于通用强化学习策略获得更优学习性能的内在机制。研究重点关注两个关键维度:训练过程中交叉熵的演变规律,以及采样轨迹多样性特征。

在强化学习中,熵值反映了LLM 的探索意愿:较高的熵值意味着模型更倾向于探索多样化的动作序列并发现新的推理路径,而较低的熵值则表明模型趋于过度确定性,会重复生成相同输出。在强化学习中,理想的情况是让 LLM 探索多条不同路径,这样奖励信号才能区分不同质量的轨迹,进而引导策略更新朝着更高质量的方向发展。一旦探索能力退化,所有轨迹都收敛到相同的模式,轨迹之间就不再存在可比较的质量差异信号,策略改进便会陷入停滞——这一现象通常被称为熵崩溃(entropy collapse)

图6:Search-R1 与 RepoSearch-R1 的对比:熵值与轨迹方差分析。

如图6所示,RepoSearch-R1 在整个训练过程始终保持更高的熵值,并且生成的轨迹具有更高的方差,相较于 Search-R1 展现出更优的探索多样性并防止了熵崩溃现象。

持续升高的熵值和轨迹方差表明RepoSearch-R1方法能够产生多样且高质量的轨迹,有效应对代码库级强化学习中数据稀缺问题,无需依赖外部监督或模型蒸馏技术

三、如何系统的学习大模型 AI ?

由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。

但是具体到个人,只能说是:

“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。

这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。

我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。

我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

一直在更新,更多的大模型学习和面试资料已经上传带到优快云的官方了,有需要的朋友可以扫描下方二维码免费领取【保证100%免费】👇👇

在这里插入图片描述

01.大模型风口已至:月薪30K+的AI岗正在批量诞生

在这里插入图片描述

2025年大模型应用呈现爆发式增长,根据工信部最新数据:

国内大模型相关岗位缺口达47万

初级工程师平均薪资28K(数据来源:BOSS直聘报告)

70%企业存在"能用模型不会调优"的痛点

真实案例:某二本机械专业学员,通过4个月系统学习,成功拿到某AI医疗公司大模型优化岗offer,薪资直接翻3倍!

02.大模型 AI 学习和面试资料

1️⃣ 提示词工程:把ChatGPT从玩具变成生产工具
2️⃣ RAG系统:让大模型精准输出行业知识
3️⃣ 智能体开发:用AutoGPT打造24小时数字员工

📦熬了三个大夜整理的《AI进化工具包》送你:
✔️ 大厂内部LLM落地手册(含58个真实案例)
✔️ 提示词设计模板库(覆盖12大应用场景)
✔️ 私藏学习路径图(0基础到项目实战仅需90天)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

第一阶段(10天):初阶应用

该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。

  • 大模型 AI 能干什么?
  • 大模型是怎样获得「智能」的?
  • 用好 AI 的核心心法
  • 大模型应用业务架构
  • 大模型应用技术架构
  • 代码示例:向 GPT-3.5 灌入新知识
  • 提示工程的意义和核心思想
  • Prompt 典型构成
  • 指令调优方法论
  • 思维链和思维树
  • Prompt 攻击和防范

第二阶段(30天):高阶应用

该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。

  • 为什么要做 RAG
  • 搭建一个简单的 ChatPDF
  • 检索的基础概念
  • 什么是向量表示(Embeddings)
  • 向量数据库与向量检索
  • 基于向量检索的 RAG
  • 搭建 RAG 系统的扩展知识
  • 混合检索与 RAG-Fusion 简介
  • 向量模型本地部署

第三阶段(30天):模型训练

恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。

到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?

  • 为什么要做 RAG
  • 什么是模型
  • 什么是模型训练
  • 求解器 & 损失函数简介
  • 小实验2:手写一个简单的神经网络并训练它
  • 什么是训练/预训练/微调/轻量化微调
  • Transformer结构简介
  • 轻量化微调
  • 实验数据集的构建

第四阶段(20天):商业闭环

对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。

  • 硬件选型
  • 带你了解全球大模型
  • 使用国产大模型服务
  • 搭建 OpenAI 代理
  • 热身:基于阿里云 PAI 部署 Stable Diffusion
  • 在本地计算机运行大模型
  • 大模型的私有化部署
  • 基于 vLLM 部署大模型
  • 案例:如何优雅地在阿里云私有部署开源大模型
  • 部署一套开源 LLM 项目
  • 内容安全
  • 互联网信息服务算法备案

学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。

如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。

这份完整版的大模型 AI 学习资料已经上传优快云,朋友们如果需要可以微信扫描下方优快云官方认证二维码免费领取【保证100%免费

在这里插入图片描述

<think>我们已知用户希望将LangGraph和LangChain中的模型替换为本地部署的DeepSeek-R1模型(通过Ollama部署)。根据引用[4]中的信息,本地部署DeepSeek-R1模型可以通过Ollama完成。同时,引用[1]提到需要安装`langchain`和`ollama`等库。 因此,我们需要做以下几步: 1. 确保已经通过Ollama部署了DeepSeek-R1模型1.5B版本)。 2. 安装必要的Python包。 3. 在LangChain中调用本地模型,然后将其集成到LangGraph中。 具体步骤: ### 步骤1:通过Ollama部署DeepSeek-R1模型 在终端(Windows下使用PowerShell或CMD)运行以下命令下载并运行模型: ```bash ollama run deepseek-r1:1.5b ``` 如果已经下载过,则可以直接使用。 ### 步骤2:安装必要的Python包 需要安装以下包: - `langchain`: 用于构建基于大语言模型的应用程序。 - `langchain-community`: 包含社区贡献的LangChain组件。 - `langgraph`: 用于构建具有状态的多步骤工作流(基于LangChain)。 - `ollama`: 用于与本地Ollama服务交互。 安装命令: ```bash pip install langgraph langchain langchain-community ollama ``` ### 步骤3:在LangChain中调用本地DeepSeek-R1模型 使用`langchain_community.llms`中的`Ollama`类来调用本地模型。 示例代码(LangChain基础调用): ```python from langchain_community.llms import Ollama # 创建Ollama实例,指定模型名称 llm = Ollama(model="deepseek-r1:1.5b") # 调用模型 response = llm.invoke("你好,请介绍一下你自己。") print(response) ``` ### 步骤4:在LangGraph中使用本地DeepSeek-R1模型 LangGraph用于构建有状态的多步骤工作流。我们可以将上述Ollama封装的LLM集成到LangGraph的节点中。 以下是一个简单的LangGraph示例,包含两个节点(一个节点调用模型,另一个节点处理结果)和一个边: ```python from langgraph.graph import END, StateGraph from langchain_community.llms import Ollama # 定义状态(State) # 这里我们定义一个简单的状态,包含一个字符串消息 class MyState: message: str # 初始化模型 llm = Ollama(model="deepseek-r1:1.5b") # 定义节点 def model_node(state: MyState): # 调用模型 response = llm.invoke(state.message) # 返回新的状态(更新消息) return {"message": response} def output_node(state: MyState): # 这里可以做一些后处理,比如打印或格式化 print("最终输出:", state.message) return state # 创建图 graph = StateGraph(MyState) # 添加节点 graph.add_node("model", model_node) graph.add_node("output", output_node) # 设置入口点 graph.set_entry_point("model") # 添加边 graph.add_edge("model", "output") graph.add_edge("output", END) # 编译图 app = graph.compile() # 使用图 inputs = {"message": "你好,请介绍一下你自己。"} app.invoke(inputs) ``` 注意:上述示例中,我们定义了一个简单的状态`MyState`,它只有一个字段`message`。然后我们定义了两个节点:`model_node`用于调用模型,`output_node`用于输出结果。图的结构是:从`model`节点开始,然后到`output`节点,最后结束。 ### 补充说明 1. 如果模型响应较慢,可以调整Ollama的调用参数,例如设置`temperature`等。 2. 在LangGraph中,可以根据需要设计更复杂的节点和边,例如条件分支、循环等。 通过以上步骤,就可以在LangGraph中使用本地部署的DeepSeek-R1模型了。 §§相关问题§§ 1. 如何优化Ollama调用本地模型的速度? 2. LangGraph中如何实现条件分支和循环? 3. 如何将本地部署的DeepSeek-R1模型与LangChain的其他组件(如记忆、检索等)结合使用?</think>### LangGraph/LangChain 集成本地 DeepSeek-R1 模型指南 根据引用内容[1][2][4],实现本地部署的 DeepSeek-R1 模型与 LangGraph/LangChain 集成,需按以下步骤操作: --- #### 一、安装依赖包 ```bash # 核心依赖 pip install langgraph langchain langchain-community # Ollama 集成 pip install ollama # 可选:结构化输出支持 pip install langchain-experimental ``` --- #### 二、模型部署与调用 ##### 1. 通过 Ollama 部署模型(引用[4]) ```bash # 下载模型1.5B 蒸馏版) ollama run deepseek-r1:1.5b ``` ##### 2. LangChain 基础调用(引用[1]) ```python from langchain_community.llms import Ollama from langchain_core.prompts import ChatPromptTemplate # 初始化本地模型 llm = Ollama(model="deepseek-r1:1.5b") # 创建提示模板 prompt = ChatPromptTemplate.from_template("请回答:{query}") # 构建链式调用 chain = prompt | llm # 执行查询 response = chain.invoke({"query": "解释量子纠缠"}) print(response) ``` ##### 3. LangGraph 集成(引用[3]) ```python from langgraph.graph import StateGraph, END from langchain_community.chat_models import ChatOllama # 定义状态结构 class AgentState: question: str reasoning: str final_answer: str # 初始化本地模型 model = ChatOllama(model="deepseek-r1:1.5b", temperature=0) # 定义推理节点 def reasoning_node(state): response = model.invoke(f"请逐步推理:{state.question}") return {"reasoning": response.content} # 定义回答节点 def answer_node(state): response = model.invoke(f"基于推理给出最终答案:{state.reasoning}") return {"final_answer": response.content} # 构建图工作流 workflow = StateGraph(AgentState) workflow.add_node("reason", reasoning_node) workflow.add_node("answer", answer_node) workflow.set_entry_point("reason") workflow.add_edge("reason", "answer") workflow.add_edge("answer", END) app = workflow.compile() # 执行工作流 result = app.invoke({"question": "计算玻尔兹曼常数在热力学中的作用"}) print(result["final_answer"]) ``` --- #### 三、结构化输出实现(引用[3]) ```python from langchain_experimental.llms import JsonOutputParser from langchain_core.pydantic_v1 import BaseModel, Field # 定义输出结构 class PhysicsConcept(BaseModel): concept_name: str = Field(description="物理概念名称") mathematical_expression: str = Field(description="数学表达式") application: str = Field(description="主要应用领域") # 创建解析器 parser = JsonOutputParser(pydantic_object=PhysicsConcept) # 构建结构化调用链 structured_chain = ( ChatPromptTemplate.from_template("解释{concept},按JSON格式输出") | ChatOllama(model="deepseek-r1:1.5b") | parser ) # 执行查询 result = structured_chain.invoke({"concept": "薛定谔方程"}) print(result) # 输出示例: {'concept_name': '薛定谔方程', ...} ``` --- ### 关键配置说明 | 组件 | 配置项 | 推荐值 | 作用 | |------|--------|--------|------| | Ollama | `model` | `deepseek-r1:1.5b` | 指定1.5B蒸馏模型 | | LangChain | `temperature` | `0.2-0.7` | 控制输出随机性 | | LangGraph | `checkpoint` | `InMemorySaver()` | 状态持久化存储 | | 结构化输出 | `JsonOutputParser` | 自定义Pydantic模型 | 强制JSON格式输出 | > 注:首次运行时模型下载需较长时间(约5-10分钟),后续调用响应在1-5秒内[^2][^4] --- ### 性能优化建议 1. **批处理请求**:使用`batch()`方法并行处理多个查询 ```python responses = llm.batch(["问题1", "问题2"]) ``` 2. **上下文管理**:集成`ConversationBufferMemory`维护对话历史 3. **硬件加速**:在Ollama启动时添加GPU标志(需NVIDIA驱动) ```bash ollama serve --gpu ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员辣条

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值