llm學習-4(llm和langchain)

langchain說明文檔:langchain 0.2.6 — 🦜🔗 langChain 0.2.6icon-default.png?t=N7T8https://api.python.langchain.com/en/latest/langchain_api_reference.html#module-langchain.chat_models


1:模型

(1)自定義模型導入:

'''
在自定義llm里面接入langchain
'''
from wenxin_llm import Wenxin_LLM
from dotenv import find_dotenv, load_dotenv
import os# 讀取本地/項目的環境變量
# find_dotenv()尋找并定位.env文件的路徑
# load_dotenv()讀取該.env文件,并將其中的環境變量加載到當前的運行環境中
load_dotenv(find_dotenv())# 獲取環境變量 API_KEY
wenxin_api_key = os.environ["QIANFAN_AK"]
wenxin_secret_key = os.environ["QIANFAN_SK"]
llm = Wenxin_LLM(api_key=wenxin_api_key, secret_key=wenxin_secret_key, system="你是一個nlp領域的學者!")
output = llm.invoke("你好,請問你是誰?")
print('outpu_1:', output)

(2)langchain直接導入:

'''
langchain直接調用文心一言模型
'''
from dotenv import find_dotenv, load_dotenv
import os
load_dotenv(find_dotenv())
QIANFAN_AK = os.environ["QIANFAN_AK"]
QIANFAN_SK = os.environ["QIANFAN_SK"]# # Install required dependencies
# %pip install -qU langchain langchain-communityfrom langchain_community.llms import QianfanLLMEndpoint
llm = QianfanLLMEndpoint(streaming=True)
res = llm("你好,請你自我介紹一下!")
print(res)

2:prompt模板

我們知道聊天模型的接口是基于消息(message),而不是原始的文本。PromptTemplates 也可以用于產生消息列表,在這種樣例中,prompt不僅包含了輸入內容信息,也包含了每條message的信息(角色、在列表中的位置等)。通常情況下,一個?ChatPromptTemplate?是一個?ChatMessageTemplate?的列表。每個?ChatMessageTemplate?包含格式化該聊天消息的說明(其角色以及內容)。

'''
prompt模板
'''
from langchain.prompts.chat import ChatPromptTemplate
template = "你是一個翻譯助手,可以幫助我將 {input_language} 翻譯成 {output_language}."
human_template = "{text}"
chat_prompt = ChatPromptTemplate.from_messages([("system", template),("human", human_template),
])text = "我帶著比身體重的行李,\
游入尼羅河底,\
經過幾道閃電 看到一堆光圈,\
不確定是不是這里。\
"
messages  = chat_prompt.format_messages(input_language="中文", output_language="英文", text=text)
print('messages:', messages)
output  = llm.invoke(messages)
print('output:', output)# from langchain_core.prompts import ChatPromptTemplate# # 這里我們要求模型對給定文本進行中文翻譯
# text = "我帶著比身體重的行李,\
# 游入尼羅河底,\
# 經過幾道閃電 看到一堆光圈,\
# 不確定是不是這里。\
# "
# prompt = """請你將由三個反引號包括的文本翻譯成英文!\
# text: ```{text}```
# """# prompt.format(text=text)

3:輸出解析器(Output parser)

OutputParsers 將語言模型的原始輸出轉換為可以在下游使用的格式。 OutputParsers 有幾種主要類型,包括:

  • 將 LLM 文本轉換為結構化信息(例如 JSON)
  • 將 ChatMessage 轉換為字符串
  • 將除消息之外的調用返回的額外信息(如 OpenAI 函數調用)轉換為字符串

最后,我們將模型輸出傳遞給?output_parser,它是一個?BaseOutputParser,這意味著它接受字符串或 BaseMessage 作為輸入。 StrOutputParser 特別簡單地將任何輸入轉換為字符串。

'''
輸出解析器
'''
from langchain_core.output_parsers import StrOutputParseroutput_parser = StrOutputParser()
out = output_parser.invoke(output)
print('out:', out)

4:形成完成流程鏈(Chain)

我們現在可以將所有這些組合成一條鏈。該鏈將獲取輸入變量,將這些變量傳遞給提示模板以創建提示,將提示傳遞給語言模型,然后通過(可選)輸出解析器傳遞輸出。

(1):使用LLMChain制作鏈

'''
使用LLChain做鏈
'''
from langchain.chains import LLMChain
chain = LLMChain(prompt=chat_prompt,llm=llm,output_parser=output_parser
)
# 運行鏈
out = chain.run(input_language="中文", output_language="英文", text=text)
print('out_chain:', out)

(2):使用管道操作符(|

?接下來我們將使用LCEL(LCEL 起步 | 🦜?🔗 Langchain)這種語法去快速實現一條鏈(chain)。

'''
使用管道操作符(|)制作鏈
'''
chain = chat_prompt | llm | output_parser
out = chain.invoke({"input_language":"中文", "output_language":"英文","text": text})
print('out_管道:', out)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/41172.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/41172.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/41172.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

跟《經濟學人》學英文:2024年07月06日這期 Amazon turns 30

As Amazon turns 30, three factors will define its next decade It will have to deal with trustbusters, catch up on AI and revive its core business 它將不得不應對反壟斷者,追趕人工智能并重振其核心業務 trustbuster: 美 [?tr?s(t)?b?s…

Java中的算法優化與復雜度分析

Java中的算法優化與復雜度分析 大家好,我是免費搭建查券返利機器人省錢賺傭金就用微賺淘客系統3.0的小編,也是冬天不穿秋褲,天冷也要風度的程序猿! 在軟件開發中,算法的效率直接影響到程序的性能和響應速度。算法優化…

你真的會ELISA加樣嗎?

在ELISA實驗中,研究人員需要進行多次加樣步驟完成實驗操作。對于常規雙抗體夾心法ELISA,一般有如下加樣步聚,即加樣本、加檢測抗體、加酶結合物、加底物(最后加終止液停止反應)。 加樣步驟基礎知識 加樣步驟中一般使用…

云倉酒莊北京公司2024年:深耕酒業生態,以專業筑基

云倉酒莊北京公司:深耕酒業生態,以專業筑基,共繪酒業新藍圖 在競爭日益激烈的酒類市場中,云倉酒莊北京公司以其穩健的步伐、專業底蘊以及對品質的不懈追求,正逐步成為行業內一股不可忽視的力量。這家公司不僅僅是一個…

高級java每日一道面試題-2024年7月5日

題目: 請描述 Java 中接口和抽象類的區別,并說明什么時候應該使用接口,什么時候應該使用抽象類。 解答: 接口和抽象類都是 Java 中用于實現面向對象編程的重要概念,但它們在功能和用法上有一些區別: 1.…

把Windows打造成一個NTP網絡時間服務器,為網關提供校時服務

把Windows打造成一個NTP網絡時間服務器,為網關提供校時服務。主要目的是為了解決:當網關不能上外網的時候,可以使用局域網的電腦來當做NTP服務器,實現校時功能。 跟著小編來看,如何使用NTP網絡時間服務器來同步時間。 …

Laravel為什么會成為最優雅的PHP框架?

引言 在現代Web開發中,選擇一個合適的框架是構建高效、可靠和可維護應用的關鍵。從簡單的博客到復雜的企業級應用,PHP框架一直在不斷演變和進步。其中,Laravel作為一個相對較新的框架,自2011年首次發布以來,迅速崛起并…

ubuntu關于docker部署 項目一站式教程

**假設已有ubuntu服務器并且登錄root賬號 ** **FinalShell中復制快捷鍵是 ****Ctrl+Shift+V** 卸載老版本docker sudo apt-get remove docker docker-engine docker.io containerd runc安裝docker步驟 更新軟件包sudo apt update sudo apt upgrade安裝docker依賴sudo apt-get …

監控工具 Prometheus

監控工具 Prometheus Prometheus 是一個開源的監控解決方案,它能夠收集、存儲和查詢指標數據,并提供了強大的報警和可視化功能。Prometheus 適用于監控云原生應用程序和基礎設施,是 Kubernetes 生態系統中常用的監控工具之一。 1. Promethe…

Yarn有哪些功能特點

Yarn是一個由Facebook團隊開發,并聯合Google、Exponent和Tilde等公司推出的JavaScript包管理工具,旨在提供更優的包管理體驗,解決npm(Node Package Manager)的一些痛點。Yarn的功能特點主要包括以下幾個方面&#xff1…

分享 10個簡單實用的 JS 代碼技巧

代碼圖片生成工具:有碼高清 一、滾動到頁面頂部 我們可以使用 window.scrollTo() 平滑滾動到頁面頂部。 源碼: const scrollToTop () > {window.scrollTo({ top: 0, left: 0, behavior: "smooth" }); };二、滾動到頁面底部 當然&…

漢王、繪王簽字版調用封裝

說明 需要配合漢王或繪王簽字版驅動以及對應的sdk服務使用 constants.js //漢王、繪王sdk websocket連接地址 export const WS_URLS {1:ws://127.0.0.1:29999, //漢王2:ws://127.0.0.1:7181, }export const COMMAND1 {1: {HWPenSign: "HWStartSign",nLogo: "…

探索大型語言模型自動評估 LLM 輸出長句準確性的方法

LLM現在能夠自動評估較長文本中的事實真實性 源碼地址:https://github.com/google-deepmind/long-form-factuality 論文地址:https://arxiv.org/pdf/2403.18802.pdf 這篇論文是關于谷歌DeepMind的,提出了新的數據集、評估方法和衡量標準&am…

vue2+element-ui新增編輯表格+刪除行

實現效果&#xff1a; 代碼實現 &#xff1a; <el-table :data"dataForm.updateData"border:header-cell-style"{text-align:center}":cell-style"{text-align:center}"><el-table-column label"選項字段"align"center&…

Linux 內核 GPIO 用戶空間接口

文章目錄 Linux 內核 GPIO 接口舊版本方式&#xff1a;sysfs 接口新版本方式&#xff1a;chardev 接口 gpiod 庫及其命令行gpiod 庫的命令行gpiod 庫函數的應用 GPIO&#xff08;General Purpose Input/Output&#xff0c;通用輸入/輸出接口&#xff09;&#xff0c;是微控制器…

MAX()和ROW_NUMBER()函數的對比

SQL 查詢中,使用 MAX() 函數和使用窗口函數 ROW_NUMBER() 都可以實現獲取每個分組中某個列的最大值,但它們的實現方式和性能表現有所不同。以下是兩者的區別和性能對比: 使用 MAX() 函數 SELECTMAX(d.times) FROMv_y d WHEREd.id = a.idAND d.name = a.nameAND d.age = a.…

交換機需要多大 buffer(續:更一般的原理)

前面用 aimd 系統分析了交換機 buffer 需求量隨流數量增加而減少&#xff0c;今天從更一般的角度繼續分析這事。 將交換機建模為一個 m/m/1 排隊系統&#xff0c;多流場景下它就會變成一個 m/g/1 排隊系統&#xff0c;而這事比前面的 aimd 系統分析更容易推導。 m/m/1 系統中…

哪里還可以申請免費一年期的SSL證書?

目前&#xff0c;要申請免費一年期的SSL證書&#xff0c;選項較為有限&#xff0c;因為多數供應商已轉向提供短期的免費證書&#xff0c;通常有效期為90天。不過&#xff0c;有一個例外是JoySSL&#xff0c;它仍然提供一年期的免費SSL證書&#xff0c;但是只針對教育版和政務版…

halcon學習

halcon列程詳細介紹-V1.3 從文件夾中遍歷圖片(用到的算子及實例) 1)list_files(::Directory,Options:Files) 功能:列出目錄中的所有文件 參數列表: 第1個參數Directory為輸入變量,需要列出的目錄名字,即輸入目錄地址; 第2個參數Options為輸入變量,默認值為files,建…

html三級菜單

示例 <!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <meta name"viewport" content"widthdevice-width, initial-scale1.0"> <title>Menu Example</title> <link re…