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

如何基于EC2上LLM的URL接口构建LangChain ConversationalRetrievalChain?

如何基于EC2部署的LLM接口构建LangChain的ConversationalRetrievalChain?

假设我有一个部署在AWS EC2实例上的LLM模型,可通过指定URL,以如下方式发送请求:

payload = {
      "model": "mistralai/Mistral-7B-v0.1",
      "prompt": "My favourite condiment is",
      "max_tokens": 25
      }

data = json.dumps(payload, ensure_ascii=False)
response = requests.post(url=url, data=data)

我能否基于此构建LangChain的ConversationalRetrievalChain?使用SageMaker端点时,我可通过以下代码实现:

llm = SagemakerEndpoint(ENDPOINT_INFOS_GO_HERE)
chain = ConversationalRetrievalChain.from_llm(llm=llm, retriever=db.as_retriever())  # <-- 我已经连接了数据库

但目前我仅拥有该LLM的URL接口,该如何操作?

可以通过自定义LangChain的LLM子类对接EC2上的LLM接口,具体步骤如下:

  1. 自定义LLM类
    继承LangChain的LLM基类,实现核心的请求调用和参数标识方法:
from langchain.llms.base import LLM
from typing import Optional, List, Mapping, Any
import requests
import json

class EC2LLM(LLM):
    url: str
    model_name: str
    max_tokens: int = 25

    @property
    def _identifying_params(self) -> Mapping[str, Any]:
        return {
            "url": self.url,
            "model_name": self.model_name,
            "max_tokens": self.max_tokens
        }

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

    def _call(
        self,
        prompt: str,
        stop: Optional[List[str]] = None,
        run_manager: Optional[Any] = None,
    ) -> str:
        # 构造请求体
        payload = {
            "model": self.model_name,
            "prompt": prompt,
            "max_tokens": self.max_tokens
        }
        data = json.dumps(payload, ensure_ascii=False)
        # 发送POST请求
        response = requests.post(url=self.url, data=data)
        response.raise_for_status()  # 抛出请求异常
        # 解析响应(需根据实际接口返回格式调整字段名)
        result = response.json()
        return result.get("response", "")
  1. 初始化自定义LLM实例
llm = EC2LLM(
    url="你的EC2 LLM接口URL",
    model_name="mistralai/Mistral-7B-v0.1",
    max_tokens=50  # 可按需调整
)
  1. 构建ConversationalRetrievalChain
    和使用SageMaker端点的逻辑完全一致,直接传入自定义LLM实例即可:
chain = ConversationalRetrievalChain.from_llm(llm=llm, retriever=db.as_retriever())

注意事项:

  • 需根据EC2上LLM接口的实际响应格式,调整_call方法中的解析逻辑,比如有些接口可能用"generated_text"或"output"字段返回结果。
  • 可根据需求添加请求超时、重试机制,或在payload中加入温度、top_p等接口支持的参数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 12:26:00