langchain llm包装类接入第三方模型 以接入MoonshotAI为例

image.png
中文官网api介绍:
https://www.langchain.asia/modules/models/llms/examples/custom_llm

使用第三方api需要编写自定义LLM包装器自定义:
自定义LLM仅需要实现一件必需的事情:

一个 _call 方法,它接收一个字符串,一些可选的停用词,并返回一个字符串

它还可以实现第二个可选项:
一个 _identifying_params 属性,用于帮助打印该类。应该返回一个字典。
让我们实现一个非常简单的自定义LLM,它只返回输入的前N个字符。

from typing import Any, List, Mapping, Optional
 
from langchain.callbacks.manager import CallbackManagerForLLMRun
from langchain.llms.base import LLM

class CustomLLM(LLM):
 
    n: int
 
    @property
    def _llm_type(self) -> str:
        return "custom"
 
    def _call(
        self,
        prompt: str,
        stop: Optional[List[str]] = None,
        run_manager: Optional[CallbackManagerForLLMRun] = None,
    ) -> str:
        if stop is not None:
            raise ValueError("stop kwargs are not permitted.")
        return prompt[:self.n]
 
    @property
    def _identifying_params(self) -> Mapping[str, Any]:
 """Get the identifying parameters."""
        return {"n": self.n}
 llm = CustomLLM(n=10)

#实际调用 _call(方法)
 llm("This is a foobar thing")



 'This is a '
 

现在让我们结合langchain调用MoonshotAI 的api 演示如何自定义包装类

  1. 申请MoonshotAI的api

访问:www.moonshot.cn官网
image.png
复制api并保存,下面会用到
image.png

  1. 在langchain中定义一个 llm包装器类

import logging
from typing import Any
from langchain_core.language_models import LLM
from openai import OpenAI

#自定义的包装器类继承langchain_core.language_models.LLM类
class Kimi(LLM):



    #llm 属性可不定义
    @property
    def _llm_type(self) -> str:
        """Return type of LLM."""
        return "kimillm"
        
    #必须定义_call方法
    def _call(self, prompt: str, **kwargs: Any) -> str:
    
        try:
          
            client = OpenAI(
                #此处请替换自己的api
                api_key="XXXX",
                base_url="https://api.moonshot.cn/v1",
            )
            completion = client.chat.completions.create(
                model="moonshot-v1-8k",
                messages=[
                    {"role": "user", "content": prompt}
                ],
                
                temperature=0,
            )
            return completion.choices[0].message.content
        except Exception as e:
            logging.error(f"Error in Kimi _call: {e}", exc_info=True)
            raise
if __name__ == '__main__':
    # 创建实例
     llm = Kimi()
    
    #注意下面的 llm("你是谁"),这种调用方法LangChain 0.2.0已经移除,需要替换使用invoke方法
    #llm("你是谁")

    
    #使用示例1
     print(llm.invoke("你是谁"))

    #使用示例2:
        llm = Kimi()

    instructions = """
    你将得到一个带有水果名称的句子,提取这些水果名称并为其分配一个表情符号
    在 python 字典中返回水果名称和表情符号
    """

    fruit_names = """
    苹果,梨,这是奇异果
    """

    # 制作结合说明和水果名称的提示
    prompt = (instructions + fruit_names)

    output = llm.invoke([HumanMessage(content=prompt)])
    print(output)





我是MoonshotAI,一个由Moonshot Corp开发的人工智能助手。我可以帮助您回答问题和解决问题。请告诉我您需要帮助的内容。
{
    "苹果": "🍎",
    "梨": "🍐",
    "奇异果": "🥝"
}

  • 8
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值