LangChain框架 Prompts、Agents 應用

目錄

(Prompts)提示作用

Prompts 常見操作

基礎 PromptTemplate 使用

Few-shot 提示模板

ChatPromptTemplate (對話提示模板)

(Agents)代理作用

Agents 常見操作

基礎 Agent 使用

自定義工具 Agent

高級應用示例

帶記憶的對話代理

使用本地模型的代理

結構化輸出代理


LangChain框架 Loader 、Vectorstores、Chain 應用-CSDN博客?

另外一篇關于LangChain框架的應用


(Prompts)提示作用

作用:控制大語言模型(LLM)的輸入,通過模板化指令引導模型生成更精準的輸出。
關鍵功能

  • 結構化輸入:將變量動態插入預定義的文本模板(如:"寫一首關于{topic}的詩"

  • 標準化輸出:通過指令約束模型返回格式(如JSON、列表等)

  • 上下文管理:整合示例(Few-shot)、系統消息等提升效果

典型工作流
提示模板 → 代理接收 → 決策調用工具 → 整合結果 → 返回最終輸出

Prompts 常見操作

基礎 PromptTemplate 使用

from langchain.prompts import PromptTemplate# 創建簡單提示模板
template = "請用{language}寫一個關于{topic}的函數"
prompt = PromptTemplate(input_variables=["language", "topic"],template=template
)# 格式化提示
formatted_prompt = prompt.format(language="Python", topic="快速排序")
print(formatted_prompt)########運行結果############
請用Python寫一個關于快速排序的函數

Few-shot 提示模板

from langchain.prompts import FewShotPromptTemplate, PromptTemplate# 準備示例
examples = [{"input": "高興", "output": "笑容滿面"},{"input": "悲傷", "output": "淚流滿面"}
]# 創建單個示例模板
example_template = """
輸入: {input}
輸出: {output}"""
example_prompt = PromptTemplate(input_variables=["input", "output"],template=example_template
)# 創建Few-shot模板
few_shot_prompt = FewShotPromptTemplate(examples=examples,example_prompt=example_prompt,prefix="將以下情感轉換為成語描述:",suffix="輸入: {adjective}\n輸出:",input_variables=["adjective"]
)print(few_shot_prompt.format(adjective="憤怒"))################運行結果#######################
將以下情感轉換為成語描述:輸入: 高興
輸出: 笑容滿面輸入: 悲傷
輸出: 淚流滿面輸入: 憤怒
輸出:

ChatPromptTemplate (對話提示模板)

from langchain.prompts import ChatPromptTemplate, HumanMessagePromptTemplate
from langchain.schema import SystemMessage# 創建聊天提示模板
chat_prompt = ChatPromptTemplate.from_messages([SystemMessage(content="你是一個有幫助的AI助手"),HumanMessagePromptTemplate.from_template("{user_input}")
])formatted_chat = chat_prompt.format_messages(user_input="你好!")
print(formatted_chat)################運行結果########################
[SystemMessage(content='你是一個有幫助的AI助手', additional_kwargs={}, response_metadata={}), HumanMessage(content='你好!', additional_kwargs={}, response_metadata={})]

(Agents)代理作用

作用:讓LLM自主調用工具(Tools)完成復雜任務,實現動態決策和自動化流程。
關鍵功能

  • 工具集成:連接搜索API、計算器、數據庫等外部工具

  • 任務編排:自動決定何時調用哪個工具(如先搜索再計算)

  • 多步驟推理:通過循環迭代解決需要多步操作的問題

Agents 常見操作

基礎 Agent 使用

from langchain.agents import load_tools, initialize_agent, AgentType
from langchain.llms import Ollama
# 初始化工具和LLM
llm = Ollama(temperature=0,model='qwen')
tools = load_tools(["serpapi","llm-math"], llm=llm)# 創建代理
agent = initialize_agent(tools,llm,agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION,verbose=True
)# 執行任務
agent.run("目前特斯拉的股價是多少?如果是100股,總價值是多少美元?")

自定義工具 Agent

from langchain.agents import tool
from langchain.agents import AgentType, initialize_agent
from langchain.llms import Ollama# 定義自定義工具
@tool
def get_word_length(word: str) -> int:"""返回單詞的長度"""return len(word)# 初始化
llm = Ollama(temperature=0,model='qwen3')
tools = [get_word_length]# 創建代理
agent = initialize_agent(tools,llm,agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION,verbose=True
)# 使用代理
agent.run("單詞'hello'的長度是多少?")##################運行結果#####################
<think>
好的,用戶問的是單詞'hello'的長度是多少。我需要用提供的工具來解決這個問題。首先,我應該調用get_word_length工具,參數是'hello'。然后工具會返回這個單詞的長度。我只需要把結果返回給用戶就可以了。
</think>Thought: 我需要確定單詞'hello'的長度。可以使用get_word_length工具來獲取這個信息。
Action: get_word_length
Action Input: hello
Observation: 5
Thought:<think>
Final Answer: 單詞'hello'的長度是5。

高級應用示例

帶記憶的對話代理

from langchain.agents import AgentType, initialize_agent, load_tools
from langchain.llms import Ollama
from langchain.memory import ConversationBufferMemory# 初始化帶記憶的代理
llm = Ollama(temperature=0,model='qwen')
tools = load_tools(["llm-math"], llm=llm)
memory = ConversationBufferMemory(memory_key="chat_history")agent = initialize_agent(tools,llm,agent=AgentType.CONVERSATIONAL_REACT_DESCRIPTION,memory=memory,verbose=True
)# 多輪對話
agent.run("3的平方是多少?")
agent.run("再加上7等于多少?")###############運行結果#########################
Thought: Do I need to use a tool? Yes
Action: the action to take, should be one of [Calculator] ]
Action Input: 
Observation: the action to take, should be one of [Calculator] ] is not a valid tool, try one of [Calculator].
Thought:Do I need to use a tool? No
AI: 3的平方是9.
```> Finished chain.> Entering new AgentExecutor chain...
AI: 再加上7等于14.

使用本地模型的代理

from langchain_community.llms import Ollama
from langchain.agents import tool, AgentType
from langchain.agents import initialize_agent# 使用本地Ollama模型
llm = Ollama(model="qwen")# 定義簡單工具
@tool
def word_counter(text: str) -> int:"""計算文本中的單詞數量"""return len(text.split())# 創建代理
agent = initialize_agent([word_counter],llm,agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION,verbose=True
)agent.run("數一數這句話有多少個單詞: 'LangChain是一個強大的AI開發框架'")############運行的結果#################我應該使用word_counter()工具來計算文本中的單詞數量。
Action: word_counter
Action Input: 'LangChain是一個強大的AI開發框架'
Observation: 1
Thought:根據觀察結果,一句話只有一個單詞。Final Answer: 一句話只有一個單詞。

結構化輸出代理

from langchain.llms import Ollama
from langchain_core.tools import tool
from langchain.prompts import PromptTemplate
from langchain.agents import initialize_agent, AgentType
from langchain_community.llms import Ollama
from langchain.output_parsers import StructuredOutputParser, ResponseSchema
from typing import Any, Dict
import json# 1. 定義更簡單的輸出結構
response_schemas = [ResponseSchema(name="summary", description="文章的簡要總結"),ResponseSchema(name="keywords", type="list", description="提取的關鍵詞列表"),ResponseSchema(name="sentiment", description="情感分析結果,只能是positive/neutral/negative")
]# 2. 創建自定義解析器處理Ollama輸出
class OllamaOutputParser(StructuredOutputParser):def parse(self, text: str) -> Dict[str, Any]:try:# 嘗試從輸出中提取JSON部分start = text.find('{')end = text.rfind('}') + 1json_str = text[start:end]return json.loads(json_str)except Exception as e:# 如果解析失敗,返回默認結構return {"summary": "無法生成摘要","keywords": [],"sentiment": "neutral"}output_parser = OllamaOutputParser.from_response_schemas(response_schemas)# 3. 修改提示模板確保JSON格式輸出
ANALYSIS_PROMPT = """請嚴格按以下要求分析文本:
文本:{text}輸出要求:
1. 必須使用JSON格式
2. 包含以下字段:- summary: 50字以內摘要- keywords: 3-5個關鍵詞列表- sentiment: 情感傾向(positive/neutral/negative)返回的JSON必須用```json包裹:
```json
{{你的JSON輸出}}
```"""# 4. 創建工具
@tool
def analyze_text(text: str) -> Dict[str, Any]:"""分析文本并返回結構化結果"""prompt_template = PromptTemplate(template=ANALYSIS_PROMPT,input_variables=["text"],partial_variables={"format_instructions": output_parser.get_format_instructions()})formatted_prompt = prompt_template.format(text=text)llm = Ollama(model="qwen3", temperature=0)result = llm(formatted_prompt)try:return output_parser.parse(result)except Exception as e:print(f"解析失敗: {e}")return {"summary": text[:50] + "...","keywords": ["LangChain"],"sentiment": "neutral"}# 5. 創建并運行代理
agent = initialize_agent([analyze_text],Ollama(model="qwen3", temperature=0),agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION,verbose=True,handle_parsing_errors=True  # 關鍵:處理解析錯誤
)text = "LangChain是一個用于開發語言模型應用的框架。它簡化了與LLMs的交互過程,提供了模塊化組件,可以快速開發AI模型應用。"
result = agent.run(f"分析這段文本: {text}")
print(result)################運行結果##################################
<think>
好的,我現在需要分析用戶提供的關于LangChain的文本。首先,用戶的問題是要分析這段文本,所以我要使用analyze_text工具。讓我先仔細閱讀一下文本內容。文本內容是:“LangChain是一個用于開發語言模型應用的框架。它簡化了與LLMs的交互過程,提供了模塊化組件,可以快速開發AI模型應用。” 看起來這段文字在介紹LangChain的功能和優勢。我需要確定用戶的需求是什么,可能他們想了解LangChain的核心功能、它如何簡化開發過程,或者它的主要特點。接下來,我應該調用analyze_text工具來處理這段文本。工具會返回結構化的結果,比如關鍵詞、主題、重要信息等。我需要確保輸入的文本正確無誤,然后等待工具的分析結果。根據返回的觀察結果,我可以提取關鍵點,比如框架的用途、簡化交互的過程、模塊化組件以及快速開發應用的優勢。最后,將這些信息整理成一個清晰、簡潔的最終答案,回答用戶的問題。
</think>Thought: 我需要使用analyze_text工具來分析提供的文本內容。
Action: analyze_text
Action Input: LangChain是一個用于開發語言模型應用的框架。它簡化了與LLMs的交互過程,提供了模塊化組件,可以快速開發AI模型應用。Observation: {'summary': 'LangChain是開發語言模型應用的框架,簡化LLM交互,提供模塊化組件以快速構建AI應用。', 'keywords': ['LangChain', '語言模型應用', 'LLMs交互', '模塊化組件', 'AI應用開發'], 'sentiment': 'neutral'}
Thought:<think>
</think>Final Answer: 這段文本介紹了LangChain是一個用于開發語言模型應用的框架,其核心功能包括簡化與大型語言模型(LLMs)的交互過程,并通過模塊化組件實現快速開發AI模型應用。關鍵詞有LangChain、語言模型應用、LLMs交互、模塊化組件和AI應用開發,整體語氣中性。> Finished chain.
這段文本介紹了LangChain是一個用于開發語言模型應用的框架,其核心功能包括簡化與大型語言模型(LLMs)的交互過程,并通過模塊化組件實現快速開發AI模型應用。關鍵詞有LangChain、語言模型應用、LLMs交互、模塊化組件和AI應用開發,整體語氣中性。


?

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

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

相關文章

模擬實現unordered_map

1.定義unordered_map 是 C 標準庫中的哈希表容器&#xff0c;特點是無序存儲、平均 O (1) 時間復雜度的插入 / 查找 / 刪除操作。其核心原理是通過哈希函數將關鍵字映射到哈希桶&#xff08;bucket&#xff09;&#xff0c;再通過鏈表或紅黑樹處理哈希沖突。2.實現原理1. 哈希表…

史上最詳細Java并發多線程(面試必備,一篇足矣)

第一章&#xff1a;線程基礎 1.1 線程與進程 進程&#xff1a;系統資源分配的基本單位&#xff0c;擁有獨立的內存空間 線程&#xff1a;CPU調度的基本單位&#xff0c;共享進程內存空間 關系&#xff1a;一個進程可包含多個線程&#xff0c;線程切換成本遠低于進程 1.2 線程的…

【DataFlow】數據合成流水線工具

1.整體解讀 核心思想&#xff1a;以數據為中心的AI&#xff08;Data-Centric AI&#xff09; DataFlow 的核心目標是通過一系列自動化“流水線”&#xff08;Pipelines&#xff09;來處理和生成高質量的數據&#xff0c;從而提升大語言模型&#xff08;LLM&#xff09;在特定領…

Hangfire 調用報錯解決方案總結

System.ArgumentNullException: 值不能為 null 錯誤在使用 Hangfire 時確實是一個常見問題&#xff0c;特別是在配置 Hangfire 服務器時。問題分析這個錯誤通常發生在以下情況&#xff1a;沒有正確配置 Hangfire 服務器隊列配置缺失或不正確連接字符串配置問題解決方案要點正確…

MySQL的使用

MySQL的使用一、mysql中的周邊命令1. 檢查版本2. 查看字符集3. 查看客戶端連接4. 查看最后一條警告消息二、數據庫、數據表的管理1. 語法規則2. 數據庫2.1 查看數據庫2.2 創建數據庫2.3 選擇數據庫2.4 查看創建數據庫命令2.5 創建庫時添加字符集2.6 修改數據庫字符集2.7 刪除數…

2025Nginx最新版講解/面試

維護系統多服務器部署&#xff0c;將我們請求代理到各個服務器。代理正向代理&#xff0c;代理對象是我們的客戶端&#xff0c;目標對象不知道我們用戶。VPN就是典型的正向代理。反向代理&#xff0c;代理對象是服務端&#xff0c;用戶不知道服務端具體信息。而這正是Nginx所做…

JAVASCRIPT 前端數據庫-V8--仙盟數據庫架構-—-—仙盟創夢IDE

老版本 在v1 版本中我們講述了 基礎版的應用 JAVASCRIPT 前端數據庫-V1--仙盟數據庫架構-—-—仙盟創夢IDE-CSDN博客 接下載我們做一個更復雜的的其他場景 由于&#xff0c;V1查詢字段必須 id 接下來我們修改了了代碼 JAVASCRIPT 前端數據庫-V2--仙盟數據庫架構-—-—仙盟創…

UNIX 域套接字實現本地進程間通信

&#x1f680; 使用 UNIX 域套接字 (AF_UNIX) 實現高效進程通信 在 Linux 和其他類 UNIX 系統中&#xff0c;進程間通信 (IPC) 的方法有很多種&#xff0c;例如管道、消息隊列、共享內存等。然而&#xff0c;當你的應用程序需要在 同一臺機器上的不同進程間進行高效、低延遲的數…

【Axure教程】中繼器間圖片的傳遞

中繼器在Axure中可以作為圖片保存的數據庫&#xff0c;在實際系統中&#xff0c;我們經常需要將選擇數據庫的圖片添加到其他圖片列表中&#xff0c;所以今天就教大家&#xff0c;怎么在Axure中實現中繼器之間的圖片傳遞&#xff0c;包含將一個中繼器中的圖片列表傳遞到另一個中…

專題:2025云計算與AI技術研究趨勢報告|附200+份報告PDF、原數據表匯總下載

原文鏈接&#xff1a;https://tecdat.cn/?p42935 關鍵詞&#xff1a;2025, 云計算&#xff0c;AI 技術&#xff0c;市場趨勢&#xff0c;深度學習&#xff0c;公有云&#xff0c;研究報告 云計算和 AI 技術正以肉眼可見的速度重塑商業世界。過去十年&#xff0c;全球云服務收…

從代碼學習深度強化學習 - PPO PyTorch版

文章目錄 前言PPO 算法簡介從 TRPO 到 PPOPPO 的兩種形式:懲罰與截斷代碼實踐:PPO 解決離散動作空間問題 (CartPole)環境與工具函數定義策略與價值網絡PPO 智能體核心實現訓練與結果代碼實踐:PPO 解決連續動作空間問題 (Pendulum)環境準備適用于連續動作的網絡PPO 智能體 (連…

PortsWiggerLab: Blind OS command injection with output redirection

實驗目的This lab contains a blind OS command injection vulnerability in the feedback function.The application executes a shell command containing the user-supplied details. The output from the command is not returned in the response. However, you can use o…

星云穿越與超光速飛行特效的前端實現原理與實踐

文章目錄 1,引言2,特效設計思路3,技術原理解析1. 星點的三維分布2. 視角推進與星點運動3. 三維到二維的投影4. 星點的視覺表現5. 色彩與模糊處理4,關鍵實現流程圖5,應用場景與優化建議6,總結1,引言 在現代網頁開發中,炫酷的視覺特效不僅能提升用戶體驗,還能為產品增添…

【Linux】C++項目分層架構:核心三層與關鍵輔助

C 項目分層架構全指南&#xff1a;核心三層 關鍵輔助一、核心三層架構 傳統的三層架構&#xff08;或三層體系結構&#xff09;是構建健壯系統的基石&#xff0c;包括以下三層&#xff1a; 1. 表現層&#xff08;Presentation Layer&#xff09; 負責展示和輸入處理&#xff0…

【機器學習】保序回歸平滑校準算法

保序回歸平滑校準算法&#xff08;SIR&#xff09;通過分桶合并線性插值解決廣告預估偏差問題&#xff0c;核心是保持原始排序下糾偏。具體步驟&#xff1a;1&#xff09;按預估分升序分桶&#xff0c;統計每個分桶的后驗CTR&#xff1b;2&#xff09;合并逆序桶重新計算均值&a…

項目開發日記

框架整理學習UIMgr&#xff1a;一、數據結構與算法 1.1 關鍵數據結構成員變量類型說明m_CtrlsList<PageInfo>當前正在顯示的所有 UI 頁面m_CachesList<PageInfo>已打開過、但現在不顯示的頁面&#xff08;緩存池&#xff09; 1.2 算法邏輯查找緩存頁面&#xff1a;…

60 美元玩轉 Li-Fi —— 開源 OpenVLC 平臺入門(附 BeagleBone Black 驅動簡單解析)

60 美元玩轉 Li-Fi —— 開源 OpenVLC 平臺入門&#xff08;附 BeagleBone Black 及驅動解析&#xff09;一、什么是 OpenVLC&#xff1f; OpenVLC 是由西班牙 IMDEA Networks 研究所推出的開源可見光通信&#xff08;VLC / Li-Fi&#xff09;研究平臺。它把硬件、驅動、協議棧…

Python性能優化

Python 以其簡潔和易用性著稱,但在某些計算密集型或大數據處理場景下,性能可能成為瓶頸。幸運的是,通過一些巧妙的編程技巧,我們可以顯著提升Python代碼的執行效率。本文將介紹8個實用的性能優化技巧,幫助你編寫更快、更高效的Python代碼。   一、優化前的黃金法則:先測…

easyui碰到想要去除頂部欄按鈕邊框

只需要加上 plain"true"<a href"javascript:void(0)" class"easyui-linkbutton" iconCls"icon-add" plain"true"onclick"newCheck()">新增</a>

C++字符串詳解:原理、操作及力扣算法實戰

一、C字符串簡介在C中&#xff0c;字符串的處理方式主要有兩種&#xff1a;字符數組&#xff08;C風格字符串&#xff09;和std::string類。雖然字符數組是C語言遺留的底層實現方式&#xff0c;但現代C更推薦使用std::string類&#xff0c;其封裝了復雜的操作邏輯&#xff0c;提…