LangChain智能文档助手【1】-大模型客户端封装
这是一个基于 LangChain 框架和通义千问(Qwen)大语言模型构建的检索增强生成(RAG)智能问答系统的教程。该系统是基于最基础的功能点,如大语言模型调用,文档处理,嵌入模型向量化,向量存储和检索,智能对话构建而成,最后用streamlit生成一个web界面,将功能可视化。本篇为教程第二章,之前章节请参考:
https://blog.csdn.net/zx79122564/article/details/157181513?spm=1001.2014.3001.5502
上一节,我们完成了系统的基本介绍和环境搭建,接下来进入第二章 客户端封装
第二章 大模型客户端封装
本节中,我们要创建一个专门封装通义千问(Qwen)大语言模型 API 调用的客户端类,为整个 RAG 对话系统提供核心的 AI 能力。参考如下代码层级,创建qwen_client.py文件。

qwen_client.py文件的完整代码如下:
# 文件: src/qwen_client.py
import os
from typing import Optional, List, Dict, Any
from dotenv import load_dotenv
from openai import OpenAI
from langchain_openai import ChatOpenAI
from langchain_openai.embeddings import OpenAIEmbeddings
# 加载环境变量
load_dotenv()
class QwenClient:
"""通义千问客户端封装"""
def __init__(self, api_key: Optional[str] = None, model: Optional[str] = None):
self.api_key = api_key or os.getenv("DASHSCOPE_API_KEY")
self.model = model or os.getenv("QWEN_MODEL", "qwen-plus")
if not self.api_key:
raise ValueError("请设置DASHSCOPE_API_KEY环境变量")
# 初始化OpenAI兼容客户端
self.client = OpenAI(
api_key=self.api_key,
base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
)
print(f"通义千问客户端已初始化,使用模型: {self.model}")
# 核心聊天功能
def chat_completion(self, messages: List[Dict[str, str]], **kwargs) -> str:
"""聊天补全"""
try:
response = self.client.chat.completions.create(
model=self.model,
messages=messages,
**kwargs
)
return response.choices[0].message.content
except Exception as e:
print(f"❌ 调用通义千问失败: {e}")
raise
def get_langchain_llm(self, **kwargs):
"""获取LangChain兼容的LLM对象"""
return ChatOpenAI(
model=self.model,
openai_api_key=self.api_key,
openai_api_base="https://dashscope.aliyuncs.com/compatible-mode/v1",
temperature=kwargs.get("temperature", 0.3),
max_tokens=kwargs.get("max_tokens", 2000),
streaming=kwargs.get("streaming", False)
)
def test_connection(self) -> bool:
"""测试连接"""
try:
response = self.chat_completion([
{"role": "system", "content": "你是一个测试助手"},
{"role": "user", "content": "请回复'连接成功'"}
])
print(f"✅ 通义千问连接测试: {response}")
return True
except Exception as e:
print(f"❌ 连接测试失败: {e}")
return False
# 使用示例
if __name__ == "__main__":
qwen = QwenClient()
if qwen.test_connection():
# 测试对话
response = qwen.chat_completion([
{"role": "user", "content": "你好,请介绍一下你自己"}
])
print(f"🤖 Qwen回复: {response}")
代码运行结果如下:

qwen-client.py运行结果
代码解读:
- 什么是OpenAI兼容客户端?
相关代码块:
# 初始化OpenAI兼容客户端
self.client = OpenAI(
api_key=self.api_key,
base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
)
print(f"通义千问客户端已初始化,使用模型: {self.model}")
这是一种"翻译官"机制,让我们用OpenAI的代码格式,调用其他AI服务(如此处的通义千问)。这样大大降低开发者的学习成本,只学习OpenAI的SDK就可以调用其他模型。请参考下面原生API调用与OpenAI兼容模式调用
通义千问原生API调用
# 需要专门学习DashScope的SDK
from dashscope import Generation
response = Generation.call(
model='qwen-plus',
prompt='你好'
)
兼容模式调用(用熟悉的OpenAI格式):
# 用OpenAI SDK的知识就能写
from openai import OpenAI
client = OpenAI(
api_key="你的密钥",
base_url="https://dashscope.aliyuncs.com/compatible-mode/v1" # 关键!
)
response = client.chat.completions.create(
model="qwen-plus",
messages=[{"role": "user", "content": "你好"}]
)
2. 代码中chat_completion和get_langchain_llm两种调用API的方式有什么区别?
直接调用 vs 框架集成
chat_completion - 直接 API 调用
特点: 直接调用 OpenAI 兼容的 API 返回原始文本响应,适合简单的一次性对话
get_langchain_llm - LangChain 集成
特点: 返回 LangChain 的 ChatOpenAI 对象 可以集成到复杂的对话链中 ,支持流式输出、记忆管理等高级功能
使用场景
chat_completion
# 简单对话
response = qwen.chat_completion([
{"role": "user", "content": "你好"}
])
print(response) # 直接得到文本
get_langchain_llm
# 集成到 LangChain 对话链
llm = qwen.get_langchain_llm(temperature=0.7)
# 构建复杂的对话系统
from langchain.chains import ConversationChain
conversation = ConversationChain(
llm=llm,
memory=ConversationBufferMemory()
)
response = conversation.run("你好")
以上内容完成,我们就可以调用大模型的能力了,接下来我们会介绍如何做文档的处理。
更多推荐



所有评论(0)