langchain中的LLM模型使用介绍

本文涉及的产品
智能开放搜索 OpenSearch行业算法版,1GB 20LCU 1个月
实时数仓Hologres,5000CU*H 100GB 3个月
实时计算 Flink 版,5000CU*H 3个月
简介: 构建在大语言模型基础上的应用通常有两种,第一种叫做text completion,也就是一问一答的模式,输入是text,输出也是text。这种模型下应用并不会记忆之前的问题内容,每一个问题都是最新的。通常用来做知识库。还有一种是类似聊天机器人这种会话模式,也叫Chat models。这种模式下输入是一个Chat Messages的列表。从而可以保存上下文信息,让模型的回复更加真实。

简介

构建在大语言模型基础上的应用通常有两种,第一种叫做text completion,也就是一问一答的模式,输入是text,输出也是text。这种模型下应用并不会记忆之前的问题内容,每一个问题都是最新的。通常用来做知识库。

还有一种是类似聊天机器人这种会话模式,也叫Chat models。这种模式下输入是一个Chat Messages的列表。从而可以保存上下文信息,让模型的回复更加真实。

实际上Chat models的底层还是LLMs,只不过在调用方式上有些变化。

简单使用LLMs

什么是LLMs呢?LLMs是Large Language Models的简称,也就是我们常说的大语言模型。

对于langchain来说,它本身并不提供大语言模型,它只是一个中间的粘合层,提供了统一的接口,方便我们对接底层的各种LLMs模型。

langchain除了可以对接OpenAI之外,还可以对接Cohere, Hugging Face等其他的大语言模型。

比如下面是openAI的使用:

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

接下来就可以调用llm的方法来进行text completion了。

一般来说有两种方式。第一种方式就是直接输出:

llm("给我写首诗")

还有一种方式调用他的generate方法:

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

这种方式可以传入一个数组,用来生成比较复杂的结果。

langchain支持的LLM

现在大语言模型可谓是蓬勃发展,一不留神就可能出一个新的大语言模型。

就目前而言,基本的国外主流模型langchain都是支持的。

比如:openai,azure openai,AmazonAPI,Hugging Face Hub等等。数目繁多,功能齐全,你想要的他全都有,你没想到的他也有。

那么有小伙伴可能要问题了,langchain支不支持国产的大语言模型呢?

答案是肯定的,但并不是直接的。

如果你发现langchain并没有你想要的llm,那么你可以尝试进行自定义。

langchain为我们提供了一个类叫做LLM,我们只需要继承这个LLM即可:

class LLM(BaseLLM):
    @abstractmethod
    def _call(
        self,
        prompt: str,
        stop: Optional[List[str]] = None,
        run_manager: Optional[CallbackManagerForLLMRun] = None,
    ) -> str:
        """Run the LLM on the given prompt and input."""

其中,唯一一个必须要实现的方法就是_call,这个方法传入一个字符串和一些可选的stop word,然后返回LLM的输出即可。

另外还可以实现一个_identifying_params方法,用来输出自定义LLM的一些参数信息。

大家可以自行尝试和接入不同的LLM模型。

一些特殊的LLM

很多时候调用LLM是需要收费的,如果我们在开发的过程中也要不断的消耗token肯定是得不偿失。

所以langchain为了给我们省钱,提供了一个FakeLLM来使用。

顾名思义,FakeLLM就是可以手动来mock一些LLM的回答,方便测试。

from langchain.llms.fake import FakeListLLM
responses = ["窗前明月光\n低头鞋两双"]
llm = FakeListLLM(responses=responses)
print(llm("给我写首诗"))

上面的输出结果如下:

窗前明月光
低头鞋两双

langchain中还有一个和FakeLLM类似的叫做HumanInputLLM。

这个LLM可以打印出给用户的prompt,并且将用户的输入作为输出返回给用户,大家可以自行体验。

LLM的高级用法

除了正常的LLM调用之外,langchain还提供了一些LLM的高级用法。

异步调用

比如异步调用LLM。当然目前只支持OpenAI, PromptLayerOpenAI, ChatOpenAI 和 Anthropic这几个LLM。其他的对LLM的支持貌似正在开发中。

异步方法也很简单,主要是调用llm的agenerate方法,比如下面这样:

async def async_generate(llm):
    resp = await llm.agenerate(["Hello, how are you?"])
    print(resp.generations[0][0].text)

缓存功能

另外,对于一些重复的请求来说,langchain还提供了缓存功能,这样可以重复的请求就不需要再发送到LLM去了,给我们节约了时间和金钱,非常好用。

langchain提供的cache也有很多种,比如InMemoryCache,FullLLMCache,SQLAlchemyCache,SQLiteCache和RedisCache等等。

我们以InMemoryCache为例,看看是怎么使用的:

from langchain.cache import InMemoryCache
langchain.llm_cache = InMemoryCache()
# 第一次没有使用缓存
llm.predict("Tell me a joke")
# 第二次使用了缓存
llm.predict("Tell me a joke")

使用起来很简单,只需要添加一行llm_cache即可。

如果你使用其他的cache,除了构造函数不同之外,其他的都是类似的。

保存LLM配置

有时候我们配置好了LLM之外,还可以把LLM相关的参数以文本的形式存储起来。

保存llm到文件:

llm.save("llm.json")

加载llm:

llm = load_llm("llm.json")

流式处理

LLM的速度是一个硬伤,由于返回整个响应的速度太慢了,所以推出了流式响应。只要有response返回,就传输给用户。并不需要等待所有内容都获得之后再处理。这样对用户的体验是最好的。

目前langchain只支持OpenAI,ChatOpenAI和ChatAnthropic。

要实现这个流式处理, langchain提供了BaseCallbackHandler,我们只需要继承这个类,实现on_llm_new_token这个方法即可。

当然langchain已经给我们提供了一个实现好的类叫做:StreamingStdOutCallbackHandler。下面是他的实现:

def on_llm_new_token(self, token: str, **kwargs: Any) -> None:
        sys.stdout.write(token)
        sys.stdout.flush()

使用的时候,只需要在构建llm的是传入对应的callback即可:

from langchain.llms import OpenAI
from langchain.callbacks.streaming_stdout import StreamingStdOutCallbackHandler
llm = OpenAI(streaming=True, callbacks=[StreamingStdOutCallbackHandler()], temperature=0)
resp = llm("给我写首诗")

统计token数目

这个统计token使用数目的功能目前只能在openai使用。

from langchain.llms import OpenAI
from langchain.callbacks import get_openai_callback
llm = OpenAI(model_name="text-davinci-002", n=2, best_of=2)
with get_openai_callback() as cb:
    result = llm("T给我写首诗")
    print(cb)

总结

LLM是大语言模型最基础的模式,chat模式的底层就是基于LLM实现的。后续我们会详细介绍chat模式,尽请期待。

相关实践学习
阿里云百炼xAnalyticDB PostgreSQL构建AIGC应用
通过该实验体验在阿里云百炼中构建企业专属知识库构建及应用全流程。同时体验使用ADB-PG向量检索引擎提供专属安全存储,保障企业数据隐私安全。
AnalyticDB PostgreSQL 企业智能数据中台:一站式管理数据服务资产
企业在数据仓库之上可构建丰富的数据服务用以支持数据应用及业务场景;ADB PG推出全新企业智能数据平台,用以帮助用户一站式的管理企业数据服务资产,包括创建, 管理,探索, 监控等; 助力企业在现有平台之上快速构建起数据服务资产体系
相关文章
|
1月前
|
前端开发 机器人 API
前端大模型入门(一):用 js+langchain 构建基于 LLM 的应用
本文介绍了大语言模型(LLM)的HTTP API流式调用机制及其在前端的实现方法。通过流式调用,服务器可以逐步发送生成的文本内容,前端则实时处理并展示这些数据块,从而提升用户体验和实时性。文章详细讲解了如何使用`fetch`发起流式请求、处理响应流数据、逐步更新界面、处理中断和错误,以及优化用户交互。流式调用特别适用于聊天机器人、搜索建议等应用场景,能够显著减少用户的等待时间,增强交互性。
305 2
|
1月前
|
机器学习/深度学习 自然语言处理 PyTorch
LLM-Mixer: 融合多尺度时间序列分解与预训练模型,可以精准捕捉短期波动与长期趋势
近年来,大型语言模型(LLMs)在自然语言处理领域取得显著进展,研究人员开始探索将其应用于时间序列预测。Jin等人提出了LLM-Mixer框架,通过多尺度时间序列分解和预训练的LLMs,有效捕捉时间序列数据中的短期波动和长期趋势,提高了预测精度。实验结果显示,LLM-Mixer在多个基准数据集上优于现有方法,展示了其在时间序列预测任务中的巨大潜力。
62 3
LLM-Mixer: 融合多尺度时间序列分解与预训练模型,可以精准捕捉短期波动与长期趋势
|
3月前
|
人工智能 自然语言处理
公理训练让LLM学会因果推理:6700万参数模型比肩万亿参数级GPT-4
【8月更文挑战第3天】新论文提出“公理训练”法,使仅有6700万参数的语言模型掌握因果推理,性能媲美万亿级GPT-4。研究通过大量合成数据示例教授模型因果公理,实现有效推理并泛化至复杂图结构。尽管面临合成数据需求大及复杂关系处理限制,此法仍为语言模型的因果理解开辟新途径。[链接: https://arxiv.org/pdf/2407.07612]
74 1
|
22天前
|
JSON 数据可视化 NoSQL
基于LLM Graph Transformer的知识图谱构建技术研究:LangChain框架下转换机制实践
本文介绍了LangChain的LLM Graph Transformer框架,探讨了文本到图谱转换的双模式实现机制。基于工具的模式利用结构化输出和函数调用,简化了提示工程并支持属性提取;基于提示的模式则为不支持工具调用的模型提供了备选方案。通过精确定义图谱模式(包括节点类型、关系类型及其约束),显著提升了提取结果的一致性和可靠性。LLM Graph Transformer为非结构化数据的结构化表示提供了可靠的技术方案,支持RAG应用和复杂查询处理。
75 2
基于LLM Graph Transformer的知识图谱构建技术研究:LangChain框架下转换机制实践
|
1月前
|
计算机视觉
Deepseek开源多模态LLM模型框架Janus,魔搭社区最佳实践
deepseek近期推出了简单、统一且灵活的多模态框架Janus,它能够统一处理多模态理解和生成任务。让我们一起来了解一下吧。
|
2月前
|
存储 机器学习/深度学习 物联网
CGE:基于Causal LLM的Code Embedding模型
CodeFuse-CGE 项目在外滩大会展出,吸引众多技术与产品从业者的关注。“文搜代码”功能备受好评,模型表现令人期待。CodeFuse-CGE 采用大语言模型,通过 LoRA 微调提取文本与代码嵌入,实现在多个 NL2Code 基准测试中超越现有 SOTA 模型。现已开源 CGE-Large 与 CGE-Small 两种模型,欢迎访问 GitHub 页并支持本项目。[项目地址](https://github.com/codefuse-ai/CodeFuse-CGE)
72 1
|
1月前
|
开发工具 git
LLM-03 大模型 15分钟 FineTuning 微调 GPT2 模型 finetuning GPT微调实战 仅需6GB显存 单卡微调 数据 10MB数据集微调
LLM-03 大模型 15分钟 FineTuning 微调 GPT2 模型 finetuning GPT微调实战 仅需6GB显存 单卡微调 数据 10MB数据集微调
59 0
|
1月前
|
机器学习/深度学习 人工智能 自然语言处理
【AI大模型】BERT模型:揭秘LLM主要类别架构(上)
【AI大模型】BERT模型:揭秘LLM主要类别架构(上)
|
2月前
|
安全 测试技术
世界模型又近了?MIT惊人研究:LLM已模拟现实世界,绝非随机鹦鹉!
【9月更文挑战第14天】麻省理工学院最近的研究揭示了大型语言模型(LLM)展现出的新潜能,其不仅能模仿真实环境,更在一定程度上理解并模拟程序在特定环境下的运作。通过使用Transformer模型并结合特定探测分类器,研究团队发现模型能逐步掌握程序的形式语义。为了验证这一发现,团队创建了一个独特的干预基准测试,进一步证实了模型的仿真能力,为世界模型的发展提供了新方向。尽管存在模型可能仅习得统计规律而非真正理解语义的争议,这项研究依然为理解复杂系统提供了新工具与视角。论文详情见:https://arxiv.org/abs/2305.11169。
42 1
|
3月前
|
自然语言处理
LangChain 构建问题之实例化一个聊天模型如何解决
LangChain 构建问题之实例化一个聊天模型如何解决
30 1
下一篇
无影云桌面