【LangChain系列】9. 实用技巧:大模型的流式输出在 OpenAI 和 LangChain 中的使用

当大模型的返回文字非常多时,返回完整的结果会耗费比较长的时间。如果等待大模型形成完整的答案再展示给用户,明显会给用户不好的体验。所以,现在市面上大多数的AI应用,在给用户结果时,都是以流式输出的方式展示给用户的。所谓的流式输出,就是类似打字机式的方式,一个字或一个词的输出,给用户一种答案逐渐出现的动画效果。

今天我们来学习下如何流式输出大模型的返回结果。本文将涵盖 LangChain 的流式输出方式和 OpenAI 原生的流式输出方式。
在这里插入图片描述

0. LangChain的流式输出 Streaming

0.1 实现流式输出

我们在 【AI大模型应用开发】【LangChain系列】实战案例4:再战RAG问答,提取在线网页数据,并返回生成答案的来源 代码的基础上,增加流式输出。

原代码:

python代码解读复制代码import bs4
from langchain import hub
from langchain_community.document_loaders import WebBaseLoader
from langchain_community.vectorstores import Chroma
from langchain_core.output_parsers import StrOutputParser
from langchain_core.runnables import RunnablePassthrough
from langchain_openai import ChatOpenAI, OpenAIEmbeddings
from langchain_text_splitters import RecursiveCharacterTextSplitter

# Load, chunk and index the contents of the blog.
loader = WebBaseLoader(
    web_paths=("https://lilianweng.github.io/posts/2023-06-23-agent/",),
    bs_kwargs=dict(
        parse_only=bs4.SoupStrainer(
            class_=("post-content", "post-title", "post-header")
        )
    ),
)
docs = loader.load()

text_splitter = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=200)
splits = text_splitter.split_documents(docs)
vectorstore = Chroma.from_documents(documents=splits, embedding=OpenAIEmbeddings())

# Retrieve and generate using the relevant snippets of the blog.
retriever = vectorstore.as_retriever()
prompt = hub.pull("rlm/rag-prompt")
llm = ChatOpenAI(model_name=<
### LangChain OpenAILangChain DeepSeek 的功能差异 在开发基于大语言模型的应用时,LangChain 提供了多种接口来集成不同的模型服务提供商。以下是 LangChain OpenAI LangChain DeepSeek 的主要功能差异: #### 1. 模型支持 - **LangChain OpenAI** 支持 OpenAI 提供的所有模型,包括 GPT 系列(如 gpt-3.5-turbo、gpt-4 等)。这些模型以其强大的泛化能力广泛的训练数据而闻名[^2]。 - **LangChain DeepSeek** 支持 DeepSeek 提供的模型,例如 deepseek-v3 deepseek-chat。DeepSeek 模型通常以高性能低成本为特点,适合特定任务或预算有限的场景[^1]。 #### 2. API 调用方式 - **LangChain OpenAI** 使用 `ChatOpenAI` 类进行实例化,并通过 `invoke` 方法调用模型。它依赖 OpenAI 的官方 API,需要提供 API Key 可选的其他参数(如温度、最大令牌数等)[^2]。 - **LangChain DeepSeek** 使用 `BaseChatOpenAI` 类进行实例化,同样需要提供 API Key Base URL。DeepSeek 的 API 调用方式与 OpenAI 类似,但其 Base URL 模型名称有所不同[^1]。 #### 3. 配置灵活性 - **LangChain OpenAI** 提供了更丰富的配置选项,例如支持流式输出(streaming)、回调函数(callbacks)以及详细的日志记录。这些功能有助于开发者更好地调试优化模型性能[^2]。 - **LangChain DeepSeek** 的配置选项相对较少,但在基本功能上与 OpenAI 保持一致。对于大多数应用场景,DeepSeek 的配置已足够满足需求[^1]。 #### 4. 成本与性能 - **LangChain OpenAI** 的成本较高,尤其是使用 GPT-4 等高端模型时。然而,其性能稳定性在业界处于领先地位[^2]。 - **LangChain DeepSeek** 提供更具性价比的选择,尤其适合中小型企业或个人开发者。虽然性能可能略逊于 OpenAI 模型,但在许多任务中仍表现出色[^1]。 #### 5. 社区支持与文档 - **LangChain OpenAI** 拥有庞大的用户社区完善的官方文档,遇到问题时更容易找到解决方案[^2]。 - **LangChain DeepSeek** 的社区规模较小,文档相对简略。不过,随着 DeepSeek 的快速发展,相关资源正在逐步丰富。 ```python # LangChain OpenAI 示例 from langchain_openai import ChatOpenAI import os llm = ChatOpenAI(api_key=os.getenv("OPENAI_API_KEY"), model="gpt-3.5-turbo") response = llm.invoke("什么是大模型?") print(response.content) # LangChain DeepSeek 示例 from langchain_deepseek import BaseChatOpenAI import os model = BaseChatOpenAI( model="deepseek-chat", temperature=0, openai_api_key=os.getenv("DEEPSEEK_API_KEY"), openai_api_base=&#39;https://api.deepseek.com/v1&#39; ) response = model.invoke("什么是大模型?") print(response.content) ``` #### 总结 LangChain OpenAI LangChain DeepSeek 各有优劣。如果追求高性能广泛支持,OpenAI 是更好的选择;如果注重成本效益,DeepSeek 则更为合适。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值