【langchain实战笔记】1、构建简单LLM应用

本篇文章,我们将介绍如何通过langchain-v0.3框架快速搭建一个送礼助手大模型应用,整个搭建流程分为3步:

  • 创建大模型实例
  • 创建提示词模板
  • 获取大模型输出

在开始之前请先确认已经安装相关依赖

langchain~=0.3.12

1、创建大模型实例

我们以openai的 gpt-4o为例,确保你已经获取了大模型调用接口的API_KEY和API_BASE,接下来就可以构建大模型实例了。

import os

os.environ['OPENAI_API_KEY'] = "XXXXXX"
os.environ["OPENAI_API_BASE"] = "XXXXXX"

from langchain_openai import ChatOpenAI
from langchain_core.messages import HumanMessage, SystemMessage


model = ChatOpenAI(
    model="gpt-4o",
    # 除了通过环境参数传递API_KEY和API_BASE参数外,也可以显式传参。
    api_key="XXXXXX",
    base_url="XXXXXX",
    temperature=0.0,
    timeout=60,
    max_tokens=1000,
    max_retries=3,
    # stop = "&&",
    stop = ["&&","END"]
)

大模型实例创建时支持以下常用的标准化参数。这些标准参数目前仅在具有自己集成包(例如 langchain-openai、langchain-anthropic 等)的大模型中支持,而不会在 langchain-community 中的模型中强制支持。社区中支持的大模型支持的参数可以看参考LangChain Python API Reference — 🦜🔗 LangChain documentation

参数描述
model您想要使用的特定 AI 模型的名称或标识符
temperature控制模型输出的随机性。较高的值(例如 1.0)响应更具多样性,较低的值(例如 0.0)响应更具确定性
timeout取消请求前等待模型响应的最长时间(以秒为单位)。确保请求不会无限期挂起
max_tokens限制响应中的标记总数(单词和标点符号),这控制输出的长度
stop指定停止序列,可以设置一个或多个字符串,当生成的文本中出现这些字符串时,模型将停止生成, 但需要确保所选的停止标记不会出现在你希望生成的内容中,以避免意外中断,通常与固定输出样式一起使用,避免生成多余的信息。
max_retries如果由于网络超时或速率限制等问题导致请求失败,系统重新发送请求的最大尝试次数
api_key模型提供商进行身份验证所需的 API 密钥
base_url发送请求的 API 端点的 URL
rate_limiter可选的BaseRateLimiter用于分隔请求以避免超出速率限制

之后我们就可以与大模型进行对话了:

from langchain_core.messages import HumanMessage, SystemMessage
messages = [
    SystemMessage("你是一个电商大模型"),
    HumanMessage("请推荐3个送给女朋友的礼物"),
]

result = model.invoke(messages)
print(result.content)

2、创建提示模板

在与大语言模型交互时,需要将用户输入转化成大语言模型期待的消息列表,如上文的messages。为了简化一些必要但时重复的提示,可以通过创建提示模板将原始用户输入自动转换为可传递给语言模型的消息列表。

例如我们希望用户仅关注推荐的礼物数量和送礼对象,那我可以就可以生成如下提示模板:

from langchain_core.prompts import ChatPromptTemplate
from langchain_core.messages import HumanMessage, SystemMessage

prompt_template = ChatPromptTemplate.from_messages(
    [
        SystemMessage("你是一个电商大模型"), 
        # 相当于("system", "你是一个电商大模型") 
        ("human", "请推荐{num}个送给{people}的礼物")
        # "请推荐{num}个送给{people}的礼物" 可以正常接收用户参数
        # HumanMessage("请推荐{num}个送给{people}的礼物") 无法正常接受用户参数
    ]
)

prompt = prompt_template.invoke({"num": 5, "people": "妈妈"})
result = model.invoke(prompt)
print(result.content)

这里需要注意,ChatPromptTemplate.from_messages() 参数支持以下类型:

  • BaseMessage类型
  • BaseMessagePromptTemplate
  • 2元组消息定义,即("system", "")样式。
  • 混合消息格式,但是只有字符串 和 2元组消息定义 支持 用户参数的接收
  • 字符串,是 ("human", "") 的简写,相当于role固定为human的2元组消息定义。

3、获取模型结果

聊天模型结果的获取支持调用、流式接口和批处理等接收方式。

(1)、调用

调用(invoke)是最基础的获取结果的方式,大语言模型在接收到请求后,会等结果全部生成之后统一返回。

prompt = prompt_template.invoke({"num": 5, "people": "妈妈"})
result = model.invoke(prompt)
print(result)
(2)、流式

流式(stream)是一种允许大语言模型边生成边输出的获取结果方式。无需等待全部结果处理完成即可收到部分处理结果

prompt = prompt_template.invoke({"num": 5, "people": "妈妈"})
print(prompt)
for token in model.stream(prompt):
    print(token.content, end="|")
(3)、批处理

批处理(batch)是一种允许将多个请求批量发送到大语言模型以实现更高效处理的方法。

inputs = [
    prompt_template.invoke({"num": 3, "people": "妈妈"}),
    prompt_template.invoke({"num": 3, "people": "爸爸"}),
    prompt_template.invoke({"num": 3, "people": "女朋友"})
]
# 批量获取结果
results = model.batch(inputs)

# 处理并输出结果
for question, answer in zip(inputs, results):
    print(f"Question: {question}\nAnswer: {answer}\n")

现在可以开始尝试构建你自己的大语言模型应用了!!! 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值