langchain deepseek使用open ai
时间: 2025-06-27 08:10:43 浏览: 20
### 使用 DeepSeek 替代 OpenAI 的方法
在 LangChain 中替换模型供应商是一个常见的需求,尤其是在希望利用不同模型的独特优势时。以下是关于如何使用 DeepSeek 模型替代 OpenAI 并实现类似功能的详细说明。
#### 1. 安装必要的依赖库
为了支持 DeepSeek 和其他相关组件的功能,需安装 `langchain` 和 `deepeval` 或者官方推荐的相关包。
```bash
pip install langchain deepeval deepseek
```
#### 2. 配置 DeepSeek API 密钥
DeepSeek 提供了自己的 API 接口来访问其大语言模型服务。确保已获取有效的 API Key,并将其设置到环境变量中以便于调用[^1]。
```python
import os
os.environ["DEEPSEEK_API_KEY"] = "your-deepseek-api-key"
```
#### 3. 初始化 DeepSeek LLM 实例
LangChain 支持多种类型的大型语言模型集成方式。对于 DeepSeek 来说,可以通过指定参数创建相应的实例对象。
```python
from langchain.llms import DeepSeek
llm = DeepSeek(model_name="deepseek-v3", temperature=0.7, max_tokens=512)
```
此处选择了 `"deepseek-v3"` 版本作为默认加载项;当然也可以根据实际业务场景调整温度系数以及其他超参配置[^2]。
#### 4. 构建基于 RAG 的问答系统框架
按照标准的检索增强生成 (Retrieval-Augmented Generation, RAG) 流程设计整个架构体系结构如下:
- **Document Loading**: 将原始资料转化为适合处理的形式;
- **Text Splitting & Embedding Indexing**: 对文档片段执行分词操作后再计算嵌入表示并存入矢量数据库;
- **Query Retrieval**: 用户输入查询字符串后转换成对应的向量形式并与已有记录做匹配找出关联最高的若干条目;
- **Prompt Construction and Response Generation**: 综合上述两步所得信息构建最终提示语句交给选定的大规模预训练模型完成预测任务。
具体代码实现可以参考下面的例子:
```python
from langchain.embeddings.openai import OpenAIEmbeddings
from langchain.vectorstores import Chroma
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.chains.question_answering import load_qa_chain
# 加载知识源文件夹下的所有文本资源
loader = DirectoryLoader("./data/", glob="./*.txt")
documents = loader.load()
# 创建递归字符分割器用于拆解长篇幅内容
text_splitter = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
texts = text_splitter.split_documents(documents)
# 嵌入函数定义,默认采用开源方案如HuggingFace Transformers中的现成工具
embeddings_function = HuggingFaceInstructEmbeddings(model_name="hkunlp/instructor-xl")
# 向量化存储初始化过程
vectorstore = Chroma.from_texts(texts=texts, embedding=embeddings_function, persist_directory="./chromadb/")
# 查询阶段逻辑封装
def retrieve_relevant_snippets(query):
query_vector = embeddings_function.encode([query])[0]
results = vectorstore.similarity_search_by_vector(query_vector=query_vector, k=3)
return "\n".join(result.page_content for result in results)
# 主交互循环入口点
while True:
user_input = input("请输入您的问题: ")
retrieved_context = retrieve_relevant_snippets(user_input)
prompt_template = f"""Context:\n{retrieved_context}\n\nQuestion:{user_input}"""
response = llm(prompt=prompt_template).strip()
print(f"\nAnswer: {response}")
```
此脚本展示了完整的端到端工作流,其中包含了从数据准备一直到答案输出的所有必要环节[^3]。
---
阅读全文
相关推荐


















