news 2026/7/23 13:02:13

从零开始构建你的RAG项目第二弹:API 调用大模型问答

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
从零开始构建你的RAG项目第二弹:API 调用大模型问答

一、为什么选择 API 调用
轻量:无需本地部署 GPU,只需一行请求即可调用大模型。
灵活:支持多种模型(qwen-turbo / qwen-plus / qwen-max),可按需切换。
兼容:DashScope 提供了 OpenAI API 兼容模式,能直接复用 LangChain、OpenAI SDK 等生态。
二、准备工作:配置 API Key
参考阿里云百炼的官方教程,注册账号后获取 API Key(国内用户需实名认证):

获取并使用 API Key
⚠️ 安全提示:为了安全和复用性,建议根据官方教程通过系统环境变量或 .env 文件配置 API Key,避免在代码中明文写入密钥。若项目公开,请务必在提交前移除或打码。本文为帮助读者迅速复现,采取了在代码中直接放入 API Key 的方式,并对其作打码处理。

三、大模型调用最小可运行示例
from langchain_openai import ChatOpenAI
import os

os.environ[“DASHSCOPE_API_KEY”] = ‘sk-xx’ # 替换为你的 API Key

chat = ChatOpenAI(
model=“qwen-plus”, # 可选 qwen-turbo / qwen-max
api_key=os.environ[“DASHSCOPE_API_KEY”],
base_url=“https://dashscope.aliyuncs.com/compatible-mode/v1”,
#若为国际版则改为 https://dashscope-intl.aliyuncs.com/compatible-mode/v1
temperature=0
)

resp = chat.invoke(“温度是什么?”)
print(resp.content)
如果这个代码可以让模型成功给出答案,那么则说明调用成功了。输出答案示例:

温度是表示物体冷热程度的物理量,从微观角度来看,它反映了物体内部分子或原子热运动的剧烈程度。温度越高,物质内部粒子(如分子、原子)的无规则运动就越剧烈;温度越低,粒子的运动就越缓慢。

四、结合 RAG 的调用示例

  1. 代码示例
    在 RAG 场景中,API 调用通常和我们上次生成的那种向量库结合。示例:

from langchain_community.embeddings import ModelScopeEmbeddings
from langchain_community.vectorstores import FAISS
from langchain_core.prompts import ChatPromptTemplate, SystemMessagePromptTemplate, HumanMessagePromptTemplate, MessagesPlaceholder
from langchain_core.messages import HumanMessage
from langchain_openai import ChatOpenAI
from operator import itemgetter
import os

1. 加载 embedding 模型和向量库

try:
# 加载embedding模型 (用于将query向量化)
embeddings = ModelScopeEmbeddings(model_id=‘iic/nlp_corom_sentence-embedding_chinese-base’)
#加载 FAISS 向量库 (用于知识召回)
vector_db = FAISS.load_local(‘faiss_index/LLM’, embeddings, allow_dangerous_deserialization=True) # 替换为你的向量库路径
# allow_dangerous_deserialization=True 仅在本地加载向量库时使用,请勿在不可信环境下启用

添加异常处理

except Exception as e:
print(f"模型或向量库加载失败: {str(e)}")
exit(1)

2. 创建检索器 Retriever

检索器将 query 转为向量并返回最相似文档片段

retriever = vector_db.as_retriever(search_kwargs={“k”: 5}) # 设置返回的相关相似对最高的模块数量为 5

3. 配置 API Key,初始化 Chat 模型

此处使用阿里云达观智能 DashScope 平台的模型接口

os.environ[“DASHSCOPE_API_KEY”] = ‘sk-xx’ # 替换为你的 API Key

chat = ChatOpenAI(
model=“qwen-plus”, # 按照需要更换模型名称
api_key=os.environ[“DASHSCOPE_API_KEY”],
base_url=“https://dashscope.aliyuncs.com/compatible-mode/v1”,
#若为国际版则改为 https://dashscope-intl.aliyuncs.com/compatible-mode/v1
temperature=0
)

4. Prompt模板

system_prompt = SystemMessagePromptTemplate.from_template(‘你是一个有帮助的助手。’) # 系统提示
user_prompt = HumanMessagePromptTemplate.from_template(‘’’
只基于以下内容回答问题,不要使用你在训练中学到的知识:

{context}

问题: {query}
‘’') # 用户提示
full_chat_prompt = ChatPromptTemplate.from_messages(
[system_prompt, MessagesPlaceholder(variable_name=“chat_history”), user_prompt]) # 构建完整的聊天提示模板

5. 构建对话链 Chat chain

chat_chain = {
“context”: itemgetter(“query”) | retriever,
“query”: itemgetter(“query”),
“chat_history”: itemgetter(“chat_history”),
} | full_chat_prompt | chat

6. 开始对话

chat_history = [] # 初始化对话历史
while True:
query = input(“请输入问题(输入 exit 退出):”)
if query.lower() == “exit”:
break
response = chat_chain.invoke({‘query’: query, ‘chat_history’: chat_history}) # 获取模型响应
chat_history.extend((HumanMessage(content=query), response)) # 更新对话历史
print(“AI:”, response.content)
chat_history = chat_history[-20:] # 保留最近 20 条消息
2. 代码中需要手动修改的部分
向量库地址
调用模型名称
自己的 API Key
base url 地址
3. 预期输出结果示例
调用模型后,会出现 input 的界面,仍旧提问为:“温度是什么?” 示例回答如下:

温度(Temperature)是介于0到1之间的值,用于影响模型生成文本时的随机性。低温 设置强调具有高确定性的单一首选预测,使模型倾向于选择高概率的下一个词;而高温设置则增加输出的多样性与创造性。当温度设置得极高(高于1,通常在10的量级),温度的影响变得不重要,此时更多依赖Top-K或Top-P等采样标准来选择词汇。

说明模型根据文档内容回答成功。

  1. 常用通义千问模型推荐
    模型名 特点 适用场景
    qwen-turbo 快速、成本低 测试或轻任务
    qwen-plus 平衡性能与成本 通用应用
    qwen-max 精度最高 需要复杂推理的场景
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/23 13:01:02

大模型时代:技术人才转型与职业发展指南

1. 行业现状:裁员潮与大模型人才争夺战最近两年科技行业出现了一个明显的两极分化现象:一边是各大厂纷纷缩减传统技术岗位编制,另一边却是大模型相关岗位的急招状态。作为从业十余年的技术老兵,我亲眼见证了这场人才市场的结构性变…

作者头像 李华
网站建设 2026/7/23 13:00:35

DRV8428E GUI工具实战:步进电机驱动参数可视化调试指南

1. 项目概述与核心价值 如果你正在开发一个需要用到步进电机的项目,无论是3D打印机、CNC雕刻机,还是自动化检测设备,那么你大概率绕不开一个核心环节:如何让电机转得既快又稳、既准又安静。这背后,驱动器的参数配置是关…

作者头像 李华
网站建设 2026/7/23 12:58:25

中国高铁技术创新与系统集成解析

1. 中国高铁的技术进化之路 2008年8月1日,京津城际铁路开通运营,标志着中国正式迈入高铁时代。这条全长120公里的铁路线,不仅连接了两大直辖市,更开启了中国轨道交通的新纪元。当时的设计时速350公里,已经让世界为之瞩…

作者头像 李华
网站建设 2026/7/23 12:58:21

Unity XR Interaction Toolkit 2.x抓取交互实战:Pico VR开发避坑指南

1. 项目概述:为什么XR Interaction Toolkit 2.x的抓取是个“坑”? 如果你正在用Unity开发Pico VR应用,并且已经升级到了XR Interaction Toolkit 2.x版本,那你很可能已经体会过那种“抓了个寂寞”的感觉。明明在编辑器里运行得好好…

作者头像 李华
网站建设 2026/7/23 12:58:16

AI内容检测与降AI率工具实战测评

1. 项目背景与核心痛点凌晨三点的显示器蓝光打在脸上,文档右下角的字数统计显示"4872/5000",但最让人揪心的是那个刺眼的红色百分比——"AI率78%"。这可能是每个内容创作者都经历过的噩梦时刻。交稿截止前12小时,当检测工…

作者头像 李华
网站建设 2026/7/23 12:58:11

如何用LT3724EFE#TRPBF设计60V输入电源?降压/升压/SEPIC拓扑选择与设计要点

LT3724EFE#TRPBF:ADI 60V高压电流模式开关稳压控制器深度解析在工业配电、汽车电子以及分布式电源系统等需要处理较高电压输入的应用中,系统设计往往需要在控制器的高压耐受能力、拓扑灵活性和轻载效率之间进行综合权衡。亚德诺半导体(Analog…

作者头像 李华