Skip to content

第一阶段:环境搭建与第一个 LLM 程序 ​

第 1 步:安装基础工具 ​

第 2 步:克隆仓库并创建虚拟环境 ​

bash
git clone https://github.com/<你的用户名>/agent-learning.git   # 下载仓库到本地
cd agent-learning                                              # 进入仓库目录
python -m venv .venv                                           # 创建独立的虚拟环境,避免污染系统 Python
.venv\Scripts\activate                                         # Windows 激活虚拟环境
# source .venv/bin/activate                                    # Mac / Linux 用这一行激活
pip install openai python-dotenv                               # openai:调用接口的 SDK;python-dotenv:读取 .env

第 3 步:配置 API Key(.env 与 .gitignore) ​

在仓库根目录新建 .env:

ini
# 平台给你的真实 Key,不要加引号,不要留中文或空格
LLM_API_KEY=<redacted>

# OpenAI 兼容的中转平台地址
LLM_BASE_URL=https://tokenrhythm.studio/v1

# 使用的模型名,以平台模型列表为准
LLM_MODEL=deepseek-flash

再新建 .gitignore,防止 Key 和虚拟环境被传到 GitHub:

text
.env
.venv/

注意:.env 里如果还留着"你的key"这类中文占位文字,会报 UnicodeEncodeError,详见踩坑记录。

第 4 步:第一个程序 01_hello_llm.py ​

python
import os                          # 用来读取环境变量
from dotenv import load_dotenv     # 把 .env 文件里的配置加载成环境变量
from openai import OpenAI          # OpenAI 官方 SDK,兼容接口的平台都能用

load_dotenv()  # 读取 .env 里的 LLM_API_KEY / LLM_BASE_URL / LLM_MODEL

# 创建客户端:api_key 用于鉴权,base_url 指向中转平台
client = OpenAI(api_key=<redacted>("LLM_API_KEY"),
                base_url=os.getenv("LLM_BASE_URL"))

# 发起一次对话请求
resp = client.chat.completions.create(
    model=os.getenv("LLM_MODEL"),   # 模型名,例如 deepseek-flash
    messages=[
        {"role": "system", "content": "你是一位耐心的 AI 老师"},   # 系统提示:设定角色和规矩
        {"role": "user", "content": "用三句话解释什么是 Token"},  # 用户的提问
    ],
    temperature=0.7,  # 采样温度:越高越有创意,越低越稳定
)

print(resp.choices[0].message.content)          # 取出模型的回答文本
print("本次消耗 token:", resp.usage.total_tokens)  # 输入 + 输出的 token 总数

运行:python 01_hello_llm.py。跑通后提交代码:

bash
git add .                       # 把所有改动加入暂存区(.env 已被 .gitignore 排除)
git commit -m "01 hello llm"    # 生成一次提交
git push                        # 推送到 GitHub

核心概念 ​

messages 的三种角色 ​

  • system:定规矩,比如人设、输出格式。
  • user:用户的提问。
  • assistant:模型之前的回答。

模型本身不记得之前聊过什么。要实现多轮对话,必须每次把完整聊天记录重新发给它——这就是"记忆"最原始的样子。

temperature ​

  • 取 0 时回答最稳定,适合问答、信息提取。
  • 接近 1 时更有创意。
  • RAG 一般用 0~0.3。

token 与上下文窗口 ​

  • 输出的 token 数是输入 + 输出加起来的总数,计费和上下文长度都按 token 算。
  • 上下文窗口是一次请求最多能装的 token 数。这也是 RAG 不把整个文档塞给模型、只检索相关片段的原因。

👉 下一节:多轮聊天