{"id":27854816,"url":"https://github.com/benitomartin/multiagent-langgraph-circleci","last_synced_at":"2026-04-17T11:31:34.311Z","repository":{"id":284566278,"uuid":"949450973","full_name":"benitomartin/multiagent-langgraph-circleci","owner":"benitomartin","description":"Multi-Agent LangGraph Research System","archived":false,"fork":false,"pushed_at":"2025-06-12T16:56:50.000Z","size":108,"stargazers_count":3,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-06-12T17:47:04.121Z","etag":null,"topics":["aws","aws-ecr","aws-lambda","aws-s3","circleci","docker","langchain","langgraph","python","uv"],"latest_commit_sha":null,"homepage":"https://circleci.com/blog/end-to-end-testing-and-deployment-of-a-multi-agent-ai-system/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/benitomartin.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-03-16T13:51:23.000Z","updated_at":"2025-06-12T16:56:53.000Z","dependencies_parsed_at":"2025-05-04T09:17:10.658Z","dependency_job_id":"8114919e-d088-4d29-8aca-80cdf3422b17","html_url":"https://github.com/benitomartin/multiagent-langgraph-circleci","commit_stats":null,"previous_names":["benitomartin/multiagent-langgraph-circleci"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/benitomartin/multiagent-langgraph-circleci","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/benitomartin%2Fmultiagent-langgraph-circleci","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/benitomartin%2Fmultiagent-langgraph-circleci/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/benitomartin%2Fmultiagent-langgraph-circleci/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/benitomartin%2Fmultiagent-langgraph-circleci/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/benitomartin","download_url":"https://codeload.github.com/benitomartin/multiagent-langgraph-circleci/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/benitomartin%2Fmultiagent-langgraph-circleci/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31927685,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-17T10:35:34.458Z","status":"ssl_error","status_checked_at":"2026-04-17T10:35:09.472Z","response_time":62,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["aws","aws-ecr","aws-lambda","aws-s3","circleci","docker","langchain","langgraph","python","uv"],"created_at":"2025-05-04T09:17:06.893Z","updated_at":"2026-04-17T11:31:34.305Z","avatar_url":"https://github.com/benitomartin.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Multi-Agent LangGraph Research System\r\n\r\n\u003cdiv align=\"center\"\u003e\r\n    \u003cimg src=\"images/collaborative _multi_agent_ai_system_with_langgraph.png\" alt=\"Multi-Agent LangGraph Architecture\"\u003e\r\n\u003c/div\u003e\r\n\r\n\u003cdiv align=\"center\"\u003e\r\n    \u003ca href=\"https://www.python.org/downloads/release/python-3120/\"\u003e\u003cimg src=\"https://img.shields.io/badge/python-3.12+-blue.svg\"/\u003e\u003c/a\u003e\r\n    \u003ca href=\"https://github.com/astral-sh/uv\"\u003e\u003cimg src=\"https://img.shields.io/badge/uv-Package%20Manager-blue\"/\u003e\u003c/a\u003e\r\n    \u003ca href=\"https://langchain-ai.github.io/langgraph/\"\u003e\u003cimg src=\"https://img.shields.io/badge/LangGraph-Agentic-ff6b6b\"/\u003e\u003c/a\u003e\r\n    \u003ca href=\"https://www.docker.com/\"\u003e\u003cimg src=\"https://img.shields.io/badge/Docker-Containerized-blue\"/\u003e\u003c/a\u003e\r\n    \u003ca href=\"https://aws.amazon.com/lambda/\"\u003e\u003cimg src=\"https://img.shields.io/badge/AWS%20Lambda-Serverless-orange\"/\u003e\u003c/a\u003e\r\n    \u003ca href=\"https://pydantic.dev/\"\u003e\u003cimg src=\"https://img.shields.io/badge/Pydantic-Data%20Validation-e92063\"/\u003e\u003c/a\u003e\r\n\u003c/div\u003e\r\n\u003cdiv align=\"center\"\u003e\r\n    \u003ca href=\"https://github.com/features/actions\"\u003e\u003cimg src=\"https://img.shields.io/badge/CI/CD-passed-2088ff\"/\u003e\u003c/a\u003e\r\n    \u003ca href=\"http://mypy-lang.org/\"\u003e\u003cimg src=\"https://img.shields.io/badge/mypy-passed-blue\"/\u003e\u003c/a\u003e\r\n    \u003ca href=\"https://github.com/astral-sh/ruff\"\u003e\u003cimg src=\"https://img.shields.io/badge/ruff-passed-red\"/\u003e\u003c/a\u003e\r\n    \u003ca href=\"https://docs.pytest.org/\"\u003e\u003cimg src=\"https://img.shields.io/badge/pytest-passed-brightgreen\"/\u003e\u003c/a\u003e\r\n    \u003ca href=\"https://github.com/pre-commit/pre-commit\"\u003e\u003cimg src=\"https://img.shields.io/badge/pre--commit-passed-brightgreen\"/\u003e\u003c/a\u003e\r\n    \u003ca href=\"LICENSE\"\u003e\u003cimg src=\"https://img.shields.io/badge/License-MIT-yellow.svg\"/\u003e\u003c/a\u003e\r\n\u003c/div\u003e\r\n\u003cp align=\"center\"\u003e\r\n    \u003cem\u003eA multi-agent research system using LangGraph for automated research and report generation\u003c/em\u003e\r\n\u003c/p\u003e\r\n\r\n---\r\n\r\nBuild, test, and deploy a multi-agent AI system using LangGraph, Docker, AWS Lambda, and CircleCI. The system uses a research-driven AI workflow where different agents,such as fact-checking, summarization, and search agents, work together seamlessly. This application is packaged into a Docker container, deployed to AWS Lambda, and the entire pipeline is run using CircleCI.\r\n\r\nThe project has been developed as part of the following [blog](https://circleci.com/blog/end-to-end-testing-and-deployment-of-a-multi-agent-ai-system/)\r\n\r\n## Table of Contents\r\n\r\n- [Features](#features)\r\n- [Prerequisites](#prerequisites)\r\n- [Installation](#installation)\r\n- [Usage](#usage)\r\n  - [Configuration](#configuration)\r\n  - [Local Execution](#local-execution)\r\n  - [AWS Lambda Deployment](#aws-lambda-deployment)\r\n  - [AWS Lambda Invocation](#aws-lambda-invocation)\r\n- [License](#license)\r\n\r\n## Features\r\n\r\n- Multi-agent architecture using LangGraph\r\n- Automated web search using Serper API\r\n- Fact-checking and verification\r\n- Report generation with structured summaries\r\n- AWS Lambda deployment support\r\n- Configurable confidence scores and retry mechanisms\r\n\r\n## Prerequisites\r\n\r\n- Python 3.12\r\n- AWS CLI (for Lambda deployment)\r\n- Serper API key\r\n- OpenAI API key\r\n- AWS Credentials (for Lambda deployment)\r\n\r\n## Installation\r\n\r\n1. Clone the repository:\r\n\r\n   ```bash\r\n   git clone https://github.com/benitomartin/multiagent-langgraph-circleci.git\r\n   cd multiagent-langgraph-circleci\r\n   ```\r\n\r\n2. Create a virtual environment:\r\n\r\n   ```bash\r\n   uv venv\r\n   ```\r\n\r\n3. Activate the virtual environment:\r\n   - On Windows:\r\n\r\n     ```bash\r\n     .venv\\Scripts\\activate\r\n     ```\r\n\r\n   - On Unix or MacOS:\r\n\r\n     ```bash\r\n     source .venv/bin/activate\r\n     ```\r\n\r\n4. Install the required packages:\r\n\r\n   ```bash\r\n   uv sync --all-extras\r\n   ```\r\n\r\n5. Create a `.env` file in the root directory:\r\n\r\n   ```plaintext\r\n   # API Keys\r\n   SERPER_API_KEY=your_serper_key_here                \r\n   OPENAI_API_KEY=your_openai_key_here                \r\n\r\n   # AWS Configuration\r\n   AWS_REGION=your_aws_region                          \r\n   AWS_ACCESS_KEY_ID=your_aws_access_key              \r\n   AWS_SECRET_ACCESS_KEY=your_aws_secret_key          \r\n   AWS_ACCOUNT_ID=your_aws_account_id                 \r\n   \r\n   # Repository and Image Configuration\r\n   REPOSITORY_NAME=langgraph-ecr-docker-repo          \r\n   IMAGE_NAME=langgraph-lambda-image                  \r\n   \r\n   # Lambda Configuration\r\n   LAMBDA_FUNCTION_NAME=langgraph-lambda-function     \r\n   ROLE_NAME=lambda-bedrock-role                      \r\n   ROLE_POLICY_NAME=LambdaBedrockPolicy              \r\n   ```\r\n\r\n   To obtain the required API keys:\r\n   - Serper API Key: Sign up at [Serper.dev](https://serper.dev)\r\n   - OpenAI API Key: Sign up at [OpenAI Platform](https://platform.openai.com)\r\n   - AWS Credentials: Create through [AWS IAM Console](https://console.aws.amazon.com/iam)\r\n\r\n## Usage\r\n\r\n### Configuration\r\n\r\nThe following parameters can be adjusted in `config/settings.py`:\r\n\r\n- `CONFIDENCE_THRESHOLD`: Threshold for confidence in fact-checking\r\n- `MAX_RETRIES`: Maximum number of retries for the search agent\r\n- `ADD_MAX_RESULTS`: Number of search results to add in each retry\r\n- `FACT_CHECK_MODEL`: Model used for fact-checking (default: \"gpt-4-mini\")\r\n- `SUMMARIZATION_MODEL`: Model used for summarization (default: \"anthropic.claude-3-haiku\")\r\n\r\n### Local Execution\r\n\r\nTo run the research graph locally:\r\n\r\n```bash\r\nuv run src/graph/research_graph.py \\\r\n   --query \"What are the benefits of using AWS Cloud Services?\" \\\r\n   --confidence-threshold 0.85 \\\r\n   --max-retries 3 \\\r\n   --add-max-results 2\r\n```\r\n\r\n### AWS Lambda Deployment\r\n\r\nBuild and deploy the Docker image with the lambda function:\r\n\r\n```bash\r\nchmod +x build_deploy.sh\r\n./build_deploy.sh\r\n```\r\n\r\n### AWS Lambda Invocation\r\n\r\nTo invoke the deployed Lambda function add your region and run the following command:\r\n\r\n```bash\r\naws lambda invoke \\\r\n    --function-name langgraph-lambda-function \\\r\n    --payload '{\"query\": \"What are the benefits of using CircleCI?\"}' \\\r\n    --region \u003cyour_region\u003e \\\r\n    --cli-binary-format raw-in-base64-out \\\r\n    response.json \u0026\u0026 \\\r\n    cat response.json | jq\r\n```\r\n\r\n## License\r\n\r\nThis project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.\r\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbenitomartin%2Fmultiagent-langgraph-circleci","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbenitomartin%2Fmultiagent-langgraph-circleci","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbenitomartin%2Fmultiagent-langgraph-circleci/lists"}