Spaces:
Sleeping
Sleeping
File size: 4,182 Bytes
b6fadc7 3108590 b6fadc7 d1c53b9 8dcd782 d1c53b9 8dcd782 d1c53b9 8dcd782 b6fadc7 e3e32d4 b6fadc7 025b139 b6fadc7 fbdf17d 8d13ddc b6fadc7 3108590 d8719e6 b6fadc7 b1222b7 b6fadc7 7c81dd2 b6fadc7 3108590 fbdf17d 4d7f09f fbdf17d b6fadc7 7c81dd2 b6fadc7 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 |
import os
from typing import Optional
from pydantic import Field, BaseModel
from omegaconf import OmegaConf
from llama_index.core.utilities.sql_wrapper import SQLDatabase
from sqlalchemy import create_engine
from dotenv import load_dotenv
load_dotenv(override=True)
from vectara_agentic.agent import Agent
from vectara_agentic.tools import ToolsFactory, VectaraToolFactory
def create_assistant_tools(cfg):
class QueryCFPBComplaints(BaseModel):
query: str = Field(description="The user query.")
company: Optional[str] = Field(
default=None,
description="The company that the complaint is about.",
examples=['CAPITAL ONE FINANCIAL CORPORATION', 'BANK OF AMERICA, NATIONAL ASSOCIATION', 'CITIBANK, N.A.', 'WELLS FARGO & COMPANY', 'JPMORGAN CHASE & CO.']
)
state: Optional[str] = Field(
default=None,
description="The two-character state code where the consumer lives.",
examples=['CA', 'FL', 'NY', 'TX', 'GA']
)
vec_factory = VectaraToolFactory(
vectara_api_key=cfg.api_keys,
vectara_customer_id=cfg.customer_id,
vectara_corpus_id=cfg.corpus_ids
)
summarizer = 'vectara-experimental-summary-ext-2023-12-11-med-omni'
ask_complaints = vec_factory.create_rag_tool(
tool_name = "ask_complaints",
tool_description = """
Given a user query,
returns a response to a user question about customer complaints for bank services.
""",
tool_args_schema = QueryCFPBComplaints,
reranker = "chain", rerank_k = 100,
rerank_chain = [
{
"type": "slingshot",
"cutoff": 0.2
},
{
"type": "mmr",
"diversity_bias": 0.4,
"limit": 30
}
],
n_sentences_before = 2, n_sentences_after = 2, lambda_val = 0.005,
vectara_summarizer = summarizer,
include_citations = True,
verbose=False
)
tools_factory = ToolsFactory()
db_tools = tools_factory.database_tools(
tool_name_prefix = "cfpb",
content_description = 'Customer complaints about five banks (Bank of America, Wells Fargo, Capital One, Chase, and CITI Bank) and geographic information (counties and zip codes)',
sql_database = SQLDatabase(create_engine('sqlite:///cfpb_database.db')),
)
return (tools_factory.standard_tools() +
tools_factory.guardrail_tools() +
db_tools +
[ask_complaints]
)
def initialize_agent(_cfg, agent_progress_callback=None):
cfpb_complaints_bot_instructions = """
- You are a helpful research assistant,
with expertise in finance and complaints from the CFPB (Consumer Financial Protection Bureau),
in conversation with a user.
- For questions about customers' complaints (the text of the complaint), use the ask_complaints tool.
You only need the query parameter to use this tool, but you can supply other parameters if provided.
Do not include the "References" section in your response.
- Never discuss politics, and always respond politely.
"""
agent = Agent(
tools=create_assistant_tools(_cfg),
topic="Customer complaints from the Consumer Financial Protection Bureau (CFPB)",
custom_instructions=cfpb_complaints_bot_instructions,
agent_progress_callback=agent_progress_callback
)
agent.report()
return agent
def get_agent_config() -> OmegaConf:
cfg = OmegaConf.create({
'customer_id': str(os.environ['VECTARA_CUSTOMER_ID']),
'corpus_ids': str(os.environ['VECTARA_CORPUS_IDS']),
'api_keys': str(os.environ['VECTARA_API_KEYS']),
'examples': os.environ.get('QUERY_EXAMPLES', None),
'demo_name': "cfpb-assistant",
'demo_welcome': "Welcome to the CFPB Customer Complaints demo.",
'demo_description': "This assistant can help you gain insights into customer complaints to banks recorded by the Consumer Financial Protection Bureau.",
})
return cfg
|