Python是一种高级编程语言,被广泛用于各种软件开发和应用领域。它由荷兰程序员吉多·范罗苏姆(Guido van Rossum)在1980年代末期发明,并于1991年首次发布。Python的设计哲学强调代码的可读性,其语法清晰简洁,这使得Python成为编程初学者的理想选择。
Python支持多种编程模式,包括过程式编程、面向对象编程以及函数式编程。它有一个庞大且活跃的社区,提供了大量的标准库和第三方模块,覆盖了网络编程、数据分析、人工智能、科学计算、图像处理等多个领域。
由于其易学性和强大的功能,Python已经成为学术界、工业界乃至业余编程爱好者中非常流行的编程语言之一。无论是网站开发、自动化脚本编写、数据挖掘还是机器学习项目,Python都展示了它的灵活性和强大能力。
1.命名规范
Python 的命名规范遵循 PEP 8(Python Enhancement Proposal 8),这是 Python 官方推荐的代码风格指南。以下是 Python 命名规范的核心内容:
1.1. 变量命名
小写字母 + 下划线:使用小写字母,单词之间用下划线 _ 分隔。
user_name = "Alice"
total_count = 100
避免单字母变量:除非是临时变量(如循环中的 i、j),否则应使用有意义的名称。
for i in range(10): # 允许
for index in range(10): # 更推荐
1.2. 常量命名
全大写字母 + 下划线:常量通常定义在模块的顶部,使用全大写字母。
MAX_CONNECTIONS = 100
DEFAULT_TIMEOUT = 30
1.3. 函数命名
小写字母 + 下划线:与变量命名规则一致。
def calculate_total_price():
pass
1.4. 类命名
驼峰命名法(CamelCase) :类名首字母大写,不使用下划线。
class UserProfile:
pass
1.5. 模块命名
小写字母 + 下划线:模块文件名应简短且全小写。
# 模块文件名
data_processor.py
1.6. 包命名
小写字母 + 下划线:包名应简短且全小写,避免使用下划线(除非必要)。
# 包名
my_package/
1.7. 私有变量与函数
单下划线前缀:表示内部使用的变量或函数,外部不应直接访问。
_internal_variable = 42
def _helper_function():
pass
双下划线前缀:表示名称改写(Name Mangling),用于避免子类中的命名冲突。
- private_variable = 42
1.8. 特殊方法命名
双下划线前缀和后缀:Python 的特殊方法(如 __init__、__str__)使用双下划线。
class MyClass:
def __init__(self):
pass
def __str__(self):
return "MyClass"
1.9. 避免的命名
- 避免与 Python 关键字冲突:如
class、def、import等。
避免使用内置函数名:如 list、str、dict 等。
# 不推荐
list = [1, 2, 3]
1.10. 命名一致性
- 保持一致性:在同一个项目中,命名风格应保持一致。
- 可读性优先:命名应清晰、简洁且易于理解。
2.Python 基础与变量
学习内容
Python 交互模式:通过命令行或终端进入 Python 交互环境。
>>> print("Hello, Python!")
Hello, Python!
- 变量赋值:
-
- 变量无需声明类型,直接赋值。
示例:
name = "Alice" # 字符串
age = 25 # 整数
price = 19.99 # 浮点数
is_student = True # 布尔值
动态类型:变量类型可随时改变。
x = 10 # 整数
x = "hello" # 变为字符串
练习题
定义变量 a = 5,b = 3.2,c = "Python",并打印它们的类型(使用 type())。
print(type(a)) # <class 'int'>
print(type(b)) # <class 'float'>
print(type(c)) # <class 'str'>
- 交换两个变量的值:
x = 10,y = 20,不使用临时变量。
常见错误
语法错误:忘记冒号或引号不匹配。
# 错误示例
if x == 5
print("x is 5")
修复:添加冒号 if x == 5:。
3.运算符与表达式
学习内容
算术运算符:
a = 10 + 5 # 15
b = 10 - 5 # 5
c = 10 * 2 # 20
d = 10 / 3 # 3.333...
e = 10 // 3 # 3(整除)
f = 10 % 3 # 1(取余)
g = 2 ** 3 # 8(幂运算)
字符串操作:
s1 = "Hello"
s2 = "World"
s3 = s1 + " " + s2 # "Hello World"
s4 = s1 * 3 # "HelloHelloHello"
练习题
计算圆的面积(半径 r = 5,公式:πr²)。
import math
r = 5
area = math.pi * r ** 2
print(area) # 约78.54
- 输入两个数,输出它们的和、差、积、商(用
input())。
常见错误
类型错误:字符串与数字直接运算。
age = 25
print("Age: " + age) # 报错!
修复:转换为字符串 print("Age: " + str(age))。
4.控制结构(条件与循环)
学习内容
条件语句:
score = 85
if score >= 90:
print("A")
elif score >= 80:
print("B") # 输出 B
else:
print("C")
- 循环语句:
for 循环:
for i in range(3): # 0, 1, 2
print(i)
while 循环:
count = 0
while count < 3:
print(count)
count += 1
练习题
判断一个数是否为偶数。
num = int(input("输入一个数: "))
if num % 2 == 0:
print("偶数")
else:
print("奇数")
- 打印 1 到 100 的所有奇数(用
for或while)。
常见错误
缩进错误:Python 依赖缩进定义代码块。
# 错误示例
if x > 0:
print("正数") # 缺少缩进
修复:添加缩进 print("正数")。
5.数据结构(列表、元组、字典、集合)
学习内容
列表(List) :
fruits = ["apple", "banana", "cherry"]
fruits.append("orange") # 添加元素
fruits[1] = "mango" # 修改元素
print(fruits[0:2]) # ["apple", "mango"]
字典(Dictionary) :
person = {"name": "Alice", "age": 25}
print(person["name"]) # Alice
person["age"] = 26 # 修改值
**元组(Tuple)**和集合(Set):
coordinates = (10, 20) # 元组不可修改
unique_numbers = {1, 2, 3, 3} # 集合自动去重
练习题
合并两个列表:list1 = [1, 2, 3],list2 = [4, 5, 6]。
- combined = list1 + list2 # [1, 2, 3, 4, 5, 6]
- 统计列表中元素的频率:
words = ["apple", "banana", "apple", "cherry"]。
常见错误
索引越界:访问不存在的索引。
fruits = ["apple", "banana"]
print(fruits[2]) # 报错!索引最大为1
修复:检查列表长度 len(fruits)。
6.函数
学习内容
定义与调用函数:
def greet(name):
return f"Hello, {name}!"
print(greet("Alice")) # Hello, Alice!
- 参数类型:
默认参数:
def power(base, exponent=2):
return base ** exponent
print(power(3)) # 9
print(power(3, 3)) # 27
可变参数:
def sum_all(*args):
return sum(args)
print(sum_all(1, 2, 3)) # 6
练习题
- 编写函数计算斐波那契数列前
n项。 - 编写函数检查字符串是否为回文(如 "madam")。
常见错误
未返回值:函数默认返回 None。
def add(a, b):
result = a + b
print(add(2, 3)) # 输出 None
修复:添加 return result。
7.文件操作与异常处理
学习内容
读写文件:
# 写文件
with open("data.txt", "w") as file:
file.write("Hello, File!")
# 读文件
with open("data.txt", "r") as file:
content = file.read()
print(content) # Hello, File!
异常处理:
try:
num = int(input("输入一个整数: "))
except ValueError:
print("输入的不是整数!")
练习题
- 将用户输入的多个句子保存到文件
notes.txt。 - 读取文件并统计单词数量。
常见错误
文件未关闭:使用 with 语句自动关闭文件。
# 错误示例
file = open("data.txt", "w")
file.write("Hello")
# 忘记 file.close()
修复:使用 with open(...) as file:。
ollama
Get up and running with large language models.
Ollama 是一个开源的本地大语言模型运行框架,专为在本地机器上便捷部署和运行大型语言模型(LLM)而设计。
Ollama 支持多种操作系统,包括 macOS、Windows、Linux 以及通过 Docker 容器运行。
Ollama 提供对模型量化的支持,可以显著降低显存要求,使得在普通家用计算机上运行大型模型成为可能。
1.Ollama 环境部署
1.1. 系统要求与前置准备
- 硬件要求:
-
- CPU:建议 Intel i5 及以上(支持 AVX2 指令集)。
- GPU(可选):NVIDIA GPU(需安装 CUDA 11.8+)可加速推理。
- 内存:至少 16GB(7B 模型),70B 模型需 64GB+。
- 存储:预留 50GB+ 空间(模型文件通常 5GB~100GB)。
- 软件依赖:
1.2. 安装 Ollama
- Windows/macOS:
-
- 访问 Ollama 官网 下载安装包。
- 双击安装包,按提示完成安装。
验证安装:
ollama --version # 应输出类似 ollama version 0.1.20
Linux(手动安装):
curl -fsSL ollama.com/install.sh | sh
1.3. 配置模型存储路径
- Windows:
-
- 右键“此电脑” → “属性” → “高级系统设置” → “环境变量”。
- 新建系统变量:
-
-
- 变量名:
OLLAMA_MODELS - 变量值:
D:\ollama-models(自定义路径)。
- 变量名:
-
macOS/Linux:
export OLLAMA_MODELS=/path/to/your/models
# 永久生效:将命令写入 ~/.bashrc 或 ~/.zshrc
1.4. 启动 Ollama 服务
后台运行:
- ollama serve # 默认监听 http://localhost:11434
验证服务状态:
- curl http://localhost:11434 # 应返回 Ollama is running
2.模型拉取与运行
2.1. 模型选择与拉取
- 官方模型库:
访问 Ollama 模型库 查看支持的模型,例如:
-
llama3:8b(通用对话)deepseek-r1:7b(中文优化)mistral:7b-instruct(指令跟随)
拉取模型:
- ollama pull llama3:8b # 下载 8B 版本
多线程加速(Linux/macOS):
export OLLAMA_NUM_PARALLEL=4 # 使用 4 线程下载
ollama pull llama3:8b
2.2. 模型运行与交互
命令行交互模式:
ollama run llama3:8b
>>> 你是谁
批量生成文本:
- ollama run llama3:8b "写一篇关于人工智能的短文,300字左右"
2.3. API 调用示例
Python 脚本调用:
import requests
response = requests.post(
"http://localhost:11434/api/generate",
json={
"model": "llama3:8b",
"prompt": "你是谁?",
"stream": False
}
)
print(response.json()["response"])
2.4. 模型管理命令
查看已安装模型:
ollama list
# 输出示例
NAME ID SIZE MODIFIED
llama3:8b a78b43c1b1c3 4.7 GB 2 hours ago
删除模型:
- ollama rm llama3:8b
langchain
LangChain是一个由大型语言模型 (LLM) 驱动的应用程序开发框架。
LangChain 简化了 LLM 应用程序生命周期的每个阶段:
- 开发:使用 LangChain 的开源组件和第三方集成构建您的应用程序。使用LangGraph构建具有一流流媒体和人机交互支持的状态代理。
- 生产化:使用LangSmith检查、监控和评估您的应用程序,以便您可以不断优化和自信地部署。
- 部署:使用LangGraph 平台将您的 LangGraph 应用程序转变为可用于生产的 API 和助手。
1.LangChain 核心概念
1. 六大核心模块
- 模型(Models) :支持多种 LLM(如 GPT-4、Llama2)和聊天模型(如 ChatGPT)。
- 提示(Prompts) :管理提示模板,优化输入结构(例如动态变量替换)。
- 链(Chains) :将多个组件串联成工作流,如“提示→模型→输出解析器”。
- 索引(Indexes) :结合外部数据(如文档、数据库),通过向量存储实现检索增强生成(RAG)。
- 代理(Agents) :让模型自主调用工具(如计算器、搜索引擎)完成任务。
- 内存(Memory) :管理对话历史,维持多轮交互的上下文。
2.快速入门
2.1. 调用大模型生成文本
openAi
import os
from langchain_openai import ChatOpenAI
OPENAI_API_KEY = os.getenv("OPENAI_API_KEY")
OPENAI_API_URL = os.getenv("OPENAI_API_URL")
# 初始化模型
llm = ChatOpenAI(
model="gpt-3.5-turbo",
openai_api_key=OPENAI_API_KEY,
base_url= OPENAI_API_URL
)
# 执行调用
response = llm.invoke("你是谁")
print(response) # 输出: content='我是一个人工智能助手,旨在提供信息和帮助解答问题。如果你有任何问题或需要支持,随时可以问我!' additional_kwargs={'refusal': None} response_metadata={'token_usage': {'completion_tokens': 30, 'prompt_tokens': 9, 'total_tokens': 39, 'completion_tokens_details': {'accepted_prediction_tokens': 0, 'audio_tokens': 0, 'reasoning_tokens': 0, 'rejected_prediction_tokens': 0}, 'prompt_tokens_details': {'audio_tokens': 0, 'cached_tokens': 0}}, 'model_name': 'gpt-3.5-turbo-0125', 'system_fingerprint': 'fp_b705f0c291', 'finish_reason': 'stop', 'logprobs': None} id='run-c0e446c0-a295-49d4-b164-a776ae478a2d-0' usage_metadata={'input_tokens': 9, 'output_tokens': 30, 'total_tokens': 39, 'input_token_details': {'audio': 0, 'cache_read': 0}, 'output_token_details': {'audio': 0, 'reasoning': 0}}
本地大模型
from langchain_ollama import OllamaLLM
llm = OllamaLLM(model="deepseek-r1:1.5b")
# 执行调用
response = llm.invoke("你是谁")
print(response.content) # 输出: 您好!我是由中国的深度求索(DeepSeek)公司开发的智能助手DeepSeek-R1。如您有任何任何问题,我会尽我所能为您提供帮助。
3.Prompts 核心概念
3.1. 什么是 Prompts?
Prompts 是与大语言模型(LLM)交互的输入文本,用于引导模型生成特定输出或执行特定任务。它是模型理解用户意图的关键工具,直接影响模型输出的质量和准确性。
3.2. Prompts 的分类
- 文本提示(Text Prompts) :简单的文本输入,如“写一篇关于人工智能的文章”。
- 任务提示(Task Prompts) :明确任务目标,如“将以下文本翻译成法语”。
- 示例提示(Few-Shot Prompts) :提供少量示例,引导模型完成任务。
- 约束提示(Constraint Prompts) :添加限制条件,如“生成至少 5 个句子”
3.3.LangChain 中的 Prompts 工具
3.3.1. PromptTemplate
用于创建动态提示模板,支持变量插值。
from langchain_core.prompts import PromptTemplate
# 创建模板
template = "请讲一个关于{who}的{what}故事"
prompt_template = PromptTemplate.from_template(template)
# 填充变量
prompt = prompt_template.format(who="小狗", what="伤感")
print(prompt) # 输出:请讲一个关于小狗的伤感故事
- 适用场景:单轮对话或无需上下文的简单任务。
3.3.2. ChatPromptTemplate
用于构建聊天式提示,支持多角色消息(如系统、用户、AI)。
from langchain_core.prompts import ChatPromptTemplate
# 创建聊天模板
chat_template = ChatPromptTemplate.from_messages([
("system", "你是一个复述助手,擅长重复用户的输入。"),
("human", "{text}"),
])
# 填充变量
messages = chat_template.format_messages(text="我不喜欢你。")
print(messages) # 输出:[SystemMessage(content='你是一个复述助手,擅长重复用户的输入。', additional_kwargs={}, response_metadata={}), HumanMessage(content='我不喜欢你。', additional_kwargs={}, response_metadata={})]
- 适用场景:多轮对话或需要上下文的复杂任务。
3.3.3. FewShotPromptTemplate
用于少样本学习,通过示例引导模型完成任务。
from langchain_core.prompts import FewShotPromptTemplate, PromptTemplate
# 定义示例
examples = [
{"input": "2+2", "output": "4"},
{"input": "2+3", "output": "5"},
]
# 定义示例模板
example_prompt = PromptTemplate(
input_variables=["input", "output"],
template="输入: {input}\n输出: {output}",
)
# 创建少样本模板
few_shot_prompt = FewShotPromptTemplate(
examples=examples,
example_prompt=example_prompt,
prefix="回答以下数学问题:",
suffix="输入: {input}\n输出:",
input_variables=["input"],
)
# 填充变量
prompt = few_shot_prompt.format(input="3+4")
print(prompt)
- 适用场景:需要模型学习特定格式或风格的任务。
3.3. 4. 安全防护模板
输入语句:床前明月光下一句
安全评估结果:通过
修改建议:床前明月光的下一句是“疑是地上霜”。这句诗出自李白的《静夜思》。
输入语句:描述战争厮杀场面
安全评估结果:拒绝
拒绝原因:内容涉及暴力和敏感信息。
友好提示:如果您对战争或历史事件有兴趣,可以询问有关战争的历史背景、影响或相关人物的故事,而不是具体的厮杀场面。这样可以更好地理解战争的复杂性和后果。
查看中间步骤
3.3. 5. 医疗报告模板生成
输入语句:
患者小笼包(病历号H1234567890),男,56岁,手机号13800138000。
主诉:持续胸痛2小时,放射至左臂。BP 160/100mmHg,HR 110bpm。
心电图示前壁ST段抬高,肌钙蛋白T 0.45ng/ml(正常<0.01)。
患者身份报告:
隐私数据脱敏,展示主要报告,易理解语言
医生身份报告:
展示所有报告,专业化报告
风险预警:
隐私审计追踪:
4.LLM 模块核心概念
4. 1. LLM 模块的定位
- LangChain 的
LLM模块是连接各类大语言模型的统一接口,支持:
-
- 本地模型(Ollama、Hugging Face)
-
- 云端 API(OpenAI、Anthropic、Google Gemini)
-
- 开源模型(Llama、Mistral)
4. 2. 核心功能
- 统一接口:标准化
invoke()、stream()等方法。 - 参数控制:调节
temperature、max_tokens等生成参数。 - 扩展能力:支持自定义模型包装器。
4.3.环境准备与基础调用
4.3. 1. 安装依赖
pip install langchain langchain-openai langchain-community
4.3. 2. 调用 OpenAI 模型
from langchain_openai import ChatOpenAI
# 初始化模型
llm = ChatOpenAI(
model="gpt-3.5-turbo",
temperature=0.7,
max_tokens=500
)
# 同步调用
response = llm.invoke("解释量子纠缠")
print(response.content)
# 流式调用
for chunk in llm.stream("生成 Python 排序算法教程"):
print(chunk.content, end="", flush=True)
4.3. 3. 调用本地模型(Ollama)
# 先启动 Ollama 服务并下载模型
ollama pull llama2
ollama serve
from langchain_community.llms import Ollama
llm = Ollama(model="llama2")
response = llm.invoke("法国的首都是哪里?")
print(response)
4.4.高级配置与优化
4.4. 1. 参数调优
llm = ChatOpenAI(
model="gpt-4",
temperature=0.5, # 控制随机性 (0-2)
max_tokens=1000, # 最大生成长度
top_p=0.9, # 核心采样概率
frequency_penalty=0.5, # 抑制重复内容
timeout=30 # API 超时时间
)