Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
46 changes: 41 additions & 5 deletions Env-Setup.md
Original file line number Diff line number Diff line change
Expand Up @@ -33,18 +33,54 @@ jupyter notebook
```text
API_KEY=your_api_key
BASE_URL=model_base_url
MODEL_NAME=model_name
```

2. 加载模型
2. 加载模型
如果需要调用模型,请直接在notebook中添加以下代码(注意需要加载项目根目录到环境的path中),不需要额外的配置。
```python
import os
from dotenv import load_dotenv, find_dotenv

loaded = load_dotenv(find_dotenv(), override=True)
# 从环境变量中获取 OpenAI API Key 或者直接赋值
# 从环境变量中获取配置
API_KEY = os.getenv("API_KEY")
BASE_URL = os.getenv("BASE_URL", "https://api.siliconflow.cn/v1")
MODEL_NAME = os.getenv("MODEL_NAME", "Qwen/Qwen3-8B")
```

## 支持的 LLM 提供商

本项目基于 OpenAI 兼容 API 接口,支持多种 LLM 提供商。只需在 `.env` 中配置对应的 `API_KEY`、`BASE_URL` 和 `MODEL_NAME` 即可切换。

### 硅基流动(默认)

```text
API_KEY=your_siliconflow_api_key
BASE_URL=https://api.siliconflow.cn/v1
MODEL_NAME=Qwen/Qwen3-8B
```

### MiniMax

[MiniMax](https://www.minimaxi.com/) 提供兼容 OpenAI 的 API 接口,支持 MiniMax-M2.7 等模型,最大支持 204K 上下文窗口。

```text
API_KEY=your_minimax_api_key
BASE_URL=https://api.minimax.io/v1
MODEL_NAME=MiniMax-M2.7
```

可选模型:`MiniMax-M2.7`(最新旗舰,增强推理与编码能力)、`MiniMax-M2.7-highspeed`(高速版)、`MiniMax-M2.5`(完整版)、`MiniMax-M2.5-highspeed`(高速版)。

### OpenAI

```text
API_KEY=your_openai_api_key
BASE_URL=https://api.openai.com/v1
MODEL_NAME=gpt-4o
```

### 其他兼容 OpenAI 接口的提供商

# 如果您使用的是官方 API,就直接用 https://api.siliconflow.cn/v1 就行。
BASE_URL = "https://api.siliconflow.cn/v1"
```
任何支持 OpenAI 兼容 API 的提供商都可以通过配置 `BASE_URL` 来使用,例如 DeepSeek、智谱 AI 等。
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ LLM 正在逐步改变人们的生活,而对于开发者,如何基于 LLM

如果你想要开始学习本教程,你需要提前具备:

1. 至少一个 LLM API(最好是 OpenAI,如果是其他 API,你可能需要参考 [其他教程](https://github.com/datawhalechina/llm-universe) 对 API 调用代码进行修改
1. 至少一个兼容 OpenAI 接口的 LLM API(支持硅基流动、[MiniMax](https://www.minimaxi.com/)、OpenAI 等,详见 [环境配置](Env-Setup.md)
2. 能够使用 Python Jupyter Notebook

本教程共包括 11 门课程,分为必修类、选修类两个类别。必修类课程是我们认为最适合初学者学习以入门 LLM 的课程,包括了入门 LLM 所有方向都需要掌握的基础技能和概念,我们也针对必修类课程制作了适合阅读的在线阅读和 PDF 版本,在学习必修类课程时,我们建议学习者按照我们列出的顺序进行学习;选修类课程是在必修类课程上的拓展延伸,包括了 RAG 开发、模型微调、模型评估等多个方面,适合学习者在掌握了必修类课程之后选择自己感兴趣的方向和课程进行学习。
Expand Down
11 changes: 5 additions & 6 deletions utils/chat_robot.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,8 +30,8 @@
loaded = load_dotenv(find_dotenv(), override=True)
# 从环境变量中获取 OpenAI API Key 或者直接赋值
API_KEY = os.getenv("API_KEY")
# 如果您使用的是官方 API,就直接用 https://api.siliconflow.cn/v1 就行。
BASE_URL = "https://api.siliconflow.cn/v1"
# 从环境变量中获取 BASE_URL,默认使用硅基流动
BASE_URL = os.getenv("BASE_URL", "https://api.siliconflow.cn/v1")

pn.extension()

Expand Down Expand Up @@ -122,12 +122,11 @@ def create_your_own(query: str) -> str:
# 将之前定义的工具加入工具列表
tools = [get_current_temperature, search_wikipedia, create_your_own]

chat_model = ChatOpenAI(temperature=0, model_name="Qwen/Qwen3-8B", max_tokens=4096,
CHAT_MODEL_NAME = os.getenv("CHAT_MODEL_NAME", os.getenv("MODEL_NAME", "Qwen/Qwen3-8B"))

chat_model = ChatOpenAI(temperature=0.01, model_name=CHAT_MODEL_NAME, max_tokens=4096,
openai_api_key=API_KEY, openai_api_base=BASE_URL, max_retries=3,
seed=42, presence_penalty=0.1, frequency_penalty=0.1,
extra_body={
"enable_thinking": False
}
)


Expand Down
9 changes: 6 additions & 3 deletions utils/embedding_load_model.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,13 +17,16 @@
# 从环境变量中获取 OpenAI API Key 或者直接赋值
API_KEY = os.getenv("API_KEY")

# 如果您使用的是官方 API,就直接用 https://api.siliconflow.cn/v1 就行。
BASE_URL = "https://api.siliconflow.cn/v1"
# 从环境变量中获取 BASE_URL,默认使用硅基流动
BASE_URL = os.getenv("BASE_URL", "https://api.siliconflow.cn/v1")

# 从环境变量中获取嵌入模型名称
EMBEDDING_MODEL_NAME = os.getenv("EMBEDDING_MODEL_NAME", "BAAI/bge-m3")

# 基于chromadb的嵌入模型实例
embedding_function = embedding_functions.OpenAIEmbeddingFunction(
api_key=API_KEY,
api_base=BASE_URL,
model_name="BAAI/bge-m3",
model_name=EMBEDDING_MODEL_NAME,
dimensions=1024
)
4 changes: 2 additions & 2 deletions utils/image2text_chat.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,8 @@
# 从环境变量中获取 OpenAI API Key 或者直接赋值
API_KEY = os.getenv("API_KEY")

# 如果您使用的是官方 API,就直接用 https://api.siliconflow.cn/v1 就行。
BASE_URL = "https://api.siliconflow.cn/v1"
# 从环境变量中获取 BASE_URL,默认使用硅基流动
BASE_URL = os.getenv("BASE_URL", "https://api.siliconflow.cn/v1")

# 基于openai的OpenAI实例
openai_client = OpenAI(api_key=API_KEY, base_url=BASE_URL, max_retries=3)
Expand Down
15 changes: 8 additions & 7 deletions utils/langchain_chat.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,20 +17,21 @@
# 从环境变量中获取 OpenAI API Key 或者直接赋值
API_KEY = os.getenv("API_KEY")

# 如果您使用的是官方 API,就直接用 https://api.siliconflow.cn/v1 就行。
BASE_URL = "https://api.siliconflow.cn/v1"
# 从环境变量中获取 BASE_URL,默认使用硅基流动
BASE_URL = os.getenv("BASE_URL", "https://api.siliconflow.cn/v1")

# 从环境变量中获取模型名称
CHAT_MODEL_NAME = os.getenv("CHAT_MODEL_NAME", os.getenv("MODEL_NAME", "deepseek-ai/DeepSeek-V3"))
EMBEDDING_MODEL_NAME = os.getenv("EMBEDDING_MODEL_NAME", "BAAI/bge-m3")

# 基于langchain的OpenAI实例,用于代码生成
chat_model = ChatOpenAI(temperature=0, model_name="deepseek-ai/DeepSeek-V3", max_tokens=4096,
chat_model = ChatOpenAI(temperature=0.01, model_name=CHAT_MODEL_NAME, max_tokens=4096,
openai_api_key=API_KEY, openai_api_base=BASE_URL, max_retries=3,
seed=42, presence_penalty=0.1, frequency_penalty=0.1,
extra_body={
"enable_thinking": False
}
)

embedding_model = OpenAIEmbeddings(
openai_api_key=API_KEY,
openai_api_base=BASE_URL,
model="BAAI/bge-m3"
model=EMBEDDING_MODEL_NAME
)
14 changes: 10 additions & 4 deletions utils/text2text_chat.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,14 +17,20 @@
# 从环境变量中获取 OpenAI API Key 或者直接赋值
API_KEY = os.getenv("API_KEY")

# 如果您使用的是官方 API,就直接用 https://api.siliconflow.cn/v1 就行。
BASE_URL = "https://api.siliconflow.cn/v1"
# 从环境变量中获取 BASE_URL,默认使用硅基流动
BASE_URL = os.getenv("BASE_URL", "https://api.siliconflow.cn/v1")

# 从环境变量中获取模型名称,默认使用 Qwen3-8B
MODEL_NAME = os.getenv("MODEL_NAME", "Qwen/Qwen3-8B")

# 基于openai的OpenAI实例
openai_client = OpenAI(api_key=API_KEY, base_url=BASE_URL, max_retries=3)


def get_completions(llm_prompt, model_endpoint="Qwen/Qwen3-8B"):
def get_completions(llm_prompt, model_endpoint=None):
if model_endpoint is None:
model_endpoint = MODEL_NAME

extra_body = {}
if "Qwen3" in model_endpoint:
extra_body = {
Expand All @@ -37,7 +43,7 @@ def get_completions(llm_prompt, model_endpoint="Qwen/Qwen3-8B"):
"content": llm_prompt
}
],
n=1, temperature=0, seed=42,
n=1, temperature=0.01, seed=42,
presence_penalty=0, frequency_penalty=0,
max_tokens=4096, extra_body=extra_body
)
Expand Down