likes
comments
collection
share

可视化LangChain调用链

作者站长头像
站长
· 阅读数 2

LangChain的交互过程往往比较复杂,如果想深入了解其交互过程,我们可以通过python的debug能力来调试,但是debug调试往往效率比较低,可能还会打断正常的逻辑流转。最近在查看LangChain的文档时发现其本身提供了Tracing能力。本文将简单总结下如何搭建LangChain的可视化环境。

环境搭建

  1. 安装langchain库
> pip install langchain
> pip install langchain -U //更新
  1. 启动服务,执行如下命令
> langchain-server
  1. 登录页面

可视化LangChain调用链

  1. 创建一个自己的session,如果不配置就使用默认的session

遇到的问题

  • 直接使用上面langchain-server会报错,比如
toomanyrequests: You have reached your pull rate limit. You may increase the limit by authenticating and upgrading: https://www.docker.com/increase-rate-limit

分析源码发现其实是使用了docker-compose来运行3个服务

def main() -> None:
    """Run the langchain server locally."""
    p = Path(__file__).absolute().parent / "docker-compose.yaml"

    if shutil.which("docker-compose") is None:
        docker_compose_command = ["docker", "compose"]
    else:
        docker_compose_command = ["docker-compose"]

    subprocess.run([*docker_compose_command, "-f", str(p), "pull"])
    subprocess.run([*docker_compose_command, "-f", str(p), "up"])


if __name__ == "__main__":
    main()

使用的docker-compose.yaml如下:

version: '3'
services:
  langchain-frontend:
    image: notlangchain/langchainplus-frontend:latest
    ports:
      - 4173:4173
    environment:
      - BACKEND_URL=http://langchain-backend:8000
      - PUBLIC_BASE_URL=http://localhost:8000
      - PUBLIC_DEV_MODE=true
    depends_on:
      - langchain-backend
  langchain-backend:
    image: notlangchain/langchainplus:latest
    environment:
      - PORT=8000
      - LANGCHAIN_ENV=local
    ports:
      - 8000:8000
    depends_on:
      - langchain-db
  langchain-db:
    image: postgres:14.1
    environment:
      - POSTGRES_PASSWORD=postgres
      - POSTGRES_USER=postgres
      - POSTGRES_DB=postgres
    ports:
      - 5432:5432

问题:

  • 不需要每次都pull镜像,可以直接使用已拉取的镜像
  • 使用的postgres:14.1在本地可能跑不起来,可修改成其他版本,比如postgres:14-alpine

设置环境变量

在代码执行入口处加上以下代码:

import os
os.environ["LANGCHAIN_HANDLER"] = "langchain"
# 上报的tracing数据信息,默认是localhost:8000
os.environ["LANGCHAIN_ENDPOINT"] = "http://{your_host}:{your_port}"
# 上面创建的session
os.environ["LANGCHAIN_SESSION"] = "openai"

效果查看

  • 全局效果: 可视化LangChain调用链

类似于全链路追踪的效果

  • 展开效果: 可视化LangChain调用链

  • 后台上报记录

可视化LangChain调用链

总结

通过上述方式,我们可以比较方便的跟踪LangChain整个交互流程了,包含跟LLM模型的交互过程。可以帮助我们更容易研究其内部运作流程。

参考

Locally Hosted Setup

Tracing