111 lines
3.9 KiB
Python
111 lines
3.9 KiB
Python
"""
|
|
This script demonstrates the use of the LangChain's StructuredChatAgent and AgentExecutor alongside various tools
|
|
|
|
The script utilizes the ChatGLM3 model, a large language model for understanding and generating human-like text.
|
|
The model is loaded from a specified path and integrated into the chat agent.
|
|
|
|
Tools:
|
|
- Calculator: Performs arithmetic calculations.
|
|
- Weather: Provides weather-related information based on input queries.
|
|
- DistanceConverter: Converts distances between meters, kilometers, and feet.
|
|
|
|
The agent operates in three modes:
|
|
1. Single Parameter without History: Uses Calculator to perform simple arithmetic.
|
|
2. Single Parameter with History: Uses Weather tool to answer queries about temperature, considering the
|
|
conversation history.
|
|
3. Multiple Parameters without History: Uses DistanceConverter to convert distances between specified units.
|
|
4. Single use Langchain Tool: Uses Arxiv tool to search for scientific articles.
|
|
|
|
Note:
|
|
The model calling tool fails, which may cause some errors or inability to execute. Try to reduce the temperature
|
|
parameters of the model, or reduce the number of tools, especially the third function.
|
|
The success rate of multi-parameter calling is low. The following errors may occur:
|
|
|
|
Required fields [type=missing, input_value={'distance': '30', 'unit': 'm', 'to': 'km'}, input_type=dict]
|
|
|
|
The model illusion in this case generates parameters that do not meet the requirements.
|
|
The top_p and temperature parameters of the model should be adjusted to better solve such problems.
|
|
|
|
Success example:
|
|
|
|
*****Action*****
|
|
|
|
{
|
|
'action': 'weather',
|
|
'action_input': {
|
|
'location': '厦门'
|
|
}
|
|
}
|
|
|
|
*****Answer*****
|
|
|
|
{
|
|
'input': '厦门比北京热吗?',
|
|
'chat_history': [HumanMessage(content='北京温度多少度'), AIMessage(content='北京现在12度')],
|
|
'output': '根据最新的天气数据,厦门今天的气温为18度,天气晴朗。而北京今天的气温为12度。所以,厦门比北京热。'
|
|
}
|
|
|
|
****************
|
|
|
|
"""
|
|
|
|
import os
|
|
|
|
from langchain import hub
|
|
from langchain.agents import AgentExecutor, create_structured_chat_agent, load_tools
|
|
from langchain_core.messages import AIMessage, HumanMessage
|
|
|
|
from ChatGLM3 import ChatGLM3
|
|
from tools.Calculator import Calculator
|
|
from tools.Weather import Weather
|
|
from tools.DistanceConversion import DistanceConverter
|
|
|
|
MODEL_PATH = os.environ.get('MODEL_PATH', 'THUDM/chatglm3-6b')
|
|
|
|
if __name__ == "__main__":
|
|
llm = ChatGLM3()
|
|
llm.load_model(MODEL_PATH)
|
|
prompt = hub.pull("hwchase17/structured-chat-agent")
|
|
|
|
# for single parameter without history
|
|
|
|
tools = [Calculator()]
|
|
agent = create_structured_chat_agent(llm=llm, tools=tools, prompt=prompt)
|
|
agent_executor = AgentExecutor(agent=agent, tools=tools)
|
|
ans = agent_executor.invoke({"input": "34 * 34"})
|
|
print(ans)
|
|
|
|
# for singe parameter with history
|
|
|
|
tools = [Weather()]
|
|
agent = create_structured_chat_agent(llm=llm, tools=tools, prompt=prompt)
|
|
agent_executor = AgentExecutor(agent=agent, tools=tools)
|
|
ans = agent_executor.invoke(
|
|
{
|
|
"input": "厦门比北京热吗?",
|
|
"chat_history": [
|
|
HumanMessage(content="北京温度多少度"),
|
|
AIMessage(content="北京现在12度"),
|
|
],
|
|
}
|
|
)
|
|
print(ans)
|
|
|
|
# for multiple parameters without history
|
|
|
|
tools = [DistanceConverter()]
|
|
agent = create_structured_chat_agent(llm=llm, tools=tools, prompt=prompt)
|
|
agent_executor = AgentExecutor(agent=agent, tools=tools)
|
|
ans = agent_executor.invoke({"input": "how many meters in 30 km?"})
|
|
|
|
print(ans)
|
|
|
|
# for using langchain tools
|
|
|
|
tools = load_tools(["arxiv"], llm=llm)
|
|
agent = create_structured_chat_agent(llm=llm, tools=tools, prompt=prompt)
|
|
agent_executor = AgentExecutor(agent=agent, tools=tools)
|
|
ans = agent_executor.invoke({"input": "Describe the paper about GLM 130B"})
|
|
|
|
print(ans)
|