使用聊天模型和提示模板構建一個簡單的 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.pswp.cn/pingmian/80652.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/80652.shtml
英文地址,請注明出處:http://en.pswp.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…