LangChain 中 LLM 模型调用与高级配置详解
本文详细介绍 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 模型调用与高级配置的详细内容,更多关于大语言模型集成与实践的资料请关注本站其它相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









