一、软件介绍

文末下载程序和源码下载

      Langroid 是一个直观、轻量级、可扩展且有原则的 Python 框架,可轻松构建LLM由 CMU 和 UW-Madison 研究人员提供的 --支持的应用程序。您可以设置 Agent,为它们配备可选组件(LLMvector-store 和工具/函数),为它们分配任务,并让它们通过交换消息来协作解决问题。这种多代理范例的灵感来自 Actor 框架(但您不需要了解任何相关信息!

       Langroid 是应用程序开发的全新尝试LLM,其中大量资金投入了大量精力来简化开发人员体验;它不使用 Langchain ,或任何其他LLM框架,并且几乎可以与任何 LLM.

阅读 langroid 架构的 (WIP) 概述,以及 Langroid 的快速浏览。

📢 公司正在生产中使用/调整 Langroid。这是一句话:

Nullify 使用 AI 代理进行安全的软件开发。它可以发现漏洞、确定漏洞的优先级并修复漏洞。在评估了 CrewAI、Autogen、LangChain、Langflow 等之后,我们在生产中内部调整了 Langroid 的多智能体编排框架。我们发现 Langroid 在易于设置和灵活性方面远远优于这些框架。Langroid 的 Agent 和 Task 抽象直观、经过深思熟虑,并提供了出色的开发人员体验。我们希望以最快的方式将某些内容投入生产。使用其他框架可能需要几周时间,但使用 Langroid,我们可以在几分钟内获得良好的结果。强烈推荐!

-- Jacky Wong,Nullify 的 AI 主管。

🔥 请参阅 LanceDB 团队的这篇 Intro to Langroid 博客文章

🔥 刚刚发表在 ML for Healthcare (2024):用于药物警戒的基于 Langroid 的多代理 RAG 系统,请参阅博客文章

我们欢迎贡献:请参阅贡献文档以获取有关贡献什么的想法。

您是否正在构建LLM应用程序,或者希望为您的公司提供 Langroid 方面的帮助,或者希望为您的公司用例优先考虑 Langroid 功能?Prasad Chalasani 可用于咨询(咨询/开发):gmail dot com 上的 pchalasani。

使用 Langroid 进行编码的快速浏览


       这只是一个预告片;还有更多功能,例如函数调用/工具、多代理协作、结构化信息提取、DocChatAgent (RAG)、SQLChatAgent、非 OpenAI 本地/远程LLMs等。向下滚动或查看文档了解更多信息。请参阅 Langroid 快速入门 Colab,该实验室使用 OpenAI ChatCompletion API 构建了一个包含 2 个代理的信息提取示例。另请参阅此版本,该版本使用 OpenAI Assistants API。

🔥 刚刚发布!示例脚本演示如何使用 Langroid 多代理和工具仅使用本地 LLM (Mistral-7b-instruct-v0.2) 从文档中提取结构化信息。

import langroid as lr
import langroid.language_models as lm

# set up LLM
llm_cfg = lm.OpenAIGPTConfig( # or OpenAIAssistant to use Assistant API 
  # any model served via an OpenAI-compatible API
  chat_model=lm.OpenAIChatModel.GPT4o, # or, e.g., "ollama/mistral"
)
# use LLM directly
mdl = lm.OpenAIGPT(llm_cfg)
response = mdl.chat("What is the capital of Ontario?", max_tokens=10)

# use LLM in an Agent
agent_cfg = lr.ChatAgentConfig(llm=llm_cfg)
agent = lr.ChatAgent(agent_cfg)
agent.llm_response("What is the capital of China?") 
response = agent.llm_response("And India?") # maintains conversation state 

# wrap Agent in a Task to run interactive loop with user (or other agents)
task = lr.Task(agent, name="Bot", system_message="You are a helpful assistant")
task.run("Hello") # kick off with user saying "Hello"

# 2-Agent chat loop: Teacher Agent asks questions to Student Agent
teacher_agent = lr.ChatAgent(agent_cfg)
teacher_task = lr.Task(
  teacher_agent, name="Teacher",
  system_message="""
    Ask your student concise numbers questions, and give feedback. 
    Start with a question.
    """
)
student_agent = lr.ChatAgent(agent_cfg)
student_task = lr.Task(
  student_agent, name="Student",
  system_message="Concisely answer the teacher's questions.",
  single_round=True,
)

teacher_task.add_sub_task(student_task)
teacher_task.run()

二、演示


      假设您要提取有关商业租赁文档的关键条款的结构化信息。您可以使用双代理系统通过 Langroid 轻松执行此作,正如我们在 langroid-examples 存储库中所示。(有关使用本地 Mistral-7b 模型的具有相同功能的版本,请参阅此脚本。该演示仅展示了 Langroid 众多功能中的一小部分,例如:

  • 多智能体协作: LeaseExtractor 负责任务,其 LLM (GPT4) 生成问题供 DocAgent .
  • 检索增强问答,带有源引用: DocAgent LLM (GPT4) 使用从向量存储中检索来回答 LeaseExtractor 的问题,并引用支持答案的特定摘录。
  • 函数调用(也称为工具/插件):当它拥有所需的所有信息时,它会 LeaseExtractor LLM使用 Function 调用以结构化格式呈现信息。

这是它的实际效果(可暂停的 mp4 视频在这里)。

三、突出

  • 作为一等公民的代理:Agent 类封装LLM会话状态,以及可选的向量存储和工具。代理是 Langroid 中的核心抽象;代理充当消息转换器,默认情况下提供 3 个响应方方法,每个实体对应一个方法:LLM、Agent、User。
  • 任务:Task 类包装一个 Agent,并为 Agent 提供指令(或角色或目标),管理 Agent 的响应者方法的迭代,并通过分层递归任务委派编排多代理交互。该方法 Task.run() 与 Agent 的响应者的方法具有相同的类型签名,这是 Agent 的任务如何委托给其他子任务的关键:从 Task 的角度来看,子任务只是额外的响应者,以循环方式在 Agent 自己的响应者之后使用。
  • 模块化、可重用性、松散耦合:和 Agent Task 抽象允许用户设计具有特定技能的代理,将它们包装在 Task 中,并以灵活的方式组合任务。
  • LLM支持:Langroid 通过代理库和本地模型服务器(如 ollama、oobabooga、LiteLLM)支持OpenAILLMs,以及LLMs来自数百个提供商(本地/开放或远程/商业)的支持,这些服务器实际上模拟了 OpenAI API。请参阅支持的 LLMs.
  • 响应缓存LLM:Langroid 支持 Redis 和 Momento 来缓存LLM响应。
  • 向量存储:目前支持 LanceDB、Qdrant、Chroma。载体存储允许检索增强生成 (RAG)。
  • 接地和来源引用:通过向量存储访问外部文档允许接地和来源引用。
  • 可观察性、日志记录、沿袭:Langroid 生成多代理交互的详细日志并维护消息的来源/沿袭,以便您可以追溯消息的来源。
  • 工具/插件/函数调用:Langroid 支持 OpenAI 的函数调用,以及适用于任何 LLM(而不仅仅是 OpenAI) 的等效 ToolMessage 机制。函数调用和工具具有相同的面向开发人员的界面,使用 Pydantic 实现,这使得定义工具/函数并使代理能够使用它们变得非常容易。使用 Pydantic 的好处是你永远不必为函数调用编写复杂的 JSON 规范,并且当幻觉出现格式错误的 JSON 时LLM,Pydantic 错误消息会发送回 ,LLM以便它可以修复它。

四、安装和设置


 安装 langroid


      Langroid 需要 Python 3.11+。我们建议使用虚拟环境。用于将 pip langroid 的基本精简版本(从 PyPi)安装到您的虚拟环境中:

pip install langroid
核心 Langroid 包允许您通过其 API 使用 OpenAI Embeddings 模型。如果你想使用 HuggingFace 的 sentence-transformers 嵌入模型,请像这样安装 Langroid:

pip install "langroid[hf-embeddings]"
对于许多实际场景,您可能需要额外的可选依赖项:

要使用各种文档解析器,请安装 langroid 并附加: doc-chat
pip install "langroid[doc-chat]"
对于 “chat with databases”,请使用 db extra:
pip install "langroid[db]"
您可以通过用逗号分隔来指定多个 extra,例如:
pip install "langroid[doc-chat,db]"
要简单地安装所有可选依赖项,请使用额外的( all 但请注意,这将导致更长的加载/启动时间和更大的安装大小):
pip install "langroid[all]"

用于将 SQL Chat 与 PostgreSQL 数据库结合使用的可选安装


如果您正在使用 SQLChatAgent (例如 script examples/data-qa/sql-chat/sql_chat.py ) 和 postgres 数据库,则需要:

  • 为您的平台安装 PostgreSQL 开发库,例如
  •   sudo apt-get install libpq-dev 在 Ubuntu 上,
  •   brew install postgresql 在 Mac 上,等等。
  • 使用 postgres extra 安装 langroid,例如 pip install langroid[postgres] or poetry add "langroid[postgres]" or , poetry install -E postgres (或相应的 uv 版本,例如 uv add "langroid[postgres]" or uv pip install langroid[postgres] )。如果这给你带来了错误,请在你的 virtualenv 中尝试 pip install psycopg2-binary 。

📝 如果遇到涉及 mysqlclient 的奇怪错误,请尝试执行 pip uninstall mysqlclient ,然后按 pip install mysqlclient 。

设置环境变量(API 密钥等)

要开始使用,您只需要一个 OpenAI API 密钥。如果您没有,请参阅此 OpenAI 页面。(请注意,虽然这是最简单的入门方法,但 Langroid 几乎适用于任何 LLM,而不仅仅是来自 OpenAI 的那些。请参阅使用 Open/Local LLMs和其他非 OpenAI 专有LLMs的指南。

在存储库的根目录中,将 .env-template 文件复制到新文件 .env :

cp .env-template .env
然后插入您的 OpenAI API 密钥。您的 .env 文件应如下所示(组织是可选的,但在某些情况下可能是必需的)。

OPENAI_API_KEY=your-key-here-without-quotes
OPENAI_ORGANIZATION=optionally-your-organization-id
或者,您可以在 shell 中将其设置为环境变量(每次打开新 shell 时都需要这样做):

export OPENAI_API_KEY=your-key-here-without-quotes

可选设置说明(单击可展开)


以下所有环境变量设置都是可选的,有些设置是必需的 以使用特定功能(如下所述)。

  • Qdrant Vector Store API 密钥、URL。仅当您想使用 Qdrant 云时,才需要这样做。或者,目前也支持 Chroma 或 LanceDB。我们使用 Chroma 的本地存储版本,因此不需要 API 密钥。
  • Redis 密码、主机、端口:这是可选的,仅在使用 Redis Cloud 缓存 LLM API 响应时需要。Redis 提供了一个免费的 30MB Redis 帐户,这足以试用 Langroid 甚至更高。如果您不设置这些,Langroid 将通过 Fakeredis 库使用纯 python Redis 内存缓存。
  • Momento API 响应的LLM无服务器缓存(作为 Redis 的替代方案)。要使用 Momento 而不是 Redis:
  • 在 .env 文件中输入您的 Momento Token,作为 的值 MOMENTO_AUTH_TOKEN (请参阅下面的示例文件),
  • 在 .env 文件集中 CACHE_TYPE=momento (而不是 CACHE_TYPE=redis 默认)。
  • GitHub Personal Access Token(需要分析 git 存储库的应用程序需要;基于令牌的 API 调用受速率限制较小)。请参阅此 GitHub 页面。
  • Google 自定义搜索 API 凭据:只需使代理能够使用 GoogleSearchTool .要将 Google 搜索用作LLM工具/插件/函数调用,您需要设置一个 Google API 密钥,然后设置 Google 自定义搜索引擎 (CSE) 并获取 CSE ID。(这些的文档可能具有挑战性,我们建议向 GPT4 索取分步指南。获取这些凭证后,将它们存储为 GOOGLE_API_KEY 和 的值 file GOOGLE_CSE_ID 中 .env 。有关使用此工具(以及其他此类“无状态”工具)的完整文档即将推出,但与此同时,请查看此聊天示例,它展示了如何轻松地为代理配备 GoogleSearchtool .

如果添加所有这些可选变量,则文件 .env 应如下所示:

OPENAI_API_KEY=your-key-here-without-quotes
GITHUB_ACCESS_TOKEN=your-personal-access-token-no-quotes
CACHE_TYPE=redis # or momento
REDIS_PASSWORD=your-redis-password-no-quotes
REDIS_HOST=your-redis-hostname-no-quotes
REDIS_PORT=your-redis-port-no-quotes
MOMENTO_AUTH_TOKEN=your-momento-token-no-quotes # instead of REDIS* variables
QDRANT_API_KEY=your-key
QDRANT_API_URL=https://your.url.here:6333 # note port number must be included
GOOGLE_API_KEY=your-key
GOOGLE_CSE_ID=your-cse-id

Docker 使用说明


我们通过此 Docker 镜像提供 langroid-examples 存储库的容器化版本。您需要做的就是在 .env 文件中设置环境变量。请按照以下步骤设置容器:

# get the .env file template from `langroid` repo
wget -O .env https://raw.githubusercontent.com/langroid/langroid/main/.env-template

# Edit the .env file with your favorite editor (here nano), and remove any un-used settings. E.g. there are "dummy" values like "your-redis-port" etc -- if you are not using them, you MUST remove them.
nano .env

# launch the container (the appropriate image for your architecture will be pulled automatically)
docker run -it --rm  -v ./.env:/langroid/.env langroid/langroid:latest

# Use this command to run any of the scripts in the `examples` directory
python examples/<Path/To/Example.py> 

使用示例


这些是快速预告片,让您大致了解您可以使用 Langroid 做什么以及您的代码看起来如何。

⚠️ 下面的代码片段旨在提供代码的风格,它们不是完整的可运行示例!为此,我们鼓励您查阅 langroid-examples 存储库。

i️ Langroid 中的各种LLM提示和说明已经过测试,可与 GPT-4(在某种程度上 GPT-4o)配合使用。切换到其他LLMs(本地/开放和专有)很容易(参见上面提到的指南),并且可能足以满足某些应用程序的需求,但一般来说,除非您调整提示和/或多代理设置,否则您可能会看到较差的结果。

五、软件下载

夸克网盘分享

本文信息来源于GitHub作者地址:GitHub - langroid/langroid: Harness LLMs with Multi-Agent Programming

Logo

火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。

更多推荐