LangChain实战案例:利用大模型进行文本总结的方法探索,文本Token超限怎么办?

用create_stuff_documents_chain构建一个完整的知识问答模型 【代码】用create_stuff_documents_chain构建一个完整的知识问答模型。 阅读详情

本站文章一览:

在这里插入图片描述


假设有一组文档(PDF、Notion页面、客户问题等),你想要总结内容。可以利用大模型来帮你。今天来系统看下利用大模型来对文本进行总结的方法,以LangChain的使用为例。

参考:python.langchain.com/docs/use_ca…

0. 方法概述

在利用大模型总结文本的过程中,最主要的工作是如何将文档内容传递给大模型。目前有两种常见的方法:

  1. Stuff方法:简单地将所有文档“填充”到单个提示中。这种方法的主要优点是简单,但缺点是当文档很长或数量很多时,可能会超出模型的上下文窗口限制,导致信息丢失或模型性能下降。

  2. Map-reduce方法:这种方法分为两步。首先,在“map”步骤中,单独对每个文档进行摘要。然后,在“reduce”步骤中,将这些摘要合并成一个最终摘要。这种方法的主要优点是它可以处理大量或长文档,因为它在合并之前先对它们进行了压缩。但是,这种方法可能需要额外的逻辑来确保在“reduce”步骤中生成的最终摘要是有意义和连贯的。

在这里插入图片描述

1. 实操练习

1.1 快速开始

1.1.1 代码示例

from langchain.chains.summarize import load_summarize_chain
from langchain_community.document_loaders import WebBaseLoader
from langchain_openai import ChatOpenAI

loader = WebBaseLoader("https://lilianweng.github.io/posts/2023-06-23-agent/")
docs = loader.load()

llm = ChatOpenAI(temperature=0, model_name="gpt-3.5-turbo-1106")
chain = load_summarize_chain(llm, chain_type="stuff")

result = chain.run(docs)
print(result)

代码示例中,使用了 LangChain 的 load_summarize_chain 来总结文本,chain_type="stuff" 表明采用 Stuff 方式。后面会给大家展示load_summarize_chain的部分实现。

1.1.2 运行一下

运行结果如下:

在这里插入图片描述

1.2 Stuff方法

这种方法就是直接将全部文本塞给大模型,让大模型直接总结。

1.2.1 StuffDocumentsChain

在上面的示例代码中,我们使用 load_summarize_chain 时,传入的 chain_type="stuff" ,其实底层用的是 LangChain 中的 StuffDocumentsChain。

看下直接 StuffDocumentsChain 的使用示例:

from langchain.chains.combine_documents.stuff import StuffDocumentsChain
from langchain.chains.llm import LLMChain
from langchain.prompts import PromptTemplate

# Define prompt
prompt_template = """Write a concise summary of the following:
"{text}"
CONCISE SUMMARY:"""
prompt = PromptTemplate.from_template(prompt_template)

# Define LLM chain
llm = ChatOpenAI(temperature=0, model_name="gpt-3.5-turbo-16k")
llm_chain = LLMChain(llm=llm, prompt=prompt)

# Define StuffDocumentsChain
stuff_chain = StuffDocumentsChain(llm_chain=llm_chain, document_variable_name="text")

docs = loader.load()
print(stuff_chain.run(docs))

Prompt很简单,一眼就能看出其工作原理,它就是将docs全部扔给了大模型,让大模型给出一个简要的总结:

prompt_template = """Write a concise summary of the following:
"{text}"
CONCISE SUMMARY:"""

1.3 Map-Reduce方法

首先使用LLMChain将每个文档映射到一个单独的摘要。然后,使用ReduceDocumentsChain将这些摘要合并为一个全局摘要。

1.3.1 代码示例

1.3.1.1 文本分块
text_splitter = CharacterTextSplitter.from_tiktoken_encoder(
    chunk_size=1000, chunk_overlap=0
)
split_docs = text_splitter.split_documents(docs)

1.3.1.2 对分块文本的总结Chain
# Map
map_template = """The following is a set of documents
{docs}
Based on this list of docs, please identify the main themes 
Helpful Answer:"""
map_prompt = PromptTemplate.from_template(map_template)
map_chain = LLMChain(llm=llm, prompt=map_prompt)

重点看Prompt,给定一个文档列表,根据这个文档列表,识别出主题思想。

来看下其执行的结果(输入分割后的一段文本,输出这段文本的主题思想。每段文本都调用一次大模型,执行一次该操作,所以,注意你的API KEY的次数消耗…):

image.png

1.3.1.3 ReduceDocumentsChain

有了上面分块的总结,下面的步骤就是根据分块总结合并成一条完整的总结。在LangChain中可以使用 ReduceDocumentsChain 类来实现此步骤。

# Reduce
reduce_template = """The following is set of summaries:
{docs}
Take these and distill it into a final, consolidated summary of the main themes. 
Helpful Answer:"""
reduce_prompt = PromptTemplate.from_template(reduce_template)

# Run chain
reduce_chain = LLMChain(llm=llm, prompt=reduce_prompt, verbose=True)

# Takes a list of documents, combines them into a single string, and passes this to an LLMChain
combine_documents_chain = StuffDocumentsChain(
    llm_chain=reduce_chain, document_variable_name="docs", verbose=True
)

# Combines and iteratively reduces the mapped documents
reduce_documents_chain = ReduceDocumentsChain(
    # This is final chain that is called.
    combine_documents_chain=combine_documents_chain,
    # If documents exceed context for `StuffDocumentsChain`
    collapse_documents_chain=combine_documents_chain,
    # The maximum number of tokens to group documents into.
    token_max=4000,
    verbose=True
)

从代码中可以看到,ReduceDocumentsChain 设置了4个参数,我们分别来解释下。

  • combine_documents_chain:这是最终执行总结的Chain。它的值为 combine_documents_chain。而 combine_documents_chain 定义为一个 StuffDocumentsChain 类型的Chain,也就是简单地将前面分块总结的内容塞给大模型,让它根据分块总结再汇总总结一次。

  • collapse_documents_chain:这个Chain的作用,是来处理塞给大模型的Token超限的情况。如果文本特别多,分块特别多,那分块总结出来的东西也会非常多。单纯的将分块总结内容合并在一起,还是很有可能超过大模型上下文窗口限制。这个Chain,会按设置的最大Token数将内容再次拆分,然后再利用 StuffDocumentsChain 进行分块总结,直到最终各分块总结合并起来能一次塞给大模型才停止。

这是个递归分割总结的过程,注意Token或者调用次数的消耗,都是钱啊…

  • token_max:最大Token数,超过这个Token数执行上面的collapse_documents_chain

  • verbose:开详细日志

来直观感受下它的运行(合并分块总结内容作为输入,输出最终总结结果):

image.png

本例中分块总结文本合并后没有超限,所以没用到 collapse_documents_chain。

1.3.1.4 Map-Reduce组合Chain: MapReduceDocumentsChain
# Combining documents by mapping a chain over them, then combining results
map_reduce_chain = MapReduceDocumentsChain(
    # Map chain
    llm_chain=map_chain,
    # Reduce chain
    reduce_documents_chain=reduce_documents_chain,
    # The variable name in the llm_chain to put the documents in
    document_variable_name="docs",
    # Return the results of the map steps in the output
    return_intermediate_steps=False,
    verbose=True
)

1.3.2 运行及结果

print(map_reduce_chain.run(split_docs))

在这里插入图片描述

2. 部分源码

(1)ReduceDocumentsChain 中,如果Token超限的处理:collapse_documents_chain,直接一个 while 循环压缩Token数。 在这里插入图片描述 (2)load_summarize_chain 的封装,在1.1中我们使用了 chain_type = "stuff",它其实也可以使用 “map_reduce” 或 “refine”。

在这里插入图片描述 如果chain_type设置为map_reduce,看它的源码,跟我们1.3节中的代码几乎一样。load_summarize_chain 就是对这几种方法的高层封装!

def _load_map_reduce_chain(
    llm: BaseLanguageModel,
    map_prompt: BasePromptTemplate = map_reduce_prompt.PROMPT,
    combine_prompt: BasePromptTemplate = map_reduce_prompt.PROMPT,
    combine_document_variable_name: str = "text",
    map_reduce_document_variable_name: str = "text",
    collapse_prompt: Optional[BasePromptTemplate] = None,
    reduce_llm: Optional[BaseLanguageModel] = None,
    collapse_llm: Optional[BaseLanguageModel] = None,
    verbose: Optional[bool] = None,
    token_max: int = 3000,
    callbacks: Callbacks = None,
    *,
    collapse_max_retries: Optional[int] = None,
    **kwargs: Any,
) -> MapReduceDocumentsChain:
    map_chain = LLMChain(
        llm=llm, prompt=map_prompt, verbose=verbose, callbacks=callbacks
    )
    _reduce_llm = reduce_llm or llm
    reduce_chain = LLMChain(
        llm=_reduce_llm, prompt=combine_prompt, verbose=verbose, callbacks=callbacks
    )
    # TODO: document prompt
    combine_documents_chain = StuffDocumentsChain(
        llm_chain=reduce_chain,
        document_variable_name=combine_document_variable_name,
        verbose=verbose,
        callbacks=callbacks,
    )
    if collapse_prompt is None:
        collapse_chain = None
        if collapse_llm is not None:
            raise ValueError(
                "collapse_llm provided, but collapse_prompt was not: please "
                "provide one or stop providing collapse_llm."
            )
    else:
        _collapse_llm = collapse_llm or llm
        collapse_chain = StuffDocumentsChain(
            llm_chain=LLMChain(
                llm=_collapse_llm,
                prompt=collapse_prompt,
                verbose=verbose,
                callbacks=callbacks,
            ),
            document_variable_name=combine_document_variable_name,
        )
    reduce_documents_chain = ReduceDocumentsChain(
        combine_documents_chain=combine_documents_chain,
        collapse_documents_chain=collapse_chain,
        token_max=token_max,
        verbose=verbose,
        callbacks=callbacks,
        collapse_max_retries=collapse_max_retries,
    )
    return MapReduceDocumentsChain(
        llm_chain=map_chain,
        reduce_documents_chain=reduce_documents_chain,
        document_variable_name=map_reduce_document_variable_name,
        verbose=verbose,
        callbacks=callbacks,
        **kwargs,
    )

3. 总结

本文我们学习和实践了利用 LangChain 进行文本总结的两种方法,知道了其实现原理,所以,我们应该不用 LangChain的这些封装也可以自己实现一套文档总结流程。

其实,LangChain 还有其它的文档总结的Chain,例如 RefineDocumentsChain 和 AnalyzeDocumentsChain,大体原理与本文介绍的两种方式都差不多,主要是封装的差异,感兴趣的也可以去试试。

想入门 AI 大模型却找不到清晰方向?备考大厂 AI 岗还在四处搜集零散资料?别再浪费时间啦!2025 年 AI 大模型全套学习资料已整理完毕,从学习路线到面试真题,从工具教程到行业报告,一站式覆盖你的所有需求,现在全部免费分享!

👇👇扫码免费领取全部内容👇👇

​

一、学习必备:100+本大模型电子书+26 份行业报告 + 600+ 套技术PPT,帮你看透 AI 趋势

想了解大模型的行业动态、商业落地案例?大模型电子书?这份资料帮你站在 “行业高度” 学 AI:

1. 100+本大模型方向电子书

在这里插入图片描述

2. 26 份行业研究报告:覆盖多领域实践与趋势

报告包含阿里、DeepSeek 等权威机构发布的核心内容,涵盖:

  • 职业趋势:《AI + 职业趋势报告》《中国 AI 人才粮仓模型解析》;
  • 商业落地:《生成式 AI 商业落地白皮书》《AI Agent 应用落地技术白皮书》;
  • 领域细分:《AGI 在金融领域的应用报告》《AI GC 实践案例集》;
  • 行业监测:《2024 年中国大模型季度监测报告》《2025 年中国技术市场发展趋势》。

3. 600+套技术大会 PPT:听行业大咖讲实战

PPT 整理自 2024-2025 年热门技术大会,包含百度、腾讯、字节等企业的一线实践:

在这里插入图片描述

  • 安全方向:《端侧大模型的安全建设》《大模型驱动安全升级(腾讯代码安全实践)》;
  • 产品与创新:《大模型产品如何创新与创收》《AI 时代的新范式:构建 AI 产品》;
  • 多模态与 Agent:《Step-Video 开源模型(视频生成进展)》《Agentic RAG 的现在与未来》;
  • 工程落地:《从原型到生产:AgentOps 加速字节 AI 应用落地》《智能代码助手 CodeFuse 的架构设计》。

二、求职必看:大厂 AI 岗面试 “弹药库”,300 + 真题 + 107 道面经直接抱走

想冲字节、腾讯、阿里、蔚来等大厂 AI 岗?这份面试资料帮你提前 “押题”,拒绝临场慌!

1. 107 道大厂面经:覆盖 Prompt、RAG、大模型应用工程师等热门岗位

面经整理自 2021-2025 年真实面试场景,包含 TPlink、字节、腾讯、蔚来、虾皮、中兴、科大讯飞、京东等企业的高频考题,每道题都附带思路解析:

2. 102 道 AI 大模型真题:直击大模型核心考点

针对大模型专属考题,从概念到实践全面覆盖,帮你理清底层逻辑:

3. 97 道 LLMs 真题:聚焦大型语言模型高频问题

专门拆解 LLMs 的核心痛点与解决方案,比如让很多人头疼的 “复读机问题”:


三、路线必明: AI 大模型学习路线图,1 张图理清核心内容

刚接触 AI 大模型,不知道该从哪学起?这份「AI大模型 学习路线图」直接帮你划重点,不用再盲目摸索!

在这里插入图片描述

路线图涵盖 5 大核心板块,从基础到进阶层层递进:一步步带你从入门到进阶,从理论到实战。

img

L1阶段:启航篇丨极速破界AI新时代

L1阶段:了解大模型的基础知识,以及大模型在各个行业的应用和分析,学习理解大模型的核心原理、关键技术以及大模型应用场景。

img

L2阶段:攻坚篇丨RAG开发实战工坊

L2阶段:AI大模型RAG应用开发工程,主要学习RAG检索增强生成:包括Naive RAG、Advanced-RAG以及RAG性能评估,还有GraphRAG在内的多个RAG热门项目的分析。

img

L3阶段:跃迁篇丨Agent智能体架构设计

L3阶段:大模型Agent应用架构进阶实现,主要学习LangChain、 LIamaIndex框架,也会学习到AutoGPT、 MetaGPT等多Agent系统,打造Agent智能体。

img

L4阶段:精进篇丨模型微调与私有化部署

L4阶段:大模型的微调和私有化部署,更加深入的探讨Transformer架构,学习大模型的微调技术,利用DeepSpeed、Lamam Factory等工具快速进行模型微调,并通过Ollama、vLLM等推理部署框架,实现模型的快速部署。

img

L5阶段:专题集丨特训篇 【录播课】

img
四、资料领取:全套内容免费抱走,学 AI 不用再找第二份

不管你是 0 基础想入门 AI 大模型,还是有基础想冲刺大厂、了解行业趋势,这份资料都能满足你!
现在只需按照提示操作,就能免费领取:

👇👇扫码免费领取全部内容👇👇

​

2025 年想抓住 AI 大模型的风口?别犹豫,这份免费资料就是你的 “起跑线”!

【LangChain系列】实战案例6:利用大模型进行文本总结的方法探索,文本Token超限怎么办? 在利用大模型总结文本的过程中,最主要的工作是如何将文档内容传递给大模型。Stuff方法:简单地将所有文档“填充”到单个提示中。这种方法的主要优点是简单,但缺点是当文档很长或数量很多时,可能会超出模型的上下文窗口限制,导致信息丢失或模型性能下降。Map-reduce方法:这种方法分为两步。首先,在“map”步骤中,单独对每个文档进行摘要。然后,在“reduce”步骤中,将这些摘要合并成一个最终摘要。这种方法的主要优点是它可以处理大量或长文档,因为它在合并之前先对它们进行了压缩。 阅读详情

相关推荐

MCP Token超限问题解决方案

是一个开放标准,允许AI模型安全地连接到外部数据源和工具。MCP服务器可以提供丰富的工具集合,如GitHub仓库查询、数据库操作、文档检索等。然而,MCP工具经常返回大量数据(如完整的GitHub文档、API响应等),直接传递给LLM会导致token超限错误。优先选择 LangGraph + pre_model_hook 方案✅ 原生框架支持,代码简洁✅ 更好的长期维护性✅ 与LangGraph生态系统深度集成使用 LangChain + _aperform_agent_action 方案。

信马堂 2411

LangChain Summarizer:一个让你轻松生成文档摘要的神奇工具

文档摘要,就是对文档的内容进行简化和概括,提取出文档的主旨、主题、观点、结论等关键信息,形成一个简短的文字描述。文档摘要可以帮助我们快速地获取和理解文档的核心内容,避免阅读冗长或无关的信息。文档摘要有不同的类型和风格,根据不同的目的和需求,我们可以选择不同的方式来生成文档摘要。比如:描述性摘要:描述性摘要是对文档内容进行客观和中立的概括,不包含任何评价或批判。描述性摘要通常用于科学、技术、学术等领域,以便于读者快速了解文档的主题和范围。

FrenzyTechAI的博客 1万+

LangChain实战:如何用拦截器解决MCP Token超限问题(附完整代码)

本文探讨了在LangChain框架中使用智能拦截器解决大语言模型上下文溢出问题的实战方案。针对MCP工具返回数据量过大导致的Token超限问题,提出了工具层拦截和消息层修剪两种解决方案,并详细解析了智能摘要算法和动态阈值调整机制,帮助开发者有效优化模型输入,提升系统稳定性。

weixin_29295541的博客 255

LangChain入门(三)-对超长文本进行总结

GitHub - liaokongVFX/LangChain-Chinese-Getting-Started-Guide: LangChain 的中文入门教程LangChain 的中文入门教程. Contribute to liaokongVFX/LangChain-Chinese-Getting-Started-Guide development by creating an account on GitHub.

Good Luck 9151

LangChain文本切分实战:RAG中语义完整与token平衡的关键技术

文本切分是RAG系统中决定检索质量的基础环节,其本质是在LLM输入长度限制、语义单元完整性与业务查询粒度三重约束下的动态权衡。理解chunk_size与token计数的关系,避免用len()替代tiktoken校准,是保障向量嵌入有效性的前提;而RecursiveCharacterTextSplitter的递归断点策略、MarkdownHeaderTextSplitter的标题层级识别、PythonCodeTextSplitter的AST解析能力,分别对应非结构化文本、结构化文档与代码场景的核心需求。真实项

421

MCP Token超限问题的智能拦截与优化策略

本文深入探讨了MCP Token超限问题的智能拦截与优化策略,提供了LangChain工具级拦截器和LangGraph消息预处理钩子两种解决方案。通过智能摘要和动态压缩算法,有效解决了LLM处理Token数量超过模型限制的挑战,适用于不同架构场景的性能优化需求。

weixin_30415113的博客 154

MCP Token超限问题实战:LangChain与LangGraph双方案解析

本文深入探讨了MCP Token超限问题的技术痛点,并提供了LangChain与LangGraph两种解决方案。LangChain通过工具级精准控制和智能摘要生成,有效压缩数据并保留关键信息;LangGraph则利用消息级全局管控和轻量级压缩算法,实现高效处理。文章还对比了两种方案的技术特性,并给出了实战选型建议。

weixin_29268637的博客 375

【AI大模型应用开发】【LangChain系列】实战案例6:利用大模型进行文本总结的方法探索,文本Token超限怎么办?

假设有一组文档(PDF、Notion页面、客户问题等),你想要总结内容。可以利用大模型来帮你。今天来系统看下利用大模型来对文本进行总结的方法,以LangChain的使用为例。

同学小张的博客 3749

攻克Gemini模型Token超限难题:LangChain4j的精准计数方案与实现

你是否曾因Gemini模型突然抛出"Token数量超出限制"错误而被迫重构对话逻辑?是否在估算多轮对话的Token消耗时感到束手无策?本文将深入解析LangChain4j如何通过新增的Token计数功能,为Java开发者提供精准的Token用量控制方案,彻底解决LLM(大型语言模型)集成中的资源管控痛点。读完本文,你将掌握:Gemini模型Token计算原理、LangChain4j实现方案、多场景...

gitblog_00311的博客 776

langchain agent简单使用;文档总结load_summarize_chain

参考:https://zhuanlan.zhihu.com/p/641384348测试下来总结效果一般,速度也比较慢##加载数据loader = UnstructuredFileLoader(r"C:\Users\loo***资料.txt")#创建llm##运行。

weixin_42357472的博客 1242

从零到一:用AXI DataMover在Zynq MPSoC上实现高效DMA传输(附Vitis HLS驱动示例)

本文详细介绍了如何在Xilinx Zynq UltraScale+ MPSoC平台上使用AXI DataMover实现高效的DMA数据传输。通过解析AXI DataMover架构、Vivado工程配置、Vitis HLS驱动开发及性能优化技巧,帮助开发者快速构建高性能数据传输通道,并提供了可直接复用的代码示例。

weixin_42520796的博客 425

实战详解:基础文本分割策略与长文本处理最佳实践|彻底解决 RAG 检索失真与上下文超限问题

核心目标:平衡上下文限制与语义完整性,不是切得越碎越好,也不是越大越好选型建议:入门首选递归字符分割,结构化文档用结构分割,高精度场景用语义分割必做优化:前置文本清洗、设置重叠区域、用 Token 精准控制长度、注入元数据参数调优:从 512Token、15% 重叠起步,根据业务场景和量化效果反向调整进阶方向:父子分片、特殊内容保护、量化评估、工程化批量处理掌握合理的文本分割策略,你的 RAG 系统、长文档处理、批量生成效率都会有质的提升。

雨辰AI的博客 520

SpringBoot+Vue企业级开源聚合支付系统!支持30+款支付平台,只需配置商户证书就能直接使用!

一款开源SAAS支付系统推荐

技术Z先生的博客 2720

大模型应用开发笔记03:LangChain 中间件实战

本文介绍了如何利用LangChain的中间件机制实现PDF文件解析功能。中间件作为LangChain的核心扩展机制,允许开发者在智能体执行的关键节点插入自定义逻辑,主要包括before_agent、before_model、after_model和wrap_model_call四种类型。文章重点讲解了PDF解析中间件的实现方案,通过继承AgentMiddleware类,在wrap_model_call钩子中完成PDF文件解析和文本提取,将提取的文本注入SystemMessage作为上下文。该方案采用pymu

qq_71729869的博客 817

树莓派CM4 PCIe扩展方案与ASM1184e芯片应用

PCIe(Peripheral Component Interconnect Express)是计算机硬件中重要的高速串行总线标准,广泛应用于存储、网络等设备连接。其核心原理是通过差分信号实现高带宽传输,PCIe Gen2 x1的理论带宽可达5Gbps。在嵌入式开发中,PCIe扩展技术能有效解决单板计算机接口不足的问题,特别适合树莓派等微型平台。ASMedia ASM1184e作为PCIe交换芯片,可将单个接口扩展为多个,支持热插拔且免驱动,极大提升了工程灵活性。通过PCIe交换机方案,开发者能在树莓派CM

weixin_42602368的博客 421

数电实训:万年历

万年历

Lmyccq的博客 1万+

如何在Jupyter下使用LangChain框架进行提示词案例选择

本文介绍了在Anaconda中配置LangChain开发环境并利用其FewShotPromptTemplate和LengthBasedExampleSelector构建动态提示词模板的方法。重点阐述了如何通过设置max_length参数控制示例数量,根据输入文本长度动态调整提示词规模,避免超出模型token限制。同时说明了完整流程需要包含模型调用环节才能获得最终输出结果。文章还提供了环境配置、示例定义、模板构建等具体步骤,为LLM开发中的动态提示词优化提供了实用指导。

一个爱折腾技术的普通人,分享踩过的坑、学到的干货。 1250

[代码开源]基于DistFlow的IEEE33和IEEE69节点最优潮流模型(OPF)实现与性能分析

本文详细介绍了基于DistFlow的IEEE33和IEEE69节点最优潮流模型(OPF)的实现与性能分析。通过代码开源,展示了如何从零搭建电力系统优化模型,解决配电网中的发电成本最小化问题。文章涵盖数据准备、模型实现细节、性能优化建议及常见问题解答,为电力系统研究者提供实用参考。

weixin_29103191的博客 708

深入解析LangChain RecursiveCharacterTextSplitter:RAG文本切割的核心原理与实战配置

在构建基于大语言模型的智能问答系统时,检索增强生成(RAG)技术是关键架构。其核心在于将外部知识库通过嵌入模型向量化后与LLM结合,而文本切割(Splitting)作为预处理的第一步,直接影响后续检索与生成的质量。通过递归字符分割器,系统能依据语义边界(如段落、句子)智能划分文本块,而非简单按固定长度切割,这保障了信息的连贯性与完整性。合理的chunk_size与chunk_overlap参数设置,能平衡信息密度与上下文关联,避免关键概念割裂。该技术尤其适用于文档问答、知识库构建等场景,其中Recursiv

weixin_30294295的博客 343

OpenCV实现物体尺寸的测量

物体尺寸测量的思路是找一个确定尺寸的物体作为参照物,根据已知的计算未知物体尺寸。如下图所示,绿色的板子尺寸为220*300(单位:毫米),通过程序计算白色纸片的长度。

qq_53545309的博客 9157

MATLAB 控制 E4438C 信号源的研究

通过 MATLAB,我们可以实现对 E4438C 的远程控制,从而实现更高的自动化和可编程性。总结起来,通过使用 MATLAB 和 Instrument Control Toolbox,我们可以轻松地控制 E4438C 信号源并生成各种类型的信号。需要注意的是,以上代码仅为示例,实际应用中可能需要根据具体情况进行更详细的配置和错误处理。此外,MATLAB 还提供了一系列函数和命令,可用于控制 E4438C 信号源的其他功能,如频率调谐、功率设置、调制设置等。您可以根据自己的需求进行相应的配置和控制。

RswtPerl的博客 1013

LangChain集成国内大模型实战指南

大模型技术作为AI领域的重要突破,通过API接口实现能力开放已成为主流技术范式。其核心原理是基于Transformer架构的海量参数模型,通过预训练和微调获得通用语言理解与生成能力。在工程实践中,LangChain框架通过标准化接口封装,显著降低了不同大模型平台的接入复杂度。国内主流平台如智谱AI、通义千问等提供的兼容性API,结合环境变量管理、多级缓存等工程优化手段,可构建高可用的企业级AI应用。典型应用场景包括智能客服、内容生成和数据分析,其中流式调用、批量处理等关键技术能有效平衡性能与成本。本文以Ch

weixin_30381317的博客 385

海思3403烧结、复用及mic输入

3403调试的第一步是版本烧结,版本烧结经常遇到问题,本文记录总结遇到的各种问题。

平面到立体 1355

高级java每日一道面试题-2025年8月15日-基础篇[LangChain4j]-如何处理 Token 超限问题?

摘要:LangChain4j 提供了四种处理 Token 超限问题的策略:1) 滑动窗口淘汰策略(基于消息数量或 Token 数量自动淘汰旧消息);2) 语义压缩策略(使用 LLM 总结对话历史);3) 文档分割策略(将长文档切分为适合处理的文本块);4) 多会话与持久化策略(为不同用户维护独立记忆)。这些策略可单独或组合使用,适用于不同场景,如简单对话、复杂客服系统、RAG 应用等。实际开发中可根据需求选择合适策略组合,确保上下文管理既高效又精准。

qq_43071699的博客 500

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

LangChain文本切割实战:优化RAG应用效果的核心参数与策略

在构建检索增强生成(RAG)应用时,文本切割是决定系统性能的关键预处理步骤。其核心原理在于将长文档分割成语义连贯的文本块,以适配嵌入模型和大型语言模型的输入限制。通过递归分割策略,优先在自然语义边界(如段落、标题)处切割,并引入块间重叠机制,能有效防止关键信息在块边界处丢失,从而提升后续检索的召回率与答案生成质量。这一技术对于构建智能客服、文档问答等知识密集型应用具有重要价值。本文以LangChain框架的RecursiveCharacterTextSplitter为例,深入解析chunk_size、chu

weixin_34348174的博客 345

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

上一篇: 一文详解大模型微调|如何微调(Fine-tuning)大语言模型?
下一篇: AI大模型从0到1:你的90天蜕变计划,告别小白直通前沿
AI_小站
博客等级 码龄3年 6255粉丝 1152原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值