人工智能(AI)正迅速发展,其中最令人兴奋的进展之一是由大规模语言模型驱动的AI代理(LLM AI agents)的兴起——这些自主实体由大型语言模型(LLMs)驱动,能够模拟人类的理解、决策和任务执行。这些代理是现代AI应用的基石,例如从动态客户服务机器人到复杂的科研助手和智能自动化系统。
在这篇文章中,我们将探索大型语言模型AI代理的基础,并演示如何使用Python构建这些代理,同时突出实际应用案例。我们将讨论多个方面,例如内存管理、工具集成、安全控制,甚至将这些代理部署为微服务。
由大型语言模型(如OpenAI的GPT系列、Google的PaLM或Meta的LLaMA)驱动的LLM AI代理是能够理解自然语言指令、动态交互并执行复杂任务(比如数据分析、生成报告或与外部工具和API交互)的AI实体。与传统的聊天机器人相比,LLM代理不仅能理解自然语言指令,还能动态交互并执行复杂任务,具备上下文感知能力、多步骤任务执行能力和决策制定能力,因此非常适合现实世界的实际应用。
注:LLM为特定缩写,全文将使用该术语。
让我们用Python和流行的库如LangChain
和OpenAI
来构建一个基本的AI代理。本指南将引导你搭建一个简单的AI代理,用外部工具来增强它,最后,我们将构建更复杂的多代理系统。
首先,确保你已经安装了所需的软件库。
pip install langchain openai
这将安装langchain和openai库。
我们将使用LangChain
库来设置一个基础代理,这个代理会利用OpenAI的GPT模型。请确保你已获得OpenAI的API密钥。
from langchain.llms 导入 OpenAI from langchain.chains 导入 LLMChain from langchain.prompts 导入 PromptTemplate # 初始化 OpenAI 模型 llm = OpenAI(openai_api_key="YOUR_OPENAI_API_KEY") # 定义提示 template = """ 你是一个擅长数据分析和自动化的人工智能助手。回答以下问题: 问题:{question} """ # 设置提示和模型链 prompt = PromptTemplate(template=template, input_variables=["question"]) chain = LLMChain(prompt=prompt, llm=llm) # 示例问题 query = "在医疗保健领域,人工智能的影响是什么?" response = chain.run(question=query) print(f"回复: {response}")
现在,让我们通过整合外部工具来提升我们的代理。在这里,我们将使用yfinance
库让代理获取股票价格。
如果还没有安装,请安装 /yfinance
库:
在终端中运行以下命令来安装yfinance包: pip install yfinance
import yfinance as yf # 定义一个工具 def get_stock_price(stock_symbol): stock = yf.Ticker(stock_symbol) return stock.history(period="1d")["Close"][0] # 更新代理人提示以使用新工具 template = """ 你是一个财务助手,可以访问最新的实时股票价格。 如果问题是关于股票价格的,使用提供的 `get_stock_price` 工具来获取最新值。 问题: {question} """ # 将工具添加到代理人的记忆中 from langchain.tools import Tool tool = Tool.from_function(get_stock_price, description="获取给定股票代码的股票价格,例如 AAPL") chain_with_tool = LLMChain(prompt=PromptTemplate(template=template, input_variables=["question"]), llm=llm, tools=[tool]) # 示例查询,使用工具 query = "AAPL 的当前股票价格是多少?" response = chain_with_tool.run(question=query) print(f"代理人的响应是: {response}")
第四步:构建多代理系统
对于更复杂的工作流程而言,你可以设置多个专门负责不同任务的代理,例如数据分析、研究和报告等。我们来构建一个能够分析数据集并生成见解的协作型代理。
导入 pandas as pd # 创建一个小的数据集 data = { 'Product': ['笔记本电脑', '智能手机', '平板电脑', '台式电脑'], 'Sales': [150, 200, 100, 90] } df = pd.DataFrame(data) # 让代理使用这个分析工具 def analyze_sales(df): max_sales = df.loc[df['Sales'].idxmax()] return f"销量最高的是 {max_sales['Product']},共售出 {max_sales['Sales']} 件。" # 更新代理以使用该分析工具 analysis_tool = Tool.from_function(analyze_sales, description="分析销售数据并提供见解。") # 创建一个多代理协作的新提示 multi_agent_template = """ 你们是两个人工智能代理,一个是数据分析师,另一个是商业专家。 数据分析师会根据销售数据给出见解,而商业专家会基于这些数据提出策略。 问题是什么? {question} """ # 定义多代理链 multi_agent_chain = LLMChain(prompt=PromptTemplate(template=multi_agent_template, input_variables=["question"]), llm=llm, tools=[analysis_tool]) # 这里是一个多代理协作的例子查询 query = "分析销售数据并提出商业策略。" response = multi_agent_chain.run(question=query) 打印代理的回复:{response}
当然!这里有一些额外的建议,可以让你的文章更丰富,更有深度。
传统LLM的一个关键限制在于它们在不同交互间缺乏持久性记忆。为了构建能够回忆过去信息的更高级AI代理,可以引入记忆管理技术。这可能包括但不限于:
比如这样实现:
class Memory: def __init__(self): self.记忆存储 = [] # 初始化记忆存储 def 记忆(self, 互动): # 存储互动记录 self.记忆存储.append(互动) def 回忆(self): # 回忆并返回所有记录 return " ".join(self.记忆存储)
你可以调整你的助手,让它在互动时使用这段记忆。
memory = Memory() interaction = "用户:哪些产品销售最好?AI:笔记本电脑和智能手机。" memory.remember(interaction) # 在接下来的查询中使用记忆 template_with_memory = """ 你是一个具有记忆功能的AI助手。这是你以前对话中记得的内容: 记忆:{memory} 基于这些信息,回答以下问题: 问题:{question} """ prompt_with_memory = PromptTemplate(template=template_with_memory, input_variables=["memory", "question"]) chain_with_memory = LLMChain(prompt=prompt_with_memory, llm=llm) # 在下一个交互中使用记忆 query = "你能为这些最畅销的产品提供一些营销策略吗?" response = chain_with_memory.run(memory=memory.recall(), question=query) print(f"代理的响应:{response}")
角色设定对于构建能够模拟真实世界场景或团队工作的智能代理至关重要。可以定义角色,如 数据科学家
、研究员
或 商业策略师
,并为每个智能代理分配特定职责。
例如:不同角色的多代理合作示例
from langchain.agents import AgentExecutor, create_openai_functions_agent # 定义各自的角色 data_scientist_prompt = "你是一名数据科学家。分析数据集并总结发现。" business_prompt = "你是一名商业策略师。根据数据洞察,提出增加销售额的策略建议。" # 为每个角色创建代理 data_scientist_agent = LLMChain(prompt=PromptTemplate(template=data_scientist_prompt, input_variables=["data"]), llm=llm) business_strategist_agent = LLMChain(prompt=PromptTemplate(template=business_prompt, input_variables=["insights"]), llm=llm) # 用于协调代理的函数 def collaborative_agent(data): insights = data_scientist_agent.run(data=data) strategies = business_strategist_agent.run(insights=insights) return f"数据洞察:{insights}\n建议策略:{strategies}" # 示例数据 data_input = {"data": "销售数据显示,产品A在第三季度的销售额下降了20%"} response = collaborative_agent(data=data_input) print(response)
通过将您的AI代理与实时数据(如股票价格、天气更新或新闻提要)集成,可以让您的AI代理变得更强大,让它能够做出更好的决策,并提供实时见解。
示例:通过API获取实时数据
import requests # 函数用于获取实时天气信息 def get_weather(city): api_key = "YOUR_API_KEY" url = f"http://api.openweathermap.org/data/2.5/weather?q={city}&appid={api_key}" response = requests.get(url) data = response.json() if data["cod"] == 200: weather_description = data["weather"][0]["description"] temperature = round(data["main"]["temp"] - 273.15, 2) # 转换为摄氏度 return f"{city} 当前天气为 {weather_description},温度为 {temperature}°C。" 否则: return "无法获取当前天气数据。" # 在代理提示中使用此函数 template_with_weather = """ 你是一个提供天气信息的虚拟助手。 使用 `get_weather` 函数来获取提到城市的实时天气。 问题:{question} """ weather_chain = LLMChain(prompt=PromptTemplate(template=template_with_weather, input_variables=["question"]), llm=llm, tools=[Tool.from_function(get_weather)]) # 示例交互 query = "纽约现在的天气怎么样?" response = weather_chain.run(question=query) print(f"代理的回答是:{response}")
对于对安全性要求极高的应用,实现控制代理输出的防护栏,确保它遵循特定的规定和指南。这尤其在金融、医疗或客户服务等领域尤为重要。
示例:为代理程序增加安全规定
# 定义安全规则 def safety_check(response): 禁止关键词 = ["hack", "exploit", "illegal"] for keyword in 禁止关键词: if keyword in response: return False return True # 修改代理以包含安全性检查 def safe_response(agent_response): if safety_check(agent_response): return agent_response else: return "请求的信息违反安全指南,无法提供。" # 示例互动 query = "如何入侵服务器?" unsafe_response = chain.run(question=query) safe_output = safe_response(unsafe_response) print(f"回复: {safe_output}")
对于生产环境,考虑将您的 LLM 代理作为微服务部署,使用 Flask 或 FastAPI。这使您可以构建可扩展和模块化的 AI 服务,这些服务可以被其他应用程序调用或集成。
示例:使用FastAPI部署代理
from fastapi import FastAPI from pydantic import BaseModel # 创建 FastAPI 应用程序 app = FastAPI() # 定义输入模型 class Query(BaseModel): question: str # 使用 LangChain 创建一个简单的 LLM 链 @app.post("/query") async def answer_question(query: Query): response = chain.run(question=query.question) return {"response": response} # 使用 uvicorn 启动服务器,命令如下:uvicorn filename:app --reload
由大型语言模型驱动的AI代理正在重塑我们构建能够自主完成复杂任务的智能系统的方法或方式。通过利用如LangChain
之类的Python库,我们可以轻松构建能够互动、协作并为各个领域提供价值的代理。无论你是创建一个简单的问答机器人还是一款多代理研究助手,可能性无穷无尽。