Logo Ernie.SG
Fork Work:有自主智能体,还工作什么?

Fork Work:有自主智能体,还工作什么?

2023年8月11日
3 分钟阅读
暂无标签
Table of Contents

与其对着键盘崩溃,或者对着继承来的代码库掉几滴眼泪,不如把这些信息交给 A.I.,然后和它聊天。当你开始把大型语言模型(LLMs)的知识和推理能力用在这些信息上,下一步自然就是综合生成:写出可以跑在现有代码库之上的新代码,让世界上任何人都能从提示词一路走到功能。为了解决这些挑战,下面这个演示是我周末用一两天做出来的成果。做起来很有趣,因为过程中学到很多新东西,也更深刻理解了一些概念。

Arthur - Search and Retrieve Anything

为什么还要工作 leh?

我当时想做的是,把关于我的数据工厂的信息传进 Deep Lake 向量存储,然后利用 ChatGPT 对我的自定义知识库进行推理,理解现有设置里到底发生了什么。我发现这比试图理解人类留下来的遗留代码库好玩多了(sorry not sorry),因为有太多时候,沟通和会议完全是在浪费时间,而等待回复的延迟,那种人类回复问题的 lag,我真的无话可说……所以就是这样。一旦把第一块砖放下,我们就能搭建一座自主智能体工厂,让它们研究、检索、推理各种信息,并综合生成新的有价值输出,无论是社交媒体内容还是代码。对我来说,这就是为什么 A.I. 对劳动力市场的影响值得全社会认真讨论。

当即便是零散的 A.I. 智能都已经是超人类智能,当我们可以实现 1000 倍生产力,也就是说,也许根本没有足够的工作可以分配时,我们该怎么办?退一步看,我们为什么本来就希望人类工作这么多?也许我们真正需要做的是重新配置、重新画出工作、收入和意义之间的箭头。我会很乐意投票支持每周工作 4 小时,然后把剩下时间拿来玩和学习,just sayin’。

遇到的挑战

在构建这个 agent 的过程中,最让我卡住的难点是:

  1. 使用正确的包版本

为了开始,我决定先从一个现有项目 (chat-with-code) 学起,但我一直遇到下面这样的错误:

RuntimeError: no validator found for <class 're.Pattern'>, see `arbitrary_types_allowed` in Config
Traceback:
File "/home/erniesg/.pyenv/versions/3.10.6/envs/lewagon/lib/python3.10/site-packages/streamlit/scriptrunner/script_runner.py", line 557, in _run_script
    exec(code, module.__dict__)
File "chatbot.py", line 2, in <module>
    import utils
File "/home/erniesg/code/erniesg/chat-with-code/utils.py", line 1, in <module>
    from langchain.document_loaders import TextLoader
File "/home/erniesg/.pyenv/versions/3.10.6/envs/lewagon/lib/python3.10/site-packages/langchain/__init__.py", line 6, in <module>
    from langchain.agents import MRKLChain, ReActChain, SelfAskWithSearchChain
File "/home/erniesg/.pyenv/versions/3.10.6/envs/lewagon/lib/python3.10/site-packages/langchain/agents/__init__.py", line 40, in <module>
    from langchain.agents.agent_toolkits import (
File "/home/erniesg/.pyenv/versions/3.10.6/envs/lewagon/lib/python3.10/site-packages/langchain/agents/agent_toolkits/__init__.py", line 12, in <module>
    from langchain.agents.agent_toolkits.csv.base import create_csv_agent
File "/home/erniesg/.pyenv/versions/3.10.6/envs/lewagon/lib/python3.10/site-packages/langchain/agents/agent_toolkits/csv/base.py", line 4, in <module>
    from langchain.agents.agent_toolkits.pandas.base import create_pandas_dataframe_agent
File "/home/erniesg/.pyenv/versions/3.10.6/envs/lewagon/lib/python3.10/site-packages/langchain/agents/agent_toolkits/pandas/base.py", line 18, in <module>
    from langchain.agents.types import AgentType
File "/home/erniesg/.pyenv/versions/3.10.6/envs/lewagon/lib/python3.10/site-packages/langchain/agents/types.py", line 5, in <module>
    from langchain.agents.chat.base import ChatAgent
File "/home/erniesg/.pyenv/versions/3.10.6/envs/lewagon/lib/python3.10/site-packages/langchain/agents/chat/base.py", line 6, in <module>
    from langchain.agents.chat.output_parser import ChatOutputParser
File "/home/erniesg/.pyenv/versions/3.10.6/envs/lewagon/lib/python3.10/site-packages/langchain/agents/chat/output_parser.py", line 12, in <module>
    class ChatOutputParser(AgentOutputParser):
File "pydantic/main.py", line 229, in pydantic.main.ModelMetaclass.__new__
File "pydantic/fields.py", line 491, in pydantic.fields.ModelField.infer
File "pydantic/fields.py", line 421, in pydantic.fields.ModelField.__init__
File "pydantic/fields.py", line 542, in pydantic.fields.ModelField.prepare
File "pydantic/fields.py", line 804, in pydantic.fields.ModelField.populate_validators
File "pydantic/validators.py", line 723, in find_validators

或者像这样:

➜  chat-with-code git:(main) ✗ poetry run streamlit run chatbot.py                                         [🐍 lewagon]
2023-08-04 19:39:49.759 INFO    numexpr.utils: Note: NumExpr detected 12 cores but "NUMEXPR_MAX_THREADS" not set, so enforcing safe limit of 8.
2023-08-04 19:39:49.760 INFO    numexpr.utils: NumExpr defaulting to 8 threads.
 
  You can now view your Streamlit app in your browser.
 
  Network URL: http://172.19.237.74:8501
  External URL: http://180.129.59.54:8501
 
2023-08-04 19:39:51.484 Uncaught app exception
Traceback (most recent call last):
  File "/home/erniesg/.pyenv/versions/3.10.6/envs/lewagon/lib/python3.10/site-packages/streamlit/scriptrunner/script_runner.py", line 557, in _run_script
    exec(code, module.__dict__)
  File "/home/erniesg/code/erniesg/chat-with-code/chatbot.py", line 2, in <module>
    import utils
  File "/home/erniesg/code/erniesg/chat-with-code/utils.py", line 1, in <module>
    from langchain.document_loaders import TextLoader
  File "/home/erniesg/.pyenv/versions/3.10.6/envs/lewagon/lib/python3.10/site-packages/langchain/__init__.py", line 6, in <module>
    from langchain.agents import MRKLChain, ReActChain, SelfAskWithSearchChain
  File "/home/erniesg/.pyenv/versions/3.10.6/envs/lewagon/lib/python3.10/site-packages/langchain/agents/__init__.py", line 31, in <module>
    from langchain.agents.agent import (
  File "/home/erniesg/.pyenv/versions/3.10.6/envs/lewagon/lib/python3.10/site-packages/langchain/agents/agent.py", line 15, in <module>
    from langchain.agents.agent_iterator import AgentExecutorIterator
  File "/home/erniesg/.pyenv/versions/3.10.6/envs/lewagon/lib/python3.10/site-packages/langchain/agents/agent_iterator.py", line 21, in <module>
    from langchain.callbacks.manager import (
  File "/home/erniesg/.pyenv/versions/3.10.6/envs/lewagon/lib/python3.10/site-packages/langchain/callbacks/__init__.py", line 10, in <module>
    from langchain.callbacks.aim_callback import AimCallbackHandler
  File "/home/erniesg/.pyenv/versions/3.10.6/envs/lewagon/lib/python3.10/site-packages/langchain/callbacks/aim_callback.py", line 5, in <module>
    from langchain.schema import AgentAction, AgentFinish, LLMResult
  File "/home/erniesg/.pyenv/versions/3.10.6/envs/lewagon/lib/python3.10/site-packages/langchain/schema/__init__.py", line 4, in <module>
    from langchain.schema.memory import BaseChatMessageHistory, BaseMemory
  File "/home/erniesg/.pyenv/versions/3.10.6/envs/lewagon/lib/python3.10/site-packages/langchain/schema/memory.py", line 7, in <module>
    from langchain.schema.messages import AIMessage, BaseMessage, HumanMessage
  File "/home/erniesg/.pyenv/versions/3.10.6/envs/lewagon/lib/python3.10/site-packages/langchain/schema/messages.py", line 147, in <module>
    class HumanMessageChunk(HumanMessage, BaseMessageChunk):
  File "/home/erniesg/.pyenv/versions/3.10.6/envs/lewagon/lib/python3.10/site-packages/pydantic/main.py", line 352, in __new__

解决办法:结果发现,我必须使用特定的 streamlit (1.25.0)pydanic version (1.10.12);各种包之间的兼容性问题反复出现,所以我想我需要多学一点相关工具和最佳实践。也许具体版本本来就应该永远定义在 poetry 里!?

  1. 弄清楚如何载入并切分用 .json 文件定义的 Azure Data Factory 资源

结果发现,处理文档、PDF、GitHub 代码仓库等等有很多教程,但很少有人提到 .json。所以在让 ChatGPT 生成无果之后,我仔细看了 .json 和 langchain JSON loader,一步步引导 ChatGPT 按照我认为应该做的方式处理,最后终于成功了。至少根据我在 Google 和 YouTube 第一页的搜索结果,还没有人针对 Azure Resource Manager (ARM) template 做过这件事,所以我只能创新一下。

解决办法:我的推理是,对于这个初始原型,我希望能够保留 Azure Data Factory 的 parametersvariablesresources,以及 resources 里的各个对象,因为那些会是我的流水线、活动等等。结合少样本指令和上下文,ChatGPT 最后给了我需要的东西。

前路

这就是我最后把 75 个条目切进 Deep Lake 数据集的过程。现在我已经在想,下一步要接入更多数据源(让我们直接查询所有 SQL 模式、存储过程,甚至原始数据本身!)、围绕记忆更新元数据、在多模态数据湖兼向量存储上执行 CRUD 操作、优化检索策略和 token 上下文。说到底,为什么不让 LLM 借助工具直接执行并采取行动?更进一步,为什么不让 LLM 自己写测试、调试并验证自己?这些都是把自主智能体推向生产环境的关键;保守地说,它会让任何规模的团队或组织实现 1000 倍生产力。

Fun times! 🤩🤩🤩


最初发表于 PubPub:erniesg.pubpub.org/pub/i8a0vp8z