接入基础
**原则:Key 永远不硬编码进代码库**,用 dotenv 从环境文件加载: ```bash pip install --upgrade openai python-dotenv ``` 在项目目录建 `env.txt`(或 `.env`): ```text DEEPSEEK_API_KEY="sk-xxxx" DEEPSEEK_BASE_URL="https://api.deepseek.com/v1" OPENAI_API_KEY="sk-xxxx" OPENAI_BASE_URL="https://你的中转/v1" ``` ```python from dotenv import load_dotenv, find_dotenv _ = load_dotenv(find_dotenv()) # 默认找 .env _ = load_dotenv(find_dotenv(filename="env.txt")) # 指定文件名 ``` 各家环境变量命名约定:`deepseek_api_key / deepseek_base_url`、`OPENAI_API_KEY / OPENAI_BASE_URL`、`DASHSCOPE_API_KEY`(通义)、`qianfan_ak / qianfan_sk`(千帆)。
OpenAI SDK 标准三步(几乎所有厂商都兼容此形态,只换 base_url + key + model): ```python from openai import OpenAI client = OpenAI(api_key="你的key", base_url="https://api.deepseek.com/v1") response = client.chat.completions.create( model="deepseek-chat", messages=[ {"role": "system", "content": "你是一个严谨的助手"}, {"role": "user", "content": "用一句话介绍你自己"} ], temperature=0, # 任务型建议 0~0.3 max_tokens=512, response_format={"type": "text"} # 也可 "json_object" ) print(response.choices[0].message.content) print(response.usage.total_tokens) # 计费按 token ``` 封装成函数便于复用: ```python def get_completion(prompt, model="gpt-4o-mini", response_format="text"): response = client.chat.completions.create( model=model, messages=[{"role": "user", "content": prompt}], temperature=0, response_format={"type": response_format}) return response.choices[0].message.content ```
流式输出(对话产品的标准体验): ```python stream = client.chat.completions.create( model="deepseek-chat", messages=[{"role": "user", "content": "讲个日常笑话"}], stream=True ) for chunk in stream: print(chunk.choices[0].delta.content or "", end="") ``` 要点:流式时每个 chunk 的增量在 `delta.content`(非流式在 `message.content`);拼接由调用方完成。
**system 与 user 的语义差异实验**——同一句"知识"放不同 role,回答完全不同: ```python # 实验A:放 system messages = [ {"role": "system", "content": "七三笔记网站是一个介绍AI相关知识的网站"}, {"role": "user", "content": "七三笔记是什么网站?"}] # 实验B:放 user(开头) messages = [ {"role": "user", "content": "七三笔记网站是一个介绍AI相关知识的网站。七三笔记是什么网站?"}] ``` 结论: - system 是"设定/规则/知识注入",权重高于 user,模型会严格围绕它回答 - 放 user 里只是"上文信息",模型可能把它当作待讨论内容而非事实 - 另一个实测:temperature=0 并非绝对稳定,对模型"不会的问题"甚至可能编造——确定性场景仍需结构化输出与校验
DeepSeek API
| 端点模型名 | 实际模型 | 适用 | |-----------|---------|------| | deepseek-chat | DeepSeek-V3 系列 | 通用对话、成本低 | | deepseek-reasoner | DeepSeek-R1 系列 | 数学/代码/复杂推理 | - OpenAI 兼容端点 `https://api.deepseek.com/v1`,价格远低于 GPT 系,128K 上下文 - reasoner 最大输入 64K(以官方文档为准),且**思维链不该给用户看全**
```python import os from openai import OpenAI client = OpenAI( api_key=os.getenv("DEEPSEEK_API_KEY"), base_url=os.getenv("DEEPSEEK_BASE_URL", "https://api.deepseek.com/v1") ) resp = client.chat.completions.create( model="deepseek-chat", messages=[{"role": "user", "content": "你是谁?"}], max_tokens=60 ) print(resp.choices[0].message.content) ``` curl 等价: ```bash curl https://api.deepseek.com/chat/completions \ -H "Content-Type: application/json" \ -H "Authorization: Bearer $DEEPSEEK_API_KEY" \ -d '{"model":"deepseek-chat","messages":[{"role":"user","content":"你是谁?"}]}' ```
reasoner 模型的流式响应中,**思维链与正文分离**: ```python stream = client.chat.completions.create( model="deepseek-reasoner", messages=[{"role": "user", "content": "9.11和9.9哪个大"}], stream=True ) for chunk in stream: delta = chunk.choices[0].delta if getattr(delta, "reasoning_content", None): pass # 思维链:可用于前端"思考中..."折叠展示 if delta.content: print(delta.content, end="") # 正文 ``` 本地 deepseek-r1 系列经 ollama 也输出 `<think>...</think>` 思维链,封装层要负责剥离。
国内厂商
通义千问(DashScope 提供 OpenAI 兼容模式): ```python client = OpenAI( api_key=os.getenv("DASHSCOPE_API_KEY"), base_url="https://dashscope.aliyuncs.com/compatible-mode/v1" ) resp = client.chat.completions.create( model="qwen-turbo", messages=[{"role": "user", "content": "你好"}], temperature=0.8, top_p=0.8 ) ``` **top_p(核采样)原理**:把词按概率降序累加,只保留累计概率不超过 p 的最小词集合,再归一化采样: $$V^{(p)} = \min\left\{ S : \sum_{i \in S} P(i) \geq p \right\}$$ 多轮对话 = 把 assistant 的历史回复追加进 messages 循环: ```python messages = [{"role": "user", "content": q1}] messages.append({"role": "assistant", "content": resp1}) messages.append({"role": "user", "content": q2}) ``` 原生 SDK 写法:`dashscope.Generation.call(dashscope.Generation.Models.qwen_turbo, messages=..., result_format='message')`。
百度千帆:先在控制台创建应用拿 API Key / Secret Key,再换 access_token: ```python import requests url = ("https://aip.baidubce.com/oauth/2.0/token?client_id=你的APIKey" "&client_secret=你的SecretKey&grant_type=client_credentials") token = requests.post(url).json()["access_token"] ``` langchain 调用更省事: ```python from langchain_community.chat_models import QianfanChatEndpoint from langchain_core.messages import HumanMessage llm = QianfanChatEndpoint(qianfan_ak=os.getenv("qianfan_ak"), qianfan_sk=os.getenv("qianfan_sk")) print(llm.invoke([HumanMessage(content="你是谁")]).content) ```
讯飞星火(独立 SDK,走 websocket): ```bash pip install spark_ai_python ``` ```python from sparkai.llm.llm import ChatSparkLLM from sparkai.core.messages import ChatMessage from sparkai.llm.llm import ChunkPrintHandler spark = ChatSparkLLM( spark_api_url='wss://spark-api.xf-yun.com/v3.5/chat', spark_app_id='你的appid', spark_api_key='你的key', spark_api_secret='你的secret', spark_llm_domain='generalv3.5', streaming=False) messages = [ChatMessage(role="user", content="你好")] spark.generate([messages], callbacks=[ChunkPrintHandler()]) ```
模型与工具一览
**llama3**(Meta 开源):8B / 70B 两档,128K 词表,15T token 训练;本地经 ollama 一行可跑: ```bash ollama run llama3 ollama run llama3:70b # 指定参数规模 ```
**AnyGPT**(多模态统一模型)环境准备: ```bash git clone https://github.com/OpenMOSS/AnyGPT.git conda create -n anygpt python=3.9 -y && conda activate anygpt pip install -r requirements.txt # 模型目录:AnyGPT-base / seed-tokenizer-2 / speechtokenizer / soundstorm ```
把编程助手接到国产 GLM(智谱 Anthropic 兼容端点): ```bash npm install -g @anthropic-ai/claude-code export ANTHROPIC_BASE_URL="https://open.bigmodel.cn/api/anthropic" export ANTHROPIC_AUTH_TOKEN="你的智谱key" ``` - vscode 的 Claude 插件还可用 `~/.claude/settings.json` 的 `ANTHROPIC_DEFAULT_SONNET_MODEL` 等映射到 glm-4.6/4.7 - MCP 扩展:`claude mcp add -s user zai-mcp-server --env Z_AI_API_KEY=... -- npx -y "@z_ai/mcp-server"`(视觉/OCR/图表理解等 8 个工具) - Continue 插件:免登录配 `apiBase: https://open.bigmodel.cn/api/coding/paas/v4/`;Copilot 可装 "OAI Compatible Provider" 插件接 GLM - 智谱文生图:`POST https://open.bigmodel.cn/api/paas/v4/images/generations`,body 为 `{"model":"cogview-3","prompt":...,"size":"1024x1024"}`(尺寸 512-2048 且为 16 的倍数)
参考
     DeepSeek API 文档 
     通义 DashScope 
     智谱开放平台