从零开始理解如何使用Python搭建智能AI代理

 更新时间:2025年07月22日 08:51:04   作者:Python测试之道  
Agentic AI(智能代理)正在悄然改变我们的工作方式,所以这篇文章小编就来和大家简单介绍一下如何使用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成长路线图

基础:用LangChain做一个能查询bug状态的聊天机器人,体验AI记忆与API集成。

进阶:用AutoGen模拟一个“自动化测试小组”,让AI协作完成代码生成、用例审查等工作。

专业:结合CrewAI和LlamaIndex,打造智能知识库问答系统,支持自动检索测试用例和历史缺陷。

专家:自定义开发,灵活组合多个库,实现更复杂的自动化测试和团队协作。

未来趋势

模块化更强:各库之间互通更方便,拼装能力更高。

企业级落地:越来越多生产级的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_key
    os.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 = resp
                response_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,迈出智能自动化的第一步!

到此这篇关于从零开始理解如何使用Python搭建智能AI代理的文章就介绍到这了,更多相关Python智能AI代理内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 基于Python编写一个简单的服务注册发现服务器

    基于Python编写一个简单的服务注册发现服务器

    我们都知道有很多的非常著名的注册服务器,例如: Consul、ZooKeeper、etcd,甚至借助于redis完成服务注册发现。但是本篇文章我们将使用python socket写一个非常简单的服务注册发现服务器,感兴趣的可以了解一下
    2023-04-04
  • Django REST框架创建一个简单的Api实例讲解

    Django REST框架创建一个简单的Api实例讲解

    在本篇文章里小编给大家整理的是关于Django REST框架创建一个简单的Api实例讲解,有需要的朋友们可以学习下。
    2019-11-11
  • Python+Sklearn实现异常检测

    Python+Sklearn实现异常检测

    这篇文章主要为大家详细介绍了Python如何利用Sklearn实现异常检测,文中的示例代码讲解详细,对我们学习Python有一定的帮助,感兴趣的可以跟随小编一起学习一下
    2022-12-12
  • Python获取基金网站网页内容、使用BeautifulSoup库分析html操作示例

    Python获取基金网站网页内容、使用BeautifulSoup库分析html操作示例

    这篇文章主要介绍了Python获取基金网站网页内容、使用BeautifulSoup库分析html操作,结合实例形式分析了Python基于urllib包的网页内容获取,以及使用BeautifulSoup分析html相关操作技巧,需要的朋友可以参考下
    2019-06-06
  • 浅谈Python实现Apriori算法介绍

    浅谈Python实现Apriori算法介绍

    这篇文章主要介绍了浅谈Python实现Apriori算法介绍,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-12-12
  • 树莓派实现移动拍照

    树莓派实现移动拍照

    这篇文章主要为大家详细介绍了树莓派实现移动拍照,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-06-06
  • Python3访问并下载网页内容的方法

    Python3访问并下载网页内容的方法

    这篇文章主要介绍了Python3访问并下载网页内容的方法,实例分析了Python页面抓取及写入文件的实现技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-07-07
  • python图像处理模块Pillow的学习详解

    python图像处理模块Pillow的学习详解

    这篇文章主要介绍了python图像处理模块Pillow的学习详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-10-10
  • 基于python实现数组格式参数加密计算

    基于python实现数组格式参数加密计算

    这篇文章主要介绍了基于python实现数组格式参数加密计算,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-04-04
  • 如何使用Python 绘制瀑布图

    如何使用Python 绘制瀑布图

    这篇文章主要介绍了如何使用Python 绘制瀑布图,我们一起了解瀑布图的重要性,以及如何使用不同的绘图库绘制瀑布图。瀑布图是一种二维图表,专门用于了解随着时间或多个步骤或变量的增量正负变化的影响,下文更多详细内容需要的小伙伴可以参考一下
    2022-05-05

最新评论