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

如何向LLM传递ChatPromptTemplate之外的额外参数?

解决方案

当然可以传递包含messages和额外参数的序列化JSON对象,核心是在自定义LLM类时适配输入解析逻辑,步骤如下:

  • 重写LLM的调用逻辑:自定义LLM类时,在处理输入的方法里(比如LangChain的_call),先将传入的字符串反序列化为字典,从中提取messages和额外属性。
  • 处理参数并调用模型:把提取出的messages转换成模型要求的格式,同时将额外参数传入底层的模型调用接口。
  • 序列化输入后调用:在外部调用时,把包含messages和额外属性的字典序列化为JSON字符串,传给LLM的invoke方法。

示例代码

import json
from langchain.llms.base import LLM
from typing import List, Optional

class CustomLLM(LLM):
    def _call(self, prompt: str, stop: Optional[List[str]] = None) -> str:
        # 解析JSON格式的输入字符串
        try:
            input_data = json.loads(prompt)
        except json.JSONDecodeError:
            raise ValueError("输入必须是合法的JSON字符串")
        
        messages = input_data.get("messages", [])
        extra_params = input_data.get("extra_params", {})
        
        # 这里替换为实际调用模型的逻辑,结合messages和extra_params
        # 示例:调用第三方模型API
        # response = model_api_client.chat_completions.create(
        #     messages=messages,
        #     **extra_params
        # )
        # return response.choices[0].message.content
        
        # 模拟返回结果
        return f"处理完成,额外参数:{extra_params}"

    @property
    def _llm_type(self) -> str:
        return "custom"

# 调用示例
input_dict = {
    "messages": [{"role": "user", "content": "请介绍下Python"}],
    "extra_params": {"temperature": 0.8, "max_tokens": 300}
}

llm = CustomLLM()
result = llm.invoke(json.dumps(input_dict))
print(result)

注意事项

  • 要添加异常捕获逻辑,处理JSON解析失败的情况,避免程序崩溃。
  • 不同LLM框架的自定义方式略有差异,但核心思路一致:让invoke接收的字符串是序列化后的JSON,内部解析后分离核心消息和额外参数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 11:40:58