mock_data = [
{
'user': {
'email': 'test1@gmail.com',
'name': 'tony hood',
'organization_id': 1,
'phone': "null"
},
'user_id': 22086,
'phone': "null",
'email': 'test1@gmail.com',
'name': 'tony hood',
'created': '2024-08-11T04:58:46.798058Z',
'modified': '2024-09-07T17:21:50.186396Z',
'updated_by': 2
},
{
'user': {
'email': 'look@gmail.com',
'name': 'Look Tom',
'organization_id': 1,
'phone': "null"
},
'user_id': 22086,
'phone': "null",
'email': 'look@gmail.com',
'name': 'Look Tom',
'created': '2024-08-11T04:58:46.798058Z',
'modified': '2024-09-07T17:21:50.186396Z',
'updated_by': 2
},
{
'user': {
'email': 'abc@gmail.com',
'name': 'David Smith',
'organization_id': 1,
'phone': "null"
},
'user_id': 22086,
'phone': "null",
'email': 'abc@gmail.com',
'name': 'David Smith',
'created': '2024-08-11T04:58:46.798058Z',
'modified': '2024-09-07T17:21:50.186396Z',
'updated_by': 2
},
{
'user': {
'email': 'def@gmail.com',
'name': 'John Smith',
'organization_id': 1,
'phone': "null"
},
'user_id': 22099,
'phone': "null",
'email': 'def@gmail.com',
'name': 'John Smith',
'created': '2024-08-11T04:58:46.798058Z',
'modified': '2024-09-07T17:21:50.186396Z',
'updated_by': 2
}
]
你的代码不全,所以我大概猜测是从数据库或API里读取的用户输出,所以mock一个,其中包含2个目标用户
from langchain_community.chat_models import ChatZhipuAI
from langchain_core.prompts import ChatPromptTemplate
import json
from langchain_core.output_parsers import JsonOutputParser
llm = ChatZhipuAI(
api_key="000000",
model="GLM-4-Plus",
temperature=0
)
def account_info_tool():
# simlutate the user data
user_data = mock_data
return user_data
def main(name: str, email: str):
user_data = account_info_tool()
print(f"Orignal User Data: {user_data}") # 打印调试信息
prompt = ChatPromptTemplate.from_template("从{user_data}中找到与用户{name}以及{name}最匹配的字段,使用JSON格式返回用户所有信息")
fliterChain = prompt | llm | JsonOutputParser()
users = fliterChain.invoke({"user_data": json.dumps(user_data), "name": name, "email": email})
print(f"Users: {users}") # 打印调试信息
if __name__ == "__main__":
main("Smith","def@gmail.com")
不一定所有的应用都要使用agent,尤其是结构化数据+确定结果,你的需求大概有两种思路:
1. 直接使用sqlagent的方式,让agent直接去数据库查询就好了,这个基本上人工不在中间处理那么多
2. 就是我写的这种简单的方式,用一个chain就可以解决了,核心是要结构化数据输出,这样可以和你其他系统耦合
至于你说的你写的agent没有走下去的问题,代码不全,但是核心代码部分我认为是有点问题的,全部依赖提示词其实就会出现这样的问题,我更建议你将动作拆解成更小的链,让agent去操作链,不要一大坨的提示词去驱动agent,精准度其实不好,尤其当你的LLM不是很厉害的情况下。