LangChain 中 LLM 模型调用与高级配置详解

陆景行
陆景行
发布时间:2026-10-12 | 2人浏览过
原创

本文详细介绍 LangChain 框架对接大语言模型(LLM)的核心用法,涵盖文本补全与对话模式的底层逻辑、基础接口调用、自定义模型继承方法,以及异步调用、内存缓存、流式响应和 Token 统计等高级配置指南。

LangChain LLM 基础调用逻辑

基于大语言模型的应用主要分为两种交互模式。第一种为文本补全(Text Completion),采用一问一答形式,输入与输出均为纯文本,各次调用相互独立,常用于知识库问答或单轮指令生成。第二种为对话模型(Chat Models),输入为包含多轮消息的列表,能够自动维护上下文信息,使回复更具连贯性。实际上,对话模型的底层仍依赖于 LLM 服务,仅在数据封装与调用接口上进行了适配。

快速接入与基础调用

LangChain 本身不内置具体的大语言模型,而是作为中间层提供统一接口,便于对接 OpenAI、Cohere、Hugging Face 等多种底层服务。以接入 OpenAI 为例,初始化实例后即可完成基础调用。

from langchain.llms import OpenAI
llm = OpenAI(openai_api_key="your_api_key")

初始化完成后,可通过两种方式进行文本生成。直接传字符串即可触发单次补全:

result = llm("给我写首诗")
print(result)

若需批量处理或获取复杂结果,可使用 generate 方法传入列表:

llm_result = llm.generate(["给我唱首歌", "给我写首诗"])

自定义模型与测试工具

当目标模型未直接收录在框架支持列表中时,可通过继承框架基类实现自定义接入。新建类并覆写核心方法即可接入任意 API:

class CustomLLM(BaseLLM):
    @abstractmethod
    def _call(
        self,
        prompt: str,
        stop: Optional[List[str]] = None,
        run_manager: Optional[CallbackManagerForLLMRun] = None,
    ) -> str:
        """执行 LLM 推理并返回结果"""
        # 此处编写实际请求第三方 API 的逻辑
        pass

唯一必需实现的方法是 _call,它接收提示词及可选终止词,返回模型生成的字符串。此外可重写 _identifying_params 方法以输出调试参数。在实际开发阶段,为避免频繁调用收费接口浪费资源,LangChain 提供了本地 Mock 工具:

from langchain.llms.fake import FakeListLLM
responses = ["窗前明月光\n低头思故乡"]
llm_mock = FakeListLLM(responses=responses)
print(llm_mock("给我写首诗"))

该工具会按预设顺序返回指定文本,配合 HumanInputLLM 可实现手动交互式测试。

高级特性配置指南

第1步:异步调用与结果获取

在高并发场景下,同步阻塞会影响性能。LangChain 支持通过 agenerate 方法发起异步请求(目前主要兼容 OpenAI 及相关适配器)。结合 asyncio 可高效获取响应:

import asyncio

async def fetch_result(llm, prompt):
    resp = await llm.agenerate([prompt])
    return resp.generations[0][0].text

# 调用示例:output = asyncio.run(fetch_result(llm, "Hello, how are you?"))

第2步:启用请求缓存机制

针对重复性查询,开启缓存可直接返回历史结果,显著降低延迟与调用成本。框架内置了多种缓存后端,如内存级 InMemoryCache 或数据库型 SQLiteCache。配置方式如下:

from langchain.cache import InMemoryCache
langchain.llm_cache = InMemoryCache()

llm.predict("Tell me a joke") # 首次请求触发完整调用
llm.predict("Tell me a joke") # 二次请求命中缓存直接返回

第3步:配置文件持久化

为避免重复填写密钥与超参,可将 LLM 实例序列化保存至文件,并在其他脚本中直接加载:

llm.save("llm_config.json")
loaded_llm = load_llm("llm_config.json")

第4步:实现流式响应输出

等待完整响应可能带来较长首字延迟。流式输出(Streaming)可在服务端逐片返回数据时立即推送给前端,提升交互体验。只需在实例化时开启 streaming=True 并绑定回调处理器:

from langchain.callbacks.streaming_stdout import StreamingStdOutCallbackHandler

llm_stream = OpenAI(
    streaming=True,
    callbacks=[StreamingStdOutCallbackHandler()],
    temperature=0
)
resp = llm_stream("给我写首诗")

底层依赖 BaseCallbackHandler 中的 on_llm_new_token 钩子,系统会自动逐 token 触发打印。

第5步:统计 Token 消耗额度

监控调用成本是生产环境的关键环节。利用官方提供的上下文管理器,可精准捕获单次调用的 Prompt、Completion 及总 Token 数:

from langchain.callbacks import get_openai_callback

with get_openai_callback() as cb:
    result = llm("请总结以下文档内容")
    print(f"消耗 Tokens: {cb.total_tokens}")

总结

LLM 是大语言模型最基础的调用形态,后续的 Chat 模式与智能体(Agent)均在此接口之上进行封装。掌握文本补全、异步并发、缓存加速与流式传输的配置方法,能够显著提升应用开发的效率与用户体验。以上就是 LangChain 中 LLM 模型调用与高级配置的详细内容,更多关于大语言模型集成与实践的资料请关注本站其它相关文章!

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表