LLM Agent实战:5分钟教你用Python+LangChain搭建自己的AI助手(附代码)

最近在开发者社区里,LLM Agent的热度居高不下。这种能自主思考、调用工具、拥有记忆的AI助手,正在改变我们与机器交互的方式。今天我们就用Python和LangChain框架,从零开始构建一个能查天气、管理日程的智能助手。整个过程只需要5分钟,跟着代码一步步来,你就能拥有自己的AI管家。

1. 环境准备与基础配置

首先确保你的Python版本在3.8以上。我们推荐使用conda创建虚拟环境:

conda create -n langchain-demo python=3.10
conda activate langchain-demo

安装核心依赖包:

pip install langchain openai python-dotenv

接下来需要准备OpenAI的API密钥。在项目根目录创建.env文件:

OPENAI_API_KEY=你的API密钥

提示:如果没有OpenAI账号,可以访问其官网注册,新用户有免费额度

基础配置完成后,我们来初始化LangChain的核心组件:

from langchain.llms import OpenAI
from langchain.chains import LLMChain
from langchain.prompts import PromptTemplate
import os
from dotenv import load_dotenv

load_dotenv()
llm = OpenAI(temperature=0.7)  # 控制生成结果的随机性

2. 构建基础对话功能

让我们先实现一个简单的问答机器人。创建basic_chat.py

def simple_chat():
    prompt = PromptTemplate(
        input_variables=["question"],
        template="你是一个专业AI助手。请回答:{question}"
    )
    chain = LLMChain(llm=llm, prompt=prompt)
    
    while True:
        user_input = input("你:")
        if user_input.lower() in ["退出", "exit"]:
            break
        response = chain.run(question=user_input)
        print(f"AI:{response}")

这个基础版本已经能处理简单问答。测试一下:

simple_chat()

你会看到类似这样的交互:

你:今天的日期是?
AI:今天是2023年11月15日,星期三。

3. 添加工具集成能力

真正的Agent需要能调用外部工具。我们以天气查询为例:

首先安装天气API库:

pip install requests

创建天气查询工具:

import requests

def get_weather(city: str) -> str:
    # 这里使用模拟API,实际项目可接入心知天气等专业服务
    weather_data = {
        "北京": "晴,15°C",
        "上海": "多云,18°C",
        "广州": "阵雨,22°C"
    }
    return weather_data.get(city, "暂不支持该城市")

将工具集成到Agent中:

from langchain.agents import Tool
from langchain.agents import initialize_agent

weather_tool = Tool(
    name="天气查询",
    func=get_weather,
    description="用于查询城市天气情况,输入城市名称"
)

tools = [weather_tool]
agent = initialize_agent(tools, llm, agent="zero-shot-react-description", verbose=True)

现在可以测试天气查询功能:

response = agent.run("上海今天天气怎么样?")
print(response)

输出示例:

> 进入新链...
思考:需要查询上海天气
行动:天气查询
行动输入:上海
观察:多云,18°C
思考:现在知道最终答案
最终答案:上海今天的天气是多云,气温18°C。

4. 实现记忆功能

没有记忆的Agent就像金鱼。我们来添加对话历史记忆:

from langchain.memory import ConversationBufferMemory

memory = ConversationBufferMemory(memory_key="chat_history")
agent = initialize_agent(tools, llm, 
                        agent="conversational-react-description",
                        memory=memory,
                        verbose=True)

测试连续对话:

print(agent.run("我住在北京"))  # 记住用户位置
print(agent.run("这里的天气如何?"))  # 能自动引用记忆

输出会显示:

> 进入新链...
思考:用户提到住在北京
行动:天气查询
行动输入:北京
观察:晴,15°C
思考:现在知道最终答案
最终答案:北京现在是晴天,气温15°C。

5. 扩展日历管理功能

让我们再添加一个实用功能——日程管理。首先创建日历工具:

from datetime import datetime

class CalendarManager:
    def __init__(self):
        self.events = []
    
    def add_event(self, title: str, time: str):
        event = {"title": title, "time": time}
        self.events.append(event)
        return f"已添加:{title} 在 {time}"
    
    def list_events(self):
        if not self.events:
            return "当前没有日程安排"
        return "\n".join([f"{e['time']} {e['title']}" for e in self.events])

calendar = CalendarManager()

calendar_tool = Tool(
    name="日历管理",
    func=lambda x: calendar.add_event(*x.split("|")) if "|" in x else calendar.list_events(),
    description="添加事件用'标题|时间'格式,查询直接输入'我的日程'"
)

更新工具列表:

tools = [weather_tool, calendar_tool]
agent = initialize_agent(tools, llm,
                        agent="conversational-react-description",
                        memory=memory,
                        verbose=True)

测试日程功能:

print(agent.run("添加会议|明天下午3点"))
print(agent.run("我的日程有哪些?"))

6. 部署与优化建议

完成开发后,你可以通过FastAPI快速创建Web接口:

from fastapi import FastAPI
from pydantic import BaseModel

app = FastAPI()

class Query(BaseModel):
    text: str

@app.post("/chat")
async def chat(query: Query):
    return {"response": agent.run(query.text)}

启动服务:

pip install fastapi uvicorn
uvicorn main:app --reload

几个优化方向:

  1. 性能优化

    • 使用gpt-3.5-turbo降低成本
    • 添加缓存机制减少API调用
  2. 功能扩展

    • 集成邮件发送功能
    • 添加多语言支持
    • 实现文件处理能力
  3. 用户体验

    • 添加语音输入输出
    • 开发移动端应用
    • 实现用户个性化配置
# 完整代码示例
from langchain.llms import OpenAI
from langchain.agents import Tool, initialize_agent
from langchain.memory import ConversationBufferMemory
import os
from dotenv import load_dotenv

load_dotenv()

class CalendarManager:
    # ... 同上 ...

# 初始化所有组件
llm = OpenAI(temperature=0.7)
memory = ConversationBufferMemory(memory_key="chat_history")
calendar = CalendarManager()

# 定义工具
tools = [
    Tool(name="天气查询", func=get_weather, description="查询城市天气"),
    Tool(name="日历管理", 
         func=lambda x: calendar.add_event(*x.split("|")) if "|" in x else calendar.list_events(),
         description="管理日程安排")
]

# 创建Agent
agent = initialize_agent(tools, llm,
                        agent="conversational-react-description",
                        memory=memory,
                        verbose=True)

# 启动交互
while True:
    query = input("你:")
    if query.lower() in ["退出", "exit"]:
        break
    print(agent.run(query))
Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐