8.3.1 LangChain框架中的链
在LangChain中,链是将多个组件组合在一起形成一个单一、连贯的工作流程的方式。链可以包含模型调用、数据处理、工具使用等多个步骤,使你能够构建复杂的应用程序。
链的特点:把LLM、提示、工具、输出解析等组件按顺序或并行地组装成可复用的执行单元,可独立调用,也可以使用LCEL重新组合。
- 可组合性:多个链可以嵌套或串联。
- 可复用性:预定义链(如LLMChain、RetrievalQA)可直接使用。
【示例8.4】基础链示例(LangChain+Qwen)。
#替换API密钥参数为deepseek_api_key,并使用你的DeepSeek API密钥 #设置合适的Qwen模型名称,如"qwen-chat"或其他可用模型 #pip install langchain openai#必要的依赖包 from langchain.prompts import PromptTemplate from langchain_openai import ChatOpenAI import os # 定义提示模板 prompt = PromptTemplate( input_variables=["topic"], template="请给我介绍一下 {topic} 的主要内容", ) # 初始化Qwen语言模型(使用OpenAI兼容接口) llm = ChatOpenAI( model_name="qwen-plus", # Qwen模型名称 openai_api_key= os.getenv("DASHSCOPE_API_KEY"), # Qwen API密钥 openai_api_base="https://dashscope.aliyuncs.com/compatible-mode/v1", # Qwen API基础地址 temperature=0.7 ) # 创建链 chain = prompt | llm # 运行链 result = chain.invoke("量子计算") print(result)输出:
好的,很乐意为您介绍量子计算的主要内容。我会用一个从浅入深的结构来讲解,希望能让您对这个未来科技有一个清晰的认识。 ### 一、核心思想:为什么需要量子计算? 我们现在的计算机(笔记本计算机、手机、超级计算机)都是**经典计算机**,它们处理信息的基本单位是“比特”(bit)。一个比特就像一盏开关,要么是 **0**(关),要么是 **1**(开)。 然而,自然界中很多复杂问题(比如模拟新药分子、优化全球物流、破解加密算法)的规模极其庞大,经典计算机需要花费**指数级增长**的时间(可能几百年甚至上亿年)才能解决。这就遇到了算力瓶颈。 **量子计算**的核心思想是:利用量子力学中一些反直觉的特性来处理和存储信息,从而在解决特定问题上获得**指数级**的算力提升,远远超越任何可能的经典计算机。 --- ### 二、基础概念:量子比特与量子特性 量子计算的基本单位是**量子比特**(Qubit)。它和经典比特的最大区别在于: 1. **叠加态** * **经典比特**:非0即1,像一枚静止的硬币,要么正面朝上(0),要么反面朝上(1)。 * **量子比特**:可以同时是0和1的叠加状态,像一枚**正在旋转的硬币**。在你测量它之前,它同时处于正面和反面的状态。测量的一瞬间,它才会“坍缩”到一个确定的状态(0或1)。 * **意义**:1个经典比特只能存储1种信息(0或1),而1个量子比特由于叠加态,可以同时表示0和1两种状态。如果有2个量子比特,它们可以同时表示00、01、10、11这4种状态。N个量子比特可以同时表示 2^N 种状态。这种指数级的并行性是其巨大算力的根源。 2. **纠缠** * 这是量子力学中最神奇的特性。两个或多个量子比特可以形成一种“纠缠”关系,无论它们相距多远,它们的状态都会立即关联起来。 * **比喻**:想象一对“量子骰子”,无论你把它们分开到宇宙的两端,当你掷出一个是6点时,另一个会瞬间也变成6点。 * **意义**:纠缠使得量子比特之间能以一种经典方式无法实现的高度相关方式协同工作,是进行复杂计算和通信的关键。 3. **干涉** * 由于量子比特是波,它们可以像声波或光波一样相互叠加(增强或抵消)。 * **意义**:在计算过程中,我们可以通过精心设计的操作(量子门),让代表错误答案的路径波相互抵消(相消干涉),而让代表正确答案的路径波相互增强(相长干涉)。这样,当我们最终测量时,得到正确答案的概率就被放大了。 ---后续省略(由于输出内容过多)代码执行流程如图8.1所示。
图8.1 代码执行流程