中文官网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 演示如何自定义包装类
- 申请MoonshotAI的api
访问:www.moonshot.cn官网
复制api并保存,下面会用到
- 在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开发的人工智能助手。我可以帮助您回答问题和解决问题。请告诉我您需要帮助的内容。
{
"苹果": "🍎",
"梨": "🍐",
"奇异果": "🥝"
}