docs: update project README content

This commit is contained in:
hblu 2026-01-04 18:46:58 +08:00
parent 695cf40d00
commit 09fb29c382

135
README.md
View File

@ -138,22 +138,108 @@ uv --version # 应显示 uv 0.x.x
uv run main.py uv run main.py
``` ```
#### DeepSeek API 快速入门 (使用 OpenAI SDK) #### DeepSeek API 快速入门 (主流推荐)
```python
# 推荐使用 uv 管理依赖: uv add openai DeepSeek API 完全兼容 OpenAI SDK这意味着你可以直接使用最成熟的生态工具。
from openai import OpenAI
**方式一:使用 OpenAI SDK (标准用法)**
适合:简单对话、流式输出、不需要强类型约束的场景。
```python
# 1. 安装库
# uv add openai python-dotenv
import os
from openai import OpenAI
# .env 文件像一个保险箱,用来存放 API Key 等敏感信息,防止你把它上传到 GitHub 上被人盗用。
from dotenv import load_dotenv
# 加载当前目录下的 .env 文件内容到环境变量中
load_dotenv()
# 初始化客户端
client = OpenAI( client = OpenAI(
api_key="your-api-key", # 建议使用环境变量 # 从环境变量中读取 Key更加安全
api_key=os.getenv("DEEPSEEK_API_KEY"),
base_url="https://api.deepseek.com" base_url="https://api.deepseek.com"
) )
# ... (代码保持不变) # 非流式调用 (一次性返回)
response = client.chat.completions.create(
model="deepseek-chat", # 或 deepseek-reasoner (R1)
messages=[
# System Role: 给 AI 设定"人设"或"岗位职责",它会始终遵守。
{"role": "system", "content": "你是一个金牌销售,说话极其有煽动性。"},
# User Role: 真实用户的输入。
{"role": "user", "content": "把这支钢笔卖给我。"}
],
# Temperature (温度): 控制 AI 的"创造力"。
# 0.0 = 极其严谨、固定 (像个机器人),适合写代码、数学题。
# 1.0 = 标准创造力 (默认)。
# 1.5+ = 脑洞大开、放飞自我 (可能胡说八道),适合写诗、头脑风暴。
temperature=1.3
)
print(response.choices[0].message.content)
# 流式调用 (像 ChatGPT 打字机效果)
stream = client.chat.completions.create(
model="deepseek-chat",
messages=[
{"role": "system", "content": "你是一个诗人。"},
{"role": "user", "content": "写一首关于Python的十四行诗"}
],
temperature=1.3,
stream=True
)
for chunk in stream:
if chunk.choices[0].delta.content:
print(chunk.choices[0].delta.content, end="", flush=True)
```
**方式二:使用 PydanticAI (进阶 Agent 开发)**
适合:需要**结构化输出** (JSON)、工具调用 (Tool Calling)、类型安全保障的现代 Agent 开发。
```python
# 1. 安装库
# uv add pydantic-ai pydantic
import os
from dotenv import load_dotenv
from pydantic import BaseModel, Field
from pydantic_ai import Agent
# 加载环境变量 (确保 .env 文件中有 DEEPSEEK_API_KEY)
load_dotenv()
# 定义你期望的输出结构 (Schema)
class MovieScript(BaseModel):
title: str = Field(description="电影标题")
genre: str = Field(description="流派,如科幻、悬疑")
characters: list[str] = Field(description="主要角色名单")
plot_twist: str = Field(description="意想不到的结局反转")
# 初始化 Agent (2026 最佳实践: 使用 Short-hand 语法)
# PydanticAI 会自动识别 'deepseek:deepseek-chat' 并从环境变量加载 API Key
agent = Agent(
'deepseek:deepseek-chat',
output_type=MovieScript,
system_prompt="你是一个好莱坞金牌编剧,擅长写出人意料的剧本。"
)
# 运行 Agent
result = agent.run_sync('写一个关于程序员穿越到20年前的微电影剧本')
# 直接获取结构化数据 (IDE会有智能提示)
print(f"🎬 标题: {result.output.title}")
print(f"🎭 类型: {result.output.genre}")
print(f"🎭 角色: {result.output.characters}")
print(f"🤯 反转: {result.output.plot_twist}")
``` ```
> [!TIP] > [!TIP]
> **进阶选择**:对于复杂的 Agent 开发,推荐使用 **PydanticAI**,它能提供更好的类型安全和结构化输出支持。 > **为什么要用 PydanticAI**
> 相比手动解析 JSON 字符串PydanticAI 能自动处理重试、验证错误,并给你完美的 IDE 代码提示 (Autocomplete)。这是开发复杂 AI 应用的终极武器。
#### Streamlit vs Chainlit #### Streamlit vs Chainlit
@ -177,6 +263,39 @@ async def main(message: cl.Message):
# 这里调用 DeepSeek API # 这里调用 DeepSeek API
await cl.Message(content=f"你说了: {message.content}").send() await cl.Message(content=f"你说了: {message.content}").send()
``` ```
#### 🌐 Context7: 跨越 AI 的知识断层 (The Documentation Bridge)
在 Vibe Coding 中你可能会遇到这样一个尴尬场景AI 写得头头是道,代码运行却满屏爆红。
**1. LLM 的阿喀琉斯之踵 (The Limitations)**
* **知识截止 (Knowledge Cutoff)**: AI 的记忆停留在训练结束那一刻。它不知道昨天发布的 `PydanticAI 2.0` 有什么新特性,也不知道 `Streamlit` 刚废弃了哪个旧接口。
* **一本正经的胡说 (Hallucination)**: 当 AI 不知道某个库的用法时,它倾向于"猜"一个看起来合理的函数名(例如臆造一个 `st.make_it_beautiful()`),导致代码根本跑不通。
**2. 为什么必须用 Context7 MCP?**
* **实时获取**Context7 是一个直接连接官方文档的管道。它能抓取最新的 API 定义和代码示例。
* **对症下药**:使用 Context7你的 AI 助手可以先"查字典"(阅读最新文档),再"写作文"(生成代码)。
* **2026 开发标配**:对于本课程使用的 `PydanticAI`、`Streamlit` 等更新极快的现代化框架,**不查文档直接写的代码,可用性几乎为零**。
> [!TIP]
> **最佳实践**
> 在 Cursor 中,当你使用较新的库时,请在 Prompt 中显式要求:
> *"使用 Context7 查阅最新的 PydanticAI 文档,然后帮我写..."*
#### 🚀 为什么追求"Using the Edge" (Why Cutting-Edge Matters)
本课程特意选择了 `uv`, `PydanticAI` (2025/2026), `Python 3.14` 等最新技术栈,而非传统的 `pip``LangChain`。这并非为了"赶时髦",而是基于 **AI 时代的生存法则**
1. **为 AI 而生 (AI-Native)**:
* **Old Way**: 旧框架(如 Django是为人写的文档冗长配置复杂。
* **New Way**: 新框架(如 PydanticAI天然支持 Type Hint 和 Schema 生成,这种"强类型"代码是 AI 最容易理解和生成的语言,能显著减少 AI 的幻觉和 Bug。
2. **极速迭代 (Velocity)**:
* **uv** 比 pip 快 100 倍。在 Vibe Coding 中,你的灵感转瞬即逝,工具不应该成为等待的瓶颈。
3. **拥抱变化 (Future-Proofing)**:
* AI 领域一周的更新量等于过去一年。掌握 2026 年的 Best Practices意味着你拥有最先进的生产力工具而不是在学习即将被淘汰的技术。
> **Simple is Better**: 你会发现,最先进的工具往往也是最简单的。没有复杂的 `requirements.txt` 和虚拟环境路径地狱,只有一个 `uv add`
### 1.4 动手实践:三个"最小可运行"示例 (MVP Hands-on) ### 1.4 动手实践:三个"最小可运行"示例 (MVP Hands-on)