当前位置: 首页 > news >正文

一、(基础)构建一个简单的 LangChain 应用

目录

  • 前言
  • LangChain 是什么
  • 准备工作
  • 1. langchain调用大模型简单的示例
    • 1.1. 构建一个模型对象
      • 1.1.1. 要简单地调用模型,我们可以将消息列表传递给.invoke方法。
    • 1.2. 输出解析器
  • 2. 提示词模板

前言

  1. 这是一个一系列教程 LangChain 上手教程,总结和记录学习 LangChain 的过程,欢迎持续关注。
  2. 文章对应LangChain官网教程,但是本文更加符合国内使用,LangChain官网很多教程需要魔法,本文不需要使用魔法,不需要花模型费用等。

LangChain 是什么

LangChain 是一个用于构建大语言模型(LLM)应用的开发框架。它简化了LLM与外部工具、数据源和流程的集成,让开发者能快速搭建功能丰富的AI应用(如问答机器人、智能助手等)。

准备工作

  • 需要会使用或读懂 python 语言
  • 建议使用 python 虚拟环境,具体怎么创建这里不过多赘述
  • pip安转LangChain:pip install langchain
  • 调用大模型key,我们主要是学习为主,能白嫖自然白嫖,不需要多么快速的响应,下面是对应的申请方式,都是免费的,其他模型都是需要对应token花费钱的。注意:我们只要申请openai的key,openai更加通用
    • 腾讯元宝:hunyuan-lite,申请地址
    • 智谱AI:GLM-4-Flash-250414,申请地址,更推荐,响应速度快,更精准,对 openai 接口兼容性更好
  • 以上两个模型都是免费的,可以放心使用,注意申请 openai 访问方式的key
  • 建议使用 Jupyter Notebook,更加方便,安转教程

1. langchain调用大模型简单的示例

1.1. 构建一个模型对象

from langchain_openai import ChatOpenAImodel = ChatOpenAI(model="hunyuan-lite", api_key="申请的key", base_url="https://api.hunyuan.cloud.tencent.com/v1/")

1.1.1. 要简单地调用模型,我们可以将消息列表传递给.invoke方法。

from langchain_openai import ChatOpenAI
from langchain_core.messages import HumanMessage, SystemMessagemodel = ChatOpenAI(model="hunyuan-lite", api_key="申请的key", base_url="https://api.hunyuan.cloud.tencent.com/v1/")messages = [SystemMessage(content="将以下内容从英语翻译成意大利语"),HumanMessage(content="你好"),
]
print(model.invoke(messages))

当执行完我们可以看到已经输出了

AIMessage(content='Ciao', additional_kwargs={'refusal': None}, response_metadata={'token_usage': {'completion_tokens': 3, 'prompt_tokens': 13, 'total_tokens': 16, 'completion_tokens_details': None, 'prompt_tokens_details': None}, 'model_name': 'hunyuan-lite', 'system_fingerprint': '', 'id': '5b729dc85e44d45b8dbdf0fb58bf7984', 'service_tier': None, 'finish_reason': 'stop', 'logprobs': None}, id='run--68f13b2a-f54c-4862-a03c-3def1c3c512a-0', usage_metadata={'input_tokens': 13, 'output_tokens': 3, 'total_tokens': 16, 'input_token_details': {}, 'output_token_details': {}}
)

1.2. 输出解析器

模型的响应是一个AIMessage。这包含一个字符串响应以及关于响应的其他元数据。我们通常只想处理字符串响应。可以通过使用简单的输出解析器来解析出这个响应。

from langchain_openai import ChatOpenAI
from langchain_core.messages import HumanMessage, SystemMessage
from langchain_core.output_parsers import StrOutputParser# 解析器
parser = StrOutputParser()model = ChatOpenAI(model="hunyuan-lite", api_key="申请的key", base_url="https://api.hunyuan.cloud.tencent.com/v1/")
messages = [SystemMessage(content="将以下内容从英语翻译成意大利语"),HumanMessage(content="你好"),
]
result = model.invoke(messages)# 解析器解析
print(parser.invoke(result))

运行后我们需要的结果已经出来了,并且其他的数据已经没了

Ciao

这样写还是有点繁琐,我们可以使用 | 运算符轻松创建链。| 运算符在 LangChain 中用于将两个元素组合在一起。

from langchain_openai import ChatOpenAI
from langchain_core.messages import HumanMessage, SystemMessage
from langchain_core.output_parsers import StrOutputParsermodel = ChatOpenAI(model="hunyuan-lite", api_key="申请的key", base_url="https://api.hunyuan.cloud.tencent.com/v1/")messages = [SystemMessage(content="将以下内容从英语翻译成意大利语"),HumanMessage(content="你好"),
]
parser = StrOutputParser()
chain = model | parser
print(chain.invoke(messages))

2. 提示词模板

直接将消息列表传递给语言模型。这些消息列表来自哪里?通常,它是由用户输入和应用逻辑的组合构建而成的。这个应用逻辑通常会将原始用户输入转换为准备传递给语言模型的消息列表。常见的转换包括添加系统消息或使用用户输入格式化模板。

PromptTemplates 是 LangChain 中的一个概念,旨在帮助进行这种转换。它们接收原始用户输入并返回准备传递给语言模型的数据(提示)。

在这里创建一个 PromptTemplate。它将接收两个用户变量:

from langchain_core.prompts import ChatPromptTemplate# 创建一个字符串,我们将格式化为系统消息:
system_template = "将以下内容从中文翻译成{language}:"# 创建 PromptTemplate。这将是 system_template 和一个更简单的模板的组合
prompt_template = ChatPromptTemplate.from_messages([("system", system_template), ("user", "{text}")]
)
# 此提示词模板的输入是一个字典。我们可以单独使用这个提示词模板
result = prompt_template.invoke({"language": "italian", "text": "hi"})

输出后可以看到它返回一个 ChatPromptValue,由两个消息组成。

ChatPromptValue(messages=[SystemMessage(content='将以下内容从英语翻译成意大利语:', additional_kwargs={}, response_metadata={}), HumanMessage(content='你好', additional_kwargs={}, response_metadata={})]
)

完整示例

from langchain_openai import ChatOpenAI
from langchain_core.messages import HumanMessage, SystemMessage
from langchain_core.prompts import ChatPromptTemplatemodel = ChatOpenAI(model="hunyuan-lite", api_key="申请的key", base_url="https://api.hunyuan.cloud.tencent.com/v1/")system_template = "将以下内容从中文翻译成{language}:"
prompt_template = ChatPromptTemplate.from_messages([("system", system_template), ("user", "{text}")]
)
result = prompt_template.invoke({"language": "意大利语", "text": "你好"})
print(result)

我们也可以使用 | 运算符创建链解析操作

from langchain_openai import ChatOpenAI
from langchain_core.messages import HumanMessage, SystemMessage
from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import ChatPromptTemplatemodel = ChatOpenAI(model="hunyuan-lite", api_key="申请的key", base_url="https://api.hunyuan.cloud.tencent.com/v1/")system_template = "将以下内容从中文翻译成{language}:"
prompt_template = ChatPromptTemplate.from_messages([("system", system_template), ("user", "{text}")]
)
parser = StrOutputParser()
chain = prompt_template | model | parser
chain.invoke({"language": "意大利语", "text": "你好"})
'Ciao'

本章讲解了如何构建一个简单的 LangChain 应用,现在调用大模型还没有记忆功能,下一篇将讲解如何实现对话的上下文,传送门

http://www.dtcms.com/a/262953.html

相关文章:

  • 对称非对称加密,https和http,https通讯原理,Charles抓包原理
  • macos 使用 vllm 启动模型
  • WIFI 低功耗保活知识系列---三.WiFi AP如何广播自己的缓存区信息
  • OpenCV CUDA模块设备层----计算向量的平方根函数sqrt
  • 基于Spring Boot的绿园社区团购系统的设计与实现
  • Python 安装使用教程
  • Spring Boot 启动性能优化实战指南
  • 基于 SpringBoot+Vue.js+ElementUI 的 Cosplay 论坛设计与实现7000字论文
  • 【硬核数学】2.7 理论与现实的鸿沟:深度学习的数值稳定性挑战《从零构建机器学习、深度学习到LLM的数学认知》
  • 【Spring】——事务、整合、注解
  • 后台管理系统模板Art Design Pro
  • js代码03
  • Karmada 多集群服务发现
  • Apache Doris Profile 深度解析:从获取到分析,解锁查询性能优化密码
  • RedhatCentos挂载镜像
  • LeetCode Hot100(图论)
  • SQL参数化查询:防注入与计划缓存的双重优势
  • 使用 Sqlcmd 高效导入大型 SQL Server 数据库脚本 (.sql)
  • 深入理解 B+ 树:数据库索引的脊梁
  • AI初学者如何对大模型进行微调?——零基础保姆级实战指南
  • vscode一个文件夹有残余的git仓库文件,已经失效了,怎样进行清空仓库残余文件并重新初始化git--ubuntu
  • 【stm32】HAL库开发——CubeMX配置RTC,单片机工作模式和看门狗
  • 炸鸡派-基础测试例程
  • Linux入门篇学习——Ubuntu 系统介绍和Ubuntu启用root用户
  • 在线五子棋对战项目
  • 1.1_2 计算机网络的组成和功能
  • python+uniapp基于微信小程序的食堂菜品查询系统
  • Deepoc 大模型:无人机行业的智能变革引擎
  • vue-33(实践练习:使用 Nuxt.js 和 SSR 构建一个简单的博客)
  • SpringCloud Gateway