langchain--1--prompt、output格式、LCEL示例

環境:本地使用ollama部署的deepseek-r1:1.5b模型

本文示例包含:

  • [1] 非LCEL的調用方法
  • [2] LCEL的調用方法
  • [3] prompt template的簡單使用,除了PromptTemplate模板,還有一些其它模板,可去查看官網
  • [4] 輸出:json格式、pydantic對象、字符串格式[一次輸出]、字符串格式[流式輸出]。除了這些還有其它的輸出方式比如xml等,可去官網查看

示例代碼:

from pydantic import BaseModel, Field
from langchain_community.llms import Ollama
from langchain.prompts import PromptTemplate
from langchain.schema.runnable import RunnablePassthroughclass Add(BaseModel):a: int = Field(description="第一個整數")b: int = Field(description="第二個整數")result: int = Field(description="兩個整數的求和結果")# 初始化LLM
llm = Ollama(model="deepseek-r1:1.5b",base_url="http://localhost:11434",temperature=0
)# 1 非LCEL 輸出json
print("============1 非LCEL 輸出json===========")
from langchain_core.output_parsers import JsonOutputParser
json_parser = JsonOutputParser(pydantic_object=Add)
prompt_template = PromptTemplate(template="計算兩個整數的和。\n用戶輸入:{query}\n{format_instructions}",input_variables=["query"],partial_variables={"format_instructions": json_parser.get_format_instructions()}
)
query = "5 加 3 等于幾"
prompt = prompt_template.format_prompt(query=query)
output = llm.invoke(prompt)
print(json_parser.invoke(output))# 2 非LCEL 輸出pydantic對象
print("============2 非LCEL 輸出pydantic對象===========")
from langchain_core.output_parsers import  PydanticOutputParser
pydantic_parser = PydanticOutputParser(pydantic_object=Add)
prompt_template = PromptTemplate(template="計算兩個整數的和。\n用戶輸入:{query}\n{format_instructions}",input_variables=["query"],partial_variables={"format_instructions": pydantic_parser.get_format_instructions()}
)
query = "5 加 3 等于幾"
prompt = prompt_template.format_prompt(query=query)
output = llm.invoke(prompt)
res = pydantic_parser.invoke(output)
print(res, "|", res.a, res.b, res.result)# 3 LCEL 字符串流式輸出 帶有json字符串
print("============3 LCEL 字符串流式輸出 帶有json字符串===========")
from langchain.schema.output_parser import StrOutputParser
from langchain_core.output_parsers import JsonOutputParser
json_parser = JsonOutputParser(pydantic_object=Add)
prompt_template = PromptTemplate(template="計算兩個整數的和。\n用戶輸入:{query}\n{format_instructions}",input_variables=["query"],partial_variables={"format_instructions": json_parser.get_format_instructions()}
)
chain = {"query": RunnablePassthrough()} | prompt_template | llm | StrOutputParser()
for chunk in chain.stream("5 加 3 等于幾"):print(chunk, end="")
# output = chain.invoke("5 加 3 等于幾")
# print(output)# 4 LCEL 字符串流式輸出 不帶有json字符串
print("============4 LCEL 字符串流式輸出 不帶有json字符串===========")
from langchain.schema.output_parser import StrOutputParser
prompt_template = PromptTemplate(template="計算兩個整數的和。\n用戶輸入:{query}\n",input_variables=["query"],
)
chain = {"query": RunnablePassthrough()} | prompt_template | llm | StrOutputParser()
for chunk in chain.stream("5 加 3 等于幾"):print(chunk, end="")
print() # 為了流式輸出完后換行而已
# output = chain.invoke("5 加 3 等于幾")
# print(output)# 5 LCEL 輸出json
print("============5 LCEL 輸出json===========")
from langchain_core.output_parsers import JsonOutputParser
json_parser = JsonOutputParser(pydantic_object=Add)
prompt_template = PromptTemplate(template="計算兩個整數的和。\n用戶輸入:{query}\n{format_instructions}",input_variables=["query"],partial_variables={"format_instructions": json_parser.get_format_instructions()}
)
chain = {"query": RunnablePassthrough()} | prompt_template | llm | json_parser
output = chain.invoke("5 加 3 等于幾")
print(output)# 6 LCEL 輸出pydantic對象
print("============6 LCEL 輸出pydantic對象===========")
from langchain_core.output_parsers import  PydanticOutputParser
pydantic_parser = PydanticOutputParser(pydantic_object=Add)
prompt_template = PromptTemplate(template="計算兩個整數的和。\n用戶輸入:{query}\n{format_instructions}",input_variables=["query"],partial_variables={"format_instructions": pydantic_parser.get_format_instructions()}
)
chain = {"query": RunnablePassthrough()} | prompt_template | llm | pydantic_parser
output = chain.invoke("5 加 3 等于幾")
print(output, "|", output.a, output.b, output.result)

結果輸出:

============1 非LCEL 輸出json===========
{'a': 5, 'b': 3, 'result': 8}
============2 非LCEL 輸出pydantic對象===========
a=5 b=3 result=8 | 5 3 8
============3 LCEL 字符串流式輸出 帶有json字符串===========
<think>
嗯,用戶讓我計算兩個整數的和。輸入是5加3等于幾。首先,我需要確認這兩個數字是否正確輸入了。看起來沒問題,都是整數。接下來,我要按照用戶的要求,生成一個JSON對象,并且確保它符合指定的格式。根據輸出 schema,我需要定義三個屬性:a、b和result。每個屬性都有特定的描述和類型。對于a,應該是第一個整數5;b是第二個整數3;result則是它們的和8。這樣填寫的話,整個結構就完整了。然后,我要檢查一下JSON格式是否正確。確保逗號的位置沒有錯誤,特別是分隔符部分。同時,每個屬性的名稱也必須準確無誤地對應到輸入中的變量名。最后,確認輸出結果是否符合要求,比如類型是否都是整數,以及結構是否正確。這樣用戶就能得到一個正確的JSON對象作為輸出了。
</think>要計算兩個整數的和,請按照以下步驟操作:1. 輸入第一個整數:5
2. 輸入第二個整數:3
3. 計算它們的和:5 + 3 = 8根據要求,生成的JSON對象應如下:```json
{"a": 5,"b": 3,"result": 8
}
```請將上述內容作為輸出。============4 LCEL 字符串流式輸出 不帶有json字符串===========
<think>
首先,我需要明確用戶的要求。用戶希望計算兩個整數的和,并且提供一個簡短的輸出。接下來,我會將輸入的兩個整數分別提取出來。這里給出的是5和3。然后,我會進行加法運算:5加上3等于8。最后,我會將結果以清晰的方式呈現給用戶。
</think>要計算兩個整數的和,按照以下步驟進行:1. **輸入兩個整數**:- 輸入的第一個整數是 \( 5 \)- 輸入的第二個整數是 \( 3 \)2. **進行加法運算**:\[5 + 3 = 8\]3. **輸出結果**:\boxed{8}
============5 LCEL 輸出json===========
{'a': 5, 'b': 3, 'result': 8}
============6 LCEL 輸出pydantic對象===========
a=5 b=3 result=8 | 5 3 8Process finished with exit code 0

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

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

相關文章

【算法】指數滑動濾波器

指數滑動濾波器作用原理特點公式代碼優化升級作用 首先這個濾波器能夠將一些突變的信號對系統的影響降低&#xff0c;能夠平滑輸入信號&#xff0c;濾除噪聲&#xff0c;減少測量數據的瞬間波動和干擾&#xff0c;就是實現輸入信號不能不變&#xff0c;數值不會突然變大&#…

STM32F4—電源管理器

Power supply schemesPower supply supervisorInternal reset ON有PDR_ON pin的MCU&#xff0c;PDR_ON pin被拉高的時候電源監視器被使能。沒有PDR_ON pin的MCU默認一直使能。內部集成了power-on reset (POR) / power-down reset (PDR)POR&#xff08;上電復位&#xff09;&…

MySQL鎖的分類 MVCC和S/X鎖的互補關系

各位看官&#xff0c;大家早安午安晚安呀~~~如果您覺得這篇文章對您有幫助的話歡迎您一鍵三連&#xff0c;小編盡全力做到更好 歡迎您分享給更多人哦今天我們來學習&#xff1a;MySQL鎖的分類 && MVCC和S/X鎖的互補關系1.鎖分類1.按鎖粒度分類&#xff1a;全局鎖&#…

第五屆智能通信與計算國際學術會議(ICICC 2025)

重要信息 官網&#xff1a;www.ic-icc.org 時間&#xff1a;2025年8月15-16日 地點&#xff1a;中國 南京 第五屆智能通信與計算國際學術會議(ICICC 2025&#xff09;定于2025年8月15-16日在中國 南京舉行。隨著信息技術的飛速發展&#xff0c;智能通信與計算領域的研究與…

基于C#和NModbus4庫實現的Modbus RTU串口通信

基于C#和NModbus4庫實現的Modbus RTU串口通信&#xff0c;包含完整的界面設計和功能實現&#xff1a;一、項目依賴配置NuGet包安裝&#xff1a; Install-Package NModbus4 Install-Package System.IO.Ports窗體控件布局&#xff1a; <!-- 基礎控件配置 --> <ComboBox …

想要批量提取視頻背景音樂?FFmpeg 和轉換器都安排上

你是否遇到過這樣的情況&#xff1f;看到一個超贊的短視頻&#xff0c;里面的背景音樂特別好聽&#xff0c;想單獨保存下來當手機鈴聲或收藏&#xff0c;卻不知道怎么把音樂從視頻里“摳”出來&#xff1f;別擔心&#xff01;今天就為大家分享兩種簡單易行的方法&#xff0c;無…

為什么MCP協議是AI集成的未來API

一、企業AI應用的核心挑戰與架構演進 當前企業AI落地面臨三大核心痛點&#xff1a; ??系統集成困境??&#xff1a;需對接企業內部業務系統&#xff08;CRM/ERP等&#xff09;??異構環境兼容??&#xff1a;需整合第三方AI服務與傳統API??數據孤島突破??&#xff1…

Apache Tomcat樣例目錄session操縱漏洞解讀

【漏洞名稱】&#xff1a;Apache Tomcat樣例目錄session操縱漏洞 &#xff08;Apache Tomcat示例目錄漏洞&#xff09;【漏洞等級】&#xff1a;中危&#xff0c;5.9分。【漏洞描述】Apache Tomcat默認安裝頁面中存在examples樣例目錄&#xff0c;里面存放著Servlets、JSP、Web…

Go語言實戰案例:實現HTTP客戶端請求并解析響應

本文是 Go 網絡與并發實戰系列的第2篇&#xff0c;聚焦于如何使用 Go 實現一個 HTTP 客戶端&#xff0c;完成請求發送、響應解析、錯誤處理、Header與Body提取等完整流程。一、前言&#xff1a;為什么學習HTTP客戶端&#xff1f;在日常開發中&#xff0c;無論是調用 RESTful AP…

java的冒泡排序算法

冒泡排序是一種簡單的排序算法&#xff0c;通過重復遍歷待排序序列&#xff0c;比較相鄰元素并在必要時交換位置&#xff0c;最終實現排序。以下是Java實現的詳細說明&#xff1a;核心原理?比較相鄰元素?&#xff1a;從序列第一個元素開始&#xff0c;逐對比較相鄰元素的大小…

玻爾茲曼分布與玻爾茲曼探索

目錄 玻爾茲曼分布定義 玻爾茲曼探索&#xff1a; 1. 玻爾茲曼分布公式 2. 溫度 T 如何影響采樣結果&#xff1f; (1) 高溫 (T→∞)&#xff1a; (2) 低溫 (T→0)&#xff1a; (3) 中等溫度 (T∈(0,∞))&#xff1a; 3. 直觀示例 4. 實際應用中的意義 5.核心誤區澄清…

【工具】jsDelivr CDN完全指南:免費高速的開源項目CDN服務

前言 在現代Web開發中&#xff0c;內容分發網絡&#xff08;CDN&#xff09;已經成為提升網站性能的重要工具。jsDelivr作為一個免費、快速、可靠的開源CDN服務&#xff0c;為全球開發者提供了優質的靜態資源分發服務。無論是加速GitHub倉庫訪問、分發npm包&#xff0c;還是為…

OSPF筆記整理

一、OSPF 基礎特性1. 技術背景&#xff08;對比 RIP&#xff09;RIP 的缺陷&#xff1a;最大跳數 15 限制、周期性發送全路由表&#xff08;占用帶寬&#xff09;、收斂慢、以跳數為度量值、易產生環路、30 秒更新間隔。OSPF 的改進&#xff1a;無跳數限制&#xff08;支持大規…

sqLite 數據庫 (3):以編程方式使用 sqLite,4 個函數,以及 sqLite 移植,合并編譯

&#xff08;22&#xff09; 只有四個函數 &#xff1a;以及 &#xff1a;&#xff08;23&#xff09;以及 &#xff1a;&#xff08;24&#xff09;&#xff08;25&#xff09; sqLite 的源代碼很少 &#xff1a;&#xff08;26&#xff09;&#xff08;27&#xff09;&#x…

Nginx跨域問題與 MIME 類型錯誤深度排錯指南:解決 MIME type of “application/octet-stream“ 報錯

前言&#xff1a;在 Web 開發中&#xff0c;跨域請求和資源加載錯誤是前端工程師和運維人員經常遇到的棘手問題。本文將詳細解析 Nginx 環境下跨域配置的多種方案、gzip 類型參數的優化要點&#xff0c;以及.mjs 文件 MIME 類型錯誤的解決方法&#xff0c;并結合排錯思路和原理…

什么是大端?什么是小端?如何驗證?

什么是大端&#xff1f;什么是小端&#xff1f;如何驗證&#xff1f; 在計算機系統中&#xff0c;大端&#xff08;Big-Endian&#xff09; 和小端&#xff08;Little-Endian&#xff09; 是兩種不同的字節序&#xff08;Byte Order&#xff09;&#xff0c;用于描述多字節數據…

JavaScript 語句和函數

1. JavaScript 語句 1&#xff09;if語句 if (condition) statement1 else statement2這里的條件&#xff08;condition&#xff09;可以是任何表達式&#xff0c;并且求值結果不一定是布爾值。 ECMAScript會自動調用Boolean()函數將這個表達式的值轉換為布爾值。 如果條件…

代碼隨想錄刷題Day22

替換數字 這道題比較簡單&#xff0c;遇到字母就copy到新的字符數組&#xff0c;如果是遇到數字&#xff0c;就在新字符數組中加入number的字符串。代碼如下&#xff1a; #include<stdio.h> #include<ctype.h> #include<string.h> #define Max 1000000 int…

邏輯回歸參數調優實戰指南

邏輯回歸的參數調節參數展示 LogisticRegression(penaltyl2,dualFalse,tol1e4,C1.0,fit_interceptTrue,intercept_scaling1,class_weightNone,random_stateNone,solverliblinear,max_iter100,multi_classovr,verbose0,warm_startFalse, n_jobs1)在前面的學習中&#xff0c;我們…

cocosCreator2.4 googlePlay登錄升級、API 35、16KB內存頁面的支持

環境&#xff1a;我這里是cocosCreator 2.4.12 導出的android 工程 登錄升級 后臺收到的google 的提醒&#xff1a; 之前是通過implementation com.google.android.gms:play-services-auth:20.0.0 來獲取玩家 uid 和 郵箱&#xff0c;然后發送到我們的服務器獲取賬號。 升級…