LangChain简单大模型应用

news/2024/12/25 0:18:00/文章来源:https://www.cnblogs.com/XuXiaoCong/p/18628951
  • LangChain官方示例教程(Build a Simple LLM Application):https://python.langchain.com/docs/tutorials/llm_chain/
    • 将该官方示例教程适当调整及优化

  • 依赖
pip install langchain# 接入ollama本地大模型
pip install langchian-ollama
# 接入兼容OpenAI接口的国产大模型
pip install langchain-openai

提示词

输入

  • 提示词主要有三种角色,LangChain有相应的Message类
from langchain_core.messages import SystemMessage, HumanMessage, AIMessage# 原始写法
messages = [{"role": "system", "content": "将下面的内容翻译成 英语"},{"role": "user", "content": "你好,吃了吗?"},{"role": "assistant", "content": "Hello, have you eaten yet?"},
]# 使用消息类
messages = [SystemMessage(content="将下面的内容翻译成 英语"),HumanMessage(content="你好,吃了吗?"),AIMessage(content="Hello, have you eaten yet?"),
]# 另一种写法
messages = [("system", "将下面的内容翻译成 英语"),("human", "你好,吃了吗?"),("ai", "Hello, have you eaten yet?"),
]
  • Message类的常用方法
from langchain_core.messages import SystemMessage, HumanMessage, AIMessagemessage = AIMessage(content="Hello, have you eaten yet?")
# 以下两个方法,SystemMessage、HumanMessage、AIMessage均适用# 打印输出
message.pretty_print()
# Message继承Pydantic,可以使用Pydantic方法
print(message.model_dump_json())

模板

  • 使用"{xxx}"占位
from langchain_core.prompts import ChatPromptTemplate# 输入
inputs = {"language": "英语", "text": "你好,吃了吗?"}# 定义模板
template = ChatPromptTemplate([("system", "将下面的内容翻译成 {language} "), ("human", "{text}")]
)# 填充模板
result = template.invoke(inputs)
# result结果如下:
# messages = [
#     SystemMessage(content="将下面的内容翻译成 英语", additional_kwargs={}, response_metadata={}),
#     HumanMessage(content="你好,吃了吗?", additional_kwargs={}, response_metadata={}),
# ]

接入大模型

实例化大模型

  • 详情看之前的文档:LangChain接入本地/国产大模型
  • ollama本地大模型
from langchain_ollama import ChatOllama# ollama大模型
llm = ChatOllama(base_url="http://localhost:11434", model="qwen2.5:latest")
  • 兼容OpenAI接口的大模型
from langchain_openai import ChatOpenAI# 兼容OpenAI接口的国产大模型(如:阿里云、火山、腾讯云等)
llm = ChatOpenAI(openai_api_base="各个大平台兼容OpenAI的地址",openai_api_key="xxx-xxx", model_name="模型名称/endpoint等"
)
  • 调用方式
from langchain_ollama import ChatOllama
from langchain_core.messages import HumanMessage# ollama大模型
llm = ChatOllama(base_url="http://localhost:11434", model="qwen2.5:latest")
# 提示词
messages = [HumanMessage(content="你好,吃了吗?")]result = llm.invoke(messages)

主线(模板+大模型)

from langchain_ollama import ChatOllama
from langchain_core.prompts import ChatPromptTemplate# 输入
inputs = {"language": "英语", "text": "你好,吃了吗?"}# 模板
template = ChatPromptTemplate([("system", "将下面的内容翻译成 {language} "), ("human", "{text}")]
)# 大模型
llm = ChatOllama(base_url="http://localhost:11434", model="qwen2.5:latest")# 调用
# result = template.invoke(inputs)
# result = llm.invoke(result)# LangChain写法
chain = template | llm
result = chain.invoke(inputs)

输出转换

输出转换器

  • 转换成特定格式可以更好得进行业务串联
from langchain_core.output_parsers import StrOutputParser, JsonOutputParser
from langchain_core.messages import AIMessage# 模拟大模型返回的文本消息
message = AIMessage(content='{"name": "Alice", "age": 30}')# 字符串输出解析器
str_parser = StrOutputParser()
result = str_parser.invoke(message)
print(type(result))  # <class 'str'>
print(result)  # {"name": "Alice", "age": 30}# Json输出解析器(代码中呈现为字典)
json_parser = JsonOutputParser()
result = json_parser.invoke(message)
print(type(result))  # <class 'dict'>
print(result)  # {'name': 'Alice', 'age': 30}

主线(模板+大模型+输出)

from langchain_ollama import ChatOllama
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser# 输入
inputs = {"language": "英语", "text": "你好,吃了吗?"}# 模板
template = ChatPromptTemplate([("system", "将下面的内容翻译成 {language} "), ("human", "{text}")]
)
# 大模型
llm = ChatOllama(base_url="http://localhost:11434", model="qwen2.5:latest")
# 输出转换器
parser = StrOutputParser()# 调用
# result = template.invoke(inputs)
# result = llm.invoke(result)
# result = parser.invoke(result)# LangChain写法
chain = template | llm | parser
result = chain.invoke(inputs)

其他补充

模板

  • "placeholder"可替换列表
from langchain_core.prompts import ChatPromptTemplatetemplate = ChatPromptTemplate([("system", "你是导游,回答用户提出的问题"), ("placeholder", "{conversation}")]
)inputs = {"conversation": [("human", "福州"),("ai", "福州是一个....."),("human", "什么季节去合适?"),],
}# 填充模板
messages = template.invoke(inputs)
# messages = [
#     SystemMessage(content="你是导游,回答用户提出的问题", additional_kwargs={}, response_metadata={}),
#     HumanMessage(content="福州", additional_kwargs={}, response_metadata={}),
#     AIMessage(content="福州是一个.....", additional_kwargs={}, response_metadata={}),
#     HumanMessage(content="什么季节去合适?", additional_kwargs={}, response_metadata={}),
# ]
  • 多个占位符则使用字典一一对应即可
from langchain_core.prompts import ChatPromptTemplatetemplate = ChatPromptTemplate([("system", "你是{role},回答用户提出的问题"), ("placeholder", "{conversation}")]
)inputs = {"role": "导游","conversation": [("human", "福州"),("ai", "福州是一个....."),("human", "什么季节去合适?"),],
}messages = template.invoke(inputs)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/858432.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Elasticsearch filter context 的实践案例

知识背景 在 ES 查询优化的建议里,很多时候为了避免算分逻辑和利用缓存逻辑,Elastic 会建议大家使用 filter 条件。 filter 的使用条件和原理具体可以参照之前写的博文《Elasticsearch filter context 的使用原理》 这里我们来研究 2 个实用案例,具体的感受一下 filter cont…

产品发展的六阶段

一个成熟的互联网产品从最初的创意到完全成熟,通常需要经历以下几个主要阶段。每个阶段都有特定的目标、核心任务和关键成果,以下是详细的解析。 一、创意阶段 1、创意阶段的核心目标 1.1 识别用户需求 创意阶段的首要任务是发现并明确目标用户的痛点和需求。通过市场调研、…

【unity]学习制作类银河恶魔城游戏-2-

导入新资产切割新资产切割完成修改大小和清晰度球体已经设置了刚体和碰撞体积,直接应用给人物,改名circle为player中心点问题 因为切割的原因,碰撞模型的中心点和人物的中心点不相吻合解决:在子路径下渲染人物图片,将二者的中心点手动对齐手动对齐保存更改更改碰撞体模型运…

DevNow x Notion

DevNow x Notion: DevNow 支持了 Notion 作为其文档系统,可以帮助用户在 Notion 更高效地管理文档,实现文档的集中管理和协作。前言 Notion 应该是目前用户量比较大的一个在线笔记软件,它的文档系统也非常完善,支持多种文档格式,如 Markdown、富文本、表格、公式等。 早期…

平安夜吃苹果

祝大家平安夜快乐 有一棵特殊的苹果树,一连 n 天,每天都可以长出若干个苹果。在第 i 天,树上会长出 apples[i] 个苹果,这些苹果将会在 days[i] 天后(也就是说,第 i + days[i] 天时)腐烂,变得无法食用。也可能有那么几天,树上不会长出新的苹果,此时用 apples[i] == 0 …

基于Three.js的大屏3D地图(一)

依赖安装 yarn add three yarn add @types/three yarn add d3-geothree库安装后在node_modules下其还包含核心three/src和插件three/example/jsm的源码,在开发调试时可以直接查阅。使用Three.js过程中会涉及到许多的类、方法及参数配置,所以建议安装@types/three库;不仅能提…

Java 变量和运算符

Java 变量和运算符1. 变量(Variable)1.1 何为变量 1.2 数据类型(Data Types)1.2.1 整型:byte、short、int、long 1.2.2 浮点类型:float、double 1.2.3 字符类型:char 1.2.4 布尔类型:boolean1.3 变量的使用1.3.1 步骤1:变量的声明 1.3.2 步骤2:变量的赋值1.4. 基本数…

k8s阶段10 k8s指标流水线, 自定义流水线和HPA

1 Kubernetes指标流水线 资源指标Kubernetes有一些依赖于指标数据的组件,例如HPA和VPA等Kubernetes使用Metrics API暴露系统指标给这些组件 #只暴露nodes和pods上的内存,CPU指标该API仅提供CPU和内存相关的指标数据负责支撑Metrics API、生成并提供指标数据的组件,成为核心指标…

目标检测数据集标注工具 CVAT 使用方法【转载】

目标检测数据集标注工具 CVAT 使用方法 原文地址,RSMX-Blog www.cnblogs.com/rsmx/CVAT在线网站(上传下载较慢,数据集较大时不建议使用):https://cvat.org/ CVAT本地部署方法(Linux):https://zhuanlan.zhihu.com/p/388477205官网地址:https://www.cvat.ai/ 1. 使用邮…

浏览器基础知识点(二)

一、浏览器输入一个URL并enter时,发生了什么?用户在浏览器输入一个URL,并按下enter键时,里面包含了非常多的技术细节。 第一,DNS解析: 用户输入的URL通常会是一个域名地址,直接通过域名是无法找到服务器的,因为服务器的本质上是一台拥有IP地址的主机。 需要通过DNS服务…

Gamma阶段——第14周Scrum Meeting记录

Gamma阶段——第14周Scrum Meeting记录 1.目前进度: (1)完成沙盒模式开发,在此基础上加入了笔记,背景音乐,操作说明等辅助功能; (2)完成关卡模式的开发,可以对玩家搭建的电路进行真值表检测; (3)完整游戏系统的整体开发,可以初步实现面向玩家的使用; (4)撰写游…