從零開始:用Python庫輕松搭建智能AI代理

為什么要關注AI代理?

“Agentic AI”(智能代理)正在悄然改變我們的工作方式。想象一下,一個AI助手不僅能幫你查航班、訂機票,還能自動安排行程、發郵件、生成日報——就像一個效率極高的“虛擬助理”團隊。

對于測試工程師來說,AI代理不只是未來的趨勢,更是提升自動化、加速測試流程的新利器。比如自動生成測試用例、智能爬取網頁、自動填報測試結果等。

但搭建這樣的系統并不容易:你要處理流程控制、數據記憶、外部工具調用、任務分發等一堆“雜事”。好消息是,Python社區已經有不少現成的庫和框架,幫你快速上手,把精力集中在業務邏輯和創新上。


核心框架:智能AI代理的“發動機”

1. LangChain —— 萬能積木,輕松搭建

LangChain就像一盒“樂高積木”,你可以隨意組合各種AI能力:

  • 模塊化設計:對話、數據庫、外部API等功能模塊隨意拼裝。
  • 記憶管理:讓AI記住歷史對話,支持上下文聯想。
  • 工具集成:比如快速接入天氣API、數據庫、甚至自動化測試平臺。

上手建議:先做一個能回答測試相關問題的聊天機器人,體驗AI的“記憶”功能和外部工具調用。


2. AutoGen —— 多代理協作,分工更高效

AutoGen適合模擬“團隊協作”場景:

  • 多角色分工:比如一個代理寫代碼,另一個做代碼審查,還有一個自動補充文檔。
  • 動態任務流:代理之間可自動傳遞信息、反饋結果。
  • 可視化調試:方便你查看各代理的對話和決策過程。

實戰案例:可以搭建一個自動化測試團隊,AI一邊分析需求,一邊自動生成和執行測試代碼。


3. CrewAI —— 輕量級團隊,配置超簡單

CrewAI適合需要明確分工、流程清晰的小型“AI團隊”:

  • 角色定義:比如“需求分析員”、“用例生成器”、“報告撰寫員”。
  • 事件驅動:需要哪個角色時,自動上線工作。
  • 極簡配置:幾行代碼就能跑起來。

入門思路:用CrewAI讓AI幫你自動收集bug、分析日志、輸出測試報告。


支持庫:讓AI代理更“聰明”的秘密武器

LLM模型集成

  • Hugging Face Transformers:數千種預訓練大模型,開箱即用。
  • OpenAI API:直接用GPT系列模型對話。
  • Google AI SDK:調用Gemini等大模型處理復雜任務。

數據管理

  • LlamaIndex:把企業內網文檔、測試報告變成可檢索的知識庫。
  • Chroma/FAISS:高效存儲和檢索“向量”數據,做智能搜索。
  • Redis:用來保存AI代理的狀態和緩存結果,速度飛快。

工具擴展

  • Selenium:讓AI自動打開網頁、填寫表單,做端到端自動化測試。
  • PyAutoGUI:模擬鼠標鍵盤,自動操作桌面應用。

部署方案

  • FastAPI:快速搭建AI服務接口,方便和測試平臺對接。
  • Streamlit:做交互式儀表盤,展示AI測試結果。
  • LangFlow:拖拽式可視化,零代碼搭建AI流程。

如何選擇適合你的第一個庫?

應用場景推薦框架說明
聊天機器人/單一任務LangChain適合入門和基礎自動化
多角色協作AutoGen復雜流程和團隊分工
快速模擬團隊流程CrewAI小團隊任務分配、快速原型開發
知識庫問答LlamaIndex + Chroma文檔搜索、智能問答
網頁自動化Selenium自動操作網頁、表單填報

測試工程師的AI成長路線圖

  1. 基礎:用LangChain做一個能查詢bug狀態的聊天機器人,體驗AI記憶與API集成。
  2. 進階:用AutoGen模擬一個“自動化測試小組”,讓AI協作完成代碼生成、用例審查等工作。
  3. 專業:結合CrewAI和LlamaIndex,打造智能知識庫問答系統,支持自動檢索測試用例和歷史缺陷。
  4. 專家:自定義開發,靈活組合多個庫,實現更復雜的自動化測試和團隊協作。

未來趨勢

  • 模塊化更強:各庫之間互通更方便,拼裝能力更高。
  • 企業級落地:越來越多生產級的AI自動化方案出現。
  • 低代碼平臺崛起:拖拽式可視化工具,讓非開發同事也能參與AI系統搭建。

簡單示例

使用streamlit編寫一個簡易版chatbot,使用通義大模型,源碼如下:

import streamlit as st
import os
from typing import Annotated
from typing_extensions import TypedDict
from langgraph.graph import StateGraph, START, END
from langgraph.graph.message import add_messages
from langchain_community.llms import Tongyi# ---- 環境變量輸入區(可根據需求修改為硬編碼) ----
st.set_page_config(page_title="Qwen 聊天機器人", page_icon="🤖", layout="centered")with st.sidebar:st.title("配置參數")dashscope_api_key = st.text_input("DASHSCOPE_API_KEY", type="password", value=os.environ.get("DASHSCOPE_API_KEY", ""))langsmith_api_key = st.text_input("LANGSMITH_API_KEY(可選)", type="password", value=os.environ.get("LANGSMITH_API_KEY", ""))langsmith_project = st.text_input("LANGSMITH_PROJECT(可選)", value=os.environ.get("LANGSMITH_PROJECT", ""))langsmith_endpoint = st.text_input("LANGSMITH_ENDPOINT(可選)", value=os.environ.get("LANGSMITH_ENDPOINT", "https://api.smith.langchain.com"))st.markdown("> *如無需 LangSmith,可留空*")st.markdown("---")st.markdown("by [你的名字/團隊]")# 設置環境變量
if dashscope_api_key:os.environ["DASHSCOPE_API_KEY"] = dashscope_api_key
if langsmith_api_key:os.environ["LANGSMITH_API_KEY"] = langsmith_api_keyos.environ["LANGSMITH_TRACING"] = "true"
if langsmith_project:os.environ["LANGSMITH_PROJECT"] = langsmith_project
if langsmith_endpoint:os.environ["LANGSMITH_ENDPOINT"] = langsmith_endpoint# ---- 對話狀態定義 ----
class State(TypedDict):messages: Annotated[list, add_messages]# ---- 狀態機組裝 ----
@st.cache_resource(show_spinner="正在加載 Qwen 模型…")
def get_graph():graph_builder = StateGraph(State)llm = Tongyi(model="qwen-max",streaming=True,temperature=0.7,top_p=0.8,api_key=os.environ.get("DASHSCOPE_API_KEY"))def chatbot(state: State):return {"messages": [llm.invoke(state["messages"])]}graph_builder.add_node("chatbot", chatbot)graph_builder.add_edge(START, "chatbot")graph_builder.add_edge("chatbot", END)return graph_builder.compile()graph = get_graph()# ---- Streamlit 聊天 session 狀態維護 ----
if "history" not in st.session_state:st.session_state.history = []st.title("🤖 Qwen 聊天機器人(LangGraph 版)")with st.form(key="chat-form", clear_on_submit=True):user_input = st.text_area("請輸入你的問題:", value="", placeholder="和機器人聊點什么吧…", height=80)submitted = st.form_submit_button("發送")def stream_graph_updates(user_input: str, history: list):yield from graph.stream({"messages": history + [{"role": "user", "content": user_input}]})# 聊天歷史展示
for msg in st.session_state.history:if msg["role"] == "user":st.chat_message("user").write(msg["content"])else:st.chat_message("assistant").write(msg["content"])# 新問題處理
if submitted and user_input.strip():st.session_state.history.append({"role": "user", "content": user_input})response_placeholder = st.empty()full_response = ""# 流式顯示with st.spinner("Assistant 正在思考..."):for event in stream_graph_updates(user_input, st.session_state.history[:-1]):for value in event.values():resp = value["messages"][-1]# 僅展示assistant內容# if resp["role"] == "assistant":#     full_response = respresponse_placeholder.chat_message("assistant").write(resp)# 更新歷史if full_response:st.session_state.history.append({"role": "assistant", "content": full_response})# 清空歷史按鈕
st.sidebar.button("清空對話歷史", on_click=lambda: st.session_state.pop("history", None))st.info("提示:本機器人支持多輪上下文記憶,支持流式輸出。輸入 'quit'/'exit'/'q' 可結束對話(但不會關閉頁面)。")

運行效果:
在這里插入圖片描述
配置了DASHSCOPE_API_KEY后效果如下:
在這里插入圖片描述

結語

這些Python庫為AI代理搭建提供了強大的底層能力,讓測試工程師把更多時間花在創新與優化上,而不是重復造輪子。建議你從LangChain入手,邊學邊用,親手做幾個小項目,比如自動查詢天氣并推薦穿衣。實踐中你會發現,AI代理就像樂高積木,拼出無限可能!

動手試試:用LangChain做個“小助手”,能自動查天氣并給出穿衣建議。你會學會AI如何記住歷史對話、調用外部API,邁出智能自動化的第一步!


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

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

相關文章

如何防止GitHub上的敏感信息被泄漏?

如大家所了解的,隨著GitHub的用戶越來越多,GitHub上的敏感信息被泄漏的問題也越來越嚴重。那么如何做,才能防止此類事情發生呢?這值得我們探討。移除并刪除敏感信息當我們發現了歷史 commit 中包含敏感信息后,第一步便…

船舶機械零件的深孔工藝及檢測方法 —— 激光頻率梳 3D 輪廓檢測

引言船舶機械零件中的深孔結構(深徑比>15:1)直接影響動力系統可靠性,如柴油機缸體深孔、推進軸系潤滑油孔等。此類深孔具有孔徑大(φ10 - 50mm)、深度深(500 - 2000mm)、表面質量要求…

論文Review Lidar 3DGS Splat-LOAM: Gaussian Splatting LiDAR Odometry and Mapping

基本信息 題目:Splat-LOAM: Gaussian Splatting LiDAR Odometry and Mapping 來源:ICCV 2025 學校:Sapienza University of Rome 是否開源:https://github.com/rvp-group/Splat-LOAM 摘要:純激光3DGS!…

MYSQL:數據庫約束

文章目錄MYSQL:數據庫約束:為你的數據上把“安全鎖”1. 約束的類型概覽2. NOT NULL 非空約束3. DEFAULT 默認值約束4. UNIQUE 唯一約束5. PRIMARY KEY 主鍵約束5.1 自增主鍵 AUTO_INCREMENT5.3 復合主鍵6. FOREIGN KEY 外鍵約束7. CHECK 約束總結MYSQL&a…

網絡數據編碼技術及其應用場景的全面解析

網絡數據編碼技術全景圖?編碼類型??編碼原理??適用層??典型應用場景??優勢??缺陷??曼徹斯特編碼?電平跳變代表數據位(高→低1,低→高0)物理層10/100M以太網、RFID標簽自同步時鐘帶寬利用率僅50%?4B/5B編碼?4比特映射為5比特物…

RustDesk自建服務器完整部署指南:從零開始到成功連接。成功解決rustdesk報錯:未就緒,請檢查網絡連接

最近需要用到遠程工具解決用戶問題,todesk總是提示付費,干脆自己使用開源的。當然凡事都有代價。 話費了一個工作日的時間終于搞定了。 本文將詳細介紹如何從零開始部署RustDesk自建服務器,實現完全自主可控的遠程桌面解決方案。 踩坑 參考…

datasophon安裝doris問題排除記錄

datasophon安裝doris搞了好久才成功,特別記錄一下。 多災多難的安裝過程:FE安裝 首先,配置界面,要注意兩個參數一定要改成正確的網段,否則會被識別成127.0.0.1注意:兩個priority_networks 參數必須要改成你…

suricata新增Mysql告警規則處理

suricata新增Mysql告警規則處理協議解析后續處理內容新增規則規則解析關鍵字新增Setup用于初始化檢測項Free用于資源釋放AppLayerTxMatch用于協議解析完成后的規則檢測針對pcap文件進行檢測總結協議解析后續處理內容 經過Mysql協議解析處理流程 介紹,我們在suricat…

使用位運算優化 Vue.js 應用:高效狀態管理技巧

在 Vue.js 開發中,位運算(Bitwise Operations)是一種高效的工具,尤其適用于需要管理大量布爾狀態或優化性能的場景。位運算通過操作二進制位來實現狀態的存儲和檢查,相比傳統的數組或對象操作,內存占用更低…

【Java SE】Clonable接口和深拷貝

目錄 一.Clonable接口 實現步驟: 完整代碼: 二.深拷貝 實現步驟: 完整代碼: 淺拷貝與深拷貝的對比 使用場景建議 完 淺拷貝(Shallow Copy)和深拷貝(Deep Copy)是對象復制的兩…

accelerate 在Pycham中執行的設置方法

背景 使用 accelerate 進行分布式代碼訓練時,需要在pycharm中進行調試,此時需要在pycharm中運行。 終端執行命令 # *[Specify the config file path and the GPU devices to use] export CUDA_VISIBLE_DEVICES0# *[Specify the config file path] expo…

探索量子計算與法律理論的交叉領域

文章目錄 前言 一、引言 二、內容 (一)知識產權 (二)隱私與安全 (三)責任認定 (四)證據與證明 (五)法律推理與決策 三、結論 總結 前言 隨著量子計算技術的突破性發展,其引發的法律范式重構問題日益凸顯。烏茲別克斯坦學者伊索姆別克?阿卜迪哈基莫夫于2024年在《量…

js迭代器

文章目錄前言實現原理:調用迭代器自制迭代器前言 迭代器是 JSt 中一種特殊的對象,它提供了一種統一的、通用的方式遍歷個各種不同類型的數據結構。 可以遍歷的數據結構包括:數組、字符串、Set、Map 等可迭代對象。我們也可以自定義實現迭代器…

chainlink VRF中文教程(含mock),解決error: Arithmetic Underflow in createSubscription

?我使用的版本:chainlink-brownie-contracts version:1.3.0?1. Import 相關包 ,,, import {VRFConsumerBaseV2Plus} from "chainlink/contracts/src/v0.8/vrf/dev/VRFConsumerBaseV2PLUS.sol"; import {VRFV2PlusClient} from "chainlink/contract…

非線性優化框架CasADi工具箱求解最優控制問題OCP

CasADi是一個開源的Python/MATLAB庫,主要用于數值優化,特別是最優控制問題。它提供了一個易于使用的符號框架,用于處理和生成表達式,以及高效地生成導數信息。 https://web.casadi.org/get/https://web.casadi.org/get/ 所有OCP…

Type-C接口臺式顯示器:LDR6021引領新潮流

Type-C單口便攜顯示器LDR6021是市場上一種新興的顯示設備,以下是對其的詳細介紹一、主要特點 便攜性:LDR6021采用了Type-C接口作為數據傳輸和供電接口,這種設計使得它能夠與各種支持Type-C接口的設備無縫連接,如筆記本電腦、智能手機、平板電…

在翻譯語義相似度和會議摘要相似度評估任務中 ,分類任務 回歸任務 生成任務區別

在翻譯語義相似度(Translation Semantic Similarity)和會議摘要相似度(Meeting Summary Similarity)等任務中,通常會根據任務的目標和輸出形式,將其劃分為三類常見的任務類型:1. 分類任務定義&a…

UGUI 性能優化系列:第二篇——Canvas 與 UI 元素管理

UGUI 性能優化系列:第一篇——基礎優化與資源管理 UGUI 性能優化系列:第二篇——Canvas 與 UI 元素管理 UGUI 性能優化系列:第三篇——渲染與像素填充率優化 UGUI 性能優化系列:第四篇——高級優化與注意事項 在 UGUI 性能優化…

企業開發轉型 | 前端AI化數字化自動化現狀

文章目錄前端AI化數字化自動化發展現狀引言調研背景與目的調研范圍與方法前端AI化技術現狀與工具生態主流AI工具分類與能力矩陣工具能力對比分析關鍵能力指標深度解析大模型技術成熟度評估前端AI化核心應用場景與人力優化路徑代碼生成與自動化開發設計到代碼全鏈路自動化自動化…

Mysql(運維-日志)

黑馬mysql筆記 最好開兩個窗口,一個用于mysql命令,一個用于liunx命令 目錄 錯誤日志 二進制日志 介紹 日志格式 mysq默認二進制日志文件為ROW 日志查看 二進制日志查看命令 默認日志文件格式下查看日志內容 更改日志文件格式查看日志內容 日志…