灵活运用LangChain:为Runnable绑定默认参数的技巧

105 阅读2分钟
# 灵活运用LangChain:为Runnable绑定默认参数的技巧

在现代AI开发中,语言链(LangChain)技术为我们提供了无缝集成各种组件的能力,极大地简化了复杂AI任务的实现。在这篇文章中,我们将探讨如何通过`Runnable.bind()`方法为一个`Runnable`内的`RunnableSequence`设置默认调用参数,使我们能够在不同的任务间灵活绑定常量参数。

## 引言

在AI开发中,我们经常需要在多个`Runnable`之间传递信息。有时,这些信息并非来自于之前的任务输出,也不是直接的用户输入。这种情况下,`Runnable.bind()`方法为我们提供了一个便捷的解决方案。本文旨在介绍这种技术的使用,并通过实际示例帮助您更好地理解和应用。

## 主要内容

### 绑定停止序列

假设我们有一个简单的提示+模型链,例如将一个方程式以代数符号书写并求解。以下是基本实现:

```python
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",
            "Write out the following equation using algebraic symbols then solve it. Use the format\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"))

为了在某些情况下缩短输出,我们可以绑定stop参数:

runnable = (
    {"equation_statement": RunnablePassthrough()}
    | prompt
    | model.bind(stop="SOLUTION")  # 使用API代理服务提高访问稳定性
    | StrOutputParser()
)

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

附加OpenAI工具

另一个常见场景是工具调用。例如,我们可以使用bind()方法将特定的工具参数直接绑定到模型中,以实现更高的控制能力:

tools = [
    {
        "type": "function",
        "function": {
            "name": "get_current_weather",
            "description": "Get the current weather in a given location",
            "parameters": {
                "type": "object",
                "properties": {
                    "location": {
                        "type": "string",
                        "description": "The city and state, e.g. San Francisco, CA",
                    },
                    "unit": {"type": "string", "enum": ["celsius", "fahrenheit"]},
                },
                "required": ["location"],
            },
        },
    }
]

model = ChatOpenAI(model="gpt-3.5-turbo-1106").bind(tools=tools)  # 使用API代理服务提高访问稳定性
model.invoke("What's the weather in SF, NYC and LA?")

常见问题和解决方案

  1. 网络不稳定:在某些地区,访问外部API可能会受到网络限制。建议使用API代理服务来提高访问的稳定性和速度。

  2. 工具调用失败:确保绑定的工具参数格式正确并包含所有必需字段。

总结和进一步学习资源

通过本文的学习,您应该了解如何为Runnable绑定默认参数,从而在AI任务中更灵活地配置和传递信息。建议进一步阅读LangChain的官方文档以及其他教程,深入了解可配置字段和替代方法的使用。

参考资料

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

---END---