You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何强制LangChain Agent始终使用工具?数据库专属查询场景需求

强制LangChain Agent始终使用工具的方案

针对你的场景——要求Agent仅从私有数据库获取信息、完全不依赖公开知识,以下是几种可行的实现方式:

1. 硬编码强制调用逻辑

直接重写Agent的工具选择方法,跳过模型的自主决策步骤,让它始终调用你的数据库检索工具。

from langchain.agents import ZeroShotAgent, AgentExecutor
from langchain.chat_models import ChatOpenAI
from langchain.tools import Tool

# 定义数据库检索工具
def db_query_tool(query):
    # 替换为你的数据库查询实现
    return f"数据库返回结果:针对'{query}'的查询数据..."

tools = [
    Tool(
        name="DatabaseQuery",
        func=db_query_tool,
        description="用于查询私有数据库的唯一工具,必须优先使用"
    )
]

# 自定义Agent类,强制选择指定工具
class ForcedDbAgent(ZeroShotAgent):
    def _choose_tool(self, intermediate_steps, **kwargs):
        # 固定返回数据库检索工具
        return self.tools[0]

# 初始化组件
llm = ChatOpenAI(temperature=0)
custom_prompt = """你只能使用DatabaseQuery工具获取信息,所有回答必须基于工具返回的内容,绝对不能用自身知识作答。
输入问题:{input}
思考过程:{agent_scratchpad}"""

agent = ForcedDbAgent.from_llm_and_tools(llm=llm, tools=tools, prompt=custom_prompt)
agent_executor = AgentExecutor.from_agent_and_tools(agent=agent, tools=tools, verbose=True)

# 测试调用
agent_executor.run("查询用户张三的历史订单")

2. 通过Prompt严格约束行为

在Agent的系统提示词中加入强制指令,结合temperature=0的模型配置,让模型严格遵循规则,不自主生成回答。

from langchain.agents import initialize_agent, AgentType
from langchain.chat_models import ChatOpenAI
from langchain.tools import Tool

# 定义数据库工具
def db_retrieval(query):
    # 你的数据库查询逻辑
    return "从私有数据库获取的具体数据..."

tools = [
    Tool(
        name="PrivateDBRetrieval",
        func=db_retrieval,
        description="唯一可用于获取信息的工具,必须调用它来回答所有问题"
    )
]

# 强制型Prompt
forced_prompt = """你是一个只能通过PrivateDBRetrieval工具获取信息的助手,规则如下:
1. 无论任何问题,必须先调用PrivateDBRetrieval工具查询
2. 只能使用工具返回的内容组织回答,不得添加任何自身已知的信息
3. 如果工具返回结果为空,直接告知无法获取信息,不得编造内容

用户问题:{input}
你的思考与调用记录:{agent_scratchpad}"""

# 初始化Agent,关闭随机性
llm = ChatOpenAI(temperature=0)
agent = initialize_agent(
    tools,
    llm,
    agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION,
    agent_kwargs={"prompt": forced_prompt},
    verbose=True
)

# 执行查询
agent.run("获取产品ID为456的库存数量")

3. 使用AgentExecutor的强制工具调用参数

部分LangChain版本支持在AgentExecutor中设置force_tool_use=True参数(需确认对应版本兼容性),直接强制Agent调用工具:

agent_executor = AgentExecutor.from_agent_and_tools(
    agent=agent,
    tools=tools,
    verbose=True,
    force_tool_use=True  # 强制调用工具
)

关键注意事项

  • 将LLM的temperature设为0,消除模型的随机决策空间,确保严格遵循指令
  • 工具的description要明确标注“必须使用”“唯一工具”等强约束词汇
  • 避免在Prompt中留下任何可让模型自主回答的余地,比如不要出现“如果知道答案可以直接回答”这类表述

内容的提问来源于stack exchange,提问作者gosia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 23:31:29