Promptify與ReActAgent

一、Promptify 定位:NLP 任務的「自動化流水線」
1. 解決什么問題?

傳統 LLM 應用開發痛點:

  • 反復調試:需手工編寫/調整 prompt 格式(如調整分隔符、示例數量)
  • 兼容性差:不同模型需重寫適配代碼
  • 輸出不穩定:非結構化文本需額外解析
    Promptify 用標準化流水線解決上述問題,將復雜 prompt 工程簡化為三行代碼:
model = OpenAI(api_key)          # 選擇模型
prompter = Prompter('ner.jinja')  # 選擇任務模板
result = Pipeline(prompter, model).fit(text)  # 執行流水線
2. 核心架構
填充模板
原始輸出
結構化數據
輸入文本
Prompter
LLM 模型
Parser
結果
  • Prompter:模板引擎(基于 Jinja2)
  • LLM 接口:統一調用 OpenAI/PaLM/Hugging Face
  • Parser:自動解析 JSON/YAML/XML 等格式
二、關鍵技術深度解析
1. 模板引擎(Prompter)
  • 內置模板:預置 20+ 場景模板(如 ner.jinja, qa_gen.jinja
  • 自定義模板:支持用戶擴展(示例:醫療實體識別模板)
    {% for example in examples %}
    輸入:{{example.text}}
    輸出:{{example.entities}}
    {% endfor %}輸入:{{text_input}}
    輸出:
    
  • 動態參數:通過 domain 控制領域術語(如醫療→金融)
2. 多模型統一接口
模型類型支持情況調用方式示例
OpenAI? GPT-3.5/4OpenAI(api_key)
PaLM 2? 谷歌云PaLM(api_key, project_id)
Hugging Face? 本地/遠程模型HuggingFaceModel('bert-base')
DeepSeek? 國產模型DeepSeek(api_key)
3. 輸出解析器(Parser)
  • 智能檢測:自動識別 JSON/YAML/XML 格式
  • 容錯機制:當輸出殘缺時,用正則提取關鍵字段
  • 結構化轉換:將文本轉為 Python 對象(如列表/字典)
三、實戰案例詳解
案例 1:醫療實體識別(NER)
from promptify import Prompter, OpenAI, Pipelinetext = "93-year-old female with hypertension and chronic atrial fibrillation"
model = OpenAI("sk-xxx")
prompter = Prompter('ner.jinja')  # 醫療實體模板
result = Pipeline(prompter, model).fit(text, domain="medical",labels=["Age", "Condition"]
)

輸出

[{"E": "93-year-old", "T": "Age"},{"E": "hypertension", "T": "Condition"},{"E": "chronic atrial fibrillation", "T": "Condition"}
]

技術亮點

  • 自動識別醫學術語(如 “chronic atrial fibrillation”)
  • 過濾無關詞(如 “with”)
  • 支持實體類型約束(labels 參數)
案例 2:多標簽分類
result = Prompter(model).fit('multilabel_classification.jinja', domain='medical', text_input=text
)

輸出

{'conditions': ['Hypertension', 'Atrial Fibrillation'],'age_group': 'Geriatric','priority': 'High'
}

創新點動態生成分類體系(非固定標簽),適應開放場景。

案例 3:閱讀理解題目生成
prompter.fit('qa_gen.jinja', domain='literature', text_input=novel_excerpt)

輸出

[{"Q": "What did Alice fall into?", "A": "a deep well"},{"Q": "Was the fall expected?", "A": "No, it was sudden"}
]

教育價值:一鍵生成測驗題目,支持難度控制參數(如 difficulty="high")。

四、與手工 Prompt 的效能對比
指標手工編寫Promptify
開發時間2小時/任務10分鐘/任務
跨模型適配需重寫 prompt更換模型參數即可
輸出穩定性依賴模型版本和隨機種子內置解析器保證結構化
領域遷移成本重新設計示例修改 domain 參數
維護復雜度高(散落多個 prompt 文件)低(模板集中管理)

測試數據:基于醫療文本分類任務,GPT-4 模型,平均 10 次運行結果。

五、企業級應用場景
  1. 醫療病歷自動化

    • 輸入:患者主訴文本
    • 流水線:實體識別 → 病情分類 → 生成診療建議
    • 價值:節省醫生 50% 文書時間
  2. 金融風控

    • 輸入:客服對話錄音轉寫
    • 流水線:情感分析 → 欺詐關鍵詞檢測 → 風險等級標注
    • 價值:識別準確率提升至 92%
  3. 教育內容生成

    • 輸入:教科書章節
    • 流水線:知識點提取 → 習題生成 → 答案解析
    • 價值:課件制作效率提升 10 倍
六、進階使用技巧
  1. 模板優化策略

    • 添加少樣本示例:提升小模型表現
    • 約束輸出格式:##JSON [{"entity":..., "type":...}]
    • 領域術語注入:domain="legal" 自動加載法律詞典
  2. 性能調優

    Pipeline(prompter,model,temperature=0.3,    # 降低隨機性max_tokens=500,     # 避免過長輸出parse_strategy='retry_3'  # 錯誤時重試3次
    )
    
  3. 擴展自定義工具
    繼承 Prompter 類實現專利分析模板:

    class PatentPrompter(Prompter):def __init__(self):super().__init__('patent.jinja')def fit(self, text, country='CN'):return super().fit(text, jurisdiction=country)
    
七、局限性與替代方案
局限性
  • 模板學習成本:需理解 Jinja2 語法
  • 超大文本處理:超過 8K token 需手動分塊
  • 中文優化不足:部分模板針對英文設計
替代方案對比
工具優勢劣勢
LangChain生態豐富,支持鏈式調用配置復雜,學習曲線陡峭
LlamaIndex檢索增強專精實體識別等任務弱于 Promptify
Promptify極簡接口,開箱即用高級功能需自行擴展
八、為什么選擇 Promptify?
  1. 效率革命:將 prompt 工程從“手工作坊”升級為“自動化流水線”
  2. 靈活擴展:模板 + 多模型支持快速適配新場景
  3. 工業級穩定:解析器和重試機制保障生產環境可靠性
  4. 零成本遷移:同一套代碼兼容 OpenAI/國產模型/本地模型

適用人群

  • NLP 工程師:快速驗證模型效果
  • 數據科學家:專注算法而非 prompt 調試
  • 教育/醫療從業者:無代碼生成專業內容
  • 初學者:低門檻實踐 LLM 應用開發

通過標準化接口解決碎片化 prompt 問題,Promptify 正成為 LLM 應用開發的“加速器”。

一、ReAct 框架核心:讓 AI 具備“行動鏈”能力
1. AI 落地形態的三級躍遷
形態能力范圍技術核心局限性
聊天機器人問答知識庫RAG被動響應,無行動能力
AI 助手 (Assistant)單步工具調用Function Calling無法處理多步復雜任務
AI 代理 (Agent)自主規劃+多步行動ReAct 框架需設計行動閉環

ReAct 的核心突破
推理(Reason)行動(Act) 循環結合,模仿人類“思考→執行→觀察→調整”的決策過程。

2. ReAct 循環流程
userquestion
analyze
needtool
calltool
result
answer
  • 關鍵環節
    • Thought:模型自我對話制定策略(“我需要先查地球質量再計算”
    • Act:調用工具執行(如搜索、計算)
    • Observation:工具返回結果(“地球質量=5.972×102?kg”
    • 循環:基于結果決定下一步(繼續思考或輸出答案)
二、代碼級拆解:手寫 ReAct Agent
1. 系統提示詞設計(system_prompt)
system_prompt = """
You run in a loop of Thought, Action, Observation, Answer.
Use Thought to plan steps.
Use Action to call tools. Available tools:- fetch_real_time_info(query): 實時搜索- calculate(expression): 數學計算- get_current_time(): 獲取時間
Example:  # 關鍵!提供明確示例
Question: 地球質量的兩倍是多少?
Thought: 需先查地球質量
Action: fetch_real_time_info: mass of earth
Observation: 地球質量為5.972×102?kg
Thought: 計算5.972e24 * 2
Action: calculate: 5.972e24 * 2
Observation: 1.1944e25
Answer: 1.1944×102?kg
"""

設計技巧

  • 強制循環格式:要求模型嚴格按 Thought→Action→Observation→Answer 輸出
  • 工具說明書:明確每個工具的輸入/輸出格式(如 calculate: 后接數學表達式)
  • 少樣本示例:展示完整決策鏈條,降低模型幻覺概率
2. 工具函數實現
# 工具字典:名稱→函數映射
available_actions = {"fetch_real_time_info": fetch_real_time_info,  # 調用Serper API"calculate": lambda expr: eval(expr),         # 數學計算(安全風險需處理)"get_current_time": datetime.now().strftime    # 獲取當前時間
}def fetch_real_time_info(query: str) -> str:""" 實時搜索(簡化版) """params = {'q': query, 'api_key': SERPER_KEY}res = requests.get('https://google.serper.dev/search', params).json()return res['organic'][0]['snippet']  # 返回第一條摘要

工具設計要點

  • 接口統一:所有工具輸入為字符串,輸出為字符串(Observation需文本化)
  • 安全隔離eval() 需沙箱處理(實際項目用 numexpr 替代)
3. Agent 執行引擎(核心)
def AgentExecutor(question: str, max_turns=5):bot = ChatBot(system_prompt)  # 加載系統提示詞next_prompt = questionaction_re = re.compile(r'^Action: (\w+):?\s*(.*)$', re.MULTILINE)  # 解析Actionfor _ in range(max_turns):response = bot(next_prompt)  # 獲取模型輸出actions = action_re.findall(response)  # 提取Action指令if actions:  # 發現工具調用tool_name, tool_input = actions[0]tool_func = available_actions[tool_name]observation = tool_func(tool_input)  # 執行工具next_prompt = f"Observation: {observation}"  # 反饋結果else:  # 無工具調用,結束循環return response  # 直接輸出Answerreturn "Reached max turns limit!"  # 防死循環

核心機制

  • 正則解析:用 r'^Action: (\w+):?\s*(.*)$' 精準抓取工具調用
  • 循環控制max_turns 限制最大步數(避免無限循環)
  • 觀察反饋:將工具結果作為下一輪輸入,驅動模型繼續思考
三、ReAct 實戰流程剖析(以“阿里成立多少年?”為例)
步驟 1:模型推理鏈
Question: 阿里成立多少年了?
Thought: 需要知道阿里巴巴的成立年份和當前年份
Action: fetch_real_time_info: 阿里巴巴成立年份

模型自主拆解問題:成立時長 = 當前年 - 成立年

步驟 2:執行工具
# 調用 fetch_real_time_info("阿里巴巴成立年份")
Observation: 阿里巴巴集團成立于1999年,創始人是馬云。
步驟 3:二次推理
Observation: 阿里巴巴集團成立于1999年
Thought: 需要獲取當前年份
Action: get_current_time: 

利用第一次結果觸發新動作

步驟 4:執行工具
# 調用 get_current_time()
Observation: 2025-06-15 14:30:00  # 假設當前年=2025
步驟 5:計算并輸出
Thought: 計算 2025 - 1999 = 26
Action: calculate: 2025 - 1999
Observation: 26
Answer: 阿里巴巴成立了26年。
四、ReAct 的工業級優化方向
1. 安全加固
  • 工具沙箱:替換危險 eval() 為安全計算庫(如 numexpr
  • 輸入過濾:對 tool_input 做 SQL 注入/XSS 檢測
  • 權限控制:不同工具設置訪問權限(如財務計算僅限授權用戶)
2. 性能提升
# 并行執行獨立任務
def parallel_act(actions):with ThreadPoolExecutor() as executor:obs = executor.map(lambda a: tools[a[0]](a[1]), actions)return list(obs)
3. 魯棒性增強
  • 錯誤重試:工具失敗時自動重試或切換備用工具
  • 超時控制:為每個工具設置執行超時(如搜索超時10秒)
  • 結果緩存:對高頻請求(如“當前時間”)緩存結果
五、ReAct 的不可替代價值
  1. 復雜任務自動化

    • 傳統方案:需硬編碼流程(如“先查A→再調B→最后計算C”)
    • ReAct:模型自主規劃路徑,適應開放性問題
  2. 可解釋性強

    • 所有 Thought 步驟可追溯,適合審計敏感操作(如金融決策)
  3. 靈活擴展

    • 新增工具只需注冊到 available_actions,無需修改核心邏輯

適用場景

  • 旅行規劃(查景點→算距離→訂酒店)
  • 學術研究(搜論文→下PDF→寫摘要)
  • 運維診斷(查日志→分析錯誤→執行修復)
六、總結:ReAct 如何改變 AI 開發范式

ReAct 的本質是將 AI 從“問答機”升級為“執行者”,通過:

  1. 循環決策機制:模擬人類“試錯-調整”過程
  2. 工具無縫集成:將外部能力轉化為模型的“手腳”
  3. 透明推理鏈條:每一步思考可見、可控、可優化

與 LangChain/LlamaIndex 等框架相比,手寫 ReAct 的優勢在于:

  • 零依賴:僅需標準庫 + OpenAI API
  • 完全可控:深度定制工具和決策邏輯
  • 學習價值:透徹理解 Agent 運行機制

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

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

相關文章

如何將視頻從 iPhone 發送到 Android 設備

如果您想將視頻從 iPhone 發送到 Android 設備,尤其是視頻尺寸較大時,您需要一種高效的傳輸方法。本文將為您提供 7 種實用方法,讓您輕松發送大型視頻文件或短視頻片段,并且不會損失視頻質量。 第 1 部分:如何通過 iRe…

Stable Diffusion入門-ControlNet 深入理解 第四課:風格遷移與重繪控制模型——讓AI也有“藝術天賦”!

大家好,歡迎回到 Stable Diffusion入門-ControlNet 深入理解 系列的第四課! 如果你還沒有看過上一課,趕緊補課哦:Stable Diffusion入門-ControlNet 深入理解 第三課。 上一課我們講解了 ControlNet 結構類模型,今天我…

國產鴻蒙系統開放應用側載,能威脅到Windows地位嗎?

上個月華為正式發布了 HarmonyOS PC 操作系統,關于生態方面大家其實一直蠻擔心。 例如不兼容Windows應用、不支持應用側載等。 不過,在最近舉行的華為開發者大會 2025 電腦分論壇上,華為終端 BG 平板與 PC 產品線總裁(朱懂東&am…

Linux登錄檢查腳本

登錄檢查腳本 提高兼容性(適應不同Linux發行版)增強可視化效果和可讀性增加關鍵資源警戒提示優化表格對齊和顏色使用添加系統安全狀態檢查 #!/bin/bash# 改進版系統登錄提示腳本 # 優化點:兼容性增強、資源警戒提示、表格美化、安全狀態檢查…

jenkinsfile調用groovy

先決條件 gitlab存放jenkinsfile以及groovy代碼,jenkins我個人使用的是2.486具體的部署方法自己搞定,一堆文檔. gitlab創建一個devops8項目組以及my-jenkins-demo2項目用于演示過程 創建群組 這里已經創建好相關群組. 進入群組創建新項目 創建一個空白項目 配置項目選項 說明…

Ubuntu20.04離線安裝Realtek b852無線網卡驅動

最近有個項目,需要在 Ubuntu20.04 LTS 下開發,首先是安裝 Linux,我們可以從下面的網址下載: https://releases.ubuntu.com/20.04/ 本以為一切順利,結果剛開始就給我整不會了。我的電腦是聯想設計師GeekPro7&#xff…

1 Studying《Computer Architecture A Quantitative Approach》5-7

目錄 5 Thread-Level Parallelism 5.1 Introduction 5.2 Centralized Shared-Memory Architectures 5.3 Performance of Symmetric Shared-Memory Multiprocessors 5.4 Distributed Shared-Memory and Directory-Based Coherence 5.5 Synchronization: The Basics 5.6 M…

融智興科技: RFID超高頻柔性抗金屬標簽解析

在當今科技飛速發展的時代, RFID技術憑借其獨特的優勢,在眾多領域得到了廣泛應用。然而,在金屬環境中,傳統RFID標簽往往面臨著諸多挑戰,如信號干擾、識別距離短等問題。融智興科技推出的RFID 超高頻柔性抗金屬標簽&…

PHP Error: 深入解析與解決策略

PHP Error: 深入解析與解決策略 引言 PHP作為世界上最流行的服務器端腳本語言之一,在全球范圍內被廣泛使用。然而,在PHP的開發過程中,錯誤處理是一個非常重要的環節。本文將深入探討PHP錯誤處理的相關知識,包括錯誤類型、錯誤配置、錯誤日志以及常見的錯誤解決策略。 PH…

零基礎langchain實戰二:大模型輸出格式化成json

零基礎langchain實戰一:模型、提示詞和解析器-CSDN博客 書接上文 大模型輸出格式化 在下面例子中:我們需要將大模型的輸出格式化成json。 import os from dotenv import load_dotenvload_dotenv() # 加載 .env 文件 api_key os.getenv("DEEPS…

高通手機跑AI系列之——人臉變化算法

環境準備 手機 測試手機型號:Redmi K60 Pro 處理器:第二代驍龍8移動--8gen2 運行內存:8.0GB ,LPDDR5X-8400,67.0 GB/s 攝像頭:前置16MP后置50MP8MP2MP AI算力:NPU 48Tops INT8 &&…

TortoiseSVN 安裝教程

前言 TortoiseSVN 是一款流行的 免費開源 的 Subversion (SVN) 客戶端,專門為 Windows 操作系統 設計。它通過 Windows 資源管理器集成 提供直觀的圖形化界面,使用戶可以輕松管理版本控制的文件和目錄,無需使用命令行。 主要特點 資源管理器…

多張圖片生成PDF每張圖片生成pdf的一頁

需要的庫 <!-- 生成pdf--><dependency><groupId>com.itextpdf</groupId><artifactId>itextpdf</artifactId><version>5.5.10</version></dependency><!-- https://mvnrepository.com/artifact/commons-net/commons-n…

Java基礎 Map集合框架 LinkedHashMap

LinkedHashMap LinkedHashMap類架構與繼承關系核心特性繼承自 HashMap有序性插入順序訪問順序 雙向鏈表結構非線程安全1.并發修改導致數據丟失2.并發迭代導致 ConcurrentModificationException3.并發修改導致鏈表結構破壞解決方案1. 使用 Collections.synchronizedMap&#xff…

MySQL 離線安裝MariaDB

描述 離線環境下安裝MySQL數據庫&#xff0c;也就是MariaDB 操作 1、找到自帶的mysql rpm -qa | grep -i ^mysql-rpm -qa | grep -i ^maria-2、卸載對應的包 rpm --nodeps -ev mysql-libs-5.1.73-8.el6_8.x86_64安裝 MariaDb 離線安裝包官網下載&#xff1a;地址 這個文…

JSON簡介及其應用

JSON簡介及其應用 A Brief Introduction and Applications of JSON By JacksonML 1. JSON的概念 JSON&#xff08;JavaScript Object Notation&#xff09; 是一種輕量級的數據交換格式&#xff0c;采用鍵值對&#xff08;key-value&#xff09;的方式組織數據&#xff0c;…

RNN(循環神經網絡)與LSTM(長短期記憶網絡)輸出的詳細對比分析

今天在與同事探討RNN時&#xff0c;引出了一個主題&#xff0c;RNN和LSTM的輸出有什么區別。 以下是關于傳統RNN&#xff08;循環神經網絡&#xff09;與LSTM&#xff08;長短期記憶網絡&#xff09;隱藏層內容、輸出結果及模型區別的詳細對比分析&#xff0c;結合結構原理、數…

【閑談】技術債:軟件開發的隱形殺手

編程中的“技術債”&#xff1a;隱形殺手與化解之道 在軟件開發的世界里&#xff0c;我們常談性能、安全、架構設計、用戶體驗等話題&#xff0c;但有一個常被忽視的概念卻如影隨形、悄然吞噬著項目的健康——技術債&#xff08;Technical Debt&#xff09;。 本文將帶你深入…

Elasticsearch | 索引和模板字段管理:增加新字段的詳細操作

關注CodingTechWork 背景介紹 Elasticsearch 是一款基于 Lucene 的搜索和數據分析引擎&#xff0c;廣泛應用于日志分析、全文檢索等領域。在使用 Elasticsearch 時&#xff0c;字段是存儲在索引中的數據單位&#xff0c;字段的定義決定了數據的存儲方式及其檢索效率。因此&…

HTML表格中<tfoot>標簽用法詳解

在HTML中&#xff0c;<tfoot>標簽用于定義表格的頁腳&#xff08;表腳&#xff09;&#xff0c;通常包含匯總信息&#xff08;如總計、平均值等&#xff09;。其核心特點和使用方法如下&#xff1a; 基本特性 位置靈活 <tfoot>必須位于<table>內&#xff0c…