LLM Agent实战:5分钟教你用Python+LangChain搭建自己的AI助手(附代码)
·
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
几个优化方向:
-
性能优化:
- 使用
gpt-3.5-turbo降低成本 - 添加缓存机制减少API调用
- 使用
-
功能扩展:
- 集成邮件发送功能
- 添加多语言支持
- 实现文件处理能力
-
用户体验:
- 添加语音输入输出
- 开发移动端应用
- 实现用户个性化配置
# 完整代码示例
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))
更多推荐


所有评论(0)