langchain、openai使用问题记录

1、OpenAI调用API报错 time out:HTTPSConnectionPool(host=‘api.openai.com‘, port=443)

pip install urllib3==1.25.11

2、langchain新版本V0.1(2024年1月)需要python3.8+

官方文档Quickstart | 🦜️🔗 Langchain

中文文档:非最新LangChain中文网: 500页超详细中文文档教程,助力LLM/chatGPT应用开发 – LangChain中文网LangChain中文站,助力大语言模型LLM应用开发、chatGPT应用开发。icon-default.png?t=N7T8https://www.langchain.com.cn/

3、openai.APIConnectionError: Connection error.

测试发现openai-1.12.0的版本报错(有tizi),降到openai-0.28.0可正常

由于降低版本进而引出异常AttributeError: module 'openai' has no attribute 'OpenAI'

#原openai-1.12.0
from langchain_openai import ChatOpenAI
llm=ChatOpenAI()

#降到openai==0.28
#提示langchain-openai 0.0.6 requires openai<2.0.0,>=1.10.0, but you have openai 0.28.0 which is incompatible.
#报错AttributeError: module 'openai' has no attribute 'OpenAI'

解决方案目前是改用旧版的调用方式,会出现警告

 UserWarning: You are trying to use a chat model. This way of initializing it is no longer supported. Instead, please use: `from langchain_community.chat_models import ChatOpenAI`

from langchain.llms import OpenAI,OpenAIChat
from langchain_community.llms.openai import OpenAIChat
llm = OpenAI(model_name="gpt-3.5-turbo", temperature=0)

------------------------2024年2月25日更新-----------------------------------------------------------------------------

win11、python3.9.18、openai=1.12.0、urllib3=1.25.11

可正常调用,无需其他改动

--------------------------------------------------------------------------------------------------------------------------------

4、create_stuff_documents_chain、create_retrieval_chain

from langchain.chains.combine_documents import create_stuff_documents_chain

documents_chain的prompt有格式要求?未按格式找不到答案

prompt = ChatPromptTemplate.from_template(
    """
    只根据提供的内容进行回答,如果问题与提供的材料无关,请回答"对不起,我不知道"
    {context}
    {input}
    """)

from langchain.chains import create_retrieval_chain

retrieval_chain要求传入prompt中用input,否则报错KeyError: 'input',retrieval_docs = (lambda x: x["input"]) | retriever

### 使用 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]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值