從零開(kāi)始理解如何使用Python搭建智能AI代理
為什么要關(guān)注AI代理
“Agentic AI”(智能代理)正在悄然改變我們的工作方式。想象一下,一個(gè)AI助手不僅能幫你查航班、訂機(jī)票,還能自動(dòng)安排行程、發(fā)郵件、生成日?qǐng)?bào)——就像一個(gè)效率極高的“虛擬助理”團(tuán)隊(duì)。
對(duì)于測(cè)試工程師來(lái)說(shuō),AI代理不只是未來(lái)的趨勢(shì),更是提升自動(dòng)化、加速測(cè)試流程的新利器。比如自動(dòng)生成測(cè)試用例、智能爬取網(wǎng)頁(yè)、自動(dòng)填報(bào)測(cè)試結(jié)果等。
但搭建這樣的系統(tǒng)并不容易:你要處理流程控制、數(shù)據(jù)記憶、外部工具調(diào)用、任務(wù)分發(fā)等一堆“雜事”。好消息是,Python社區(qū)已經(jīng)有不少現(xiàn)成的庫(kù)和框架,幫你快速上手,把精力集中在業(yè)務(wù)邏輯和創(chuàng)新上。
核心框架:智能AI代理的“發(fā)動(dòng)機(jī)”
1. LangChain —— 萬(wàn)能積木,輕松搭建
LangChain就像一盒“樂(lè)高積木”,你可以隨意組合各種AI能力:
- 模塊化設(shè)計(jì):對(duì)話、數(shù)據(jù)庫(kù)、外部API等功能模塊隨意拼裝。
- 記憶管理:讓AI記住歷史對(duì)話,支持上下文聯(lián)想。
- 工具集成:比如快速接入天氣API、數(shù)據(jù)庫(kù)、甚至自動(dòng)化測(cè)試平臺(tái)。
上手建議:先做一個(gè)能回答測(cè)試相關(guān)問(wèn)題的聊天機(jī)器人,體驗(yàn)AI的“記憶”功能和外部工具調(diào)用。
2. AutoGen —— 多代理協(xié)作,分工更高效
AutoGen適合模擬“團(tuán)隊(duì)協(xié)作”場(chǎng)景:
- 多角色分工:比如一個(gè)代理寫(xiě)代碼,另一個(gè)做代碼審查,還有一個(gè)自動(dòng)補(bǔ)充文檔。
- 動(dòng)態(tài)任務(wù)流:代理之間可自動(dòng)傳遞信息、反饋結(jié)果。
- 可視化調(diào)試:方便你查看各代理的對(duì)話和決策過(guò)程。
實(shí)戰(zhàn)案例:可以搭建一個(gè)自動(dòng)化測(cè)試團(tuán)隊(duì),AI一邊分析需求,一邊自動(dòng)生成和執(zhí)行測(cè)試代碼。
3. CrewAI —— 輕量級(jí)團(tuán)隊(duì),配置超簡(jiǎn)單
CrewAI適合需要明確分工、流程清晰的小型“AI團(tuán)隊(duì)”:
- 角色定義:比如“需求分析員”、“用例生成器”、“報(bào)告撰寫(xiě)員”。
- 事件驅(qū)動(dòng):需要哪個(gè)角色時(shí),自動(dòng)上線工作。
- 極簡(jiǎn)配置:幾行代碼就能跑起來(lái)。
入門(mén)思路:用CrewAI讓AI幫你自動(dòng)收集bug、分析日志、輸出測(cè)試報(bào)告。
支持庫(kù):讓AI代理更“聰明”的秘密武器
LLM模型集成
- Hugging Face Transformers:數(shù)千種預(yù)訓(xùn)練大模型,開(kāi)箱即用。
- OpenAI API:直接用GPT系列模型對(duì)話。
- Google AI SDK:調(diào)用Gemini等大模型處理復(fù)雜任務(wù)。
數(shù)據(jù)管理
- LlamaIndex:把企業(yè)內(nèi)網(wǎng)文檔、測(cè)試報(bào)告變成可檢索的知識(shí)庫(kù)。
- Chroma/FAISS:高效存儲(chǔ)和檢索“向量”數(shù)據(jù),做智能搜索。
- Redis:用來(lái)保存AI代理的狀態(tài)和緩存結(jié)果,速度飛快。
工具擴(kuò)展
- Selenium:讓AI自動(dòng)打開(kāi)網(wǎng)頁(yè)、填寫(xiě)表單,做端到端自動(dòng)化測(cè)試。
- PyAutoGUI:模擬鼠標(biāo)鍵盤(pán),自動(dòng)操作桌面應(yīng)用。
部署方案
- FastAPI:快速搭建AI服務(wù)接口,方便和測(cè)試平臺(tái)對(duì)接。
- Streamlit:做交互式儀表盤(pán),展示AI測(cè)試結(jié)果。
- LangFlow:拖拽式可視化,零代碼搭建AI流程。
如何選擇適合你的第一個(gè)庫(kù)
應(yīng)用場(chǎng)景 | 推薦框架 | 說(shuō)明 |
---|---|---|
聊天機(jī)器人/單一任務(wù) | LangChain | 適合入門(mén)和基礎(chǔ)自動(dòng)化 |
多角色協(xié)作 | AutoGen | 復(fù)雜流程和團(tuán)隊(duì)分工 |
快速模擬團(tuán)隊(duì)流程 | CrewAI | 小團(tuán)隊(duì)任務(wù)分配、快速原型開(kāi)發(fā) |
知識(shí)庫(kù)問(wèn)答 | LlamaIndex + Chroma | 文檔搜索、智能問(wèn)答 |
網(wǎng)頁(yè)自動(dòng)化 | Selenium | 自動(dòng)操作網(wǎng)頁(yè)、表單填報(bào) |
測(cè)試工程師的AI成長(zhǎng)路線圖
基礎(chǔ):用LangChain做一個(gè)能查詢(xún)bug狀態(tài)的聊天機(jī)器人,體驗(yàn)AI記憶與API集成。
進(jìn)階:用AutoGen模擬一個(gè)“自動(dòng)化測(cè)試小組”,讓AI協(xié)作完成代碼生成、用例審查等工作。
專(zhuān)業(yè):結(jié)合CrewAI和LlamaIndex,打造智能知識(shí)庫(kù)問(wèn)答系統(tǒng),支持自動(dòng)檢索測(cè)試用例和歷史缺陷。
專(zhuān)家:自定義開(kāi)發(fā),靈活組合多個(gè)庫(kù),實(shí)現(xiàn)更復(fù)雜的自動(dòng)化測(cè)試和團(tuán)隊(duì)協(xié)作。
未來(lái)趨勢(shì)
模塊化更強(qiáng):各庫(kù)之間互通更方便,拼裝能力更高。
企業(yè)級(jí)落地:越來(lái)越多生產(chǎn)級(jí)的AI自動(dòng)化方案出現(xiàn)。
低代碼平臺(tái)崛起:拖拽式可視化工具,讓非開(kāi)發(fā)同事也能參與AI系統(tǒng)搭建。
簡(jiǎn)單示例
使用streamlit編寫(xiě)一個(gè)簡(jiǎn)易版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 # ---- 環(huán)境變量輸入?yún)^(qū)(可根據(jù)需求修改為硬編碼) ---- st.set_page_config(page_title="Qwen 聊天機(jī)器人", page_icon="??", layout="centered") with st.sidebar: st.title("配置參數(shù)") 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("> *如無(wú)需 LangSmith,可留空*") st.markdown("---") st.markdown("by [你的名字/團(tuán)隊(duì)]") # 設(shè)置環(huán)境變量 if dashscope_api_key: os.environ["DASHSCOPE_API_KEY"] = dashscope_api_key if langsmith_api_key: os.environ["LANGSMITH_API_KEY"] = langsmith_api_key os.environ["LANGSMITH_TRACING"] = "true" if langsmith_project: os.environ["LANGSMITH_PROJECT"] = langsmith_project if langsmith_endpoint: os.environ["LANGSMITH_ENDPOINT"] = langsmith_endpoint # ---- 對(duì)話狀態(tài)定義 ---- class State(TypedDict): messages: Annotated[list, add_messages] # ---- 狀態(tài)機(jī)組裝 ---- @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 狀態(tài)維護(hù) ---- if "history" not in st.session_state: st.session_state.history = [] st.title("?? Qwen 聊天機(jī)器人(LangGraph 版)") with st.form(key="chat-form", clear_on_submit=True): user_input = st.text_area("請(qǐng)輸入你的問(wèn)題:", value="", placeholder="和機(jī)器人聊點(diǎn)什么吧…", height=80) submitted = st.form_submit_button("發(fā)送") 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"]) # 新問(wèn)題處理 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內(nèi)容 # if resp["role"] == "assistant": # full_response = resp response_placeholder.chat_message("assistant").write(resp) # 更新歷史 if full_response: st.session_state.history.append({"role": "assistant", "content": full_response}) # 清空歷史按鈕 st.sidebar.button("清空對(duì)話歷史", on_click=lambda: st.session_state.pop("history", None)) st.info("提示:本機(jī)器人支持多輪上下文記憶,支持流式輸出。輸入 'quit'/'exit'/'q' 可結(jié)束對(duì)話(但不會(huì)關(guān)閉頁(yè)面)。")
運(yùn)行效果:
配置了DASHSCOPE_API_KEY后效果如下:
結(jié)語(yǔ)
這些Python庫(kù)為AI代理搭建提供了強(qiáng)大的底層能力,讓測(cè)試工程師把更多時(shí)間花在創(chuàng)新與優(yōu)化上,而不是重復(fù)造輪子。建議你從LangChain入手,邊學(xué)邊用,親手做幾個(gè)小項(xiàng)目,比如自動(dòng)查詢(xún)天氣并推薦穿衣。實(shí)踐中你會(huì)發(fā)現(xiàn),AI代理就像樂(lè)高積木,拼出無(wú)限可能!
動(dòng)手試試:用LangChain做個(gè)“小助手”,能自動(dòng)查天氣并給出穿衣建議。你會(huì)學(xué)會(huì)AI如何記住歷史對(duì)話、調(diào)用外部API,邁出智能自動(dòng)化的第一步!
到此這篇關(guān)于從零開(kāi)始理解如何使用Python搭建智能AI代理的文章就介紹到這了,更多相關(guān)Python智能AI代理內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
基于Python編寫(xiě)一個(gè)簡(jiǎn)單的服務(wù)注冊(cè)發(fā)現(xiàn)服務(wù)器
我們都知道有很多的非常著名的注冊(cè)服務(wù)器,例如:?Consul、ZooKeeper、etcd,甚至借助于redis完成服務(wù)注冊(cè)發(fā)現(xiàn)。但是本篇文章我們將使用python?socket寫(xiě)一個(gè)非常簡(jiǎn)單的服務(wù)注冊(cè)發(fā)現(xiàn)服務(wù)器,感興趣的可以了解一下2023-04-04Django REST框架創(chuàng)建一個(gè)簡(jiǎn)單的Api實(shí)例講解
在本篇文章里小編給大家整理的是關(guān)于Django REST框架創(chuàng)建一個(gè)簡(jiǎn)單的Api實(shí)例講解,有需要的朋友們可以學(xué)習(xí)下。2019-11-11Python+Sklearn實(shí)現(xiàn)異常檢測(cè)
這篇文章主要為大家詳細(xì)介紹了Python如何利用Sklearn實(shí)現(xiàn)異常檢測(cè),文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Python有一定的幫助,感興趣的可以跟隨小編一起學(xué)習(xí)一下2022-12-12Python獲取基金網(wǎng)站網(wǎng)頁(yè)內(nèi)容、使用BeautifulSoup庫(kù)分析html操作示例
這篇文章主要介紹了Python獲取基金網(wǎng)站網(wǎng)頁(yè)內(nèi)容、使用BeautifulSoup庫(kù)分析html操作,結(jié)合實(shí)例形式分析了Python基于urllib包的網(wǎng)頁(yè)內(nèi)容獲取,以及使用BeautifulSoup分析html相關(guān)操作技巧,需要的朋友可以參考下2019-06-06淺談Python實(shí)現(xiàn)Apriori算法介紹
這篇文章主要介紹了淺談Python實(shí)現(xiàn)Apriori算法介紹,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-12-12樹(shù)莓派實(shí)現(xiàn)移動(dòng)拍照
這篇文章主要為大家詳細(xì)介紹了樹(shù)莓派實(shí)現(xiàn)移動(dòng)拍照,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-06-06Python3訪問(wèn)并下載網(wǎng)頁(yè)內(nèi)容的方法
這篇文章主要介紹了Python3訪問(wèn)并下載網(wǎng)頁(yè)內(nèi)容的方法,實(shí)例分析了Python頁(yè)面抓取及寫(xiě)入文件的實(shí)現(xiàn)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-07-07python圖像處理模塊Pillow的學(xué)習(xí)詳解
這篇文章主要介紹了python圖像處理模塊Pillow的學(xué)習(xí)詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-10-10基于python實(shí)現(xiàn)數(shù)組格式參數(shù)加密計(jì)算
這篇文章主要介紹了基于python實(shí)現(xiàn)數(shù)組格式參數(shù)加密計(jì)算,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-04-04