大语言模型(LLM,如 GPT 系列、文心一言、通义千问)作为开发者的新工具,Python 生态中相应的开发框架也已逐渐成熟。在实际项目中,我们不只是调 API 让模型说话,而是要把模型接入业务逻辑、连接私域数据、构建可控的智能应用。这一节介绍当前最主流的三项技术:API 调用、RAG 开发、LangChain。
API 调用:与大模型的第一次握手
无论模型多复杂,最基础的接入方式就是调用厂商提供的 HTTP API。以 OpenAI 的 API 为例:
import openai
openai.api_key = "your-api-key"
response = openai.ChatCompletion.create(
model="gpt-3.5-turbo",
messages=[{"role": "user", "content": "帮我用 Python 写一个快速排序函数"}]
)
print(response.choices[0].message.content)
其他大模型也通常提供兼容 OpenAI 接口风格的 SDK,换一个 base_url 和 api_key 即可切换厂商。实际使用中需要关注四点:
- 认证与密钥:通过环境变量管理密钥,绝对不硬编码在代码里。
- 异常处理:网络超时、速率限制、模型不可用等错误要捕获重试。
- 计费控制:按 Token 数量计费,输出长度可以用
max_tokens限制。 - 流式响应:对于长回答,使用
stream=True实现逐字返回,优化用户体验。
RAG 开发:让大模型“懂”你的私有数据
大模型训练数据的截止日期固定,且缺乏企业内部知识。检索增强生成(RAG, Retrieval-Augmented Generation) 是目前最实用的解决方案:先从你自己的文档库中检索相关信息,再把这些信息连同问题一起发给大模型,让模型基于检索到的内容生成答案。
简单 RAG 流程:
- 文档加载与分割:把 PDF、Word、网页等文档读入并切分成适当大小的文本块。
- 向量化:用嵌入模型(如 OpenAI 的
text-embedding-ada-002或开源的 BGE)把每个文本块转换为向量。 - 存储:把向量和对应的原始文本存入向量数据库(如 Chroma、FAISS、Milvus)。
- 检索:用户提问时,将问题同样转为向量,在库中搜索最相似的几个文本块。
- 生成:把检索到的文本块作为上下文,拼接到 Prompt 中,调用大模型生成最终答案。
一个极简实现示例(使用 LangChain):
from langchain.embeddings import OpenAIEmbeddings
from langchain.vectorstores import Chroma
from langchain.chains import RetrievalQA
from langchain.llms import OpenAI
# 加载分割后的文档 chunks(此处省略具体加载过程)
embedding = OpenAIEmbeddings()
vectordb = Chroma.from_documents(chunks, embedding)
qa = RetrievalQA.from_chain_type(
llm=OpenAI(temperature=0),
chain_type="stuff",
retriever=vectordb.as_retriever()
)
result = qa.run("公司今年的年假政策是什么?")
RAG 的优势:
- 不需要重新训练或微调模型,更新数据只需重新构建向量库。
- 答案可溯源,能标记引用自哪份文档,增强可信度。
- 成本远低于微调,实现周期短。
LangChain:大模型应用的全能框架
LangChain 是目前 Python 生态中最流行的大模型应用开发框架,它将大模型调用、RAG、对话管理、工具调用等常用能力封装成模块化的“链”(Chain)。核心价值是帮你把大模型的能力“组装”成可运行的业务逻辑。
LangChain 的核心概念:
- LLMs / Chat Models:封装对大语言模型的调用。
- Prompts:模板化构建发给模型的 Prompt,支持少量样本示例。
- Chains:将多个组件串联执行,比如先检索再生成。
- Agents:让模型自主决定使用哪些工具(如搜索引擎、计算器、数据库查询),完成复杂任务。
- Memory:管理对话历史,实现多轮问答。
一个简单的 Agent 示例(模型自动决定是否需要调用搜索引擎):
from langchain.agents import load_tools, initialize_agent
from langchain.llms import OpenAI
llm = OpenAI(temperature=0)
tools = load_tools(["serpapi"], llm=llm) # 需要 SERPAPI 密钥
agent = initialize_agent(tools, llm, agent="zero-shot-react-description")
response = agent.run("今天北京天气怎么样?")
适用场景:
- 需要模型自主决策的任务(如自动处理客户工单的不同类型请求)。
- 结合外部数据(数据库、API)的复杂问答系统。
- 多步推理或需要工具辅助的对话应用。
选型建议
- 如果只是简单问答:直接 API 调用,无需框架。
- 如果有大量内部文档需要问答:采用 RAG 模式,LangChain 或 LlamaIndex 都可以帮你快速搭建。
- 如果流程复杂、需模型自主决策:使用 LangChain 的 Agent。
无论选择哪种方式,Python 生态都提供了从模型接入到生产部署的完整支持,你可以用极低的成本把大模型变成实际应用中的生产力工具。