LangChain is a Python-oriented ecosystem for connecting language models to outside tools and data. Instead of asking an LLM to know everything, you can give an agent tools—such as web search, math, or document retrieval—and let it run a multistep chain to answer a question. section 7.2 section 7.3
A typical setup supplies model credentials, loads tools, initializes an agent, and sends it a plain-language prompt. The agent can search for evidence, decide that another search is needed, and combine the observations into an answer. Useful, yes; magic omniscience, no. section 7.2
Search-backed research agent
Install LangChain and the Google-search package, configure OpenAI and SerpAPI keys, then load the serpapi and llm-math tools. A zero-shot agent can investigate a question such as how many technology-related books someone has published and identify their most common topic. section 7.2
os.environ['OPENAI_API_KEY'] = "sk-xxx"
os.environ['SERPAPI_API_KEY'] = "xxx"
from langchain.agents import AgentType, initialize_agent, load_tools
from langchain.llms import OpenAI
# The language model we're going to use to control the agent:
llm = OpenAI(temperature=0)
# The tools we'll give the Agent access to.
tools = load_tools(["serpapi", "llm-math"], llm=llm)
# Initialize an agent
agent = initialize_agent(tools, llm, \
agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION, verbose=True)
agent.run("How many technology-related books has David Clinton \
published? What is the most common topic?")
This listing shows the complete moving parts: credentials, an OpenAI model, search and math tools, agent initialization, and a research prompt. section 7.2
For document comparison, LangChain can load several remote PDFs, split their text, create embeddings, store them in FAISS retrievers, and wrap each retriever as an agent tool. One prompt can then compare filings from Alphabet, Cisco, and IBM without manually downloading the PDFs first. section 7.3
for file in files:
loader = PyPDFLoader(file["path"])
pages = loader.load_and_split()
text_splitter = CharacterTextSplitter(chunk_size=1000, \
chunk_overlap=0)
docs = text_splitter.split_documents(pages)
embeddings = OpenAIEmbeddings()
retriever = FAISS.from_documents(docs, embeddings).as_retriever()
# Wrap retrievers in a Tool
tools.append(
Tool(
args_schema=DocumentInput,
name=file["name"],
func=RetrievalQA.from_chain_type(llm=llm, \
retriever=retriever),
)
)
This loop turns each PDF into a split, embedded FAISS retriever and exposes it as a named tool for an agent. section 7.3
Practical setup notes:
- Use a Python-ready environment and install the required packages; upgrade LangChain first if operations fail. section 7.2
- Obtain a SerpAPI key for Google results when using the search workflow; the example notes 100 free searches monthly. section 7.2
- Treat projects such as LLMBashChain as experimental, and compare purpose-built tool results with ChatGPT outputs. section 7.12
The payoff is orchestration: agents can pair LLM reasoning with live internet access, retrieval over supplied documents, and other integrations to support multilayered collection and analysis. This is especially handy when a task needs current sources or asks one model to compare several large documents. section 7.13 section 7.3


















