使用聊天模型和提示模板构建一个简单的 LLM 应用程序

官方教程

官方案例

在上面的链接注册后,请确保设置您的环境变量以开始记录追踪

export LANGSMITH_TRACING="true"
export LANGSMITH_API_KEY="..."

或者,如果在笔记本中,您可以使用以下命令设置它们

import getpass
import osos.environ["LANGSMITH_TRACING"] = "true"
os.environ["LANGSMITH_API_KEY"] = getpass.getpass()

使用语言模型
pip install -qU "langchain[openai]"

import getpass
import osif not os.environ.get("OPENAI_API_KEY"):os.environ["OPENAI_API_KEY"] = getpass.getpass("Enter API key for OpenAI: ")from langchain.chat_models import init_chat_modelmodel = init_chat_model("gpt-4o-mini", model_provider="openai")

让我们首先直接使用模型。ChatModels 是 LangChain Runnables 的实例,这意味着它们公开了一个用于与它们交互的标准接口。要简单地调用模型,我们可以将 消息 列表传递给 .invoke 方法。

from langchain_core.messages import HumanMessage, SystemMessagemessages = [SystemMessage("Translate the following from English into Italian"),HumanMessage("hi!"),
]model.invoke(messages)
AIMessage(content='Ciao!', additional_kwargs={'refusal': None}, response_metadata={'token_usage': {'completion_tokens': 3, 'prompt_tokens': 20, 'total_tokens': 23, 'completion_tokens_details': {'accepted_prediction_tokens': 0, 'audio_tokens': 0, 'reasoning_tokens': 0, 'rejected_prediction_tokens': 0}, 'prompt_tokens_details': {'audio_tokens': 0, 'cached_tokens': 0}}, 'model_name': 'gpt-4o-mini-2024-07-18', 'system_fingerprint': 'fp_0705bf87c0', 'finish_reason': 'stop', 'logprobs': None}, id='run-32654a56-627c-40e1-a141-ad9350bbfd3e-0', usage_metadata={'input_tokens': 20, 'output_tokens': 3, 'total_tokens': 23, 'input_token_details': {'audio': 0, 'cache_read': 0}, 'output_token_details': {'audio': 0, 'reasoning': 0}})

huggingface 模型

因为gpt要花钱,所以换了一个模型
记得获取token

!pip install langchain
!pip install -U langchain-openai
import os
os.environ["HUGGINGFACEHUB_API_TOKEN"] = "hf_rxxxxxxxxxxxxxx"import os
from langchain_huggingface import HuggingFaceEndpoint
# from langchain_community.chat_models import ChatHuggingFace
from langchain_core.messages import HumanMessage, SystemMessage# 设置 Token
os.environ["HF_TOKEN"] = "hf_Xxxxxxxxxxxx"# 模型 ID(使用 HuggingFace 上公开的模型)
repo_id = "HuggingFaceH4/zephyr-7b-beta"# 初始化 LLM
llm = HuggingFaceEndpoint(repo_id=repo_id,max_new_tokens=512,top_k=10,top_p=0.95,typical_p=0.95,temperature=0.01,repetition_penalty=1.03,huggingfacehub_api_token=os.environ["HF_TOKEN"]
)# 封装成聊天模型
# chat_model = ChatHuggingFace(llm=llm)# 构造消息
messages = [SystemMessage(content="Translate the following from English into Chinese"),HumanMessage(content="hi!")
]# 调用模型
response = llm.invoke(messages)
print(response)

选择一个公开可访问的替代模型,例如:

HuggingFaceH4/zephyr-7b-beta ✅ 公开 
mistralai/Mistral-7B-v0.1 ❌ 受限 
tiiuae/falcon-7b ✅ 公开 
google/gemma-7b ✅ 公开

在这里插入图片描述

# 1. 导入必要的模块
from langchain_huggingface import ChatHuggingFace, HuggingFaceEndpoint
# HuggingFaceEndpoint是一个 LangChain 封装的类,用于连接 Hugging Face 的推理 API(也就是调用远程模型)。
# ChatHuggingFace:将 LLM 包装成“聊天模型”的适配器。它支持像 messages = [SystemMessage(), HumanMessage()] 这样的对话格式。
from langchain_core.messages import HumanMessage, SystemMessage
# SystemMessage:系统提示词,告诉模型应该做什么(如翻译、写诗等)。
# HumanMessage:用户输入的内容。
# 还有 AIMessage 是模型输出)# 2. 创建 LLM 实例,创建了一个指向 Hugging Face 模型的客户端对象
llm = HuggingFaceEndpoint(endpoint_url="https://api-inference.huggingface.co/models/HuggingFaceH4/zephyr-7b-beta", # 要调用的模型地址(即 API 地址)huggingfacehub_api_token="hf_Xopuxxxxxxxxxxxxxxx",  # 替换为你的 tokentemperature=0.7, # 控制生成文本的随机性(越高越随机)max_new_tokens=512, # 最多生成多少个新 token(控制输出长度)top_k=50,top_p=0.95,repetition_penalty=1.03 # 防止重复输出相同内容
)# 3. 用 ChatHuggingFace 封装成聊天模型
chat_model = ChatHuggingFace(llm=llm) # 这一步把原始的 LLM 封装成一个“聊天模型”,这样就可以使用类似 GPT 的接口(例如传入多个角色消息)。# 4. 构造对话消息
messages = [SystemMessage(content="Translate the following from English into Italian"),HumanMessage(content="hi!")
]# 调用模型
response = chat_model.invoke(messages)
print(response.content)

在这里插入图片描述

有的时候,import错误、不兼容,也会报错,例如

import os
from langchain_huggingface import HuggingFaceEndpoint
from langchain_community.llms import HuggingFaceEndpoint # 这里重复引用,会引发错误
from langchain_community.chat_models import ChatHuggingFace # 这里新旧版本不兼容
# from langchain_huggingface import ChatHuggingFace, HuggingFaceEndpoint 正确的
from langchain_core.messages import HumanMessage, SystemMessage# 设置 Token
os.environ["HF_TOKEN"] = "hf_XXXXXXXXXXXXXXXX"# 使用公开可访问的模型
repo_id = "HuggingFaceH4/zephyr-7b-beta"  # 替换为你想用的公开模型llm = HuggingFaceEndpoint(repo_id=repo_id,max_new_tokens=512,top_k=10,top_p=0.95,typical_p=0.95,temperature=0.01,repetition_penalty=1.03,huggingfacehub_api_token=os.environ["HF_TOKEN"]
)# 封装成聊天模型
chat_model = ChatHuggingFace(llm=llm)# 构造消息
messages = [SystemMessage(content="Translate the following from English into Italian"),HumanMessage(content="hi!")
]# 调用模型
response = chat_model.invoke(messages)
print(response.content)

你使用了 langchain_community.chat_models.ChatHuggingFace,但是它只接受 langchain_community.llms 中的 LLM 实例(比如旧的 HuggingFaceEndpoint),而你现在用的是新的 langchain_huggingface 中的 HuggingFaceEndpoint,所以 类型不兼容。

其他token方法:

from huggingface_hub import login
login(token="hf_XXXXXXXXXXXXXXXX") #这里替换为自己的API Token

或者:

!huggingface-cli login

其他参数

  • repo_id: 这是模型在 Hugging Face Hub 上的唯一标识符。它通常由用户名(或组织名)和模型名组成,例如 “microsoft/Phi-3-mini-4k-instruct”。这种方式更适合于本地运行或者通过 Hugging Face Inference API 直接访问公开模型。
  • task: 指定你想要执行的任务类型,比如 “text-generation”、“translation” 等等。
  • endpoint_url: 这是指向 Hugging Face Inference API 的具体URL,用于直接调用远程部署的模型服务。例如 “https://api-inference.huggingface.co/models/HuggingFaceH4/zephyr-7b-beta”。
场景是否需要 API Token
使用 repo_id 加载公开模型不需要
使用 repo_id 加载私有或受限模型需要
使用 endpoint_url 访问 Hugging Face Inference API大多数情况下需要

你可以从 Hugging Face 设置页面 获取或生成新的API token。

如何扩展

✅ 1. 换一个模型(只需修改 endpoint_url

你可以访问 Hugging Face 上任意公开模型页面,复制它的推理地址。

🔁 示例:换成 TinyLlama/TinyLlama-1.1B-Chat-v1.0

这个模型很小,速度快,适合测试。

llm = HuggingFaceEndpoint(endpoint_url="https://api-inference.huggingface.co/models/TinyLlama/TinyLlama-1.1B-Chat-v1.0",huggingfacehub_api_token="你的token",temperature=0.7,max_new_tokens=512
)
🔁 示例:换成中文模型 Qwen/Qwen2-0.5B-Instruct

如果你想要中文模型:

llm = HuggingFaceEndpoint(endpoint_url="https://api-inference.huggingface.co/models/Qwen/Qwen2-0.5B-Instruct",huggingfacehub_api_token="你的token",temperature=0.7,max_new_tokens=512
)

⚠️ 注意:有些模型需要申请权限才能使用(会报错 GatedRepoError),请前往对应模型页面点击 “Request Access”。


✅ 2. 改变任务(只需修改 SystemMessage

比如你想让模型写一首诗:

messages = [SystemMessage(content="You are a poet. Write a short poem about the moon in Chinese."),HumanMessage(content="Please write a poem.")
]

或者你想让它做 QA:

messages = [SystemMessage(content="Answer the question briefly and accurately."),HumanMessage(content="What is the capital of France?")
]

📌 三、推荐常用公开模型(可直接替换)

模型名称描述是否需要申请
HuggingFaceH4/zephyr-7b-beta英文聊天模型❌ 不需要
TinyLlama/TinyLlama-1.1B-Chat-v1.0很小的英文聊天模型❌ 不需要
Qwen/Qwen2-0.5B-Instruct阿里通义千问系列,中文友好❌ 不需要
google/gemma-7b-itGoogle 推出的指令微调模型❌ 不需要
mistralai/Mistral-7B-Instruct-v0.2Mistral 系列指令模型✅ 需要申请

📝 总结

功能修改位置示例
换模型修改 endpoint_urlhttps://api-inference.huggingface.co/models/用户名/模型名
控制输出修改参数temperature=0.1, max_new_tokens=256
更换任务修改 SystemMessageHumanMessage 内容“你是谁?”、“帮我翻译”、“写一篇作文”等
使用中文模型选择支持中文的模型Qwen2-0.5B-Instruct

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

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

相关文章

React vs Vue:点击外部事件处理的对比与实现

React vs Vue:点击外部事件处理的对比与实现 在 Web 应用中,“点击外部事件监听”是一种常见需求,典型应用如:点击弹窗外部关闭弹窗、点击下拉菜单外关闭菜单。虽然在 React 和 Vue 中实现的原理类似——都是通过监听 document 的…

3335. 字符串转换后的长度 I

3335. 字符串转换后的长度 I class Solution:def lengthAfterTransformations(self, s: str, t: int) -> int:# 大质数mod 10**97# 创建一个长度为26的数组cnt,对应26个小写字母cnt [0]*26# 计算出s中26个字符分别有多少个for ch in s:cnt[ord(ch)-ord(a)] 1f…

Java详解LeetCode 热题 100(15):LeetCode 189. 轮转数组(Rotate Array)详解

文章目录 1. 题目描述2. 理解题目3. 解法一:使用额外数组3.1 思路3.2 Java代码实现3.3 代码详解3.4 复杂度分析3.5 适用场景 4. 解法二:环状替换法(原地算法)4.1 思路4.2 Java代码实现4.3 代码详解4.4 复杂度分析4.5 陷阱与注意事…

数据治理域——日志数据采集设计

摘要 本文主要介绍了Web页面端日志采集的设计。首先阐述了页面浏览日志采集,包括客户端日志采集的实现方式、采集内容及技术亮点。接着介绍了无线客户端端日志采集,包括UserTrack的核心设计、移动端与浏览器端采集差异以及典型应用场景崩溃分析。最后探…

PYTHON训练营DAY24

# SO代码我们的感情好像跳楼机 # 元组创建时,可以省略括号:my_tuple4 10, 20, thirty # 字符串要加“ ” 元组 一、创建 my_tuple1 (1, 2, 3) my_tuple2 (a, b, c) my_tuple3 (1, hello, 3.14, [4, 5]) # 可以包含不同类型的元素 print(my_tupl…

超声波传感器模块

欢迎来到 破晓的历程的 博客 ⛺️不负时光,不负己✈️ 文章目录 1.HC-SR04介绍2.HC-SR04原理介绍2.1原理概述3.2原理详解 4驱动代码编写4.1写前思考4.2硬件连线 5.总结hcsr04.hhcsr04.c 1.HC-SR04介绍 超声波传感器有很多种类的型号:HC-SR04、UC-025、…

《Effective Python》第2章 字符串和切片操作——深入理解Python 中的字符数据类型(bytes 与 str)的差异

引言 本篇博客基于学习《Effective Python》第三版 Chapter 2: Strings and Slicing 中的 Item 10: Know the Differences Between bytes and str 的总结与延伸。在 Python 编程中,字符串处理是几乎每个开发者都会频繁接触的基础操作。然而,Python 中的…

py7zr解压文件时报错CrcError(crc32, f.crc32, f.filename)

报错信息 Traceback (most recent call last):File "/home/hp/project/test/file_util.py", line 130, in extract_archive_7zarchive.extract(targets[fixed_file], pathoutput_dir, recursiveTrue)File "/home/hp/miniconda3/envs/celery/lib/python3.10/sit…

物理:由基本粒子组成的个体能否提炼和重组?

个体差异源于基本粒子组合的复杂性与随机性,这一假设若成立,确实可能为生物医学带来革命性突破——但需要突破技术、理论与系统层级的多重壁垒。以下从科学逻辑与技术路径展开分析: 一、随机组合中的共性与稳定结构 1. 自然界的自组织规律 涌现性(Emergence):尽管粒子组…

动态路由EIGRP的配置

动态路由EIGRP的配置 动态路由EIGRP:增强内部网关协议 为何收敛快、不成环? 路由计算的无环路和路由的收敛速度是路由计算的重要指标。EIGRP协议由于使用了DUAL算法,使得EIGRP协议在路由计算中不可能有环路路由产生,同时路由计…

组合问题(多条件)

39. 组合总和 - 力扣&#xff08;LeetCode&#xff09; class Solution { private:vector<vector<int>>result;vector<int>path;void backtracking(vector<int>& candidates, int target,int sum,int startIndex){if(sum>target){return;}if(…

SimScape物理建模实例2--带控制的单质量弹簧阻尼系统

模型下载&#xff1a; 基于simscape&#xff0c;单质量系统带位置控制资源-CSDN文库 在实例1中&#xff0c;我们搭建了不带控制的单质量弹簧阻尼系统&#xff0c;该系统没有外界力量介入&#xff0c;只有弹簧的初始弹力&#xff0c;带着弹簧使劲弹来弹去。 SimScape物理建模实…

OpenAI Text 模型与 Chat 模型调用实战指南:从基础配置到创意花店命名

在 AI 应用开发的浪潮中&#xff0c;OpenAI 的大语言模型成为开发者实现创新功能的得力工具。其中&#xff0c;Text 模型和 Chat 模型作为核心接口&#xff0c;被广泛应用于文本生成、对话交互等场景。本文将以 “为花店起名” 为实际需求&#xff0c;手把手教你如何安全调用这…

网页常见水印实现方式

文章目录 1 明水印技术实现1.1 DOM覆盖方案1.2 Canvas动态渲染1.3 CSS伪元素方案2 暗水印技术解析2.1 空域LSB算法2.2 频域傅里叶变换3 防篡改机制设计3.1 MutationObserver防护3.2 Canvas指纹追踪4 前后端实现对比5 攻防博弈深度分析5.1 常见破解手段5.2 进阶防御策略6 选型近…

现代化QML组件开发教程

现代化QML组件开发教程 目录 QML基础介绍QML项目结构基本组件详解自定义组件开发状态与过渡高级主题最佳实践 QML基础介绍 什么是QML QML (Qt Meta Language) 是一种声明式语言&#xff0c;专为用户界面设计而创建。它是Qt框架的一部分&#xff0c;让开发者能够创建流畅、…

C/C++ 程序执行的主要过程

预处理&#xff08;Preprocessing&#xff09; 任务&#xff1a; 处理源代码中以 # 开头的预处理指令&#xff0c;包括&#xff1a; 头文件包含&#xff08;#include&#xff09;&#xff1a;将头文件&#xff08;如 stdio.h&#xff09;的内容直接插入到源文件中。宏替换&…

时间序列预测建模的完整流程以及数据分析【学习记录】

文章目录 1.时间序列建模的完整流程2. 模型选取的和数据集2.1.ARIMA模型2.2.数据集介绍 3.时间序列建模3.1.数据获取3.2.处理数据中的异常值3.2.1.Nan值3.2.2.异常值的检测和处理&#xff08;Z-Score方法&#xff09; 3.3.离散度3.4.Z-Score3.4.1.概述3.4.2.公式3.4.3.Z-Score与…

ValueError: Caught ValueError in DataLoader worker process 0.

参考链接&#xff1a; https://stackoverflow.com/questions/1841565/valueerror-invalid-literal-for-int-with-base-10 它提示我有个地方值错误空字符 果然因为格式处理没有传进去东西&#xff0c;找下原因&#xff0c;让它正常处理 原来是相对路径的.影响了程序运行 将v…

JavaScript性能优化实战,从理论到落地的全面指南

在前端开发领域&#xff0c;JavaScript的性能优化是提升用户体验的核心环节。随着Web应用复杂度的提升&#xff0c;开发者面临的性能瓶颈也日益多样化。本文将从理论分析、代码实践和工具使用三个维度&#xff0c;系统性地讲解JavaScript性能优化的实战技巧&#xff0c;并通过大…

SQL、Oracle 和 SQL Server 的比较与分析

SQL、Oracle 和 SQL Server 的比较与分析 一、基础概念 1. SQL (Structured Query Language) 定义&#xff1a;结构化查询语言&#xff0c;用于管理关系型数据库的标准语言类型&#xff1a; DDL (数据定义语言)&#xff1a;CREATE, ALTER, DROPDML (数据操作语言)&#xff1…