MLX
此笔记本展示了如何开始使用 MLX
LLM 作为聊天模型。
特别是,我们将
- 使用 MLXPipeline,
- 使用
ChatMLX
类,使这些 LLM 中的任何一个都能与 LangChain 的 聊天消息抽象接口。 - 演示如何使用开源 LLM 来驱动
ChatAgent
管道
%pip install --upgrade --quiet mlx-lm transformers huggingface_hub
1. 实例化 LLM
有三个 LLM 选项可供选择。
from langchain_community.llms.mlx_pipeline import MLXPipeline
llm = MLXPipeline.from_model_id(
"mlx-community/quantized-gemma-2b-it",
pipeline_kwargs={"max_tokens": 10, "temp": 0.1},
)
API 参考:MLXPipeline
2. 实例化 ChatMLX
以应用聊天模板
实例化聊天模型和一些要传递的消息。
from langchain_community.chat_models.mlx import ChatMLX
from langchain_core.messages import HumanMessage
messages = [
HumanMessage(
content="What happens when an unstoppable force meets an immovable object?"
),
]
chat_model = ChatMLX(llm=llm)
API 参考:ChatMLX | HumanMessage
检查聊天消息是如何为 LLM 调用格式化的。
chat_model._to_chat_prompt(messages)
调用模型。
res = chat_model.invoke(messages)
print(res.content)
3. 将其作为代理进行试用!
这里我们将测试 gemma-2b-it
作为零样本 ReAct
代理。下面的示例取自 此处。
注意:要运行此部分,您需要将 SerpAPI 令牌保存为环境变量:
SERPAPI_API_KEY
from langchain import hub
from langchain.agents import AgentExecutor, load_tools
from langchain.agents.format_scratchpad import format_log_to_str
from langchain.agents.output_parsers import (
ReActJsonSingleInputOutputParser,
)
from langchain.tools.render import render_text_description
from langchain_community.utilities import SerpAPIWrapper
API 参考:hub | AgentExecutor | load_tools | format_log_to_str | ReActJsonSingleInputOutputParser | render_text_description | SerpAPIWrapper
使用 react-json
样式提示配置代理,并访问搜索引擎和计算器。
# setup tools
tools = load_tools(["serpapi", "llm-math"], llm=llm)
# setup ReAct style prompt
prompt = hub.pull("hwchase17/react-json")
prompt = prompt.partial(
tools=render_text_description(tools),
tool_names=", ".join([t.name for t in tools]),
)
# define the agent
chat_model_with_stop = chat_model.bind(stop=["\nObservation"])
agent = (
{
"input": lambda x: x["input"],
"agent_scratchpad": lambda x: format_log_to_str(x["intermediate_steps"]),
}
| prompt
| chat_model_with_stop
| ReActJsonSingleInputOutputParser()
)
# instantiate AgentExecutor
agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)
agent_executor.invoke(
{
"input": "Who is Leo DiCaprio's girlfriend? What is her current age raised to the 0.43 power?"
}
)