小白学AI开发01:创建第一个示例Agent

在 LangChain 开发中,我们的核心工作是写 Prompt(提示词)。

除此之外,还需要了解下python基础,简单了解即可,不需要系统学习,这就是AI时代对技术爱好者的红利。

01 | 构建独立的python环境

使用miniconda构建独立的python环境。

官方网站:https://www.anaconda.com/

选择适合你的,我这里直接选择图形化安装的Miniconda:

下载后安装:

关闭并重新打开终端。此时你会看到命令行前面多了个 (base),这说明 Conda 已经接管了环境。

然后创建 Python 3.12 专属学习环境:

BASH 复制代码
# 创建环境并指定 Python 版本
conda create -n lc python=3.12 -y

# 激活环境
conda activate lc

Tips:如果创建环境,遇到让同意服务/条款之类,直接按提示命令执行同意即可。

后面测试不同功能的python程序肯定免不了引用各种类型的包,我们统一放到 requirements.txt 中,后续新环境也可以直接一键安装需要引入的相关包。

BASH 复制代码
pip install -r requirements.txt

定期维护requirements.txt文件:

BASH 复制代码
langchain
langchain-openai
python-dotenv

02 | 创建第一个示例Agent

这里仿照LangChain官方文档,构建一个简单的Agent。

因为笔者暂时没有Claude模型可用,所以替换为国内的模型,在我们学习测试阶段,基本是没啥影响的。

vi basic.py

python 复制代码
import os
from dotenv import load_dotenv
from langchain.agents import create_agent
from langchain_openai import ChatOpenAI
from langchain.tools import tool

# 加载 .env 文件中的 SILICONFLOW_API_KEY
load_dotenv()

# 1. 定义工具:必须要写清晰的 Docstring(函数注释)
@tool
def get_weather(city: str) -> str:
    """获取指定城市的实时天气情况。"""
    return f"{city} 的天气总是阴雨连连!"

# 2. 初始化 SiliconFlow 模型
llm = ChatOpenAI(
    model="deepseek-ai/DeepSeek-V3", 
    api_key=os.getenv("SILICONFLOW_API_KEY"),
    base_url="https://api.siliconflow.cn/v1",
    temperature=0.1
)

# 3. 创建 Agent
agent = create_agent(
    model=llm,
    tools=[get_weather],
    system_prompt="你是一个乐于助人的天气助手。"
)

# 4. 运行
if __name__ == "__main__":
    response = agent.invoke(
        {"messages": [{"role": "user", "content": "北京天气怎么样?"}]}
    )
    # 打印最后一条消息(AI 的回答)
    print(response["messages"][-1].content)

03 | 增强这个示例Agent

汉化并稍微改造下官方的示例,使其适用于我们的测试环境:

vi enhance.py

PYTHON 复制代码
import os
from dataclasses import dataclass
from dotenv import load_dotenv

from langchain_openai import ChatOpenAI
from langchain.agents import create_agent
from langchain.tools import tool, ToolRuntime
from langgraph.checkpoint.memory import InMemorySaver
from langchain.agents.structured_output import ToolStrategy

load_dotenv()

# 1. 定义系统提示词(要求 AI 做个"谐音梗"专家)
SYSTEM_PROMPT = """你是一位专业的资深天气预报员,说话极其幽默,特别喜欢讲"谐音梗"。

你有权使用以下两个工具:
- get_weather_for_location: 获取特定城市的天气。
- get_user_location: 获取当前用户的所在地。

如果用户询问天气,请务必确认地点。如果用户说的是"我这儿"或"我这里",请调用 get_user_location 获取他们的位置。"""

# 2. 定义上下文结构(存储用户信息)
@dataclass
class Context:
    """自定义运行时上下文。"""
    user_id: str

# 3. 定义工具
@tool
def get_weather_for_location(city: str) -> str:
    """获取指定城市的天气情况。"""
    return f"{city} 的天气总是阳光灿烂!"

@tool
def get_user_location(runtime: ToolRuntime[Context]) -> str:
    """根据用户 ID 获取其地理位置。"""
    user_id = runtime.context.user_id
    # 模拟数据库:用户 1 在北京,其他在珠海
    return "北京" if user_id == "1" else "珠海"

# 4. 配置你的模型 (SiliconFlow)
model = ChatOpenAI(
    model="deepseek-ai/DeepSeek-V3",
    api_key=os.getenv("SILICONFLOW_API_KEY"),
    base_url="https://api.siliconflow.cn/v1",
    temperature=0.7  # 稍微提高随机性,让谐音梗更有创意
)

# 5. 定义响应格式(汉化字段描述,让 AI 明白填什么)
@dataclass
class ResponseFormat:
    """Agent 的结构化回复格式。"""
    # 幽默的谐音梗回复
    punny_response: str
    # 任何关于天气的有趣信息(如果有的话)
    weather_conditions: str | None = None

# 6. 设置记忆存储
checkpointer = InMemorySaver()

# 7. 创建 Agent
agent = create_agent(
    model=model,
    system_prompt=SYSTEM_PROMPT,
    tools=[get_user_location, get_weather_for_location],
    context_schema=Context,
    response_format=ToolStrategy(ResponseFormat),
    checkpointer=checkpointer
)

# --- 运行测试 ---

# 设置会话 ID
config = {"configurable": {"thread_id": "test_user_001"}}

# 第一次提问
print("--- 第一次对话 ---")
response = agent.invoke(
    {"messages": [{"role": "user", "content": "外面天气怎么样?"}]},
    config=config,
    context=Context(user_id="1")
)

# 访问结构化结果
res = response['structured_response']
print(f"AI: {res.punny_response}")
print(f"详情: {res.weather_conditions}")

print("\n--- 第二次对话(测试记忆) ---")
# 第二次提问
response = agent.invoke(
    {"messages": [{"role": "user", "content": "谢谢你!我在哪里?"}]},
    config=config,
    context=Context(user_id="1")
)

res = response['structured_response']
print(f"AI: {res.punny_response}")

这段示例代码的核心逻辑是:

第一次对话:

用户问:"外面天气怎么样?"(没说地点)。

AI 思考:系统提示词告诉我,如果地点不明,先去查用户在哪。

动作:AI 调用 get_user_location -> 得到"北京" -> 调用 get_weather_for_location -> 得到天气。

回复:根据 ResponseFormat 吐出一个谐音梗。

第二次对话:

用户问:"谢谢你!我在哪里?"

AI 思考:由于有 thread_id 和 checkpointer,AI 记得上一次查询的结果。

动作:它不需要再次查工具,直接从记忆里提取信息并回复。

然后手工将代码中的 user_id 改为2,再次运行,就会根据工具 get_user_location 中的示例逻辑,得到地点为"珠海",两次执行的效果参考如下:

该段示例代码虽然简单,但其实已经能展现出一个企业级 AI 智能体(Agent)的缩影。它涵盖了现代 AI 开发中最核心的三个支柱:工具调用(Tool Use)、上下文记忆(Memory)、以及结构化输出(Structured Output)。

相关推荐
ai小陈26 分钟前
PyTorch DataLoader数据加载性能排查:GPU利用率低的实操指南
人工智能·pytorch·python·深度学习·ai·gpu算力
2601_962078034 小时前
百度双重主要上市9月1日生效,“全栈AI”如何打开估值空间?
百度·ai·双重上市·估值空间·港股通
怕浪猫6 小时前
Agent 编排 Agent:DeepSeek Harness 的子代理与工作流系统有多强
agent·工作流引擎·deepseek
CaseyWei8 小时前
Harness 架构 Multi‑Agent(多智能体)完整深度解析
人工智能·ai·架构·harness
eaglewgs9 小时前
关于AI书写测试用例,谈一下我的思考
人工智能·测试开发·ai·测试用例·agent·测试经验·agent测试开发
知了一笑10 小时前
企业的卷味,组织的AI味
人工智能·ai·ai工作流
icsocket10 小时前
国内测试稳定可靠的AI算力芯片测试座厂家
ai
魔术师Grace10 小时前
AI 为什么会越改越坏?5个Tools 拆解编程 Agent
openai·agent·ai编程
王国强200910 小时前
OpenCode 深度使用指南
agent