当前位置: 首页 > news >正文

Langchain+文本摘要-refine

Refine:类似于Map-Reduce,速度慢于MR。文档链通过循环遍历输入文档并逐步更新其答案来构建响应。对于每个文档,它将当前文档和最新的中间答案传递给LLM链,以获得新的答案。

初始化

import osfrom langchain.chains.combine_documents.map_reduce import MapReduceDocumentsChain
from langchain.chains.combine_documents.reduce import ReduceDocumentsChain
from langchain.chains.combine_documents.stuff import StuffDocumentsChain
from langchain.chains.llm import LLMChain
from langchain.chains.summarize import load_summarize_chain
from langchain_community.document_loaders import WebBaseLoader
from langchain_core.prompts import PromptTemplate
from langchain_core.runnables import RunnablePassthrough
from langchain_openai import ChatOpenAI
from langchain_text_splitters import CharacterTextSplitteros.environ['http_proxy'] = '127.0.0.1:7890'
os.environ['https_proxy'] = '127.0.0.1:7890'os.environ["LANGCHAIN_TRACING_V2"] = "true"
os.environ["LANGCHAIN_PROJECT"] = "LangchainDemo"
os.environ["LANGCHAIN_API_KEY"] = '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'
# os.environ["TAVILY_API_KEY"] = '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'# 创建模型
model = ChatOpenAI(model='gpt-3.5-turbo', temperature=0)# 加载我们的文档。我们将使用 WebBaseLoader 来加载博客文章:
loader = WebBaseLoader('https://lilianweng.github.io/posts/2023-06-23-agent/')
docs = loader.load()  # 得到整篇文章# 第三种: Refine
'''
Refine: RefineDocumentsChain 类似于map-reduce:
文档链通过循环遍历输入文档并逐步更新其答案来构建响应。对于每个文档,它将当前文档和最新的中间答案传递给LLM链,以获得新的答案。
'''
# 第一步: 切割阶段
# 每一个小docs为1000个token
text_splitter = CharacterTextSplitter.from_tiktoken_encoder(chunk_size=1000, chunk_overlap=0)
split_docs = text_splitter.split_documents(docs)

chain refine

# 指定chain_type为: refine
chain = load_summarize_chain(model, chain_type='refine')result = chain.invoke(split_docs)
print(result['output_text'])

结合提示词

# 定义提示
prompt_template = """针对下面的内容,写一个简洁的总结摘要:
"{text}"
简洁的总结摘要:"""
prompt = PromptTemplate.from_template(prompt_template)refine_template = ("Your job is to produce a final summary\n""We have provided an existing summary up to a certain point: {existing_answer}\n""We have the opportunity to refine the existing summary""(only if needed) with some more context below.\n""------------\n""{text}\n""------------\n""\n""Given the new context, refine the original summary in Chinese""If the context isn't useful, return the original summary."
)# refine_template = (
#     "你的工作是做出一个最终的总结摘要。\n"
#     "我们提供了一个到某个点的现有摘要:{existing_answer}\n"
#     "我们有机会完善现有的摘要,基于下面更多的文本内容\n"
#     "------------\n"
#     "{text}\n"
#     "------------\n"
# )
refine_prompt = PromptTemplate.from_template(refine_template)chain = load_summarize_chain(llm=model,chain_type="refine",question_prompt=prompt,refine_prompt=refine_prompt,return_intermediate_steps=False,input_key="input_documents",output_key="output_text",
)text_splitter = CharacterTextSplitter.from_tiktoken_encoder(chunk_size=1000, chunk_overlap=0
)
split_docs = text_splitter.split_documents(docs)
result = chain.invoke({"input_documents": split_docs}, return_only_outputs=True)print(result["output_text"])

http://www.xdnf.cn/news/233839.html

相关文章:

  • Java零基础入门Day3:程序流程控制
  • Flowith:解放思维的AI画布让创意与效率如泉涌
  • 动画震动效果
  • 【Bootstrap V4系列】学习入门教程之 加载必要文件和入门模板
  • javascript 深拷贝和浅拷贝的区别及具体实现方案
  • 【每日八股】复习 Redis Day4:线程模型
  • NLP 分词技术学习
  • 【Dify系列教程重置精品版】第四章:实现Dify的 hello world
  • ISO 26262认证步骤
  • 【Java面试笔记:进阶】30.Java程序运行在Docker等容器环境有哪些新问题?
  • 楼宇智能化三、五章【期末复习】
  • 芯知识|小体积语音芯片方案WTV/WT2003H声音播放ic应用解析
  • 楼宇智能化四章【期末复习】
  • (eNSP)Smart Link配置实验
  • MicroPython for esp32s3开发HX711称重模块指南
  • rk3568 A/B系统 OAT升级 实践
  • 全面了解CSS语法 ! ! !
  • 聊一聊接口自动化测试断言处理策略
  • 用户意图驱动:GEO优化策略之内容精准匹配
  • PID中低通滤波算法的详细讲解
  • 消防岗位技能竞赛流程方案策划
  • verilog_testbench技巧
  • 逻辑回归之参数选择:从理论到实践
  • [FPGA VIDEO IP] VCU
  • Allegro23.1新功能之新型via structure创建方法操作指导
  • 20250430在ubuntu14.04.6系统上完成编译NanoPi NEO开发板的FriendlyCore系统【严重不推荐,属于没苦硬吃】
  • 两向量平行公式、向量与平面平行公式、两平面平行公式;两向量垂直公式、向量与平面垂直公式、两平面垂直公式
  • 2025年数字创意设计与图像处理国际会议 (DCDIP 2025)
  • 一种导弹追踪算法的MATLAB仿真实现
  • HTML5 新增的主要标签整理