1. Python 的模块化与 API 接口封装
Python 的设计哲学强调代码的可读性和模块化。在调用 LLM API 时,我们可以清晰地看到这一点。
代码示例:
python
编辑
ini
from openai import OpenAI
# 替换为你的 DeepSeek API Key
client = OpenAI(
api_key="api key",
base_url="https://api.deepseek.com"
)
- 模块化引入:
from openai import OpenAI这种语法允许我们只引入需要的类,避免命名空间污染。 - 接口一致性: 许多 LLM(如 Gemini, Claude)虽然各有特色,但接口设计往往借鉴了 OpenAI 的标准。这种"抄袭"(借鉴)实际上促进了生态的标准化,降低了开发者的学习成本。
- 配置灵活性: 通过
base_url参数,我们可以轻松切换不同的后端服务(如 DeepSeek),而无需修改业务逻辑。
2. 函数参数设计:借鉴 ES6 的默认值与灵活性
Python 的函数参数设计非常灵活,这一点与 ES6(JavaScript)有异曲同工之妙。在封装 LLM 调用时,利用默认参数可以大大简化代码。
代码示例:
python
编辑
ini
def get_completion(prompt, model='deepseek-chat'):
response = client.chat.completions.create(
model=model,
messages=[{"role": "user", "content": prompt}],
temperature=0.5, # 创造力控制:0(严谨) ~ 2(随意)
max_tokens=1024, # 最大生成长度
n=1 # 生成几条结果
)
return response.choices[0].message.content
- 默认参数:
model='deepseek-chat'和temperature=0.5设置了合理的默认值,使得函数调用更加简洁。 - Temperature 参数: 这是一个关键的"自由度"参数。数值越低,回复越严谨、确定;数值越高,回复越随机、富有创意。
3. 提示词工程:从"写诗"到"步骤提取"
LLM 虽然强大,但其输出质量高度依赖于输入的提示词。清晰、具体的指令是获得高质量输出的关键。
案例 1:基础生成
python
编辑
bash
print(get_completion("写一首夏天游玩的七言诗歌"))
- 分析: 简单的指令往往能得到通用的结果。如果想要特定格式(如七言),模型通常也能理解,因为其训练数据中包含大量此类模式。
案例 2:结构化输出(步骤提取)
python
编辑
ini
text = f"""泡一杯茶其实很简单!...(省略具体文本)"""
prompt = f"""
你将收到三引号包裹的文本,若文本中包含一系列操作指令,请按照下述格式重新整理这些格式
步骤一...
步骤二...
...
步骤N...
如果文本中没有一些操作指引,直接输出**"没有提供步骤"**
'''{text}'''
"""
- 教学意义: 这里展示了如何通过"少样本提示"和明确的格式要求,引导模型将非结构化文本转化为结构化步骤。Python 的多行字符串(f-string)在此处发挥了巨大作用。
4. 进阶技巧:引导模型逐步推理
有时候,我们需要模型完成复杂的多步任务(如:总结 -> 翻译 -> 提取人名 -> 输出 JSON)。直接提问可能失败,但分步引导(Chain of Thought)可以显著提高成功率。
代码示例:
python
编辑
ini
prompt = """
执行以下操作
1. 将三个反引号之间的文本概括为一句话。
2. 把这句摘要翻译成法语
3. 列出法语摘要中出现的所有人名
4. 输出json对象,包含字段:french_summary、num_names。
答案分行展示
文本:
''' 在一座风光宜人的小村庄里...(省略) '''
"""
- 核心思想: 不要把模型当成黑盒乱猜,而是要像教人一样,告诉它"先做什么,再做什么"。这种思维链技术能有效降低模型犯错的概率。
5. 总结与展望
通过上述案例,我们可以看到:
- Python 的优势: 字符串操作灵活,函数参数设计借鉴了现代编程语言的优点(如 ES6),非常适合处理文本生成任务。
- 提示词的重要性: 越具体的指令,越能得到想要的结果。不要吝啬篇幅,详细的背景和格式说明是成功的关键。
- 接口的统一性: 尽管底层模型(DeepSeek, Gemini, Claude)不同,但通过统一的 OpenAI 接口风格,我们可以轻松切换,这体现了 Python 生态的"鸭子类型"哲学------只要接口一致,就能互换使用。
希望这篇笔记能帮助你在掘金的道路上,更高效地驾驭 LLM!