如何向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
相关产品推荐
相关产品推荐

