1. 环境准备与API配置
1.1 阿里百炼平台API获取
要开始使用大模型API服务,首先需要注册阿里云百炼平台账号。百炼平台是阿里云提供的大模型服务入口,支持多种模型调用方式。注册流程非常简单:
- 访问阿里云百炼平台官网(https://bailian.console.aliyun.com/)
- 使用阿里云账号登录
- 进入控制台后,在"API密钥管理"页面创建新的API密钥
获取API密钥后,建议立即复制保存,因为出于安全考虑,平台不会再次显示完整的密钥内容。每个账号可以创建多个API密钥,便于不同项目隔离使用。
提示:API密钥是访问服务的凭证,相当于账号密码,务必妥善保管,不要直接暴露在代码或公开仓库中。
1.2 开发环境搭建
推荐使用conda管理Python环境,可以有效隔离不同项目的依赖。以下是详细的环境配置步骤:
bash复制# 创建新的conda环境
conda create -n rag_agent python=3.10 -y
# 激活环境
conda activate rag_agent
环境创建完成后,建议立即设置API密钥的环境变量。有两种常用方式:
方式一:conda环境变量
bash复制# 设置环境变量
conda env config vars set OPENAI_API_KEY=sk-a4372xxafbac6e90681a
conda env config vars set DASHSCOPE_API_KEY=sk-a4xx8cafbac6e90681a
# 重新激活环境使变量生效
conda deactivate
conda activate rag_agent
验证变量是否生效:
bash复制# PowerShell中查看
$env:OPENAI_API_KEY
$env:DASHSCOPE_API_KEY
# Python中验证
python -c "import os; print(os.getenv('OPENAI_API_KEY')); print(os.getenv('DASHSCOPE_API_KEY'))"
方式二:.env文件管理
安装python-dotenv包:
bash复制pip install python-dotenv
在项目根目录创建.env文件,内容如下:
code复制OPENAI_API_KEY=sk-a4372xxx8cafbac6e90681a
DASHSCOPE_API_KEY=sk-a437xxx098cafbac6e90681a
代码中加载环境变量:
python复制from dotenv import load_dotenv
import os
# 使用绝对路径指定.env文件
env_path = r"F:\26_01\AI大模型RAG与Agent智能体项目实战开发\python\RAG_agent\.env"
load_dotenv(dotenv_path=env_path, override=True)
print(os.getenv("OPENAI_API_KEY"))
print(os.getenv("DASHSCOPE_API_KEY"))
注意:.env文件应添加到.gitignore中,避免密钥泄露。团队协作时,可以通过安全渠道单独分享密钥。
1.3 配置国内镜像源
为加速Python包安装,建议配置国内镜像源:
bash复制pip config set global.trusted-host pypi.tuna.tsinghua.edu.cn
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
这条命令会自动创建或修改pip配置文件,后续所有pip安装命令都会使用清华镜像源,显著提升下载速度。
2. OpenAI库基础使用
2.1 OpenAI库介绍
OpenAI官方Python SDK是一个功能强大的工具包,主要优势包括:
- 简化API调用:封装了HTTP请求、身份验证等底层细节
- 多模型支持:统一接口支持GPT、DALL·E等多种模型
- 广泛兼容性:许多云服务商(如阿里云)都兼容OpenAI SDK接口
- 功能完整:支持聊天补全、流式响应、函数调用等高级特性
虽然最初为OpenAI API设计,但由于其优秀的接口设计,现已成为大模型调用的行业标准之一。阿里云百炼平台也提供了兼容OpenAI SDK的接入方式。
2.2 核心参数解析
创建OpenAI客户端时,有两个关键参数:
python复制client = OpenAI(
api_key="your-api-key", # 可选,如果已设置环境变量
base_url="https://dashscope.aliyuncs.com/compatible-mode/v1" # 服务商API地址
)
- api_key:模型服务商提供的身份凭证
- base_url:指定服务商的API端点地址
通过调整这两个参数,可以轻松切换不同的模型服务商,如OpenAI官方、阿里云、腾讯云等。
2.3 基础对话实现
与模型交互的核心方法是client.chat.completions.create(),主要参数:
python复制response = client.chat.completions.create(
model="qwen3-max", # 指定使用的模型
messages=[ # 对话消息列表
{"role": "system", "content": "你是一个Python编程专家,并且不说废话简单回答"},
{"role": "assistant", "content": "好的,我是编程专家,并且话不多,你要问什么?"},
{"role": "user", "content": "输出1-10的数字,使用python代码"}
]
)
messages参数详解:
- 类型:
List[Dict],包含多个消息字典 - 每个消息包含两个字段:
role:角色标识content:消息内容
角色类型说明:
- system:设定AI助手的整体行为和规则,为对话提供上下文框架
- assistant:代表AI助手的回复,可用于预设回答
- user:代表用户的输入,包含问题或指令
获取模型回复内容:
python复制print(response.choices[0].message.content)
2.4 流式输出实现
对于长文本生成,流式输出可以提升用户体验:
python复制response = client.chat.completions.create(
model="qwen3-max",
messages=[
{"role": "system", "content": "你是一个Python编程专家,并且是话痨"},
{"role": "user", "content": "输出1-10的数字,使用python代码"}
],
stream=True # 启用流式输出
)
for chunk in response:
if chunk.choices[0].delta.content:
print(chunk.choices[0].delta.content, end="", flush=True)
流式输出的特点:
- 响应更快,不需要等待完整生成
- 适合终端交互场景
- 需要处理分块数据
2.5 历史消息管理
利用messages列表可以维护完整的对话上下文:
python复制conversation = [
{"role": "system", "content": "你是一个专业的Python助手"},
{"role": "user", "content": "如何用Python读取CSV文件?"},
{"role": "assistant", "content": "可以使用pandas的read_csv函数..."},
{"role": "user", "content": "那如果我只想读取前5行呢?"}
]
response = client.chat.completions.create(
model="qwen3-max",
messages=conversation
)
这种设计使得多轮对话的实现变得非常简单,模型会根据完整的上下文生成更连贯的回答。
3. 提示词工程实践
3.1 提示词工程基础
提示词工程(Prompt Engineering)是指通过设计特定的输入提示(Prompt)来引导大模型产生期望输出的技术。核心要点包括:
- 清晰表达:明确说明任务要求
- 结构化设计:合理组织提示词结构
- 示例引导:提供少量示例(Few-shot)
- 约束控制:设定输出格式和限制
有效的提示词可以显著提升模型输出的质量和相关性。下面介绍几种实用技巧。
3.2 提示词设计技巧
技巧1:详细描述
python复制# 普通提示
"写一首诗"
# 优化后的提示
"写一首关于春天田野的七言绝句,要求押韵,描绘生机盎然的自然景象,使用生动形象的比喻"
技巧2:角色设定
python复制{"role": "system", "content": "你是一位资深金融分析师,擅长用通俗易懂的语言解释复杂的经济概念"}
技巧3:使用分隔符
python复制"""
请分析以下文本的情感倾向:[文本开始]
这款产品性价比很高,但物流速度较慢
[文本结束]
选项:正面/负面/中性
"""
技巧4:任务分步
python复制"""
请按步骤解决这个问题:
1. 识别文本中的实体
2. 分类实体类型
3. 统计每类实体数量
文本:...
"""
技巧5:提供示例(Few-shot)
python复制"""
示例1:
输入:"这个餐厅服务很好,但食物一般"
输出:{"服务":"正面","食物":"中性"}
示例2:
输入:"产品很棒,快递也快"
输出:{"产品":"正面","快递":"正面"}
现在请分析:"客服态度差,不过退款很快"
"""
技巧6:参考文本
python复制"""
根据以下材料回答问题:
[材料开始]
...金融报告内容...
[材料结束]
问题:该公司去年的主要收入来源是什么?
"""
3.3 金融文本分类实战
3.3.1 任务定义
将金融文本分类为:新闻报道、公司公告、财务报告、分析师报告四类。采用Few-shot方式设计提示词。
3.3.2 示例数据准备
python复制examples_data = {
'新闻报道': '今日,股市经历了一轮震荡...',
'财务报告': '本公司年度财务报告显示...',
'公司公告': '本公司高兴地宣布...',
'分析师报告': '最新的行业分析报告指出...'
}
3.3.3 提示词设计
python复制messages = [
{"role": "system", "content": "你是金融专家,将文本分类为['新闻报道','财务报告','公司公告','分析师报告']"},
{"role": "user", "content": "今日,股市经历了一轮震荡..."},
{"role": "assistant", "content": "新闻报道"},
{"role": "user", "content": "本公司年度财务报告显示..."},
{"role": "assistant", "content": "财务报告"},
# 更多示例...
]
3.3.4 完整实现代码
python复制from openai import OpenAI
from dotenv import load_dotenv
load_dotenv(r".env")
client = OpenAI(
base_url="https://dashscope.aliyuncs.com/compatible-mode/v1"
)
examples_data = {
'新闻报道': '今日,股市经历了一轮震荡...',
'财务报告': '本公司年度财务报告显示...',
'公司公告': '本公司高兴地宣布...',
'分析师报告': '最新的行业分析报告指出...'
}
questions = [
"今日,央行发布公告宣布降低利率...",
"ABC公司今日发布公告称...",
"公司资产负债表显示...",
"最新的分析报告指出..."
]
messages = [
{"role": "system", "content": "你是金融专家..."}
]
for text, label in examples_data.items():
messages.append({"role": "user", "content": label})
messages.append({"role": "assistant", "content": text})
for q in questions:
response = client.chat.completions.create(
model="qwen3-max",
messages=messages + [{"role": "user", "content": f"分类这段文本:{q}"}]
)
print(response.choices[0].message.content)
3.4 金融信息抽取实战
3.4.1 JSON格式处理
Python中使用json模块处理JSON数据:
python复制import json
# 字典转JSON字符串
data = {"name": "张三", "age": 30}
json_str = json.dumps(data, ensure_ascii=False)
# JSON字符串转字典
data = json.loads('{"name":"张三","age":30}')
3.4.2 彩票信息抽取
从彩票开奖文本中提取结构化信息:
python复制schema = ['期数', '中奖号码', '一等奖']
examples_data = [
{
"content": "2025100期双色球开奖号码为:红球 1, 3, 6, 11, 21, 22,蓝球 7,一等奖中出 2 注。",
"answers": {
"期数": "2025100",
"红球": "1,3,6,11,21,22",
"蓝球": "7",
"一等奖注数": "2注"
}
}
]
messages = [
{"role": "system", "content": f"抽取{schema}信息,按JSON输出..."}
]
for example in examples_data:
messages.append({"role": "user", "content": example["content"]})
messages.append({"role": "assistant", "content": json.dumps(example["answers"], ensure_ascii=False)})
3.4.3 文本匹配任务
判断两个句子是否表达相似含义:
python复制examples_data = {
"是": [
("公司ABC发布了季度财报,显示盈利增长。", "财报披露,公司ABC利润上升。")
],
"不是": [
("黄金价格下跌,投资者抛售。", "外汇市场交易额创下新高。")
]
}
messages = [
{"role": "system", "content": "判断两个句子是否匹配,回答是或不是"}
]
for label, pairs in examples_data.items():
for s1, s2 in pairs:
messages.append({"role": "user", "content": f"句子1:[{s1}],句子2:[{s2}]"})
messages.append({"role": "assistant", "content": label})
4. 高级技巧与最佳实践
4.1 温度参数调节
temperature参数控制输出的随机性:
python复制response = client.chat.completions.create(
model="qwen3-max",
messages=[...],
temperature=0.7 # 0-1之间,越高越有创造性
)
- 低温度(0-0.3):确定性高,适合事实性回答
- 中温度(0.4-0.7):平衡创造性和一致性
- 高温度(0.8-1):高度创造性,适合创意写作
4.2 最大令牌数控制
max_tokens限制生成内容长度:
python复制response = client.chat.completions.create(
model="qwen3-max",
messages=[...],
max_tokens=500 # 限制生成长度
)
合理设置可以防止生成过长内容,控制API成本。
4.3 错误处理与重试
实现健壮的API调用:
python复制import time
from openai import APIConnectionError
max_retries = 3
retry_delay = 1
for attempt in range(max_retries):
try:
response = client.chat.completions.create(...)
break
except APIConnectionError as e:
if attempt == max_retries - 1:
raise
time.sleep(retry_delay * (attempt + 1))
4.4 性能优化建议
- 批量处理:将多个请求合并为一个批次
- 缓存结果:对相同输入缓存响应
- 异步调用:使用async/await提高并发性能
- 监控用量:跟踪API调用次数和令牌消耗
5. 项目实战:构建金融分析助手
5.1 系统设计
构建一个能处理多种金融任务的AI助手:
- 文本分类:自动分类金融文档
- 信息抽取:从文本提取关键数据
- 报告生成:基于数据生成分析报告
- 问答系统:回答金融相关问题
5.2 核心组件实现
python复制class FinancialAssistant:
def __init__(self):
self.client = OpenAI(
base_url="https://dashscope.aliyuncs.com/compatible-mode/v1"
)
self.classify_prompt = [...] # 分类提示词
self.extract_prompt = [...] # 抽取提示词
def classify_text(self, text):
response = self.client.chat.completions.create(
model="qwen3-max",
messages=self.classify_prompt + [
{"role": "user", "content": text}
]
)
return response.choices[0].message.content
def extract_info(self, text, schema):
response = self.client.chat.completions.create(
model="qwen3-max",
messages=self.extract_prompt + [
{"role": "user", "content": f"从以下文本提取{schema}:{text}"}
]
)
return json.loads(response.choices[0].message.content)
5.3 部署优化建议
- API缓存:对相同查询缓存结果
- 速率限制:控制API调用频率
- 本地模型:对敏感数据考虑本地部署
- 监控告警:设置用量和错误监控
6. 常见问题排查
6.1 API连接问题
症状:无法连接到API端点
解决方案:
- 检查base_url是否正确
- 验证网络连接是否正常
- 确认API密钥有效且未过期
- 检查服务商状态页面
6.2 认证失败
症状:401 Unauthorized错误
解决方案:
- 确认API_KEY设置正确
- 检查环境变量是否生效
- 验证密钥是否有访问权限
- 尝试重新生成API密钥
6.3 模型不理解任务
症状:输出不符合预期
解决方案:
- 检查提示词是否清晰明确
- 增加Few-shot示例
- 尝试不同的模型版本
- 调整temperature参数
6.4 处理速率限制
症状:429 Too Many Requests错误
解决方案:
- 实现指数退避重试机制
- 降低请求频率
- 考虑批量处理请求
- 升级API套餐
在实际项目开发中,合理设计提示词和API调用逻辑是关键。通过系统化的测试和迭代优化,可以构建出稳定高效的AI应用。
