LangChain-v0.2文档翻译:3.10、如何为Runnable添加默认调用参数

有时候,我们希望在RunnableSequence中的Runnable使用一些不是前一个Runnable输出的一部分,也不是用户输入的一部分的常量参数。我们可以使用Runnable.bind()方法提前设置这些参数。

绑定停止序列

假设我们有一个简单的提示+模型链:

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",
        "使用代数符号写出下面的方程,然后解它。使用格式\n\nEQUATION:...\nSOLUTION:...\n\n",
    ),
    ("human", "{equation_statement}"),
])

model = ChatOpenAI(temperature=0)

runnable = (
    {"equation_statement": RunnablePassthrough()}
    | prompt
    | model
    | StrOutputParser()
)

print(runnable.invoke("x raised to the third plus seven equals 12"))
EQUATION: x^3 + 7 = 12

SOLUTION:
两边同时减去7:
x^3 = 5

两边同时取立方根:
x = ∛5

如果我们想用某些stop词调用模型,以便在某些提示技术中缩短输出。虽然我们可以在构造函数中传递一些参数,但其他运行时参数使用.bind()方法如下:

runnable = (
    {"equation_statement": RunnablePassthrough()}
    | prompt
    | model.bind(stop="SOLUTION")
    | StrOutputParser()
)

print(runnable.invoke("x raised to the third plus seven equals 12"))

您可以绑定到Runnable的内容取决于在调用时可以传递的额外参数。

附加 OpenAI 工具​

另一个常见的用例是工具调用。虽然您通常应该使用.bind_tools()方法来调用工具模型,但如果您想要更低级别的控制,也可以直接绑定特定于提供者的参数:

tools = [
    {
        "type": "function",
        "function": {
            "name": "get_current_weather",
            "description": "获取给定位置的当前天气",
            "parameters": {
                "type": "object",
                "properties": {
                    "location": {
                        "type": "string",
                        "description": "城市和州,例如 San Francisco, CA",
                    },
                    "unit": {"type": "string", "enum": ["celsius", "fahrenheit"]},
                },
                "required": ["location"],
            },
        },
    }
]

model = ChatOpenAI(model="gpt-3.5-turbo-1106").bind(tools=tools)
model.invoke("What's the weather in SF, NYC and LA?")
AIMessage(content='', additional_kwargs={'tool_calls': [{'id': 'call_z0OU2CytqENVrRTI6T8DkI3u', 'function': {'arguments': '{"location": "San Francisco, CA", "unit": "celsius"}', 'name': 'get_current_weather'}, 'type': 'function'}, {'id': 'call_ft96IJBh0cMKkQWrZjNg4bsw', 'function': {'arguments': '{"location": "New York, NY", "unit": "celsius"}', 'name': 'get_current_weather'}, 'type': 'function'}, {'id': 'call_tfbtGgCLmuBuWgZLvpPwvUMH', 'function': {'arguments': '{"location": "Los Angeles, CA", "unit": "celsius"}', 'name': 'get_current_weather'}, 'type': 'function'}]}, response_metadata={'token_usage': {'completion_tokens': 84, 'prompt_tokens': 85, 'total_tokens': 169}, 'model_name': 'gpt-3.5-turbo-1106', 'system_fingerprint': 'fp_77a673219d', 'finish_reason': 'tool_calls', 'logprobs': None}, id='run-d57ad5fa-b52a-4822-bc3e-74f838697e18-0', tool_calls=[{'name': 'get_current_weather', 'args': {'location': 'San Francisco, CA', 'unit': 'celsius'}, 'id': 'call_z0OU2CytqENVrRTI6T8DkI3u'}, {'name': 'get_current_weather', 'args': {'location': 'New York, NY', 'unit': 'celsius'}, 'id': 'call_ft96IJBh0cMKkQWrZjNg4bsw'}, {'name': 'get_current_weather', 'args': {'location': 'Los Angeles, CA', 'unit': 'celsius'}, 'id': 'call_tfbtGgCLmuBuWgZLvpPwvUMH'}]})

总结:本文介绍了如何在Python中使用RunnableRunnableSequence进行参数绑定,包括如何使用Runnable.bind()方法设置常量参数,以及如何进行工具调用。通过示例代码,我们学习了如何构建一个简单的提示+模型链,并展示了如何通过绑定参数来控制模型的输出。此外,还提供了关于如何使用工具调用和如何使用.bind_tools()方法的示例。

扩展知识:在本文中,我们使用了langchain_corelangchain_openai库,这些库是构建和运行复杂的语言模型链的框架。RunnableRunnableSequence是该框架中用于构建和执行模型链的基本组件。通过学习本文,读者可以更深入地理解如何在实际应用中使用这些组件来实现更高级的自动化和集成功能。

请注意,由于原文中包含的图片链接无法直接翻译,我保留了原链接中的图片引用。如果您需要进一步的帮助或有其他文件需要翻译,请随时告知。

<think>我们面对的是一个复杂的依赖冲突问题,需要同时满足多个包对核心库的版本要求。当前环境中的`langchain-core`版本为0.1.23,`langsmith`版本为0.0.87,但新安装的包要求更高版本的核心库。具体冲突如下: - `langgraph-prebuilt 0.6.5` 要求 `langchain-core>=0.3.67` - `langgraph-checkpoint 2.1.2` 要求 `langchain-core>=0.2.38` - `langchain-text-splitters 1.0.0` 要求 `langchain-core>=1.0.0,<2.0.0` - `langchain-classic 1.0.0` 要求 `langchain-core>=1.0.0,<2.0.0` 且 `langsmith>=0.1.17,<1.0.0` 而当前环境是`langchain-core 0.1.23`和`langsmith 0.0.87`,显然不满足要求。 ### 解决方案选择 由于这些新包都要求`langchain-core`至少为1.0.0,我们必须升级核心库,但升级核心库可能会导致原有的`langchain 0.0.354`和`langchain-community 0.0.20`不兼容(因为它们要求`langchain-core<0.2`)。因此,我们需要权衡: 1. **方案A:升级核心库,放弃旧版`langchain`** 将`langchain-core`升级到1.0.0以上,同时升级`langsmith`到0.1.17以上,并安装新包。但这样会导致原有的`langchain 0.0.354`和`langchain-community 0.0.20`可能无法使用。 2. **方案B:创建新环境,新旧项目隔离** 为需要使用新包的项目创建一个新的虚拟环境,在新环境中安装高版本的核心库和新包,而旧环境保持不变。 ### 推荐方案:方案B(环境隔离) 考虑到兼容性和稳定性,我们推荐使用环境隔离方案。以下是具体步骤: #### 步骤1:创建新虚拟环境 ```bash # 使用conda(推荐) conda create -n langchain-new python=3.10 conda activate langchain-new # 或使用venv python -m venv langchain-new-env source langchain-new-env/bin/activate # Linux/MacOS .\langchain-new-env\Scripts\activate # Windows ``` #### 步骤2:安装兼容版本的`langchain-core`和`langsmith` ```bash pip install "langchain-core>=1.0.0,<2.0.0" "langsmith>=0.1.17,<1.0.0" ``` #### 步骤3:安装所需的其他包 ```bash pip install langgraph-prebuilt==0.6.5 langgraph-checkpoint==2.1.2 langchain-text-splitters==1.0.0 langchain-classic==1.0.0 ``` #### 步骤4:验证安装 ```python import langchain_core import langsmith print(f"langchain-core: {langchain_core.__version__}") # 应该为1.x.x print(f"langsmith: {langsmith.__version__}") # 应该为0.1.x # 测试新包 from langgraph.prebuilt import create_react_agent print("create_react_agent imported successfully") ``` ### 处理旧项目依赖 如果旧项目仍需在原有环境下运行,保留旧环境即可。通过切换环境来分别运行新旧项目。 ### 备选方案:尝试升级旧包(风险较高) 如果必须在一个环境中运行,尝试升级`langchain`和`langchain-community`到兼容高版本核心库的版本: ```bash # 在新环境中尝试(先确保已安装高版本核心库) pip install --upgrade "langchain>=0.1" "langchain-community>=0.1" ``` 注意:这可能导致原有代码需要修改,以适应新版本API的变化。 ### 版本依赖关系总结 ```mermaid graph TD A[新包需求] --> B[langchain-core>=1.0.0] A --> C[langsmith>=0.1.17] D[旧包需求] --> E[langchain-core<0.2] D --> F[langsmith<0.1.0] ``` ### 注意事项 1. **API变更**:从`langchain-core` 0.1.x 升级到 1.x.x 会有重大API变更,需要修改代码[^1]。 2. **测试覆盖**:升级后务必进行全面测试。 3. **依赖冲突排查工具**:可使用`pip check`命令检查依赖冲突。 ### 相关问题 1. 如何同时维护多个Python虚拟环境? 2. 升级LangChain到1.0以上版本有哪些主要API变化? 3. 如何解决`pip install`时出现的循环依赖问题? 4. 使用`conda`和`venv`管理环境有何区别? 5. LangGraph预构建组件有哪些使用限制? [^1]: 参考LangChain官方迁移指南:https://python.langchain.com/v0.2/docs/migration/ </think>### 解决 LangGraph 依赖冲突方案 您面临的核心问题是:**新组件的版本要求($ \text{langchain-core} \geq 1.0.0 $)与当前环境($ \text{langchain-core} = 0.1.23 $)不兼容**。以下是系统化解决方案: --- ### 冲突矩阵 | 包名 | 要求版本范围 (langchain-core) | 要求版本范围 (langsmith) | |--------------------------|-------------------------------|--------------------------| | langgraph-prebuilt@0.6.5 | $ \geq 0.3.67 $ | - | | langgraph-checkpoint@2.1.2 | $ \geq 0.2.38 $ | - | | langchain-text-splitters@1.0.0 | $ [1.0.0, 2.0.0) $ | - | | langchain-classic@1.0.0 | $ [1.0.0, 2.0.0) $ | $ [0.1.17, 1.0.0) $ | | **当前环境** | 0.1.23 | 0.0.87 | --- ### 推荐解决方案:版本升级路径 #### 步骤1:创建新虚拟环境 ```bash python -m venv langchain-new-env source langchain-new-env/bin/activate # Linux/Mac .\langchain-new-env\Scripts\activate # Windows ``` #### 步骤2:安装兼容版本的核心库 ```bash # 安装满足所有包要求的最小兼容版本 pip install "langchain-core>=1.0.0,<2.0.0" "langsmith>=0.1.17,<1.0.0" ``` #### 步骤3:安装目标组件 ```bash # 按依赖顺序安装(从基础到高级) pip install langchain-text-splitters==1.0.0 \ langchain-classic==1.0.0 \ langgraph-checkpoint==2.1.2 \ langgraph-prebuilt==0.6.5 ``` #### 步骤4:验证依赖树 ```bash pip freeze | grep -E &#39;langchain|langsmith&#39; ``` 预期输出: ``` langchain-classic==1.0.0 langchain-core==1.0.3 # 符合 >=1.0.0 langchain-text-splitters==1.0.0 langgraph-checkpoint==2.1.2 langgraph-prebuilt==0.6.5 langsmith==0.4.41 # 符合 >=0.1.17 ``` --- ### 备选方案:依赖降级(不推荐) 如果需要保持旧版环境: ```bash # 寻找兼容旧版的组件版本 pip install langgraph-prebuilt==0.0.5 \ # 支持旧版core langgraph-checkpoint==0.0.8 \ langchain-text-splitters==0.0.1 \ langchain-classic==0.0.1 ``` --- ### 关键注意事项 1. **API变更**:$ \text{langchain-core} \geq 1.0.0 $ 引入重大更新: - 所有工具调用需通过 `@tool` 装饰器[^1] - `Runnable` 接口取代旧版 Chain 结构 ```python # 新版工具定义示例 from langchain_core.tools import tool @tool def search(query: str) -> str: """执行网络搜索""" return f"Results for {query}" ``` 2. **预构建组件兼容性**: ```mermaid graph LR A[langgraph.prebuilt] --> B[ToolNode] A --> C[ValidationNode] B --> D[langchain-core>=1.0.0] C --> D D --> E[工具接口变更] ``` 3. **可视化调试**: ```python from langgraph.prebuilt import create_react_agent agent = create_react_agent(llm, tools) agent.get_graph().to_dot() # 可视化状态图[^1] ``` --- ### 迁移检查清单 1. [ ] 替换所有 `from langchain import Tool` 为新版 `@tool` 装饰器 2. [ ] 将 `LLMChain` 替换为 `Runnable` 接口 3. [ ] 验证所有工具输入输出模式(避免 $ \text{ValidationNode} $ 错误) 4. [ ] 测试异步调用:`await agent.ainvoke({"input": "query"})` --- ### 性能优化建议 1. 对于 `langgraph-checkpoint`: ```python from langgraph.checkpoint import SqliteSaver checkpoint = SqliteSaver.from_conn_string(":memory:") # 内存数据库 agent = create_react_agent(..., checkpoint=checkpoint) ``` 2. 文本分割器并行处理: ```python from langchain_text_splitters import RecursiveCharacterTextSplitter splitter = RecursiveCharacterTextSplitter(use_multithreading=True) ``` --- ### 验证脚本 ```python # 验证核心版本 import langchain_core assert langchain_core.__version__ >= "1.0.0" # 测试预构建组件 from langgraph.prebuilt import ToolNode tool_node = ToolNode([search_tool]) # 测试经典链 from langchain_classic.chains import LLMChain ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值