【Agent开发第一期】LLM+Agent-从概念到第一次模型调用

文章目录

    • 一、前言
    • [二、概念对齐:LLM vs Agent](#二、概念对齐:LLM vs Agent)
      • [2.1 一张表看清区别](#2.1 一张表看清区别)
      • [2.2 Agent 的"组装公式"](#2.2 Agent 的"组装公式")
    • 三、开工准备:从注册到第一次调用
      • [3.1 注册 DeepSeek + 充值 + 创建 API Key](#3.1 注册 DeepSeek + 充值 + 创建 API Key)
      • [3.2 Python 环境检查](#3.2 Python 环境检查)
      • [3.3 虚拟环境:为什么要单独建](#3.3 虚拟环境:为什么要单独建)
      • [3.4 跑通第一行代码](#3.4 跑通第一行代码)
    • 四、跑起来:第一次模型调用的实际体验
      • [4.1 核心代码就一行](#4.1 核心代码就一行)
      • [4.2 三个预设问题:感受 LLM 的能力边界](#4.2 三个预设问题:感受 LLM 的能力边界)
      • [4.3 交互模式:为什么不用内置 input](#4.3 交互模式:为什么不用内置 input)
      • [4.4 三个埋伏笔的问题](#4.4 三个埋伏笔的问题)
    • 五、执行脚本
    • 六、总结

一、前言

最近在折腾 Agent,刚开始就被两道门槛卡得怀疑人生:

  1. 概念门槛:LLM 和 Agent 到底差在哪?学 Agent 是不是得先把 LLM 啃透?
  2. 操作门槛 :API Key 上哪买?代码跑不起来报一堆 ModuleNotFoundError 怎么办?

本人不才,踩了一圈坑之后总算把第一期的环境跑通了。这一篇文章把概念讲清楚、把操作步骤拆明白,看完你就能:

  • 一句话讲清 LLM vs Agent
  • 注册 DeepSeek、拿到自己的 API Key
  • 跑通第一次模型调用,看到模型回你一句话

本文是 Agent 教学系列第 01 期的实战笔记,干货为主,偶尔自嘲,各位看官将就着看。

二、概念对齐:LLM vs Agent

2.1 一张表看清区别

先上一张我反复念叨的对照表,看完基本就懂了:

LLM Agent
本质 大语言模型,输入文本/图像/音频输出文本(现已多模态) 以 LLM 为大脑,能调用工具、保持记忆、自主循环
能力边界 只会"生成内容"(说、写、画),不能主动行动 能"说"也能"做"(调工具、读写文件、上网)
类比 一个博学但无手脚的顾问 一个有手有脚的助理

翻译成人话:LLM 是"会说不会做",Agent 是"能说也能做"。

你问 LLM"现在几点",它会一本正经地胡编;你让 LLM 帮你订个外卖,它也只能嘴上答应,手是伸不出去的。Agent 就是给这个顾问装上手脚和脑子,让它真能干点活。

2.2 Agent 的"组装公式"

记住这一行:

复制代码
Agent = LLM(大脑) + 工具(手脚) + 记忆(脑子) + 循环(意志)

后续 14 期,我们就是给 LLM 一件一件地装"装备":

  • 工具:让模型能查时间、读文件、上网搜
  • 记忆:让模型记住你上一句说了啥
  • 循环:让模型自己决定下一步干啥,而不是问一句答一句

所以学 Agent 这事,本质上不是"学一个新东西",而是"给 LLM 加装备"。先把第一期的环境跑通,后面的事都好办。

三、开工准备:从注册到第一次调用

3.1 注册 DeepSeek + 充值 + 创建 API Key

三步走,简单粗暴:

  1. 注册账号:访问 https://platform.deepseek.com/,手机号注册,完成实名认证
  2. 充值额度:DeepSeek 按 token 计费,1 元约能买 100 万 token,先充 10 元够学完整套课程
  3. 创建 API Key:控制台 → API Keys → 创建新 Key

踩坑提醒 :API Key 只显示一次!复制好立刻存起来,丢了就只能重建。命名建议 teaching-course,以后好认。

3.2 Python 环境检查

课程代码需要 Python 3.10 及以上。先在终端确认:

bash 复制代码
python3 --version      # macOS / Linux
python --version       # Windows
  • 输出版本号 ≥ 3.10:跳过安装,直接到 3.3
  • 提示 command not found 或版本过低:按下面装

macOS(系统自带 Python 通常偏低,建议另装):

  • 访问 https://www.python.org/downloads/ 下载最新 3.x 安装包,双击安装
  • 或用 Homebrew:brew install python@3.13
  • 装完重开终端,再次确认版本

Windows

  • 访问 https://www.python.org/downloads/ 下载安装包
  • 安装时务必勾选 "Add python.exe to PATH" ,否则命令行找不到 python
  • 装完重开 PowerShell / cmd,执行 python --version 确认

3.3 虚拟环境:为什么要单独建

为什么要虚拟环境? 虚拟环境(venv)给当前项目单独装一套依赖,和系统、其他项目互不污染。本课程从 01 期用到 15 期,依赖覆盖 openai / mcp / fastapi 等多个大库,不隔离的话版本会互相打架。删项目时只要删 .venv 目录即可干净卸载。

类比一下:就像给你的厨房单独配一套锅,别和邻居共用,不然今天他炖了辣的,你明天煮个甜汤都得串味。

macOS / Linux

bash 复制代码
# 1. 创建虚拟环境(只需一次)
python3 -m venv .venv

# 2. 激活(每次开新终端都要做一次)
source .venv/bin/activate

# 3. 安装依赖(激活后 pip 会装到 .venv 里,不污染全局)
pip install -r requirements.txt

# 4. 配置 API Key
cp .env.example .env
# 用文本编辑器打开 .env,把 DEEPSEEK_API_KEY 改成你刚才复制的真实 Key

Windows(PowerShell):

powershell 复制代码
# 1. 创建虚拟环境(只需一次)
python -m venv .venv

# 2. 激活(每次开新终端都要做一次)
.venv\Scripts\activate

# 3. 安装依赖
pip install -r requirements.txt

# 4. 配置 API Key
copy .env.example .env
# 用记事本打开 .env,把 DEEPSEEK_API_KEY 改成你刚才复制的真实 Key

激活成功后,终端提示符前面会出现 (.venv),说明你已经在虚拟环境里。此时 pythonpython3 都指向虚拟环境里的 Python。

Windows 常见报错 :首次激活若提示 无法加载文件......因为在此系统上禁止运行脚本,在 PowerShell 管理员模式执行一次:

复制代码
Set-ExecutionPolicy -Scope CurrentUser RemoteSigned

然后重试激活即可。

3.4 跑通第一行代码

环境装好,跑一下:

bash 复制代码
python code/step01_hello_agent.py

没激活虚拟环境直接跑会报 ModuleNotFoundError: No module named 'dotenv',因为依赖没装进来。看到这个报错就回到 3.3 激活环境。

程序会自动问三个问题,然后进入交互模式。

四、跑起来:第一次模型调用的实际体验

4.1 核心代码就一行

把所有花架子去掉,第一次调用就靠这一段:

python 复制代码
client = OpenAI(
    api_key=os.environ["DEEPSEEK_API_KEY"],
    base_url="https://api.deepseek.com",   # 关键:指向 DeepSeek
)

为什么用 openai SDK 而不是官方 deepseek SDK?

答案很朴素:DeepSeek 没有独立 SDK,官方推荐用 openai SDK + 改 base_url。这样做的好处是代码几乎零成本切换到 OpenAI、Moonshot、智谱等兼容厂商------以后想换厂商,改一行 URL 就行,不用重写。

调用流程长这样:

复制代码
你的代码 → openai SDK → HTTPS 请求 → DeepSeek 服务器 → 模型推理 → 返回 JSON → SDK 解析 → 你拿到文本

4.2 三个预设问题:感受 LLM 的能力边界

程序跑起来会自动问三个问题:

  1. "你好,请用一句话介绍你自己" ------ 感受模型自我描述
  2. "用 Python 写一个冒泡排序,只要代码不要解释" ------ 感受代码生成能力
  3. "帮我算一下 17 * 23 等于多少" ------ 感受数学能力(顺带看看它会不会算错)

这三个问题不是随便挑的,每个都在"摸一下 LLM 的底"。跑完你会对它能干什么、不能干什么有个直观感受。

4.3 交互模式:为什么不用内置 input

进入交互模式后,程序用的是 prompt_toolkit 而不是内置的 input()。原因很实在:

  • 完整退格:长文本和中文都能删到行首(input() 在某些系统上中文会删一半卡住)
  • ← / → 移动光标:改字不用从头重打
  • ↑ / ↓ 翻历史:上一句问过啥能直接翻回来
  • Ctrl-C 作废当前行而不退出程序:手滑了不丢会话

这种小细节看着不起眼,真正用起来体验差一大截。

4.4 三个埋伏笔的问题

我在程序里埋了三个"伏笔",专门让你踩一踩,然后引出后续课程:

你问的问题 模型的回答 后面哪期解决
"现在几点?" 答不准,它不知道当前时间 第 05 期 Tool Use
连续问三次同样问题 每次回答略有不同 第 03 期 history
"我叫张三" → "我姓什么" 它答不上来 第 02 期连续对话

这就是这套课程的节奏:先让你发现"模型哪里不行",再告诉你"后面怎么让它行"。

五、执行脚本

python 复制代码
#!/usr/bin/env python3
"""step01_hello_agent.py --- 第 01 期:认识 Agent + 开工准备

本期目标:
1. 配置好 DeepSeek API Key
2. 能跑通第一次模型调用
3. 理解 LLM 和 Agent 的区别(为后续铺垫)

运行:
    python code/step01_hello_agent.py
"""
import os
from dotenv import load_dotenv
from openai import OpenAI
from prompt_toolkit import prompt
from prompt_toolkit.history import InMemoryHistory

load_dotenv()

# ============ 1. 初始化客户端 ============
# DeepSeek 兼容 OpenAI 协议,所以直接用 openai SDK
# 关键配置:
#   - api_key:你在 platform.deepseek.com 创建的 Key
#   - base_url:固定为 https://api.deepseek.com
client = OpenAI(
    api_key=os.environ["DEEPSEEK_API_KEY"],
    base_url=os.environ.get("DEEPSEEK_BASE_URL", "https://api.deepseek.com"),
)
MODEL = os.environ.get("DEEPSEEK_MODEL", "deepseek-chat")


def chat(user_input: str) -> str:
    """单次对话:输入一句话,返回模型回答。"""
    response = client.chat.completions.create(
        model=MODEL,
        messages=[{"role": "user", "content": user_input}],
        max_tokens=1000,
    )
    return response.choices[0].message.content


def main():
    print("=" * 60)
    print("第 01 期:Hello Agent --- 你的第一次模型调用")
    print("=" * 60)
    print(f"当前模型: {MODEL}")
    print(f"API 地址: {client.base_url}")
    print("=" * 60)

    # 试试三个问题,感受 LLM 的能力边界
    questions = [
        "你好,请用一句话介绍你自己",
        "用 Python 写一个冒泡排序,只要代码不要解释",
        "帮我算一下 17 * 23 等于多少",
    ]

    for i, q in enumerate(questions, 1):
        print(f"\n[问题 {i}] {q}")
        try:
            answer = chat(q)
            print(f"[回答] {answer}")
        except Exception as e:
            print(f"[出错] {e}")
            print("→ 请检查 .env 里的 DEEPSEEK_API_KEY 是否正确")
            return

    # 交互式对话
    print("\n" + "=" * 60)
    print("现在可以自由对话,输入 quit 退出")
    print("←/→ 移动光标,↑/↓ 翻历史,Ctrl-C 作废当前行重输")
    print("=" * 60)

    history = InMemoryHistory()
    while True:
        try:
            user_input = prompt("\n你: ", history=history).strip()
        except (EOFError, KeyboardInterrupt):
            # Ctrl-D / Ctrl-C:作废当前行,继续下一轮(不退出程序)
            print("  (本行作废,重新输入)")
            continue
        if user_input.lower() in ("quit", "exit", "q"):
            print("再见!")
            break
        if not user_input:
            continue
        try:
            print(f"Alex: {chat(user_input)}")
        except Exception as e:
            print(f"[出错] {e}")


if __name__ == "__main__":
    main()

六、总结

一句话回顾:LLM 是"会说不会做",Agent 是"能说也能做"。Agent = LLM + 手脚 + 脑子 + 意志。

三个关键动作记牢:

  1. 注册 DeepSeekplatform.deepseek.com,手机号 + 实名
  2. 创建 API Key → 只显示一次,保存好
  3. 配置 .env → 把 Key 填进去,跑通第一次调用

一行代码记住本期:

python 复制代码
client = OpenAI(api_key=KEY, base_url="https://api.deepseek.com")

DeepSeek 兼容 OpenAI 协议,改 base_url 即可。

适用场景:这篇适合零基础入门 Agent 的人------概念模糊、环境没搭、第一次跑模型调用。已经能熟练用 OpenAI SDK 的可以跳到第 05 期 Tool Use。

下一期预告:第 02 期------单次调用 → 连续对话。你会发现这一期的程序"金鱼记忆",问完就忘,敬请期待。


感谢各位看官的一路陪伴,大家都再接再厉!

相关推荐
新知图书19 小时前
测试与发布(新闻早报智能体开发)
人工智能·agent·ai agent·智能体·扣子
仙逆GPT2 天前
Cursor Agent一直卡住?自动执行和权限确认怎么排查
ai编程·cursor·ai agent·代码审查·cursor agent
夜影风2 天前
智能体开发的“脚手架“:主流框架(LangChain、AutoGen等)选型指南
人工智能·langchain·ai agent
中间件XL2 天前
ai-agent框架spring ai/alibaba 原理源码分析(五)graph III 图执行
graph·ai agent·spring ai·springaialibaba
大龄码农有梦想3 天前
Dify、RAGFlow 与智能体平台的知识库,哪个更好用
人工智能·dify·ai agent·智能体·ai知识库·ai工作流·智能体开发平台
xiezhr3 天前
官方文档像天书?这本开源的 WorkBuddy"蓝皮书",或许更适合小白入门
ai·github·开源软件·ai agent·workbuddy
新知图书4 天前
多模态响应解析与后处理
人工智能·agent·多模态·ai agent·智能体
贾伟康4 天前
【安心陪诊 Agent v1.1】首页可信设计实战:HTML/CSS 状态卡与急症分流
css·html·harmonyos·ai agent·首页设计
闲猫4 天前
Ollama 本地部署,Python、SpringAI对接Ollama
人工智能·python·ollama·spring ai