找回密码
 立即注册
首页 业界区 业界 小白学AI开发01:创建第一个示例Agent

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

莅耸 2026-1-15 00:45:03
在 LangChain 开发中,我们的核心工作是写 Prompt(提示词)。
除此之外,还需要了解下python基础,简单了解即可,不需要系统学习,这就是AI时代对技术爱好者的红利。
01 | 构建独立的python环境

使用miniconda构建独立的python环境。
官方网站:https://www.anaconda.com/
选择适合你的,我这里直接选择图形化安装的Miniconda:

下载后安装:

关闭并重新打开终端。此时你会看到命令行前面多了个 (base),这说明 Conda 已经接管了环境。
然后创建 Python 3.12 专属学习环境:
  1. # 创建环境并指定 Python 版本conda create -n lc python=3.12 -y# 激活环境conda activate lc
复制代码
Tips:如果创建环境,遇到让同意服务/条款之类,直接按提示命令执行同意即可。
后面测试不同功能的python程序肯定免不了引用各种类型的包,我们统一放到 requirements.txt 中,后续新环境也可以直接一键安装需要引入的相关包。
  1. pip install -r requirements.txt
复制代码
定期维护requirements.txt文件:
  1. langchainlangchain-openaipython-dotenv
复制代码
02 | 创建第一个示例Agent

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

  • https://docs.langchain.com/oss/python/langchain/quickstart
因为笔者暂时没有Claude模型可用,所以替换为国内的模型,在我们学习测试阶段,基本是没啥影响的。
vi basic.py
  1. import osfrom dotenv import load_dotenvfrom langchain.agents import create_agentfrom langchain_openai import ChatOpenAIfrom langchain.tools import tool# 加载 .env 文件中的 SILICONFLOW_API_KEYload_dotenv()# 1. 定义工具:必须要写清晰的 Docstring(函数注释)@tooldef 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. 创建 Agentagent = 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
  1. import osfrom dataclasses import dataclassfrom dotenv import load_dotenvfrom langchain_openai import ChatOpenAIfrom langchain.agents import create_agentfrom langchain.tools import tool, ToolRuntimefrom langgraph.checkpoint.memory import InMemorySaverfrom langchain.agents.structured_output import ToolStrategyload_dotenv()# 1. 定义系统提示词(要求 AI 做个“谐音梗”专家)SYSTEM_PROMPT = """你是一位专业的资深天气预报员,说话极其幽默,特别喜欢讲“谐音梗”。你有权使用以下两个工具:- get_weather_for_location: 获取特定城市的天气。- get_user_location: 获取当前用户的所在地。如果用户询问天气,请务必确认地点。如果用户说的是“我这儿”或“我这里”,请调用 get_user_location 获取他们的位置。"""# 2. 定义上下文结构(存储用户信息)@dataclassclass Context:    """自定义运行时上下文。"""    user_id: str# 3. 定义工具@tooldef get_weather_for_location(city: str) -> str:    """获取指定城市的天气情况。"""    return f"{city} 的天气总是阳光灿烂!"@tooldef 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 明白填什么)@dataclassclass ResponseFormat:    """Agent 的结构化回复格式。"""    # 幽默的谐音梗回复    punny_response: str    # 任何关于天气的有趣信息(如果有的话)    weather_conditions: str | None = None# 6. 设置记忆存储checkpointer = InMemorySaver()# 7. 创建 Agentagent = 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)# --- 运行测试 ---# 设置会话 IDconfig = {"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)。

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

相关推荐

2026-2-3 06:39:08

举报

2026-2-9 00:50:10

举报

2026-2-10 18:09:28

举报

2026-2-11 15:26:16

举报

2026-2-12 02:57:06

举报

2026-2-12 16:11:24

举报

2026-2-24 05:04:30

举报

2026-3-5 12:10:24

举报

您需要登录后才可以回帖 登录 | 立即注册